package com.minelittlepony.unicopia.block; import org.jetbrains.annotations.Nullable; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.block.Waterloggable; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.fluid.FluidState; import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemPlacementContext; import net.minecraft.registry.tag.FluidTags; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.IntProperty; import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.WorldAccess; public class ShellsBlock extends Block implements Waterloggable { public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED; public static final IntProperty COUNT = IntProperty.of("count", 1, 4); private static final VoxelShape SHAPE = Block.createCuboidShape(0, 0, 0, 16, 1, 16); public ShellsBlock(Settings settings) { super(settings); } @Override @Deprecated public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { return SHAPE; } @Override protected void appendProperties(StateManager.Builder builder) { super.appendProperties(builder); builder.add(COUNT, WATERLOGGED); } @Override @Nullable public BlockState getPlacementState(ItemPlacementContext ctx) { return getDefaultState().with(WATERLOGGED, ctx.getWorld().getFluidState(ctx.getBlockPos()).getFluid() == Fluids.WATER); } @Deprecated @Override public FluidState getFluidState(BlockState state) { if (state.get(WATERLOGGED).booleanValue()) { return Fluids.WATER.getStill(false); } return super.getFluidState(state); } @Deprecated @Override public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { if (state.get(WATERLOGGED).booleanValue()) { world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); } return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); } @Override public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { return (type == NavigationType.WATER) == world.getFluidState(pos).isIn(FluidTags.WATER); } }