diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/net/minecraft/server/BlockTallPlant.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/BlockTallPlant.java b/src/main/java/net/minecraft/server/BlockTallPlant.java new file mode 100644 index 00000000..2bb9b7d0 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockTallPlant.java @@ -0,0 +1,160 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockTallPlant extends BlockPlant implements IBlockFragilePlantElement { + + public static final String[] a = new String[] { "sunflower", "syringa", "grass", "fern", "rose", "paeonia"}; + + public BlockTallPlant() { + super(Material.PLANT); + this.c(0.0F); + this.a(h); + this.c("doublePlant"); + } + + public int b() { + return 40; + } + + public void updateShape(IBlockAccess iblockaccess, int i, int j, int k) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public int e(IBlockAccess iblockaccess, int i, int j, int k) { + int l = iblockaccess.getData(i, j, k); + + return !c(l) ? l & 7 : iblockaccess.getData(i, j - 1, k) & 7; + } + + public boolean canPlace(World world, int i, int j, int k) { + return super.canPlace(world, i, j, k) && world.isEmpty(i, j + 1, k); + } + + protected void e(World world, int i, int j, int k) { + if (!this.j(world, i, j, k)) { + int l = world.getData(i, j, k); + + if (!c(l)) { + this.b(world, i, j, k, l, 0); + if (world.getType(i, j + 1, k) == this) { + world.setTypeAndData(i, j + 1, k, Blocks.AIR, 0, 2); + } + } + + world.setTypeAndData(i, j, k, Blocks.AIR, 0, 2); + } + } + + public boolean j(World world, int i, int j, int k) { + int l = world.getData(i, j, k); + + return c(l) ? world.getType(i, j - 1, k) == this : world.getType(i, j + 1, k) == this && super.j(world, i, j, k); + } + + public Item getDropType(int i, Random random, int j) { + if (c(i)) { + return null; + } else { + int k = d(i); + + return k != 3 && k != 2 ? Item.getItemOf(this) : null; + } + } + + public int getDropData(int i) { + return c(i) ? 0 : i & 7; + } + + public static boolean c(int i) { + return (i & 8) != 0; + } + + public static int d(int i) { + return i & 7; + } + + public void c(World world, int i, int j, int k, int l, int i1) { + world.setTypeAndData(i, j, k, this, l, i1); + world.setTypeAndData(i, j + 1, k, this, 8, i1); + } + + public void postPlace(World world, int i, int j, int k, EntityLiving entityliving, ItemStack itemstack) { + int l = ((MathHelper.floor((double) (entityliving.yaw * 4.0F / 360.0F) + 0.5D) & 3) + 2) % 4; + + world.setTypeAndData(i, j + 1, k, this, 8 | l, 2); + } + + public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) { + if (world.isStatic || entityhuman.bE() == null || entityhuman.bE().getItem() != Items.SHEARS || c(l) || !this.b(world, i, j, k, l, entityhuman)) { + super.a(world, entityhuman, i, j, k, l); + } + } + + public void a(World world, int i, int j, int k, int l, EntityHuman entityhuman) { + if (c(l)) { + if (world.getType(i, j - 1, k) == this) { + if (!entityhuman.abilities.canInstantlyBuild) { + int i1 = world.getData(i, j - 1, k); + int j1 = d(i1); + + if (j1 != 3 && j1 != 2) { + world.setAir(i, j - 1, k, true); + } else { + if (!world.isStatic && entityhuman.bE() != null && entityhuman.bE().getItem() == Items.SHEARS) { + this.b(world, i, j, k, i1, entityhuman); + } + + world.setAir(i, j - 1, k); + } + } else { + world.setAir(i, j - 1, k); + } + } + } else if (entityhuman.abilities.canInstantlyBuild && world.getType(i, j + 1, k) == this) { + world.setTypeAndData(i, j + 1, k, Blocks.AIR, 0, 2); + } + + super.a(world, i, j, k, l, entityhuman); + } + + private boolean b(World world, int i, int j, int k, int l, EntityHuman entityhuman) { + int i1 = d(l); + + if (i1 != 3 && i1 != 2) { + return false; + } else { + entityhuman.a(StatisticList.MINE_BLOCK_COUNT[Block.b((Block) this)], 1); + byte b0 = 1; + + if (i1 == 3) { + b0 = 2; + } + + this.a(world, i, j, k, new ItemStack(Blocks.LONG_GRASS, 2, b0)); + return true; + } + } + + public int getDropData(World world, int i, int j, int k) { + int l = world.getData(i, j, k); + + return c(l) ? d(world.getData(i, j - 1, k)) : d(l); + } + + public boolean a(World world, int i, int j, int k, boolean flag) { + int l = this.e((IBlockAccess) world, i, j, k); + + return l != 2 && l != 3; + } + + public boolean a(World world, Random random, int i, int j, int k) { + return true; + } + + public void b(World world, Random random, int i, int j, int k) { + int l = this.e((IBlockAccess) world, i, j, k); + + this.a(world, i, j, k, new ItemStack(this, 1, l)); + } +} |