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