001    
002    import java.util.List;
003    import java.util.Random;
004    
005    public class lw extends fe
006            implements mn, Container<jl> {
007    
008        public jl[] al = new jl[36];
009        public int a = 0;
010        public int b = 0;
011        public int c = 1;
012        private boolean am = false;
013        public int d;
014        public int e;
015        public double f;
016        public double ak;
017        private static final int[][][] an = {{{0, 0, -1}, {0, 0, 1}}, {{-1, 0, 0}, {1, 0, 0}}, {{-1, -1, 0}, {1, 0, 0}}, {{-1, 0, 0}, {1, -1, 0}}, {{0, 0, -1}, {0, -1, 1}}, {{0, -1, -1}, {0, 0, 1}}, {{0, 0, 1}, {1, 0, 0}}, {{0, 0, 1}, {-1, 0, 0}}, {{0, 0, -1}, {-1, 0, 0}}, {{0, 0, -1}, {1, 0, 0}}};
018        private int ao;
019        private double ap;
020        private double aq;
021        private double ar;
022        private double as;
023        private double at;
024        private String name = "Minecart";
025    
026        @Override
027        public jl[] getContents() {
028            return al;
029        }
030    
031        @Override
032        public void setContents(jl[] values) {
033            al = values;
034        }
035    
036        public jl getContentsAt(int index) {
037            return a(index);
038        }
039    
040        public void setContentsAt(int index, jl value) {
041            a(index, value);
042        }
043    
044        public int getContentsSize() {
045            return h_();
046        }
047    
048        public String getName() {
049            return name;
050        }
051    
052        public void setName(String value) {
053            name = value;
054        }
055    
056        public lw(fv paramfv) {
057            super(paramfv);
058            i = true;
059            a(0.98F, 0.7F);
060            H = (J / 2.0F);
061            M = false;
062        }
063    
064        protected void a() {
065        }
066    
067        public fa d(fe paramfe) {
068            return paramfe.z;
069        }
070    
071        public fa u() {
072            return null;
073        }
074    
075        public boolean z() {
076            return true;
077        }
078    
079        public lw(fv paramfv, double paramDouble1, double paramDouble2, double paramDouble3, int paramInt) {
080            this(paramfv);
081            a(paramDouble1, paramDouble2 + H, paramDouble3);
082    
083            s = 0.0D;
084            t = 0.0D;
085            u = 0.0D;
086    
087            m = paramDouble1;
088            n = paramDouble2;
089            o = paramDouble3;
090            d = paramInt;
091    
092            // hMod: Creation of the cart
093            Minecart cart = new Minecart(this);
094            etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_CREATE, cart);
095        }
096    
097        public double k() {
098            return J * 0.0D - 0.300000011920929D;
099        }
100    
101        public boolean a(fe paramfe, int paramInt) {
102    
103            // hMod: Attack of the cart
104            BaseEntity attacker = new BaseEntity(paramfe);
105            Minecart cart = new Minecart(this);
106    
107            if ((Boolean) etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_DAMAGE, cart, attacker, paramInt)) {
108                return true;
109            }
110    
111            if ((l.z) || (G)) {
112                return true;
113            }
114            c = (-c);
115            b = 10;
116            y();
117            a += paramInt * 10;
118            if (a > 40) {
119                a(hg.ax.ba, 1, 0.0F);
120                if (d == 1) {
121                    a(hr.au.bi, 1, 0.0F);
122                } else if (d == 2) {
123                    a(hr.aB.bi, 1, 0.0F);
124                }
125                q();
126            }
127            return true;
128        }
129    
130        public boolean c_() {
131            return !G;
132        }
133    
134        public void q() {
135            // hMod: Destruction of the cart
136            Minecart cart = new Minecart(this);
137            etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_DESTROYED, cart);
138    
139            for (int i = 0; i < h_(); i++) {
140                jl localjl = a(i);
141                if (localjl != null) {
142                    float f1 = W.nextFloat() * 0.8F + 0.1F;
143                    float f2 = W.nextFloat() * 0.8F + 0.1F;
144                    float f3 = W.nextFloat() * 0.8F + 0.1F;
145    
146                    while (localjl.a > 0) {
147                        int j = W.nextInt(21) + 10;
148                        if (j > localjl.a) {
149                            j = localjl.a;
150                        }
151                        localjl.a -= j;
152    
153                        ic localic = new ic(l, p + f1, q + f2, r + f3, new jl(localjl.c, j, localjl.h()));
154                        float f4 = 0.05F;
155                        localic.s = ((float) W.nextGaussian() * f4);
156                        localic.t = ((float) W.nextGaussian() * f4 + 0.2F);
157                        localic.u = ((float) W.nextGaussian() * f4);
158                        l.a(localic);
159                    }
160                }
161            }
162            super.q();
163        }
164    
165        public void b_() {
166            // hMod: Update of the cart
167            Minecart cart = new Minecart(this);
168            etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_UPDATE, cart);
169    
170            if (b > 0) {
171                b -= 1;
172            }
173            if (a > 0) {
174                a -= 1;
175            }
176    
177            if ((l.z) && (ao > 0)) {
178                if (ao > 0) {
179                    double d1 = p + (ap - p) / ao;
180                    double d2 = q + (aq - q) / ao;
181                    double d4 = r + (ar - r) / ao;
182    
183                    double d5 = as - v;
184                    while (d5 < -180.0D) {
185                        d5 += 360.0D;
186                    }
187                    while (d5 >= 180.0D) {
188                        d5 -= 360.0D;
189                    }
190                    v = (float) (v + d5 / ao);
191                    w = (float) (w + (at - w) / ao);
192    
193                    ao -= 1;
194                    a(d1, d2, d4);
195                    b(v, w);
196                } else {
197                    a(p, q, r);
198                    b(v, w);
199                }
200    
201                return;
202            }
203            this.m = p;
204            this.n = q;
205            o = r;
206    
207            t -= 0.03999999910593033D;
208    
209            int i = iz.b(p);
210            int j = iz.b(q);
211            int k = iz.b(r);
212            if (l.a(i, j - 1, k) == hr.aG.bi) {
213                j--;
214            }
215    
216            double d3 = 0.4D;
217            int m = 0;
218    
219            double d5 = 0.0078125D;
220            if (l.a(i, j, k) == hr.aG.bi) {
221                bu localbu1 = g(p, q, r);
222                int n = l.b(i, j, k);
223                q = j;
224                if ((n >= 2) && (n <= 5)) {
225                    q = (j + 1);
226                }
227    
228                if (n == 2) {
229                    s -= d5;
230                }
231                if (n == 3) {
232                    s += d5;
233                }
234                if (n == 4) {
235                    u += d5;
236                }
237                if (n == 5) {
238                    u -= d5;
239                }
240    
241                int[][] arrayOfInt = an[n];
242    
243                double d8 = arrayOfInt[1][0] - arrayOfInt[0][0];
244                double d10 = arrayOfInt[1][2] - arrayOfInt[0][2];
245                double d11 = Math.sqrt(d8 * d8 + d10 * d10);
246    
247                double d12 = s * d8 + u * d10;
248                if (d12 < 0.0D) {
249                    d8 = -d8;
250                    d10 = -d10;
251                }
252    
253                double d13 = Math.sqrt(s * s + u * u);
254    
255                s = (d13 * d8 / d11);
256                u = (d13 * d10 / d11);
257    
258                double d14 = 0.0D;
259                double d15 = i + 0.5D + arrayOfInt[0][0] * 0.5D;
260                double d16 = k + 0.5D + arrayOfInt[0][2] * 0.5D;
261                double d17 = i + 0.5D + arrayOfInt[1][0] * 0.5D;
262                double d18 = k + 0.5D + arrayOfInt[1][2] * 0.5D;
263    
264                d8 = d17 - d15;
265                d10 = d18 - d16;
266                double d21;
267                if (d8 == 0.0D) {
268                    p = (i + 0.5D);
269                    d14 = r - k;
270                } else if (d10 == 0.0D) {
271                    r = (k + 0.5D);
272                    d14 = p - i;
273                } else {
274                    double d19 = p - d15;
275                    double d20 = r - d16;
276    
277                    d21 = (d19 * d8 + d20 * d10) * 2.0D;
278                    d14 = d21;
279                }
280    
281                p = (d15 + d8 * d14);
282                r = (d16 + d10 * d14);
283    
284                a(p, q + H, r);
285    
286                double d19 = s;
287                double d20 = u;
288                if (this.j != null) {
289                    d19 *= 0.75D;
290                    d20 *= 0.75D;
291                }
292                if (d19 < -d3) {
293                    d19 = -d3;
294                }
295                if (d19 > d3) {
296                    d19 = d3;
297                }
298                if (d20 < -d3) {
299                    d20 = -d3;
300                }
301                if (d20 > d3) {
302                    d20 = d3;
303                }
304                c(d19, 0.0D, d20);
305    
306                if ((arrayOfInt[0][1] != 0) && (iz.b(p) - i == arrayOfInt[0][0]) && (iz.b(r) - k == arrayOfInt[0][2])) {
307                    a(p, q + arrayOfInt[0][1], r);
308                } else if ((arrayOfInt[1][1] != 0) && (iz.b(p) - i == arrayOfInt[1][0]) && (iz.b(r) - k == arrayOfInt[1][2])) {
309                    a(p, q + arrayOfInt[1][1], r);
310                }
311    
312                if (this.j != null) {
313                    s *= 0.996999979019165D;
314                    t *= 0.0D;
315                    u *= 0.996999979019165D;
316                } else {
317                    if (d == 2) {
318                        d21 = iz.a(f * f + ak * ak);
319                        if (d21 > 0.01D) {
320                            m = 1;
321                            f /= d21;
322                            ak /= d21;
323                            double d23 = 0.04D;
324                            s *= 0.800000011920929D;
325                            t *= 0.0D;
326                            u *= 0.800000011920929D;
327                            s += f * d23;
328                            u += ak * d23;
329                        } else {
330                            s *= 0.8999999761581421D;
331                            t *= 0.0D;
332                            u *= 0.8999999761581421D;
333                        }
334                    }
335                    s *= 0.9599999785423279D;
336                    t *= 0.0D;
337                    u *= 0.9599999785423279D;
338                }
339    
340                bu localbu2 = g(p, q, r);
341                if ((localbu2 != null) && (localbu1 != null)) {
342                    double d22 = (localbu1.b - localbu2.b) * 0.05D;
343    
344                    d13 = Math.sqrt(s * s + u * u);
345                    if (d13 > 0.0D) {
346                        s = (s / d13 * (d13 + d22));
347                        u = (u / d13 * (d13 + d22));
348                    }
349                    a(p, localbu2.b, r);
350                }
351    
352                int i2 = iz.b(p);
353                int i3 = iz.b(r);
354                if ((i2 != i) || (i3 != k)) {
355                    d13 = Math.sqrt(s * s + u * u);
356    
357                    s = (d13 * (i2 - i));
358                    u = (d13 * (i3 - k));
359                }
360    
361                if (d == 2) {
362                    double d24 = iz.a(f * f + ak * ak);
363                    if ((d24 > 0.01D) && (s * s + u * u > 0.001D)) {
364                        f /= d24;
365                        ak /= d24;
366    
367                        if (f * s + ak * u < 0.0D) {
368                            f = 0.0D;
369                            ak = 0.0D;
370                        } else {
371                            f = s;
372                            ak = u;
373                        }
374                    }
375                }
376            } else {
377                if (s < -d3) {
378                    s = (-d3);
379                }
380                if (s > d3) {
381                    s = d3;
382                }
383                if (u < -d3) {
384                    u = (-d3);
385                }
386                if (u > d3) {
387                    u = d3;
388                }
389                if (A) {
390                    s *= 0.5D;
391                    t *= 0.5D;
392                    u *= 0.5D;
393                }
394                c(s, t, u);
395    
396                if (!A) {
397                    s *= 0.949999988079071D;
398                    t *= 0.949999988079071D;
399                    u *= 0.949999988079071D;
400                }
401            }
402    
403            w = 0.0F;
404            double d6 = this.m - p;
405            double d7 = o - r;
406            if (d6 * d6 + d7 * d7 > 0.001D) {
407                v = (float) (Math.atan2(d7, d6) * 180.0D / 3.141592653589793D);
408                if (am) {
409                    v += 180.0F;
410                }
411            }
412    
413            double d9 = v - x;
414            while (d9 >= 180.0D) {
415                d9 -= 360.0D;
416            }
417            while (d9 < -180.0D) {
418                d9 += 360.0D;
419            }
420            if ((d9 < -170.0D) || (d9 >= 170.0D)) {
421                v += 180.0F;
422                am = (!am);
423            }
424            b(v, w);
425    
426            List localList = l.b(this, z.b(0.2000000029802322D, 0.0D, 0.2000000029802322D));
427            if ((localList != null) && (localList.size() > 0)) {
428                for (int i1 = 0; i1 < localList.size(); i1++) {
429                    fe localfe = (fe) localList.get(i1);
430                    if ((localfe != this.j) && (localfe.z()) && ((localfe instanceof lw))) {
431                        localfe.c(this);
432                    }
433                }
434    
435            }
436    
437            if ((this.j != null)
438                    && (this.j.G)) {
439                this.j = null;
440            }
441    
442            if ((m != 0) && (W.nextInt(4) == 0)) {
443                e -= 1;
444                if (e < 0) {
445                    f = (this.ak = 0.0D);
446                }
447                l.a("largesmoke", p, q + 0.8D, r, 0.0D, 0.0D, 0.0D);
448            }
449        }
450    
451        public bu g(double paramDouble1, double paramDouble2, double paramDouble3) {
452            int i = iz.b(paramDouble1);
453            int j = iz.b(paramDouble2);
454            int k = iz.b(paramDouble3);
455    
456            // hMod: Change of the cart
457            Minecart minecart = new Minecart(this);
458            etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_POSITIONCHANGE, minecart, i, j, k);
459    
460            if (l.a(i, j - 1, k) == hr.aG.bi) {
461                j--;
462            }
463    
464            if (l.a(i, j, k) == hr.aG.bi) {
465                int m = l.b(i, j, k);
466                paramDouble2 = j;
467                if ((m >= 2) && (m <= 5)) {
468                    paramDouble2 = j + 1;
469                }
470    
471                int[][] arrayOfInt = an[m];
472    
473                double d1 = 0.0D;
474                double d2 = i + 0.5D + arrayOfInt[0][0] * 0.5D;
475                double d3 = j + 0.5D + arrayOfInt[0][1] * 0.5D;
476                double d4 = k + 0.5D + arrayOfInt[0][2] * 0.5D;
477                double d5 = i + 0.5D + arrayOfInt[1][0] * 0.5D;
478                double d6 = j + 0.5D + arrayOfInt[1][1] * 0.5D;
479                double d7 = k + 0.5D + arrayOfInt[1][2] * 0.5D;
480    
481                double d8 = d5 - d2;
482                double d9 = (d6 - d3) * 2.0D;
483                double d10 = d7 - d4;
484    
485                if (d8 == 0.0D) {
486                    paramDouble1 = i + 0.5D;
487                    d1 = paramDouble3 - k;
488                } else if (d10 == 0.0D) {
489                    paramDouble3 = k + 0.5D;
490                    d1 = paramDouble1 - i;
491                } else {
492                    double d11 = paramDouble1 - d2;
493                    double d12 = paramDouble3 - d4;
494    
495                    double d13 = (d11 * d8 + d12 * d10) * 2.0D;
496                    d1 = d13;
497                }
498    
499                paramDouble1 = d2 + d8 * d1;
500                paramDouble2 = d3 + d9 * d1;
501                paramDouble3 = d4 + d10 * d1;
502                if (d9 < 0.0D) {
503                    paramDouble2 += 1.0D;
504                }
505                if (d9 > 0.0D) {
506                    paramDouble2 += 0.5D;
507                }
508                return bu.b(paramDouble1, paramDouble2, paramDouble3);
509            }
510            return null;
511        }
512    
513        protected void a(ah paramah) {
514            paramah.a("Type", d);
515    
516            if (d == 2) {
517                paramah.a("PushX", f);
518                paramah.a("PushZ", ak);
519                paramah.a("Fuel", (short) e);
520            } else if (d == 1) {
521                fh localfh = new fh();
522    
523                for (int i = 0; i < al.length; i++) {
524                    if (al[i] != null) {
525                        ah localah = new ah();
526                        localah.a("Slot", (byte) i);
527                        al[i].a(localah);
528                        localfh.a(localah);
529                    }
530                }
531                paramah.a("Items", localfh);
532            }
533        }
534    
535        protected void b(ah paramah) {
536            d = paramah.d("Type");
537            if (d == 2) {
538                f = paramah.g("PushX");
539                ak = paramah.g("PushZ");
540                e = paramah.c("Fuel");
541            } else if (d == 1) {
542                fh localfh = paramah.k("Items");
543                al = new jl[h_()];
544                for (int i = 0; i < localfh.b(); i++) {
545                    ah localah = (ah) localfh.a(i);
546                    int j = localah.b("Slot") & 0xFF;
547                    if ((j < 0) || (j >= al.length)) {
548                        continue;
549                    }
550                    al[j] = new jl(localah);
551                }
552            }
553        }
554    
555        public void c(fe paramfe) {
556            if (l.z) {
557                return;
558            }
559    
560            if (paramfe == j) {
561                return;
562            }
563            // hMod: Collision of a cart
564            Minecart cart = new Minecart(this);
565            BaseEntity baseEntity = new BaseEntity(paramfe);
566            if ((Boolean) etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_COLLISION, cart, baseEntity)) {
567                return;
568            }
569    
570            if (((paramfe instanceof mj)) && (!(paramfe instanceof hl)) && (d == 0) && (s * s + u * u > 0.01D)
571                    && (j == null) && (paramfe.k == null)) {
572                paramfe.e(this);
573            }
574    
575            double d1 = paramfe.p - p;
576            double d2 = paramfe.r - r;
577    
578            double d3 = d1 * d1 + d2 * d2;
579            if (d3 >= 9.999999747378752E-005D) {
580                d3 = iz.a(d3);
581                d1 /= d3;
582                d2 /= d3;
583                double d4 = 1.0D / d3;
584                if (d4 > 1.0D) {
585                    d4 = 1.0D;
586                }
587                d1 *= d4;
588                d2 *= d4;
589                d1 *= 0.1000000014901161D;
590                d2 *= 0.1000000014901161D;
591    
592                d1 *= (1.0F - U);
593                d2 *= (1.0F - U);
594                d1 *= 0.5D;
595                d2 *= 0.5D;
596    
597                if ((paramfe instanceof lw)) {
598                    double d5 = paramfe.s + s;
599                    double d6 = paramfe.u + u;
600    
601                    if ((((lw) paramfe).d == 2) && (d != 2)) {
602                        s *= 0.2000000029802322D;
603                        u *= 0.2000000029802322D;
604                        f(paramfe.s - d1, 0.0D, paramfe.u - d2);
605                        paramfe.s *= 0.699999988079071D;
606                        paramfe.u *= 0.699999988079071D;
607                    } else if ((((lw) paramfe).d != 2) && (d == 2)) {
608                        paramfe.s *= 0.2000000029802322D;
609                        paramfe.u *= 0.2000000029802322D;
610                        paramfe.f(s + d1, 0.0D, u + d2);
611                        s *= 0.699999988079071D;
612                        u *= 0.699999988079071D;
613                    } else {
614                        d5 /= 2.0D;
615                        d6 /= 2.0D;
616                        s *= 0.2000000029802322D;
617                        u *= 0.2000000029802322D;
618                        f(d5 - d1, 0.0D, d6 - d2);
619                        paramfe.s *= 0.2000000029802322D;
620                        paramfe.u *= 0.2000000029802322D;
621                        paramfe.f(d5 + d1, 0.0D, d6 + d2);
622                    }
623                } else {
624                    f(-d1, 0.0D, -d2);
625                    paramfe.f(d1 / 4.0D, 0.0D, d2 / 4.0D);
626                }
627            }
628        }
629    
630        public int h_() {
631            return 27;
632        }
633    
634        public jl a(int paramInt) {
635            return al[paramInt];
636        }
637    
638        public jl b(int paramInt1, int paramInt2) {
639            if (al[paramInt1] != null) {
640                if (al[paramInt1].a <= paramInt2) {
641                    jl localjl = al[paramInt1];
642                    al[paramInt1] = null;
643                    return localjl;
644                }
645                jl localjl = al[paramInt1].a(paramInt2);
646                if (al[paramInt1].a == 0) {
647                    al[paramInt1] = null;
648                }
649                return localjl;
650            }
651    
652            return null;
653        }
654    
655        public void a(int paramInt, jl paramjl) {
656            al[paramInt] = paramjl;
657            if ((paramjl != null) && (paramjl.a > c())) {
658                paramjl.a = c();
659            }
660        }
661    
662        public String b() {
663            return getName(); //hMod: override with getName()
664        }
665    
666        public int c() {
667            return 64;
668        }
669    
670        public void d() {
671        }
672    
673        public boolean a(hl paramhl) {
674            // hMod: Entering the cart
675            Minecart cart = new Minecart(this);
676            HumanEntity player = new HumanEntity(paramhl);
677            etc.getLoader().callHook(PluginLoader.Hook.VEHICLE_ENTERED, cart, player);
678    
679            if (d == 0) {
680                if ((j != null) && ((j instanceof hl)) && (j != paramhl)) {
681                    return true;
682                }
683                if (!l.z) {
684                    paramhl.e(this);
685                }
686            } else if (d == 1) {
687                if (!l.z) {
688                    // hMod cast this down to fix decompiler error.
689                    paramhl.a((mn) this);
690                }
691            } else if (d == 2) {
692                jl localjl = paramhl.an.e();
693                if ((localjl != null) && (localjl.c == hg.k.ba)) {
694                    if (--localjl.a == 0) {
695                        paramhl.an.a(paramhl.an.c, null);
696                    }
697                    e += 1200;
698                }
699    
700                f = (p - paramhl.p);
701                ak = (r - paramhl.r);
702            }
703            return true;
704        }
705    
706        public boolean a_(hl paramhl) {
707            if (G) {
708                return false;
709            }
710            return paramhl.b(this) <= 64.0D;
711        }
712    }