diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/BlockPiston.java')
-rw-r--r-- | src/main/java/net/minecraft/server/BlockPiston.java | 176 |
1 files changed, 86 insertions, 90 deletions
diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java index dd3dd4de..ed4771e8 100644 --- a/src/main/java/net/minecraft/server/BlockPiston.java +++ b/src/main/java/net/minecraft/server/BlockPiston.java @@ -3,7 +3,6 @@ package net.minecraft.server; import java.util.ArrayList; // CraftBukkit start -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.block.CraftBlock; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPistonExtendEvent; @@ -12,7 +11,7 @@ import org.bukkit.event.block.BlockPistonExtendEvent; public class BlockPiston extends Block { private boolean a; - private boolean b; + private static boolean b; public BlockPiston(int i, int j, boolean flag) { super(i, j, Material.PISTON); @@ -22,9 +21,13 @@ public class BlockPiston extends Block { } public int a(int i, int j) { - int k = c(j); + int k = d(j); - return k > 5 ? this.textureId : (i == k ? (!d(j) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.textureId : 110) : (i == PistonBlockTextures.a[k] ? 109 : 108)); + return k > 5 ? this.textureId : (i == k ? (!e(j) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.textureId : 110) : (i == PistonBlockTextures.a[k] ? 109 : 108)); + } + + public int c() { + return 16; } public boolean a() { @@ -39,32 +42,32 @@ public class BlockPiston extends Block { int l = c(world, i, j, k, (EntityHuman) entityliving); world.setData(i, j, k, l); - if (!world.isStatic) { + if (!world.isStatic && !b) { this.g(world, i, j, k); } } public void doPhysics(World world, int i, int j, int k, int l) { - if (!world.isStatic && !this.b) { + if (!world.isStatic && !b) { this.g(world, i, j, k); } } public void a(World world, int i, int j, int k) { - if (!world.isStatic && world.getTileEntity(i, j, k) == null) { + if (!world.isStatic && world.getTileEntity(i, j, k) == null && !b) { this.g(world, i, j, k); } } private void g(World world, int i, int j, int k) { int l = world.getData(i, j, k); - int i1 = c(l); + int i1 = d(l); boolean flag = this.f(world, i, j, k, i1); if (l != 7) { - if (flag && !d(l)) { + if (flag && !e(l)) { // CraftBukkit start - int length = h(world, i, j, k, i1); + int length = g(world, i, j, k, i1); if (length >= 0) { org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k); @@ -79,7 +82,7 @@ public class BlockPiston extends Block { world.setRawData(i, j, k, i1 | 8); world.playNote(i, j, k, 0, i1); } - } else if (!flag && d(l)) { + } else if (!flag && e(l)) { // CraftBukkit start org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k); @@ -102,17 +105,19 @@ public class BlockPiston extends Block { } public void a(World world, int i, int j, int k, int l, int i1) { - this.b = true; + b = true; if (l == 0) { - if (this.i(world, i, j, k, i1)) { + if (this.h(world, i, j, k, i1)) { world.setData(i, j, k, i1 | 8); world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "tile.piston.out", 0.5F, world.random.nextFloat() * 0.25F + 0.6F); + } else { + world.setRawData(i, j, k, i1); } } else if (l == 1) { TileEntity tileentity = world.getTileEntity(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1]); if (tileentity != null && tileentity instanceof TileEntityPiston) { - ((TileEntityPiston) tileentity).e(); + ((TileEntityPiston) tileentity).g(); } world.setRawTypeIdAndData(i, j, k, Block.PISTON_MOVING.id, i1); @@ -131,46 +136,46 @@ public class BlockPiston extends Block { if (tileentity1 != null && tileentity1 instanceof TileEntityPiston) { TileEntityPiston tileentitypiston = (TileEntityPiston) tileentity1; - if (tileentitypiston.d() == i1 && tileentitypiston.c()) { - tileentitypiston.e(); - i2 = tileentitypiston.a(); + if (tileentitypiston.f() == i1 && tileentitypiston.e()) { + tileentitypiston.g(); + i2 = tileentitypiston.c(); j2 = tileentitypiston.j(); flag = true; } } } - if (!flag && i2 > 0 && a(i2, world, j1, k1, l1, false) && (Block.byId[i2].e() == 0 || i2 == Block.PISTON.id || i2 == Block.PISTON_STICKY.id)) { - this.b = false; - world.setTypeId(j1, k1, l1, 0); - this.b = true; + if (!flag && i2 > 0 && a(i2, world, j1, k1, l1, false) && (Block.byId[i2].g() == 0 || i2 == Block.PISTON.id || i2 == Block.PISTON_STICKY.id)) { i += PistonBlockTextures.b[i1]; j += PistonBlockTextures.c[i1]; k += PistonBlockTextures.d[i1]; world.setRawTypeIdAndData(i, j, k, Block.PISTON_MOVING.id, j2); world.setTileEntity(i, j, k, BlockPistonMoving.a(i2, j2, i1, false, false)); + b = false; + world.setTypeId(j1, k1, l1, 0); + b = true; } else if (!flag) { - this.b = false; + b = false; world.setTypeId(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1], 0); - this.b = true; + b = true; } } else { - this.b = false; + b = false; world.setTypeId(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1], 0); - this.b = true; + b = true; } world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "tile.piston.in", 0.5F, world.random.nextFloat() * 0.15F + 0.6F); } - this.b = false; + b = false; } public void a(IBlockAccess iblockaccess, int i, int j, int k) { int l = iblockaccess.getData(i, j, k); - if (d(l)) { - switch (c(l)) { + if (e(l)) { + switch (d(l)) { case 0: this.a(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F); break; @@ -199,6 +204,10 @@ public class BlockPiston extends Block { } } + public void f() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + public void a(World world, int i, int j, int k, AxisAlignedBB axisalignedbb, ArrayList arraylist) { this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); super.a(world, i, j, k, axisalignedbb, arraylist); @@ -208,11 +217,11 @@ public class BlockPiston extends Block { return false; } - public static int c(int i) { + public static int d(int i) { return i & 7; } - public static boolean d(int i) { + public static boolean e(int i) { return (i & 8) != 0; } @@ -239,29 +248,27 @@ public class BlockPiston extends Block { return false; } else { if (i != Block.PISTON.id && i != Block.PISTON_STICKY.id) { - if (Block.byId[i].j() == -1.0F) { + if (Block.byId[i].l() == -1.0F) { return false; } - if (Block.byId[i].e() == 2) { + if (Block.byId[i].g() == 2) { return false; } - if (!flag && Block.byId[i].e() == 1) { + if (!flag && Block.byId[i].g() == 1) { return false; } - } else if (d(world.getData(j, k, l))) { + } else if (e(world.getData(j, k, l))) { return false; } - TileEntity tileentity = world.getTileEntity(j, k, l); - - return tileentity == null; + return !(Block.byId[i] instanceof BlockContainer); } } // CraftBukkkit boolean -> int - private static int h(World world, int i, int j, int k, int l) { + private static int g(World world, int i, int j, int k, int l) { int i1 = i + PistonBlockTextures.b[l]; int j1 = j + PistonBlockTextures.c[l]; int k1 = k + PistonBlockTextures.d[l]; @@ -269,41 +276,36 @@ public class BlockPiston extends Block { while (true) { if (l1 < 13) { - if (j1 > 0) { - world.getClass(); - if (j1 < 128 - 1) { - int i2 = world.getTypeId(i1, j1, k1); - - if (i2 != 0) { - if (!a(i2, world, i1, j1, k1, true)) { - return -1; // CraftBukkit - } - - if (Block.byId[i2].e() != 1) { - if (l1 == 12) { - return -1; // CraftBukkit - } - - i1 += PistonBlockTextures.b[l]; - j1 += PistonBlockTextures.c[l]; - k1 += PistonBlockTextures.d[l]; - ++l1; - continue; - } + if (j1 <= 0 || j1 >= world.height - 1) { + return -1; // CraftBukkit + } + + int i2 = world.getTypeId(i1, j1, k1); + + if (i2 != 0) { + if (!a(i2, world, i1, j1, k1, true)) { + return -1; // CraftBukkit + } + + if (Block.byId[i2].g() != 1) { + if (l1 == 12) { + return -1; // CraftBukkit } - return l1; // CraftBukkit + i1 += PistonBlockTextures.b[l]; + j1 += PistonBlockTextures.c[l]; + k1 += PistonBlockTextures.d[l]; + ++l1; + continue; } } - - return -1; // CraftBukkit } return l1; // CraftBukkit } } - private boolean i(World world, int i, int j, int k, int l) { + private boolean h(World world, int i, int j, int k, int l) { int i1 = i + PistonBlockTextures.b[l]; int j1 = j + PistonBlockTextures.c[l]; int k1 = k + PistonBlockTextures.d[l]; @@ -313,36 +315,30 @@ public class BlockPiston extends Block { int i2; if (l1 < 13) { - label63: { - if (j1 > 0) { - world.getClass(); - if (j1 < 128 - 1) { - i2 = world.getTypeId(i1, j1, k1); - if (i2 != 0) { - if (!a(i2, world, i1, j1, k1, true)) { - return false; - } - - if (Block.byId[i2].e() != 1) { - if (l1 == 12) { - return false; - } - - i1 += PistonBlockTextures.b[l]; - j1 += PistonBlockTextures.c[l]; - k1 += PistonBlockTextures.d[l]; - ++l1; - continue; - } - - Block.byId[i2].g(world, i1, j1, k1, world.getData(i1, j1, k1)); - world.setTypeId(i1, j1, k1, 0); - } - break label63; + if (j1 <= 0 || j1 >= world.height - 1) { + return false; + } + + i2 = world.getTypeId(i1, j1, k1); + if (i2 != 0) { + if (!a(i2, world, i1, j1, k1, true)) { + return false; + } + + if (Block.byId[i2].g() != 1) { + if (l1 == 12) { + return false; } + + i1 += PistonBlockTextures.b[l]; + j1 += PistonBlockTextures.c[l]; + k1 += PistonBlockTextures.d[l]; + ++l1; + continue; } - return false; + Block.byId[i2].b(world, i1, j1, k1, world.getData(i1, j1, k1), 0); + world.setTypeId(i1, j1, k1, 0); } } |