Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}