Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 216 lines 6.6 kB view raw
1package net.minecraft.server; 2 3import org.bukkit.event.block.BlockRedstoneEvent; 4 5public class BlockLever extends Block { 6 7 protected BlockLever(int i, int j) { 8 super(i, j, Material.ORIENTABLE); 9 } 10 11 public AxisAlignedBB e(World world, int i, int j, int k) { 12 return null; 13 } 14 15 public boolean a() { 16 return false; 17 } 18 19 public boolean b() { 20 return false; 21 } 22 23 public boolean canPlace(World world, int i, int j, int k, int l) { 24 return l == 1 && world.e(i, j - 1, k) ? true : (l == 2 && world.e(i, j, k + 1) ? true : (l == 3 && world.e(i, j, k - 1) ? true : (l == 4 && world.e(i + 1, j, k) ? true : l == 5 && world.e(i - 1, j, k)))); 25 } 26 27 public boolean canPlace(World world, int i, int j, int k) { 28 return world.e(i - 1, j, k) ? true : (world.e(i + 1, j, k) ? true : (world.e(i, j, k - 1) ? true : (world.e(i, j, k + 1) ? true : world.e(i, j - 1, k)))); 29 } 30 31 public void postPlace(World world, int i, int j, int k, int l) { 32 int i1 = world.getData(i, j, k); 33 int j1 = i1 & 8; 34 35 i1 &= 7; 36 i1 = -1; 37 if (l == 1 && world.e(i, j - 1, k)) { 38 i1 = 5 + world.random.nextInt(2); 39 } 40 41 if (l == 2 && world.e(i, j, k + 1)) { 42 i1 = 4; 43 } 44 45 if (l == 3 && world.e(i, j, k - 1)) { 46 i1 = 3; 47 } 48 49 if (l == 4 && world.e(i + 1, j, k)) { 50 i1 = 2; 51 } 52 53 if (l == 5 && world.e(i - 1, j, k)) { 54 i1 = 1; 55 } 56 57 if (i1 == -1) { 58 this.g(world, i, j, k, world.getData(i, j, k)); 59 world.setTypeId(i, j, k, 0); 60 } else { 61 world.setData(i, j, k, i1 + j1); 62 } 63 } 64 65 public void doPhysics(World world, int i, int j, int k, int l) { 66 if (this.g(world, i, j, k)) { 67 int i1 = world.getData(i, j, k) & 7; 68 boolean flag = false; 69 70 if (!world.e(i - 1, j, k) && i1 == 1) { 71 flag = true; 72 } 73 74 if (!world.e(i + 1, j, k) && i1 == 2) { 75 flag = true; 76 } 77 78 if (!world.e(i, j, k - 1) && i1 == 3) { 79 flag = true; 80 } 81 82 if (!world.e(i, j, k + 1) && i1 == 4) { 83 flag = true; 84 } 85 86 if (!world.e(i, j - 1, k) && i1 == 5) { 87 flag = true; 88 } 89 90 if (!world.e(i, j - 1, k) && i1 == 6) { 91 flag = true; 92 } 93 94 if (flag) { 95 this.g(world, i, j, k, world.getData(i, j, k)); 96 world.setTypeId(i, j, k, 0); 97 } 98 } 99 } 100 101 private boolean g(World world, int i, int j, int k) { 102 if (!this.canPlace(world, i, j, k)) { 103 this.g(world, i, j, k, world.getData(i, j, k)); 104 world.setTypeId(i, j, k, 0); 105 return false; 106 } else { 107 return true; 108 } 109 } 110 111 public void a(IBlockAccess iblockaccess, int i, int j, int k) { 112 int l = iblockaccess.getData(i, j, k) & 7; 113 float f = 0.1875F; 114 115 if (l == 1) { 116 this.a(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f); 117 } else if (l == 2) { 118 this.a(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f); 119 } else if (l == 3) { 120 this.a(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F); 121 } else if (l == 4) { 122 this.a(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F); 123 } else { 124 f = 0.25F; 125 this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.6F, 0.5F + f); 126 } 127 } 128 129 public void b(World world, int i, int j, int k, EntityHuman entityhuman) { 130 this.interact(world, i, j, k, entityhuman); 131 } 132 133 public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) { 134 if (world.isStatic) { 135 return true; 136 } else { 137 int l = world.getData(i, j, k); 138 int i1 = l & 7; 139 int j1 = 8 - (l & 8); 140 141 // CraftBukkit start - Interact Lever 142 org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k); 143 int old = (j1 != 8) ? 1 : 0; 144 int current = (j1 == 8) ? 1 : 0; 145 146 BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, old, current); 147 world.getServer().getPluginManager().callEvent(eventRedstone); 148 149 if ((eventRedstone.getNewCurrent() > 0) != (j1 == 8)) { 150 return true; 151 } 152 // CraftBukkit end 153 154 world.setData(i, j, k, i1 + j1); 155 world.b(i, j, k, i, j, k); 156 world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "random.click", 0.3F, j1 > 0 ? 0.6F : 0.5F); 157 world.applyPhysics(i, j, k, this.id); 158 if (i1 == 1) { 159 world.applyPhysics(i - 1, j, k, this.id); 160 } else if (i1 == 2) { 161 world.applyPhysics(i + 1, j, k, this.id); 162 } else if (i1 == 3) { 163 world.applyPhysics(i, j, k - 1, this.id); 164 } else if (i1 == 4) { 165 world.applyPhysics(i, j, k + 1, this.id); 166 } else { 167 world.applyPhysics(i, j - 1, k, this.id); 168 } 169 170 return true; 171 } 172 } 173 174 public void remove(World world, int i, int j, int k) { 175 int l = world.getData(i, j, k); 176 177 if ((l & 8) > 0) { 178 world.applyPhysics(i, j, k, this.id); 179 int i1 = l & 7; 180 181 if (i1 == 1) { 182 world.applyPhysics(i - 1, j, k, this.id); 183 } else if (i1 == 2) { 184 world.applyPhysics(i + 1, j, k, this.id); 185 } else if (i1 == 3) { 186 world.applyPhysics(i, j, k - 1, this.id); 187 } else if (i1 == 4) { 188 world.applyPhysics(i, j, k + 1, this.id); 189 } else { 190 world.applyPhysics(i, j - 1, k, this.id); 191 } 192 } 193 194 super.remove(world, i, j, k); 195 } 196 197 public boolean a(IBlockAccess iblockaccess, int i, int j, int k, int l) { 198 return (iblockaccess.getData(i, j, k) & 8) > 0; 199 } 200 201 public boolean d(World world, int i, int j, int k, int l) { 202 int i1 = world.getData(i, j, k); 203 204 if ((i1 & 8) == 0) { 205 return false; 206 } else { 207 int j1 = i1 & 7; 208 209 return j1 == 6 && l == 1 ? true : (j1 == 5 && l == 1 ? true : (j1 == 4 && l == 2 ? true : (j1 == 3 && l == 3 ? true : (j1 == 2 && l == 4 ? true : j1 == 1 && l == 5)))); 210 } 211 } 212 213 public boolean isPowerSource() { 214 return true; 215 } 216}