package net.minecraft.server; public class BlockFence extends BlockTall { private final VoxelShape[] i; public BlockFence(Block.Info block_info) { super(2.0F, 2.0F, 16.0F, 16.0F, 24.0F, block_info); this.p((IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) this.blockStateList.getBlockData()).set(BlockFence.NORTH, false)).set(BlockFence.EAST, false)).set(BlockFence.SOUTH, false)).set(BlockFence.WEST, false)).set(BlockFence.e, false)); this.i = this.a(2.0F, 1.0F, 16.0F, 6.0F, 15.0F); } @Override public VoxelShape i(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { return this.i[this.h(iblockdata)]; } @Override public boolean a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition, PathMode pathmode) { return false; } public boolean a(IBlockData iblockdata, boolean flag, EnumDirection enumdirection) { Block block = iblockdata.getBlock(); boolean flag1 = block.a(TagsBlock.FENCES) && iblockdata.getMaterial() == this.material; boolean flag2 = block instanceof BlockFenceGate && BlockFenceGate.a(iblockdata, enumdirection); return !a(block) && flag || flag1 || flag2; } @Override public EnumInteractionResult interact(IBlockData iblockdata, World world, BlockPosition blockposition, EntityHuman entityhuman, EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) { if (world.isClientSide) { ItemStack itemstack = entityhuman.b(enumhand); return itemstack.getItem() == Items.LEAD ? EnumInteractionResult.SUCCESS : EnumInteractionResult.PASS; } else { return ItemLeash.a(entityhuman, world, blockposition); } } @Override public IBlockData getPlacedState(BlockActionContext blockactioncontext) { World world = blockactioncontext.getWorld(); BlockPosition blockposition = blockactioncontext.getClickPosition(); Fluid fluid = blockactioncontext.getWorld().getFluid(blockactioncontext.getClickPosition()); BlockPosition blockposition1 = blockposition.north(); BlockPosition blockposition2 = blockposition.east(); BlockPosition blockposition3 = blockposition.south(); BlockPosition blockposition4 = blockposition.west(); IBlockData iblockdata = world.getType(blockposition1); IBlockData iblockdata1 = world.getType(blockposition2); IBlockData iblockdata2 = world.getType(blockposition3); IBlockData iblockdata3 = world.getType(blockposition4); return (IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) super.getPlacedState(blockactioncontext).set(BlockFence.NORTH, this.a(iblockdata, iblockdata.d(world, blockposition1, EnumDirection.SOUTH), EnumDirection.SOUTH))).set(BlockFence.EAST, this.a(iblockdata1, iblockdata1.d(world, blockposition2, EnumDirection.WEST), EnumDirection.WEST))).set(BlockFence.SOUTH, this.a(iblockdata2, iblockdata2.d(world, blockposition3, EnumDirection.NORTH), EnumDirection.NORTH))).set(BlockFence.WEST, this.a(iblockdata3, iblockdata3.d(world, blockposition4, EnumDirection.EAST), EnumDirection.EAST))).set(BlockFence.e, fluid.getType() == FluidTypes.WATER); } @Override public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) { if ((Boolean) iblockdata.get(BlockFence.e)) { generatoraccess.getFluidTickList().a(blockposition, FluidTypes.WATER, FluidTypes.WATER.a((IWorldReader) generatoraccess)); } return enumdirection.m().d() == EnumDirection.EnumDirectionLimit.HORIZONTAL ? (IBlockData) iblockdata.set((IBlockState) BlockFence.f.get(enumdirection), this.a(iblockdata1, iblockdata1.d(generatoraccess, blockposition1, enumdirection.opposite()), enumdirection.opposite())) : super.updateState(iblockdata, enumdirection, iblockdata1, generatoraccess, blockposition, blockposition1); } @Override protected void a(BlockStateList.a<Block, IBlockData> blockstatelist_a) { blockstatelist_a.a(BlockFence.NORTH, BlockFence.EAST, BlockFence.WEST, BlockFence.SOUTH, BlockFence.e); } }