001    
002    import java.lang.reflect.Constructor;
003    import java.util.HashSet;
004    import java.util.List;
005    import java.util.Random;
006    import java.util.Set;
007    
008    public final class cs {
009    
010        private static Set<mr> a = new HashSet<mr>();
011    
012        protected static jq a(fv paramfv, int paramInt1, int paramInt2) {
013            int i = paramInt1 + paramfv.l.nextInt(16);
014            int j = paramfv.l.nextInt(128);
015            int k = paramInt2 + paramfv.l.nextInt(16);
016    
017            return new jq(i, j, k);
018        }
019    
020        public static final int a(fv paramfv, boolean paramBoolean1, boolean paramBoolean2) {
021            if ((!paramBoolean1) && (!paramBoolean2)) {
022                return 0;
023            }
024    
025            a.clear();
026            Object localObject;
027            int j;
028            int k;
029            for (int i = 0; i < paramfv.d.size(); i++) {
030                localObject = (hl) paramfv.d.get(i);
031                j = iz.b(((hl) localObject).p / 16.0D);
032                k = iz.b(((hl) localObject).r / 16.0D);
033    
034                int m = 8;
035                for (int n = -m; n <= m; n++) {
036                    for (int i1 = -m; i1 <= m; i1++) {
037                        a.add(new mr(n + j, i1 + k));
038                    }
039                }
040            }
041            int i = 0;
042            ma localma;
043            for (j = 0; j < ma.values().length; j++) {
044                localma = ma.values()[j];
045                if (((localma.d()) && (!paramBoolean2)) || ((!localma.d()) && (!paramBoolean1))) {
046                    continue;
047                }
048                if (paramfv.a(localma.a()) > localma.b() * a.size() / 256) {
049                    continue;
050                }
051                for (mr localmr : a) {
052                    kt localkt = paramfv.a().a(localmr);
053                    Class[] arrayOfClass = localkt.a(localma);
054                    if ((arrayOfClass == null) || (arrayOfClass.length == 0)) {
055                        continue;
056                    }
057                    int i2 = paramfv.l.nextInt(arrayOfClass.length);
058    
059                    jq localjq = a(paramfv, localmr.a * 16, localmr.b * 16);
060                    int i3 = localjq.a;
061                    int i4 = localjq.b;
062                    int i5 = localjq.c;
063    
064                    if ((paramfv.d(i3, i4, i5))
065                            || (paramfv.c(i3, i4, i5) != localma.c())) {
066                        continue;
067                    }
068                    int i6 = 0;
069    
070                    for (int i7 = 0; i7 < 3; i7++) {
071                        int i8 = i3;
072                        int i9 = i4;
073                        int i10 = i5;
074                        int i11 = 6;
075                        for (int i12 = 0; i12 < 4; i12++) {
076                            i8 += paramfv.l.nextInt(i11) - paramfv.l.nextInt(i11);
077                            i9 += paramfv.l.nextInt(1) - paramfv.l.nextInt(1);
078                            i10 += paramfv.l.nextInt(i11) - paramfv.l.nextInt(i11);
079    
080                            if (a(localma, paramfv, i8, i9, i10)) {
081                                float f1 = i8 + 0.5F;
082                                float f2 = i9;
083                                float f3 = i10 + 0.5F;
084                                if (paramfv.a(f1, f2, f3, 24.0D) != null) {
085                                    continue;
086                                }
087                                float f4 = f1 - paramfv.m;
088                                float f5 = f2 - paramfv.n;
089                                float f6 = f3 - paramfv.o;
090                                float f7 = f4 * f4 + f5 * f5 + f6 * f6;
091                                if (f7 < 576.0F) {
092                                    continue;
093                                }
094                                mj localmj;
095                                try {
096                                    localmj = (mj) arrayOfClass[i2].getConstructor(new Class[]{fv.class}).newInstance(new Object[]{paramfv});
097                                } catch (Exception localException) {
098                                    localException.printStackTrace();
099                                    return i;
100                                }
101    
102                                localmj.c(f1, f2, f3, paramfv.l.nextFloat() * 360.0F, 0.0F);
103    
104                                if (localmj.b()) {
105                                    i6++;
106                                    paramfv.a(localmj);
107                                    a(localmj, paramfv, f1, f2, f3);
108                                    if (i6 >= localmj.j()) {
109                                        break;
110                                    }
111                                }
112                                i += i6;
113                            }
114                        }
115                    }
116                }
117            }
118            return i;
119        }
120    
121        private static boolean a(ma paramma, fv paramfv, int paramInt1, int paramInt2, int paramInt3) {
122            if (paramma.c() == mh.f) {
123                return (paramfv.c(paramInt1, paramInt2, paramInt3).d()) && (!paramfv.d(paramInt1, paramInt2 + 1, paramInt3));
124            }
125            return (paramfv.d(paramInt1, paramInt2 - 1, paramInt3)) && (!paramfv.d(paramInt1, paramInt2, paramInt3)) && (!paramfv.c(paramInt1, paramInt2, paramInt3).d()) && (!paramfv.d(paramInt1, paramInt2 + 1, paramInt3));
126        }
127    
128        private static void a(mj parammj, fv paramfv, float paramFloat1, float paramFloat2, float paramFloat3) {
129            // hMod: allow mobs to spawn!
130            if (!(Boolean) (etc.getLoader().callHook(PluginLoader.Hook.MOB_SPAWN, new Mob(parammj)))) {
131                if (((parammj instanceof cr)) && (paramfv.l.nextInt(100) == 0)) {
132                    gj localgj = new gj(paramfv);
133                    localgj.c(paramFloat1, paramFloat2, paramFloat3, parammj.v, 0.0F);
134                    paramfv.a(localgj);
135                    localgj.e(parammj);
136                } else if ((parammj instanceof dv)) {
137                    ((dv) parammj).a(dv.a(paramfv.l));
138                }
139            }
140        }
141    }