001    
002    import java.io.BufferedReader;
003    import java.io.File;
004    import java.io.FileReader;
005    import java.io.FileWriter;
006    import java.io.PrintWriter;
007    import java.util.ArrayList;
008    import java.util.HashSet;
009    import java.util.List;
010    import java.util.Set;
011    import java.util.logging.Logger;
012    import net.minecraft.server.MinecraftServer;
013    
014    public class ii {
015    
016        public static Logger a = Logger.getLogger("Minecraft");
017        // hMod set list to contain <fi> objects.
018        public List<fy> b = new ArrayList<fy>();
019        private MinecraftServer c;
020        private kj d;
021        private int e;
022        // hMod set these to Set<String> to remove errors and warnings.
023        private Set<String> f = new HashSet<String>();
024        private Set<String> g = new HashSet<String>();
025        private Set<String> h = new HashSet<String>();
026        private File i;
027        private File j;
028        private File k;
029        private dy l;
030    
031        public ii(MinecraftServer paramMinecraftServer) {
032            etc.setServer(paramMinecraftServer);
033            etc.getInstance().loadData();
034            a.info("Note: your current classpath is: " + System.getProperty("java.class.path", "*UNKNOWN*"));
035            if (!etc.getInstance().getTainted()) {
036                a.info("Hey0 Server Mod Build " + etc.getInstance().getVersion());
037            } else {
038                a.info("hMod Build Information: " + etc.getInstance().getVersionStr());
039            }
040            c = paramMinecraftServer;
041            i = paramMinecraftServer.a("banned-players.txt");
042            j = paramMinecraftServer.a("banned-ips.txt");
043            k = paramMinecraftServer.a("ops.txt");
044            d = new kj(paramMinecraftServer);
045            e = paramMinecraftServer.d.a("max-players", 20);
046            e();
047            g();
048            i();
049            f();
050            h();
051            j();
052        }
053    
054        public void a(gc paramgc) {
055            l = new dy(new File(paramgc.t, "players"));
056        }
057    
058        public int a() {
059            return d.b();
060        }
061    
062        public void a(fy paramfy) {
063            b.add(paramfy);
064            l.b(paramfy);
065    
066            c.e.A.d((int) paramfy.p >> 4, (int) paramfy.r >> 4);
067    
068            while (c.e.a(paramfy, paramfy.z).size() != 0) {
069                paramfy.a(paramfy.p, paramfy.q + 1.0D, paramfy.r);
070            }
071            c.e.a(paramfy);
072            d.a(paramfy);
073            // hMod: Handle login (send MOTD and call hook)
074            String[] motd = etc.getInstance().getMotd();
075            if (!(motd.length == 1 && motd[0].equals(""))) {
076                for (String str : etc.getInstance().getMotd()) {
077                    paramfy.a.b(new bz(str));
078                }
079            }
080            etc.getLoader().callHook(PluginLoader.Hook.LOGIN, paramfy.getPlayer());
081        }
082    
083        public void b(fy paramfy) {
084            d.c(paramfy);
085        }
086    
087        public void c(fy paramfy) {
088            l.a(paramfy);
089            c.e.d(paramfy);
090            b.remove(paramfy);
091            d.b(paramfy);
092        }
093    
094        public fy a(hc paramhc, String paramString1, String paramString2) {
095            if (f.contains(paramString1.trim().toLowerCase())) {
096                paramhc.a("You are banned from this server!");
097                return null;
098            }
099            //hMod: whole section below is modified to handle whitelists etc
100            fy temp = new fy(this.c, this.c.e, paramString1, new md(this.c.e));
101            Player player = temp.getPlayer();
102    
103            String str = paramhc.b.b().toString();
104            str = str.substring(str.indexOf("/") + 1);
105            str = str.substring(0, str.indexOf(":"));
106            if (g.contains(str)) {
107                paramhc.a("Your IP address is banned from this server!");
108                return null;
109            }
110            for (int m = 0; m < b.size(); m++) {
111                fy localfy = (fy) b.get(m);
112                if (localfy.aw.equalsIgnoreCase(paramString1)) {
113                    localfy.a.a("You logged in from another location");
114                }
115            }
116    
117            //hMod whitelist block
118            if (etc.getInstance().isWhitelistEnabled() && !(etc.getDataSource().isUserOnWhitelist(paramString1) || player.isAdmin())) {
119                paramhc.a(etc.getInstance().getWhitelistMessage());
120                return null;
121            } else if (b.size() >= e) {
122                paramhc.a("The server is full!");
123                return null;
124            }
125    
126            if (!player.getIps()[0].equals("")) {
127                boolean kick = true;
128                for (int i = 0; i < player.getIps().length; i++) {
129                    if (!player.getIps()[i].equals("") && str.equals(player.getIps()[i])) {
130                        kick = false;
131                    }
132                }
133                if (kick) {
134                    paramhc.a("IP doesn't match specified IP.");
135                    return null;
136                }
137            }
138            //hMod: user passed basic login check, inform plugins.
139            Object obj = etc.getLoader().callHook(PluginLoader.Hook.LOGINCHECK, paramString1);
140            if (obj instanceof String) {
141                String result = (String) obj;
142                if (result != null && !result.equals("")) {
143                    paramhc.a(result);
144                    return null;
145                }
146            }
147    
148            return new fy(c, c.e, paramString1, new md(c.e));
149        }
150    
151        /**
152         * Returns the list of bans
153         *
154         * @return
155         */
156        public String getBans() {
157            StringBuilder builder = new StringBuilder();
158            int l = 0;
159            for (Object o : f) {
160                if (l > 0) {
161                    builder.append(", ");
162                }
163                builder.append(o);
164                l++;
165            }
166            return builder.toString();
167        }
168    
169        /**
170         * Returns the list of IP bans
171         *
172         * @return
173         */
174        public String getIpBans() {
175            StringBuilder builder = new StringBuilder();
176            int l = 0;
177            for (Object o : g) {
178                if (l > 0) {
179                    builder.append(", ");
180                }
181                builder.append(o);
182                l++;
183            }
184            return builder.toString();
185        }
186    
187        public fy d(fy paramfy) {
188            c.k.a(paramfy);
189            c.k.b(paramfy);
190            d.b(paramfy);
191            b.remove(paramfy);
192            c.e.e(paramfy);
193    
194            fy localfy = new fy(c, c.e, paramfy.aw, new md(c.e));
195            localfy.g = paramfy.g;
196            localfy.a = paramfy.a;
197    
198            c.e.A.d((int) localfy.p >> 4, (int) localfy.r >> 4);
199    
200            while (c.e.a(localfy, localfy.z).size() != 0) {
201                localfy.a(localfy.p, localfy.q + 1.0D, localfy.r);
202            }
203    
204            localfy.a.b(new bo());
205            localfy.a.a(localfy.p, localfy.q, localfy.r, localfy.v, localfy.w);
206    
207            d.a(localfy);
208            c.e.a(localfy);
209            b.add(localfy);
210    
211            localfy.l();
212            return localfy;
213        }
214    
215        public void b() {
216            d.a();
217        }
218    
219        public void a(int paramInt1, int paramInt2, int paramInt3) {
220            d.a(paramInt1, paramInt2, paramInt3);
221        }
222    
223        public void a(kx paramkx) {
224            for (int m = 0; m < b.size(); m++) {
225                fy localfy = (fy) b.get(m);
226                localfy.a.b(paramkx);
227            }
228        }
229    
230        public String c() {
231            String str = "";
232            for (int m = 0; m < b.size(); m++) {
233                if (m > 0) {
234                    str = str + ", ";
235                }
236                str = str + ((fy) b.get(m)).aw;
237            }
238            return str;
239        }
240    
241        public void a(String paramString) {
242            f.add(paramString.toLowerCase());
243            f();
244        }
245    
246        public void b(String paramString) {
247            f.remove(paramString.toLowerCase());
248            f();
249        }
250    
251        private void e() {
252            try {
253                f.clear();
254                BufferedReader localBufferedReader = new BufferedReader(new FileReader(i));
255                String str = "";
256                while ((str = localBufferedReader.readLine()) != null) {
257                    f.add(str.trim().toLowerCase());
258                }
259                localBufferedReader.close();
260            } catch (Exception localException) {
261                a.warning("Failed to load ban list: " + localException);
262            }
263        }
264    
265        private void f() {
266            try {
267                PrintWriter localPrintWriter = new PrintWriter(new FileWriter(i, false));
268                for (String str : f) {
269                    localPrintWriter.println(str);
270                }
271                localPrintWriter.close();
272            } catch (Exception localException) {
273                a.warning("Failed to save ban list: " + localException);
274            }
275        }
276    
277        public void c(String paramString) {
278            g.add(paramString.toLowerCase());
279            h();
280        }
281    
282        public void d(String paramString) {
283            g.remove(paramString.toLowerCase());
284            h();
285        }
286    
287        private void g() {
288            try {
289                g.clear();
290                BufferedReader localBufferedReader = new BufferedReader(new FileReader(j));
291                String str = "";
292                while ((str = localBufferedReader.readLine()) != null) {
293                    g.add(str.trim().toLowerCase());
294                }
295                localBufferedReader.close();
296            } catch (Exception localException) {
297                a.warning("Failed to load ip ban list: " + localException);
298            }
299        }
300    
301        private void h() {
302            try {
303                PrintWriter localPrintWriter = new PrintWriter(new FileWriter(j, false));
304                for (String str : g) {
305                    localPrintWriter.println(str);
306                }
307                localPrintWriter.close();
308            } catch (Exception localException) {
309                a.warning("Failed to save ip ban list: " + localException);
310            }
311        }
312    
313        public void e(String paramString) {
314            h.add(paramString.toLowerCase());
315            j();
316        }
317    
318        public void f(String paramString) {
319            h.remove(paramString.toLowerCase());
320            j();
321        }
322    
323        private void i() {
324            try {
325                h.clear();
326                BufferedReader localBufferedReader = new BufferedReader(new FileReader(k));
327                String str = "";
328                while ((str = localBufferedReader.readLine()) != null) {
329                    h.add(str.trim().toLowerCase());
330                }
331                localBufferedReader.close();
332            } catch (Exception localException) {
333                a.warning("Failed to load ip ban list: " + localException);
334            }
335        }
336    
337        private void j() {
338            try {
339                PrintWriter localPrintWriter = new PrintWriter(new FileWriter(k, false));
340                for (String str : h) {
341                    localPrintWriter.println(str);
342                }
343                localPrintWriter.close();
344            } catch (Exception localException) {
345                a.warning("Failed to save ip ban list: " + localException);
346            }
347        }
348    
349        public boolean g(String paramString) {
350            return h.contains(paramString.trim().toLowerCase());
351        }
352    
353        public fy h(String paramString) {
354            for (int m = 0; m < b.size(); m++) {
355                fy localfy = (fy) b.get(m);
356                if (localfy.aw.equalsIgnoreCase(paramString)) {
357                    return localfy;
358                }
359            }
360            return null;
361        }
362    
363        public void a(String paramString1, String paramString2) {
364            fy localfy = h(paramString1);
365            if (localfy != null) {
366                localfy.a.b(new bz(paramString2));
367            }
368        }
369    
370        public void a(double paramDouble1, double paramDouble2, double paramDouble3, double paramDouble4, kx paramkx) {
371            for (int m = 0; m < b.size(); m++) {
372                fy localfy = (fy) b.get(m);
373                double d1 = paramDouble1 - localfy.p;
374                double d2 = paramDouble2 - localfy.q;
375                double d3 = paramDouble3 - localfy.r;
376                if (d1 * d1 + d2 * d2 + d3 * d3 < paramDouble4 * paramDouble4) {
377                    localfy.a.b(paramkx);
378                }
379            }
380        }
381    
382        public void i(String paramString) {
383            bz localbz = new bz(paramString);
384            for (int m = 0; m < b.size(); m++) {
385                fy localfy = (fy) b.get(m);
386                if (g(localfy.aw)) {
387                    localfy.a.b(localbz);
388                }
389            }
390        }
391    
392        public boolean a(String paramString, kx paramkx) {
393            fy localfy = h(paramString);
394            if (localfy != null) {
395                localfy.a.b(paramkx);
396                return true;
397            }
398            return false;
399        }
400    
401        public void d() {
402            for (int m = 0; m < b.size(); m++) {
403                l.a((fy) b.get(m));
404            }
405        }
406    
407        public void a(int paramInt1, int paramInt2, int paramInt3, bm parambm) {
408            // hMod: fix sign updating in beta 1.1_02
409            // Check if bg (TileEntity) is a Sign
410            if (parambm instanceof lv) {
411                d.sendPacketToChunk((jv) parambm.g(), paramInt1, paramInt2, paramInt3);
412            }
413            // end hMod
414        }
415    }