diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/BlockLever.java')
-rw-r--r-- | src/main/java/net/minecraft/server/BlockLever.java | 193 |
1 files changed, 91 insertions, 102 deletions
diff --git a/src/main/java/net/minecraft/server/BlockLever.java b/src/main/java/net/minecraft/server/BlockLever.java index bcd2846d..5c2cdae5 100644 --- a/src/main/java/net/minecraft/server/BlockLever.java +++ b/src/main/java/net/minecraft/server/BlockLever.java @@ -15,7 +15,7 @@ import org.bukkit.event.block.BlockRedstoneEvent; public class BlockLever extends Block { protected BlockLever(int i, int j) { - super(i, j, Material.n); + super(i, j, Material.ORIENTABLE); } public AxisAlignedBB d(World world, int i, int j, int k) { @@ -27,41 +27,34 @@ public class BlockLever extends Block { } public boolean a(World world, int i, int j, int k) { - if (world.d(i - 1, j, k)) { - return true; - } - if (world.d(i + 1, j, k)) { - return true; - } - if (world.d(i, j, k - 1)) { - return true; - } - if (world.d(i, j, k + 1)) { - return true; - } - return world.d(i, j - 1, k); + return world.d(i - 1, j, k) ? true : (world.d(i + 1, j, k) ? true : (world.d(i, j, k - 1) ? true : (world.d(i, j, k + 1) ? true : world.d(i, j - 1, k)))); } public void c(World world, int i, int j, int k, int l) { - int i1 = world.b(i, j, k); + int i1 = world.getData(i, j, k); int j1 = i1 & 8; i1 &= 7; if (l == 1 && world.d(i, j - 1, k)) { i1 = 5 + world.l.nextInt(2); } + if (l == 2 && world.d(i, j, k + 1)) { i1 = 4; } + if (l == 3 && world.d(i, j, k - 1)) { i1 = 3; } + if (l == 4 && world.d(i + 1, j, k)) { i1 = 2; } + if (l == 5 && world.d(i - 1, j, k)) { i1 = 1; } + world.c(i, j, k, i1 + j1); } @@ -77,39 +70,45 @@ public class BlockLever extends Block { } else if (world.d(i, j - 1, k)) { world.c(i, j, k, 5 + world.l.nextInt(2)); } - g(world, i, j, k); + + this.g(world, i, j, k); } public void b(World world, int i, int j, int k, int l) { - if (g(world, i, j, k)) { - int i1 = world.b(i, j, k) & 7; + if (this.g(world, i, j, k)) { + int i1 = world.getData(i, j, k) & 7; boolean flag = false; if (!world.d(i - 1, j, k) && i1 == 1) { flag = true; } + if (!world.d(i + 1, j, k) && i1 == 2) { flag = true; } + if (!world.d(i, j, k - 1) && i1 == 3) { flag = true; } + if (!world.d(i, j, k + 1) && i1 == 4) { flag = true; } + if (!world.d(i, j - 1, k) && i1 == 5) { flag = true; } + if (flag) { - a_(world, i, j, k, world.b(i, j, k)); + this.a_(world, i, j, k, world.getData(i, j, k)); world.e(i, j, k, 0); } } } private boolean g(World world, int i, int j, int k) { - if (!a(world, i, j, k)) { - a_(world, i, j, k, world.b(i, j, k)); + if (!this.a(world, i, j, k)) { + this.a_(world, i, j, k, world.getData(i, j, k)); world.e(i, j, k, 0); return false; } else { @@ -118,129 +117,119 @@ public class BlockLever extends Block { } public void a(IBlockAccess iblockaccess, int i, int j, int k) { - int l = iblockaccess.b(i, j, k) & 7; + int l = iblockaccess.getData(i, j, k) & 7; float f = 0.1875F; if (l == 1) { - a(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f); + this.a(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f); } else if (l == 2) { - a(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f); + this.a(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f); } else if (l == 3) { - a(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F); + this.a(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F); } else if (l == 4) { - a(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F); + this.a(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F); } else { - float f1 = 0.25F; - - a(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1); + f = 0.25F; + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.6F, 0.5F + f); } } - public void b(World world, int i, int j, int k, EntityPlayer entityplayer) { - a(world, i, j, k, entityplayer); + public void b(World world, int i, int j, int k, EntityHuman entityhuman) { + this.a(world, i, j, k, entityhuman); } - public boolean a(World world, int i, int j, int k, EntityPlayer entityplayer) { - if (world.z) { + public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) { + if (world.isStatic) { return true; - } + } else { + // CraftBukkit start - Interact Lever + CraftWorld craftWorld = ((WorldServer) world).getWorld(); + CraftServer server = ((WorldServer) world).getServer(); + Type eventType = Type.BLOCK_INTERACT; + CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k); + LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity(); + + BlockInteractEvent event = new BlockInteractEvent(eventType, block, who); + server.getPluginManager().callEvent(event); + + // CraftBukkit the client updates the doors before the server does it's thing. + // Forcibly send correct data. + if (event.isCancelled()) { + ((EntityPlayer) entityhuman).a.b(new Packet53BlockChange(i, j, k, (WorldServer) world)); + return true; + } + // CraftBukkit end - // CraftBukkit start - Interact Lever - CraftWorld craftWorld = ((WorldServer) world).getWorld(); - CraftServer server = ((WorldServer) world).getServer(); - Type eventType = Type.BLOCK_INTERACT; - CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k); - LivingEntity who = (entityplayer == null)?null:(LivingEntity)entityplayer.getBukkitEntity(); - - BlockInteractEvent bie = new BlockInteractEvent(eventType, block, who); - server.getPluginManager().callEvent(bie); - - // CraftBukkit the client updates the doors before the server does it's thing. - // Forcibly send correct data. - if (bie.isCancelled()) { - ((EntityPlayerMP) entityplayer).a.b(new Packet53BlockChange(i, j, k, (WorldServer) world)); + int l = world.getData(i, j, k); + int i1 = l & 7; + int j1 = 8 - (l & 8); + + // CraftBukkit start + int old = (j1 != 8) ? 1 : 0; + int current = (j1 == 8) ? 1 : 0; + BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, BlockFace.SELF, old, current); + server.getPluginManager().callEvent(eventRedstone); + + if ((eventRedstone.getNewCurrent() > 0) == (j1 == 8)) { + // CraftBukkit end + + world.c(i, j, k, i1 + j1); + world.b(i, j, k, i, j, k); + world.a((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "random.click", 0.3F, j1 > 0 ? 0.6F : 0.5F); + world.h(i, j, k, this.id); + if (i1 == 1) { + world.h(i - 1, j, k, this.id); + } else if (i1 == 2) { + world.h(i + 1, j, k, this.id); + } else if (i1 == 3) { + world.h(i, j, k - 1, this.id); + } else if (i1 == 4) { + world.h(i, j, k + 1, this.id); + } else { + world.h(i, j - 1, k, this.id); + } + } // CraftBukkit return true; } - // CraftBukkit end - - int l = world.b(i, j, k); - int i1 = l & 7; - int j1 = 8 - (l & 8); - - // CraftBukkit start - int old = (j1 != 8) ? 1 : 0; - int current = (j1 == 8) ? 1 : 0; - BlockRedstoneEvent bre = new BlockRedstoneEvent(block, BlockFace.SELF, old, current); - server.getPluginManager().callEvent(bre); - // CraftBukkit end - - if ((bre.getNewCurrent() > 0) == (j1 == 8)) { - world.c(i, j, k, i1 + j1); - world.b(i, j, k, i, j, k); - world.a((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "random.click", 0.3F, j1 <= 0 ? 0.5F : 0.6F); - world.h(i, j, k, bi); - if (i1 == 1) { - world.h(i - 1, j, k, bi); - } else if (i1 == 2) { - world.h(i + 1, j, k, bi); - } else if (i1 == 3) { - world.h(i, j, k - 1, bi); - } else if (i1 == 4) { - world.h(i, j, k + 1, bi); - } else { - world.h(i, j - 1, k, bi); - } - } - return true; } public void b(World world, int i, int j, int k) { - int l = world.b(i, j, k); + int l = world.getData(i, j, k); if ((l & 8) > 0) { - world.h(i, j, k, bi); + world.h(i, j, k, this.id); int i1 = l & 7; if (i1 == 1) { - world.h(i - 1, j, k, bi); + world.h(i - 1, j, k, this.id); } else if (i1 == 2) { - world.h(i + 1, j, k, bi); + world.h(i + 1, j, k, this.id); } else if (i1 == 3) { - world.h(i, j, k - 1, bi); + world.h(i, j, k - 1, this.id); } else if (i1 == 4) { - world.h(i, j, k + 1, bi); + world.h(i, j, k + 1, this.id); } else { - world.h(i, j - 1, k, bi); + world.h(i, j - 1, k, this.id); } } + super.b(world, i, j, k); } public boolean b(IBlockAccess iblockaccess, int i, int j, int k, int l) { - return (iblockaccess.b(i, j, k) & 8) > 0; + return (iblockaccess.getData(i, j, k) & 8) > 0; } public boolean d(World world, int i, int j, int k, int l) { - int i1 = world.b(i, j, k); + int i1 = world.getData(i, j, k); if ((i1 & 8) == 0) { return false; - } - int j1 = i1 & 7; + } else { + int j1 = i1 & 7; - if (j1 == 5 && l == 1) { - return true; - } - if (j1 == 4 && l == 2) { - return true; - } - if (j1 == 3 && l == 3) { - return true; - } - if (j1 == 2 && l == 4) { - return true; + return j1 == 5 && l == 1 ? true : (j1 == 4 && l == 2 ? true : (j1 == 3 && l == 3 ? true : (j1 == 2 && l == 4 ? true : j1 == 1 && l == 5))); } - return j1 == 1 && l == 5; } public boolean c() { |