1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package me.km.blocks;
- import java.util.Random;
- import net.minecraft.block.Block;
- import net.minecraft.block.BlockState;
- import net.minecraft.block.Blocks;
- import net.minecraft.block.SlabBlock;
- import net.minecraft.block.material.Material;
- import net.minecraft.entity.item.FallingBlockEntity;
- import net.minecraft.particles.BlockParticleData;
- import net.minecraft.particles.ParticleTypes;
- import net.minecraft.state.properties.SlabType;
- import net.minecraft.util.Direction;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.world.IWorld;
- import net.minecraft.world.World;
- import net.minecraft.world.server.ServerWorld;
- import net.minecraftforge.api.distmarker.Dist;
- import net.minecraftforge.api.distmarker.OnlyIn;
- import net.minecraftforge.common.ToolType;
- public class BlockGravelSlab extends SlabBlock {
- public BlockGravelSlab(Properties properties) {
- super(properties);
- }
- @Override
- public ToolType getHarvestTool(BlockState state) {
- return ToolType.SHOVEL;
- }
- @Override
- public void onBlockAdded(BlockState state, World w, BlockPos pos, BlockState oldState, boolean isMoving) {
- w.getPendingBlockTicks().scheduleTick(pos, this, getFallDelay());
- }
- @Override
- public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld w,
- BlockPos currentPos, BlockPos facingPos) {
- w.getPendingBlockTicks().scheduleTick(currentPos, this, getFallDelay());
- return super.updatePostPlacement(state, facing, facingState, w, currentPos, facingPos);
- }
- @Override
- public void tick(BlockState state, ServerWorld w, BlockPos pos, Random r) {
- if(w.isAirBlock(pos.down()) || canFallThrough(w.getBlockState(pos.down())) && pos.getY() >= 0) {
- BlockState fallState;
- double y = pos.getY();
- if(state == getDefaultState().with(TYPE, SlabType.TOP)) {
- fallState = w.getBlockState(pos).with(TYPE, SlabType.BOTTOM);
- y += 0.5;
- } else {
- fallState = w.getBlockState(pos);
- }
- FallingBlockEntity fallingblockentity = new FallingBlockEntity(w, pos.getX() + 0.5, y, pos.getZ() + 0.5, fallState);
- w.addEntity(fallingblockentity);
- }
- }
- protected int getFallDelay() {
- return 2;
- }
- public static boolean canFallThrough(BlockState state) {
- Block block = state.getBlock();
- Material material = state.getMaterial();
- return state.isAir() || block == Blocks.FIRE || material.isLiquid() || material.isReplaceable();
- }
- @OnlyIn(Dist.CLIENT)
- @Override
- public void animateTick(BlockState state, World w, BlockPos pos, Random rand) {
- if(rand.nextInt(16) == 0) {
- BlockPos blockpos = pos.down();
- if(w.isAirBlock(blockpos) || canFallThrough(w.getBlockState(blockpos))) {
- double x = pos.getX() + rand.nextFloat();
- double y = pos.getY() - 0.05;
- double z = pos.getZ() + rand.nextFloat();
- w.addParticle(new BlockParticleData(ParticleTypes.FALLING_DUST, state), x, y, z, 0.0, 0.0, 0.0);
- }
- }
- }
- @OnlyIn(Dist.CLIENT)
- public int getDustColor(BlockState state) {
- return -8356741;
- }
- }
|