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