View difference between Paste ID: yfyCBAKZ and hVBrqDhF
SHOW: | | - or go back to the newest paste.
1
package net.launcher.utils;
2
3
import java.awt.Font;
4
import java.awt.image.BufferedImage;
5
import java.io.BufferedInputStream;
6
import java.io.BufferedReader;
7
import java.io.DataInputStream;
8
import java.io.DataOutputStream;
9
import java.io.File;
10
import java.io.FileOutputStream;
11
import java.io.IOException;
12
import java.io.InputStream;
13
import java.io.InputStreamReader;
14
import java.lang.reflect.Field;
15
import java.net.InetSocketAddress;
16
import java.net.Socket;
17
import java.net.URI;
18
import java.net.URL;
19
import java.net.URLClassLoader;
20
import java.security.MessageDigest;
21
import java.text.SimpleDateFormat;
22
import java.util.Date;
23
import java.util.HashMap;
24
import java.util.Map;
25
26
import javax.imageio.ImageIO;
27
28
import net.launcher.components.Files;
29
import net.launcher.components.Frame;
30
import net.launcher.run.Settings;
31
import net.launcher.run.Starter;
32
33
public class BaseUtils
34
{
35
	public static final String empty = "";
36
	public static final String http = "http://";
37
	public static int logNumber = 0;
38
	public static ConfigUtils config = new ConfigUtils("/launcher.config", getConfigName());
39
	
40
	public static Map<String, Font> fonts = new HashMap<String, Font>();
41
	public static Map<String, BufferedImage> imgs = new HashMap<String, BufferedImage>();
42
43
	public static BufferedImage getLocalImage(String name)
44
	{
45
		try
46
		{
47
			if(imgs.containsKey(name)) return (BufferedImage)imgs.get(name);
48
			
49
			BufferedImage img = ImageIO.read(BaseUtils.class.getResource("/net/launcher/theme/" + name + ".png"));
50
			imgs.put(name, img);
51
			send("Opened local image: " + name + ".png");
52
			return img;
53
		}
54
		catch(Exception e)
55
		{
56
			sendErr("Fail to open local image: " + name + ".png");
57
			return getEmptyImage();
58
		}
59
	}
60
	
61
	public static BufferedImage getEmptyImage()
62
	{
63
		return new BufferedImage(9, 9, BufferedImage.TYPE_INT_ARGB);
64
	}
65
	
66
	public static void send(String msg)
67
	{
68
		String prefix = null;
69
		if(Integer.toString(logNumber).length() == 1) prefix = "00" + logNumber + " ";
70
		else if(Integer.toString(logNumber).length() == 2) prefix = "0" + logNumber + " ";
71
		else if(Integer.toString(logNumber).length() == 3) prefix = logNumber + " ";
72
		else prefix = "999 ";
73
		if(Settings.debug) System.out.println(prefix + msg);
74
		logNumber++;
75
	}
76
	
77
	public static void sendErr(String err)
78
	{
79
		String prefix = null;
80
		if(Integer.toString(logNumber).length() == 1) prefix = "00" + logNumber + " ";
81
		else if(Integer.toString(logNumber).length() == 2) prefix = "0" + logNumber + " ";
82
		else if(Integer.toString(logNumber).length() == 3) prefix = logNumber + " ";
83
		else prefix = "999 ";
84
		if(Settings.debug)System.err.println(prefix + err);
85
		logNumber++;
86
	}
87
	
88
	public static boolean contains(int x, int y, int xx, int yy, int w, int h)
89
	{
90
		return (x >= xx) && (y >= yy) && (x < xx + w) && (y < yy + h);
91
	}
92
	
93
	public static File getConfigName()
94
	{
95
		String home = System.getProperty("user.home", "");
96
		String path = File.separator + Settings.baseconf + File.separator + "launcher.config";
97
		switch(getPlatform())
98
		{
99
			case 1: return new File(System.getProperty("user.home", "") + path);
100
			case 2:
101
				String appData = System.getenv(Settings.basedir);
102
				if(appData != null) return new File(appData + path);
103
				else return new File(home + path);
104
			case 3: return new File(home, "Library/Application Support/" + path);
105
			default: return new File(home + path);
106
		}
107
	}
108
	
109
	public static File getMcDir()
110
	{
111
		String home = System.getProperty("user.home", "");
112
		String path = Settings.pathconst.replaceAll("%SERVERNAME%", getClientName());
113
		switch(getPlatform())
114
		{
115
			case 1: return new File(System.getProperty("user.home", ""), path);
116
			case 2:
117
				String appData = System.getenv(Settings.basedir);
118
				if(appData != null) return new File(appData, path);
119
				else return new File(home, path);
120
			case 3: return new File(home, "Library/Application Support/" + path);
121
			default: return new File(home, path);
122
		}
123
	}
124
125
	public static int getPlatform()
126
	{
127
		String osName = System.getProperty("os.name").toLowerCase();
128
		
129
		if(osName.contains("win")) return 2;
130
		if(osName.contains("mac")) return 3;
131
		if(osName.contains("solaris")) return 1;
132
		if(osName.contains("sunos")) return 1;
133
		if(osName.contains("linux")) return 0;
134
		if(osName.contains("unix")) return 0;
135
		
136
		return 4;
137
	}
138
	
139
	public static String buildUrl(String s)
140
	{
141
		return http + Settings.domain + "/" + Settings.siteDir + "/" + s;
142
	}
143
	
144
	static
145
	{
146
		config.load();
147
	}
148
	
149
	public static void setProperty(String s, Object value)
150
	{
151
		if(config.checkProperty(s)) config.changeProperty(s,value);
152
		else config.put(s,value);
153
	}
154
	
155
	public static String getPropertyString(String s)
156
	{
157
		if(config.checkProperty(s)) return config.getPropertyString(s);
158
		return null;
159
	}
160
	
161
	public static boolean getPropertyBoolean(String s)
162
	{
163
		if(config.checkProperty(s)) return config.getPropertyBoolean(s);
164
		return false;
165
	}
166
	
167
	public static int getPropertyInt(String s)
168
	{
169
		if(config.checkProperty(s)) return config.getPropertyInteger(s);
170
		return 0;
171
	}
172
	
173
	public static int getPropertyInt(String s, int d)
174
	{
175
		if(config.checkProperty(s)) return config.getPropertyInteger(s);
176
		return d;
177
	}
178
	
179
	public static boolean getPropertyBoolean(String s, boolean b)
180
	{
181
		if(config.checkProperty(s)) return config.getPropertyBoolean(s);
182
		return b;
183
	}
184
	
185
	public static String[] getServerNames()
186
	{
187
		String[] serverNames = new String[Settings.servers.length];
188
		
189
		for(int i = 0; i < Settings.servers.length; i++)
190
		{
191
			serverNames[i] = Settings.servers[i].split(", ")[0];
192
		}
193
		return serverNames;
194
	}
195
	
196
	public static String getClientName()
197
	{
198
		if(Settings.useMulticlient)
199
		{
200
			return Frame.main.servers.getSelected().replaceAll(" ", empty).toLowerCase();
201
		}
202
		return "main";
203
	}
204
205
	public static void openURL(String url)
206
	{
207
		try
208
		{
209
			Object o = Class.forName("java.awt.Desktop").getMethod("getDesktop", new Class[0]).invoke(null, new Object[0]);
210
			o.getClass().getMethod("browse", new Class[] { URI.class }).invoke(o, new Object[] { new URI(url)});
211
		} catch (Throwable e) {}
212
	}
213
214
	public static void deleteDirectory(File file)
215
	{
216
		if(!file.exists()) return;
217
		if(file.isDirectory())
218
		{
219
			for(File f : file.listFiles())
220
			deleteDirectory(f);
221
			file.delete();
222
		}
223
		else file.delete();
224
	}
225
	
226
	public static BufferedImage getSkinImage(String name)
227
	{
228
		try
229
		{
230
			BufferedImage img = ImageIO.read(new URL(buildUrl(Settings.skins + name + ".png")));
231
			send("Skin loaded: " + buildUrl(Settings.skins + name + ".png"));
232
			return img;
233
		}
234
		catch(Exception e)
235
		{
236
			sendErr("Skin not found: " + buildUrl(Settings.skins + name + ".png"));
237
			return getLocalImage("skin");
238
		}
239
	}
240
	
241
	public static BufferedImage getCloakImage(String name)
242
	{
243
		try
244
		{
245
			BufferedImage img = ImageIO.read(new URL(buildUrl(Settings.cloaks + name + ".png")));
246
			send("Cloak loaded: " + buildUrl(Settings.cloaks + name + ".png"));
247
			return img;
248
		}
249
		catch(Exception e)
250
		{
251
			sendErr("Cloak not found: " + buildUrl(Settings.cloaks + name + ".png"));
252
			return new BufferedImage(22, 17, 2);
253
		}
254
	}
255
256
	public static String execute(String surl, Object[] params)
257
	{
258
		try
259
		{
260
			send("Openning stream: " + surl);
261
			URL url = new URL(surl);
262
263
			InputStream is = PostUtils.post(url, params);
264
			BufferedReader rd = new BufferedReader(new InputStreamReader(is));
265
		
266
			StringBuffer response = new StringBuffer();
267
			String line;
268
			while((line=rd.readLine())!=null){ response.append(line); }
269
			rd.close();
270
		
271
			String str1 = response.toString().trim();
272
			send("Stream opened for " + surl + " completed, return answer: ");
273
			send("	\"" + str1 + "\"");
274
			return str1;
275
		} catch(Exception e)
276
		{
277
			sendErr("Stream for " + surl + " not ensablished, return null");
278
			return null;
279
		}
280
	}
281
282
	public static Font getFont(String name, float size)
283
	{
284
		try
285
		{
286
			if(fonts.containsKey(name)) return (Font)fonts.get(name).deriveFont(size);
287
			
288
			send("Creating font: " + name);
289
			Font font = Font.createFont(Font.TRUETYPE_FONT, BaseUtils.class.getResourceAsStream("/net/launcher/theme/" + name + ".ttf"));
290
			fonts.put(name, font);
291
			return font.deriveFont(size);
292
		} catch(Exception e)
293
		{
294
			send("Failed create font!");
295
			throwException(e, Frame.main);
296
			return null;
297
		}
298
	}
299
300
	public static void throwException(Exception e, Frame main)
301
	{
302
		e.printStackTrace();
303
		main.panel.removeAll();
304
		main.addFrameComp();
305
		StackTraceElement[] el = e.getStackTrace();
306
		main.panel.tmpString = empty;
307
		main.panel.tmpString += e.toString() + "<:>";
308
		for(StackTraceElement i : el)
309
		{
310
			main.panel.tmpString += "at " + i.toString() + "<:>";
311
		}
312
		main.panel.type = 3;
313
		main.repaint();
314
	}
315
	
316-
	public static int servtype = 2;
316+
	public static int servtype = 3;
317
	public static String[] pollServer(String ip, int port)
318
	{
319
		Socket soc = null;
320
		DataInputStream dis = null;
321
		DataOutputStream dos = null;
322
323
		try
324
		{
325
			soc = new Socket();
326
			soc.setSoTimeout(3000);
327
			soc.setTcpNoDelay(true);
328
			soc.setTrafficClass(18);
329
			soc.connect(new InetSocketAddress(ip, port), 3000);
330
			dis = new DataInputStream(soc.getInputStream());
331
			dos = new DataOutputStream(soc.getOutputStream());
332
			dos.write(254);
333
334
			if (dis.read() != 255)
335
			{
336
				throw new IOException("Bad message");
337
			}
338
			String servc = readString(dis, 256);
339
			servc.substring(3);
340
			if (servc.substring(0,1).equalsIgnoreCase("§") && servc.substring(1,2).equalsIgnoreCase("1"))
341
			{
342
				servtype = 1;
343
				return servc.split("\u0000");
344
345
			}
346
			else 
347
			{
348
				servtype = 2;
349
				return servc.split("§");
350
			}
351
352
		} catch (Exception e)
353
		{
354
			return new String[] { null, null, null };
355
		} finally
356
		{
357
			try { dis.close();  } catch (Exception e) {}
358
			try { dos.close();  } catch (Exception e) {}
359
			try { soc.close();  } catch (Exception e) {}
360
		}
361
	}
362
363
	public static int parseInt(String integer, int def)
364
	{
365
		try
366
		{
367
			return Integer.parseInt(integer.trim());
368
		}
369
		catch (Exception e)
370
		{
371
			return def;
372
		}
373
	}
374
375
	public static String readString(DataInputStream is, int d) throws IOException
376
	{
377
		short word = is.readShort();
378
		if (word > d) throw new IOException();
379
		if (word < 0) throw new IOException();
380
		StringBuilder res = new StringBuilder();
381
		for (int i = 0; i < word; i++)
382
		{
383
			res.append(is.readChar());
384
		}
385
		return res.toString();
386
	}
387
	
388
	public static String genServerStatus(String[] args)
389
	{
390
		if (servtype == 1)
391
		{
392
			if(args[0] == null && args[1] == null && args[2] == null) return "Сервер выключен";
393
			if(args[4] != null && args[5] != null)
394
			{
395
				if(args[4].equals(args[5])) return "Сервер переполнен (Всего слотов: " + args[4] + ")";
396
				return "На сервере " + args[4] + " из " + args[5] + " игроков";
397
			}
398
		}
399
		else
400
		if (servtype == 2)
401
		{
402
			
403
		
404
		if(args[0] == null && args[1] == null && args[2] == null) return "Сервер выключен";
405
		if(args[1] != null && args[2] != null)
406
		{
407
			if(args[1].equals(args[2])) return "Сервер переполнен (Всего слотов: " + args[2] + ")";
408
			return "На сервере " + args[1] + " из " + args[2] + " игроков";
409
		}
410
		}
411
		return "Ошибка получения информации";
412
	}
413
	
414
	public static BufferedImage genServerIcon(String[] args)
415
	{
416
		if(args[0] == null && args[1] == null && args[2] == null) return Files.light.getSubimage(0, 0, Files.light.getHeight(), Files.light.getHeight());
417
		if(args[1] != null && args[2] != null)
418
		{
419
			if(args[1].equals(args[2])) return Files.light.getSubimage(Files.light.getHeight(), 0, Files.light.getHeight(), Files.light.getHeight());
420
			return Files.light.getSubimage(Files.light.getHeight() * 2, 0, Files.light.getHeight(), Files.light.getHeight());
421
		}
422
		return Files.light.getSubimage(Files.light.getHeight() * 3, 0, Files.light.getHeight(), Files.light.getHeight());
423
	}
424
	
425
	public static void restart()
426
	{
427
		send("Restarting launcher...");
428
		try
429
		{
430
			Starter.main(null);
431
		} catch (Exception e)
432
		{
433
			e.printStackTrace();
434
			return;
435
		}
436
		System.exit(0);
437
	}
438
	
439
	public static String unix2hrd(long unix)
440
	{
441
		return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(new Date(unix * 1000));
442
	}
443
	
444
	public void delete(File file)
445
	{
446
		if(!file.exists()) return;
447
		
448
	    if(file.isDirectory())
449
	    {
450
	    	for(File f : file.listFiles()) delete(f);
451
	    	file.delete();
452
	    } else
453
	    {
454
	    	file.delete();
455
	    }
456
	}
457
	
458
	public static boolean checkLink(String l)
459
	{
460
		if(l.contains("#"))
461
		{ 
462
			return false;
463
		}		
464
		return true;
465
	}
466
	
467
	public static boolean existLink(String l)
468
	{
469
		if(l.contains("@"))
470
		{
471
			return true;
472
		}
473
		return false;
474
	}
475
	
476
	public static void patchDir(URLClassLoader cl)
477
	{
478
		if(!Settings.patchDir) return;
479
		
480
		try
481
		{
482
			String mcver = Settings.servers[Frame.main.servers.getSelectedIndex()].split(", ")[3];
483
			
484
			send("Changing client dir...");
485
			send("Client: " + getClientName() + "::" + mcver);
486
			send("Searching in version database...");
487
			
488
			for(int j = 0; j < Settings.mcversions.length; j++)
489
			{
490
				if(mcver.equals(Settings.mcversions[j].split("::")[0]))
491
				{
492
					send("Index #" + j + ", Patching...");
493
		            Field f = cl.loadClass(Settings.mcclass).getDeclaredField(Settings.mcversions[j].split("::")[1]);
494
		            Field.setAccessible(new Field[] { f }, true);
495
		            f.set(null, getMcDir());
496
		            send("File patched: " + Settings.mcclass + "::" + Settings.mcversions[j].split("::")[1]);
497
		            send("Patching succesful, herobrine removed.");
498
		            return;
499
				}
500
			}
501
			sendErr("Error: Client version not correct.");
502
		} catch(Exception e)
503
		{
504
			sendErr("Error: Client field not correct.");
505
		}
506
	}
507
	
508
	public static void updateLauncher() throws Exception
509
	{
510
		send("Launcher updater started...");
511
		send("Downloading file: " + Settings.updateFile);
512
		
513
		InputStream is = new BufferedInputStream(new URL(Settings.updateFile).openStream());
514
		FileOutputStream fos = new FileOutputStream(Starter.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
515
		
516
		int bs = 0;
517
		byte[] buffer = new byte[65536];
518
		MessageDigest md5 = MessageDigest.getInstance("MD5");
519
		while((bs = is.read(buffer, 0, buffer.length)) != -1)
520
		{
521
			fos.write(buffer, 0, bs);
522
			md5.update(buffer, 0, bs);
523
		}
524
		is.close();
525
		fos.close();
526
		BaseUtils.send("File downloaded: " + Settings.updateFile);
527
		Starter.main(null);
528
		System.exit(0);
529
	}
530
}