001    
002    import java.io.IOException;
003    import java.util.ArrayList;
004    import java.util.HashMap;
005    import java.util.HashSet;
006    import java.util.Iterator;
007    import java.util.List;
008    import java.util.Map;
009    import java.util.Set;
010    
011    public class ly
012            implements cq {
013    
014        private Set a = new HashSet();
015        private me b;
016        private cq c;
017        private bj d;
018        private Map e = new HashMap();
019        private List f = new ArrayList();
020        private gc g;
021    
022        public ly(gc paramgc, bj parambj, cq paramcq) {
023            b = new lz(paramgc, new byte[32768], 0, 0);
024    
025            g = paramgc;
026            d = parambj;
027            c = paramcq;
028        }
029    
030        public boolean a(int paramInt1, int paramInt2) {
031            mi localmi = new mi(paramInt1, paramInt2);
032            return e.containsKey(localmi);
033        }
034    
035        public void c(int paramInt1, int paramInt2) {
036            int i = paramInt1 * 16 + 8 - g.m;
037            int j = paramInt2 * 16 + 8 - g.o;
038            int k = 128;
039            if ((i < -k) || (i > k) || (j < -k) || (j > k)) {
040                a.add(new mi(paramInt1, paramInt2));
041            }
042        }
043    
044        public me d(int paramInt1, int paramInt2) {
045            mi localmi = new mi(paramInt1, paramInt2);
046            a.remove(new mi(paramInt1, paramInt2));
047    
048            me localme = (me) e.get(localmi);
049            if (localme == null) {
050                localme = e(paramInt1, paramInt2);
051                if (localme == null) {
052                    if (c == null) {
053                        localme = b;
054                    } else {
055                        localme = c.b(paramInt1, paramInt2);
056                    }
057    
058                }
059    
060                e.put(localmi, localme);
061                f.add(localme);
062    
063                if (localme != null) {
064                    localme.c();
065                    localme.d();
066                }
067    
068                if ((!localme.n) && (a(paramInt1 + 1, paramInt2 + 1)) && (a(paramInt1, paramInt2 + 1)) && (a(paramInt1 + 1, paramInt2))) {
069                    a(this, paramInt1, paramInt2);
070                }
071                if ((a(paramInt1 - 1, paramInt2)) && (!b(paramInt1 - 1, paramInt2).n) && (a(paramInt1 - 1, paramInt2 + 1)) && (a(paramInt1, paramInt2 + 1)) && (a(paramInt1 - 1, paramInt2))) {
072                    a(this, paramInt1 - 1, paramInt2);
073                }
074                if ((a(paramInt1, paramInt2 - 1)) && (!b(paramInt1, paramInt2 - 1).n) && (a(paramInt1 + 1, paramInt2 - 1)) && (a(paramInt1, paramInt2 - 1)) && (a(paramInt1 + 1, paramInt2))) {
075                    a(this, paramInt1, paramInt2 - 1);
076                }
077                if ((a(paramInt1 - 1, paramInt2 - 1)) && (!b(paramInt1 - 1, paramInt2 - 1).n) && (a(paramInt1 - 1, paramInt2 - 1)) && (a(paramInt1, paramInt2 - 1)) && (a(paramInt1 - 1, paramInt2))) {
078                    a(this, paramInt1 - 1, paramInt2 - 1);
079                }
080    
081            }
082    
083            return localme;
084        }
085    
086        public me b(int paramInt1, int paramInt2) {
087            mi localmi = new mi(paramInt1, paramInt2);
088            me localme = (me) e.get(localmi);
089    
090            if (localme == null) {
091                if (g.x) {
092                    return d(paramInt1, paramInt2);
093                }
094                return b;
095            }
096    
097            return localme;
098        }
099    
100        private me e(int paramInt1, int paramInt2) {
101            if (d == null) {
102                return null;
103            }
104            try {
105                me localme = d.a(g, paramInt1, paramInt2);
106                if (localme != null) {
107                    localme.r = g.e;
108                }
109                return localme;
110            } catch (Exception localException) {
111                localException.printStackTrace();
112            }
113            return null;
114        }
115    
116        private void a(me paramme) {
117            if (d == null) {
118                return;
119            }
120            try {
121                d.b(g, paramme);
122            } catch (Exception localException) {
123                localException.printStackTrace();
124            }
125        }
126    
127        private void b(me paramme) {
128            if (d == null) {
129                return;
130            }
131            // hMod: fix decompiler error, comment this out.
132            paramme.r = g.e;
133            d.a(g, paramme);
134        }
135    
136        public void a(cq paramcq, int paramInt1, int paramInt2) {
137            me localme = b(paramInt1, paramInt2);
138            if (!localme.n) {
139                localme.n = true;
140                if (c != null) {
141                    c.a(paramcq, paramInt1, paramInt2);
142                    localme.f();
143                }
144            }
145        }
146    
147        public boolean a(boolean paramBoolean, lk paramlk) {
148            int i = 0;
149            for (int j = 0; j < f.size(); j++) {
150                me localme = (me) f.get(j);
151                if ((paramBoolean) && (!localme.p)) {
152                    a(localme);
153                }
154                if (localme.a(paramBoolean)) {
155                    b(localme);
156                    localme.o = false;
157                    i++;
158                    if ((i == 24) && (!paramBoolean)) {
159                        return false;
160                    }
161                }
162            }
163    
164            if (paramBoolean) {
165                if (d == null) {
166                    return true;
167                }
168                d.b();
169            }
170            return true;
171        }
172    // hMod: Load status
173        boolean loaded = false;
174    
175        public boolean a() {
176            // hMod: Load once!
177            if (!loaded) {
178                etc.getLoader();
179                loaded = true;
180            }
181            if (!g.C) {
182                for (int i = 0; i < 100; i++) {
183                    if (!a.isEmpty()) {
184                        mi localmi = (mi) a.iterator().next();
185    
186                        me localme = b(localmi.a, localmi.b);
187                        localme.e();
188                        b(localme);
189                        a(localme);
190                        a.remove(localmi);
191    
192                        e.remove(localmi);
193                        f.remove(localme);
194                    }
195                }
196    
197                if (d != null) {
198                    d.a();
199                }
200            }
201    
202            return c.a();
203        }
204    
205        public boolean b() {
206            return !g.C;
207        }
208    }