diff --git a/src/main/java/xyz/nearmisses/patience/mc_rebalance/PlushBlock.java b/src/main/java/xyz/nearmisses/patience/mc_rebalance/PlushBlock.java index f526597..9dbb22d 100644 --- a/src/main/java/xyz/nearmisses/patience/mc_rebalance/PlushBlock.java +++ b/src/main/java/xyz/nearmisses/patience/mc_rebalance/PlushBlock.java @@ -1,29 +1,58 @@ package xyz.nearmisses.patience.mc_rebalance; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PlushBlock extends Block { +public class PlushBlock extends Block implements SimpleWaterloggedBlock { + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; // tfw you can copy-paste the class across modloaders :) public PlushBlock(Block.Properties properties) { super(properties.noOcclusion().sound(SoundType.WOOL)); - this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false)); } public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); + builder.add(FACING, WATERLOGGED); + } + @Override + public FluidState getFluidState(BlockState blockState) { + return blockState.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(blockState); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { - return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + BlockPos blockPos = context.getClickedPos(); + FluidState fluidState = context.getLevel().getFluidState(blockPos); + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + } + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) { + return Block.box(3.0, 0.0, 3.0, 13.0, 15.0, 13.0); + } + @Override + public BlockState updateShape(BlockState blockState, Direction direction, BlockState blockState2, LevelAccessor levelAccessor, BlockPos blockPos, BlockPos blockPos2) { + if ((Boolean)blockState.getValue(WATERLOGGED)) { + levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor)); + } + + return super.updateShape(blockState, direction, blockState2, levelAccessor, blockPos, blockPos2); } }