package net.minecraft.server; import java.util.Random; import javax.annotation.Nullable; import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class BlockCocoa extends BlockFacingHorizontal implements IBlockFragilePlantElement { public static final BlockStateInteger AGE = BlockProperties.T; protected static final VoxelShape[] b = new VoxelShape[] { Block.a(11.0D, 7.0D, 6.0D, 15.0D, 12.0D, 10.0D), Block.a(9.0D, 5.0D, 5.0D, 15.0D, 12.0D, 11.0D), Block.a(7.0D, 3.0D, 4.0D, 15.0D, 12.0D, 12.0D)}; protected static final VoxelShape[] c = new VoxelShape[] { Block.a(1.0D, 7.0D, 6.0D, 5.0D, 12.0D, 10.0D), Block.a(1.0D, 5.0D, 5.0D, 7.0D, 12.0D, 11.0D), Block.a(1.0D, 3.0D, 4.0D, 9.0D, 12.0D, 12.0D)}; protected static final VoxelShape[] o = new VoxelShape[] { Block.a(6.0D, 7.0D, 1.0D, 10.0D, 12.0D, 5.0D), Block.a(5.0D, 5.0D, 1.0D, 11.0D, 12.0D, 7.0D), Block.a(4.0D, 3.0D, 1.0D, 12.0D, 12.0D, 9.0D)}; protected static final VoxelShape[] p = new VoxelShape[] { Block.a(6.0D, 7.0D, 11.0D, 10.0D, 12.0D, 15.0D), Block.a(5.0D, 5.0D, 9.0D, 11.0D, 12.0D, 15.0D), Block.a(4.0D, 3.0D, 7.0D, 12.0D, 12.0D, 15.0D)}; public BlockCocoa(Block.Info block_info) { super(block_info); this.v((IBlockData) ((IBlockData) ((IBlockData) this.blockStateList.getBlockData()).set(BlockCocoa.FACING, EnumDirection.NORTH)).set(BlockCocoa.AGE, 0)); } public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) { if (world.random.nextInt(Math.max(1, (int) (100.0F / world.spigotConfig.cocoaModifier) * 5)) == 0) { // Spigot int i = (Integer) iblockdata.get(BlockCocoa.AGE); if (i < 2) { CraftEventFactory.handleBlockGrowEvent(world, blockposition, (IBlockData) iblockdata.set(BlockCocoa.AGE, i + 1), 2); // CraftBukkkit } } } public boolean canPlace(IBlockData iblockdata, IWorldReader iworldreader, BlockPosition blockposition) { Block block = iworldreader.getType(blockposition.shift((EnumDirection) iblockdata.get(BlockCocoa.FACING))).getBlock(); return block.a(TagsBlock.JUNGLE_LOGS); } public boolean a(IBlockData iblockdata) { return false; } public VoxelShape a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { int i = (Integer) iblockdata.get(BlockCocoa.AGE); switch ((EnumDirection) iblockdata.get(BlockCocoa.FACING)) { case SOUTH: return BlockCocoa.p[i]; case NORTH: default: return BlockCocoa.o[i]; case WEST: return BlockCocoa.c[i]; case EAST: return BlockCocoa.b[i]; } } @Nullable public IBlockData getPlacedState(BlockActionContext blockactioncontext) { IBlockData iblockdata = this.getBlockData(); World world = blockactioncontext.getWorld(); BlockPosition blockposition = blockactioncontext.getClickPosition(); EnumDirection[] aenumdirection = blockactioncontext.e(); int i = aenumdirection.length; for (int j = 0; j < i; ++j) { EnumDirection enumdirection = aenumdirection[j]; if (enumdirection.k().c()) { iblockdata = (IBlockData) iblockdata.set(BlockCocoa.FACING, enumdirection); if (iblockdata.canPlace(world, blockposition)) { return iblockdata; } } } return null; } public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) { return enumdirection == iblockdata.get(BlockCocoa.FACING) && !iblockdata.canPlace(generatoraccess, blockposition) ? Blocks.AIR.getBlockData() : super.updateState(iblockdata, enumdirection, iblockdata1, generatoraccess, blockposition, blockposition1); } public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, float f, int i) { int j = (Integer) iblockdata.get(BlockCocoa.AGE); byte b0 = 1; if (j >= 2) { b0 = 3; } for (int k = 0; k < b0; ++k) { a(world, blockposition, new ItemStack(Items.COCOA_BEANS)); } } public ItemStack a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) { return new ItemStack(Items.COCOA_BEANS); } public boolean a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, boolean flag) { return (Integer) iblockdata.get(BlockCocoa.AGE) < 2; } public boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { return true; } public void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { CraftEventFactory.handleBlockGrowEvent(world, blockposition, (IBlockData) iblockdata.set(BlockCocoa.AGE, (Integer) iblockdata.get(BlockCocoa.AGE) + 1), 2); // CraftBukkit } public TextureType c() { return TextureType.CUTOUT; } protected void a(BlockStateList.a blockstatelist_a) { blockstatelist_a.a(BlockCocoa.FACING, BlockCocoa.AGE); } public EnumBlockFaceShape a(IBlockAccess iblockaccess, IBlockData iblockdata, BlockPosition blockposition, EnumDirection enumdirection) { return EnumBlockFaceShape.UNDEFINED; } }