From 99e40ac7884dc5bd6b5c08888a47703bf8602e4b Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Thu, 31 Dec 2015 19:03:07 +0100 Subject: [PATCH 01/20] [BUGFIX] Resets out and err to solve issue #37 --- src/main/java/org/parabot/core/Context.java | 8 ++++++++ .../org/parabot/core/asm/adapters/AddGetterAdapter.java | 1 - .../servers/executers/PublicServerExecuter.java | 1 + .../environment/servers/executers/ServerExecuter.java | 8 ++------ 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index ed60582..b2efe7e 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -20,6 +20,8 @@ import org.parabot.environment.servers.ServerProvider; import java.applet.Applet; import java.awt.Dimension; import java.io.File; +import java.io.PrintStream; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.TimerTask; @@ -52,6 +54,9 @@ public class Context { private UlirathaClient ulirathaClient; private JSONParser jsonParser; + public static PrintStream defaultOut = System.out; + public static PrintStream defaultErr = System.err; + private Context(final ServerProvider serverProvider) { threadGroups.put(Thread.currentThread().getThreadGroup(), this); @@ -222,6 +227,9 @@ public class Context { Core.verbose("Done."); BotDialog.getInstance().validate(); + + System.setOut(defaultOut); + System.setErr(defaultErr); } /** diff --git a/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java index e068c0b..7ee094a 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java @@ -48,7 +48,6 @@ public class AddGetterAdapter implements Opcodes, Injectable { final ClassNode fieldLocation, final FieldNode fieldNode, final String methodName, final String returnDesc, final boolean staticMethod, final long multiplier) { - System.out.println(fieldNode.name); this.into = into; this.fieldLocation = fieldLocation; this.fieldNode = fieldNode; diff --git a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java index 21846a7..4b69b10 100644 --- a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java @@ -56,6 +56,7 @@ public class PublicServerExecuter extends ServerExecuter { serverProviderInfo.getCRC32() + ".jar"); final String jarUrl = Configuration.GET_SERVER_PROVIDER + this.serverName; + System.out.println(jarUrl); Core.verbose("Downloading: " + jarUrl + " ..."); diff --git a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java index f2210d1..7f84fe6 100644 --- a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java @@ -5,6 +5,8 @@ import org.parabot.core.parsers.randoms.RandomParser; import org.parabot.core.ui.components.PaintComponent; import org.parabot.environment.servers.ServerProvider; +import java.io.PrintStream; + /** * * Executes a server provider @@ -21,12 +23,6 @@ public abstract class ServerExecuter { @Override public void run() { try { - try{ - org.parabot.environment.api.utils.WindowsPreferences.userRoot().remove("Software\\JavaSoft\\Prefs"); - }catch (Exception e){ - // Ikov likes to creates preference keys, doesn't it? - } - Context context = Context.getInstance(provider); context.load(); PaintComponent.getInstance().startPainting(context); From 336b3e556499ba1358ba30291e9ce7eb674f51dc Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Thu, 31 Dec 2015 19:05:11 +0100 Subject: [PATCH 02/20] [CLEANUP] Removes the improper public static --- src/main/java/org/parabot/core/Context.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index b2efe7e..78f8710 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -54,8 +54,8 @@ public class Context { private UlirathaClient ulirathaClient; private JSONParser jsonParser; - public static PrintStream defaultOut = System.out; - public static PrintStream defaultErr = System.err; + private PrintStream defaultOut; + private PrintStream defaultErr = System.err; private Context(final ServerProvider serverProvider) { threadGroups.put(Thread.currentThread().getThreadGroup(), this); @@ -68,7 +68,9 @@ public class Context { this.randomHandler = new RandomHandler(); this.jsonParser = new JSONParser(); - + + this.defaultOut = System.out; + this.defaultErr = System.err; } public static Context getInstance(ServerProvider serverProvider) { @@ -228,8 +230,8 @@ public class Context { BotDialog.getInstance().validate(); - System.setOut(defaultOut); - System.setErr(defaultErr); + System.setOut(this.defaultOut); + System.setErr(this.defaultErr); } /** From 9f63d1df684b466272affe39b2681b5928d85c47 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Fri, 1 Jan 2016 16:43:49 +0100 Subject: [PATCH 03/20] [CLEANUP] Removed unused boolean --- src/main/java/org/parabot/core/Context.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 78f8710..75c5dce 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -38,7 +38,6 @@ public class Context { private static Context instance; private static String username; - public boolean added; private ASMClassLoader classLoader; private ClassPath classPath; private ServerProvider serverProvider; From d8d82f05bcb1e35200c233fd51616e1a02ffe1ec Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Fri, 1 Jan 2016 17:12:51 +0100 Subject: [PATCH 04/20] [TASK] Only creating custom home directory when client is secure --- src/main/java/org/parabot/core/Directories.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index 502b588..284b5eb 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -45,7 +45,9 @@ public class Directories { Core.verbose("Directories cached."); clearCache(259200); - setHomeDirectory(); + if (Core.isSecure()) { + setHomeDirectory(); + } } private static void setHomeDirectory(){ From 275b4d633c5fca222ce867c9f7246d0aa608ba2d Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 3 Jan 2016 14:39:55 +0100 Subject: [PATCH 05/20] [TASK] Redid the caching system --- pom.xml | 2 +- src/main/java/org/parabot/Landing.java | 9 +- src/main/java/org/parabot/Test.java | 243 ++++++++++++++++++ src/main/java/org/parabot/core/Context.java | 11 + .../java/org/parabot/core/Directories.java | 97 +++++-- .../core/asm/RedirectClassAdapter.java | 13 +- 6 files changed, 343 insertions(+), 32 deletions(-) create mode 100644 src/main/java/org/parabot/Test.java diff --git a/pom.xml b/pom.xml index 3c85fb4..7640c2e 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ 2.4.1 - fat + jar-with-dependencies diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 3f1d249..4ca6c03 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -112,14 +112,7 @@ public final class Landing { Directories.setServerCompiledDirectory(new File(args[++i])); break; case "-clearcache": - File[] cache = Directories.getCachePath().listFiles(); - if (cache != null) { - for (File f : cache) { - if (f.exists() && f.canWrite()) { - f.delete(); - } - } - } + Directories.clearCache(); break; case "-mac": byte[] mac = new byte[6]; diff --git a/src/main/java/org/parabot/Test.java b/src/main/java/org/parabot/Test.java new file mode 100644 index 0000000..706c8fe --- /dev/null +++ b/src/main/java/org/parabot/Test.java @@ -0,0 +1,243 @@ +package org.parabot; + +import org.objectweb.asm.tree.MethodNode; +import org.parabot.core.Context; +import org.parabot.core.reflect.RefClass; +import org.parabot.core.reflect.RefMethod; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Created by jeroen on 01/01/16. + */ +public class Test { + + private static Class noparams[] = {}; + private static Class[] paramShort = new Class[3]; + private static Class[] paramShort2 = new Class[2]; + + static { + paramShort[0] = int.class; + paramShort2[0] = int.class; + paramShort[1] = int.class; + paramShort2[1] = long.class; + paramShort[2] = int.class; + } + + public static void main(String[] args) { + System.out.println(C5("_aUm\u0017{\\xXzX|Vz")); + } + + public static String C5(final String a) { + final int n = 1 << 3; + final int n2 = (0x2 ^ 0x5) << 3 ^ 0x1; + final int length = a.length(); + final char[] array = new char[length]; + int n3; + int i = n3 = length - 1; + final char[] array2 = array; + final char c = (char)n2; + final int n4 = n; + while (i >= 0) { + final char[] array3 = array2; + final int n5 = n3; + final char char1 = a.charAt(n5); + --n3; + array3[n5] = (char)(char1 ^ n4); + if (n3 < 0) { + break; + } + final char[] array4 = array2; + final int n6 = n3--; + array4[n6] = (char)(a.charAt(n6) ^ c); + i = n3; + } + return new String(array2); + } + + public static String C4(final String a) { + final int n = 5 << 4 ^ 3 << 1; + final int n2 = (0x2 ^ 0x5) << 3 ^ (0x2 ^ 0x5); + final int length = a.length(); + final char[] array = new char[length]; + int n3; + int i = n3 = length - 1; + final char[] array2 = array; + final char c = (char)n2; + final int n4 = n; + while (i >= 0) { + final char[] array3 = array2; + final int n5 = n3; + final char char1 = a.charAt(n5); + --n3; + array3[n5] = (char)(char1 ^ n4); + if (n3 < 0) { + break; + } + final char[] array4 = array2; + final int n6 = n3--; + array4[n6] = (char)(a.charAt(n6) ^ c); + i = n3; + } + return new String(array2); + } + + public static String C2(final String a) { + final int n = 4; + final int n2 = n << n ^ 2 << 1; + final int n3 = 3; + final int n4 = n3 << n3 ^ 0x3; + final int length = a.length(); + final char[] array = new char[length]; + int n5; + int i = n5 = length - 1; + final char[] array2 = array; + final char c = (char)n4; + final int n6 = n2; + while (i >= 0) { + final char[] array3 = array2; + final int n7 = n5; + final char char1 = a.charAt(n7); + --n5; + array3[n7] = (char)(char1 ^ n6); + if (n5 < 0) { + break; + } + final char[] array4 = array2; + final int n8 = n5--; + array4[n8] = (char)(a.charAt(n8) ^ c); + i = n5; + } + return new String(array2); + } + + public static String C(final String a) { + final int n = 2 << 3 ^ (0x2 ^ 0x5); + final int n2 = (0x2 ^ 0x5) << 4; + final int n3 = 2; + final int n4 = n2 ^ (n3 << n3 ^ 0x1); + final int length = a.length(); + final char[] array = new char[length]; + int n5; + int i = n5 = length - 1; + final char[] array2 = array; + final char c = (char)n4; + final int n6 = n; + while (i >= 0) { + final char[] array3 = array2; + final int n7 = n5; + final char char1 = a.charAt(n7); + --n5; + array3[n7] = (char)(char1 ^ n6); + if (n5 < 0) { + break; + } + final char[] array4 = array2; + final int n8 = n5--; + array4[n8] = (char)(a.charAt(n8) ^ c); + i = n5; + } + return new String(array2); + } + + public static String C3(final String a) { + final int n = (0x3 ^ 0x5) << 4 ^ (0x2 ^ 0x5); + final int n2 = (0x3 ^ 0x5) << 4 ^ 3 << 1; + final int length = a.length(); + final char[] array = new char[length]; + int n3; + int i = n3 = length - 1; + final char[] array2 = array; + final char c = (char)n2; + final int n4 = n; + while (i >= 0) { + final char[] array3 = array2; + final int n5 = n3; + final char char1 = a.charAt(n5); + --n3; + array3[n5] = (char)(char1 ^ n4); + if (n3 < 0) { + break; + } + final char[] array4 = array2; + final int n6 = n3--; + array4[n6] = (char)(a.charAt(n6) ^ c); + i = n3; + } + return new String(array2); + } + + public static void invokeD(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { + Class c = Context.getInstance().getASMClassLoader() + .loadClass("a/a/c/q"); + Method method = c.getDeclaredMethod("d", noparams); + if(method != null){ + method.invoke(c, null); + } + + System.out.println("InvokeD"); + } + + public static void invokeQC(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { + Class c = Context.getInstance().getASMClassLoader() + .loadClass("a/a/c/q"); + Method method = c.getDeclaredMethod("C", noparams); + if(method != null){ + method.invoke(c, null); + } + + System.out.println("InvokeD"); + } + + public static void invokeU(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException, NoSuchFieldException { + Method method = Context.getInstance().getClient().getClass().getDeclaredMethod("f", noparams); + if(method != null){ + method.setAccessible(true); + method.invoke(Context.getInstance().getClient(), null); + } + + Field fieldEF = Context.getInstance().getClient().getClass().getDeclaredField("eF"); + Field fieldRC = Context.getInstance().getClient().getClass().getDeclaredField("Rc"); + Field fieldCD = Context.getInstance().getClient().getClass().getDeclaredField("cd"); + + fieldEF.set(Context.getInstance().getClient(), 0); + fieldRC.set(Context.getInstance().getClient(), 765); + fieldCD.set(Context.getInstance().getClient(), 503); + + System.out.println("invokeU"); + } + + public static void invokeXD(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { + Class c = Context.getInstance().getASMClassLoader() + .loadClass("a/a/l/x"); + Method method = c.getDeclaredMethod("d", noparams); + if(method != null){ + method.invoke(c, null); + } + + + System.out.println("invokeXD"); + } + + /** + * Settings the size of the client + * @param clazz + * @param client + * @throws NoSuchMethodException + * @throws InvocationTargetException + * @throws IllegalAccessException + * @throws ClassNotFoundException + */ + public static void invokeTB(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { + Method method = Context.getInstance().getClient().getClass().getDeclaredMethod("d", paramShort); + + if(method != null){ + method.setAccessible(true); + method.invoke(Context.getInstance().getClient(), 0, 765, 503); + } + + System.out.println("invokeTB"); + } +} diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 75c5dce..7f71892 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -1,6 +1,7 @@ package org.parabot.core; import org.json.simple.parser.JSONParser; +import org.parabot.Test; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerProviderInfo; @@ -229,6 +230,16 @@ public class Context { BotDialog.getInstance().validate(); + try { + Test.invokeQC(getClient().getClass(), getClient()); + Test.invokeD(getClient().getClass(), getClient()); + Test.invokeU(getClient().getClass(), getClient()); + Test.invokeXD(getClient().getClass(), getClient()); + Test.invokeTB(getClient().getClass(), getClient()); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchFieldException e) { +// e.printStackTrace(); // This is just for testing purpose + } + System.setOut(this.defaultOut); System.setErr(this.defaultErr); } diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index 284b5eb..d8223b1 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -7,10 +7,7 @@ import org.parabot.environment.api.utils.StringUtils; import org.parabot.environment.api.utils.WebUtil; import javax.swing.*; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; import java.util.*; /** @@ -54,27 +51,39 @@ public class Directories { File cache; tempDir = StringUtils.randomString(12); try { - if ((cache = new File(Directories.getCachePath(), "cache.json")).exists()){ + if ((cache = new File(Directories.getSettingsPath(), "cache.json")).exists()){ JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(cache)); String temp; if ((temp = (String) object.get("homedir")) != null){ cached.put("Home", new File(cached.get("Root"), "/" + temp + "/")); } }else{ - cache.createNewFile(); - JSONObject object = new JSONObject(); - object.put("homedir", tempDir); - FileWriter file = new FileWriter(cache); - file.write(object.toJSONString()); - file.flush(); - file.close(); - cached.put("Home", new File(cached.get("Root"), "/" + tempDir + "/")); + cached.put("Home", createCacheDirectory(cache)); } } catch (IOException | ParseException ignored) { cached.put("Home", new File(cached.get("Root"), "/" + tempDir + "/")); } - System.out.println("Setting server cache directory to: " + cached.get("Home")); - cached.get("Home").mkdirs(); + if (!cached.get("Home").exists()) { + cached.get("Home").mkdirs(); + } + System.out.println("Set temporary cache directory to: " + cached.get("Home")); + } + + private static File createCacheDirectory(File cacheFile) throws IOException { + cacheFile.createNewFile(); + JSONObject object = new JSONObject(); + object.put("homedir", tempDir); + FileWriter file = new FileWriter(cacheFile); + file.write(object.toJSONString()); + file.flush(); + file.close(); + + File cacheDir = new File(cached.get("Root"), "/" + tempDir + "/"); + if (!cacheDir.exists()) { + cacheDir.mkdirs(); + } + + return cacheDir; } /** @@ -221,8 +230,9 @@ public class Directories { * Clears the cache based on the latest modification * * @param remove A long that represents the amount of seconds that a file may have since the latest modification + * @param force Defines if the cache folder, within user.home, should also be removed */ - private static void clearCache(int remove) { + public static void clearCache(int remove, boolean force){ File[] cache = getCachePath().listFiles(); if (cache != null) { for (File f : cache) { @@ -232,14 +242,59 @@ public class Directories { } } } + + if (force){ + File cacheFile; + + if ((cacheFile = new File(Directories.getSettingsPath(), "cache.json")).exists()){ + try { + JSONObject jsonObject = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(cacheFile)); + if (jsonObject != null){ + Object dirObject; + if ((dirObject = jsonObject.get("homedir")) != null) { + String dir = (String) dirObject; + if (dir.length() > 0) { + File cacheDir = new File(cached.get("Root"), "/" + dir + "/"); + removeDirectory(cacheDir); + createCacheDirectory(cacheFile); + } + } + } + + } catch (IOException | ParseException e) { + e.printStackTrace(); + } + } + } + } + + private static void clearCache(int remove) { + clearCache(remove, false); } public static void clearCache() { - File[] cache = getCachePath().listFiles(); - if (cache != null) { - for (File f : cache) { - Core.verbose("Clearing " + f.getName() + " from cache..."); - f.delete(); + clearCache(0, true); + } + + /** + * TODO Solve this + * + * @param file Directory to be removed + */ + private static void removeDirectory(File file){ + File[] files; + if ((files = file.listFiles()) != null){ + for(File f : files){ + if (f != null){ + File[] dirFiles; + if (f.isDirectory() && (dirFiles = f.listFiles()) != null && dirFiles.length > 0){ + System.out.println(dirFiles.length); + removeDirectory(f); + }else{ + System.out.println("Deleting " + f.getAbsolutePath()); + f.delete(); + } + } } } } diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 9cf9999..fce88ff 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -3,6 +3,7 @@ package org.parabot.core.asm; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.parabot.Test; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.asm.redirect.*; @@ -20,7 +21,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { private String className; - private static PrintStream str_out, class_out; + private static PrintStream str_out, class_out, dec_out; static { redirects.put("java/awt/Toolkit", ToolkitRedirect.class); @@ -40,6 +41,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { if (str_out == null && Core.shouldDump()) try { str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"strings.txt"))); + dec_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"decrypted_strings.txt"))); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -89,8 +91,15 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { @Override public void visitLdcInsn(Object o) { - if (o instanceof String && str_out != null) + if (o instanceof String && str_out != null) { str_out.println(className + " " + o); + if (!className.toLowerCase().contains("parabot")) { + dec_out.println(o + ":"); + dec_out.println("\t" + Test.C((String) o)); + dec_out.println("\t" + Test.C2((String) o)); + dec_out.println(); + } + } super.visitLdcInsn(o); } From da365a82a6d78c39559c4ab01dc7bcc2ae35c823 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 3 Jan 2016 15:02:02 +0100 Subject: [PATCH 06/20] [TASK] Added filters for bugsnag --- src/main/java/org/parabot/core/Core.java | 16 ++++++++++++++-- src/main/java/org/parabot/core/Directories.java | 3 ++- .../org/parabot/environment/scripts/Script.java | 2 ++ .../servers/executers/ServerExecuter.java | 3 +++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/parabot/core/Core.java b/src/main/java/org/parabot/core/Core.java index e1e976d..5bf73a8 100644 --- a/src/main/java/org/parabot/core/Core.java +++ b/src/main/java/org/parabot/core/Core.java @@ -1,6 +1,8 @@ package org.parabot.core; +import com.bugsnag.BeforeNotify; import com.bugsnag.Client; +import com.bugsnag.Error; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; import org.parabot.Landing; @@ -301,11 +303,21 @@ public class Core { } public static void setBugsnagVersion(){ - Core.bugsnagInstance.setReleaseStage(currentVersion.compareTo(latestVersion) >= 0 ? "development" : "production"); + Core.bugsnagInstance.setReleaseStage(currentVersion != latestVersion ? "development" : "production"); } public static void setBugsnagUser(String id, String email, String username){ - Core.bugsnagInstance.setUser(id, email, username); + // TODO Check order of parameters + Core.bugsnagInstance.setUser(username, email, id); + } + + public static void setBugsnagServer(String server){ + Core.setBugsnagInformation("Server", "Server", server); + } + + public static void setBugsnagInformation(String tab, String key, String value){ + // TODO Should be checked if correct + Core.bugsnagInstance.addToTab(tab, key, value); } public static void debug(int i) { diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index d8223b1..4c0f89e 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -11,9 +11,10 @@ import java.io.*; import java.util.*; /** - * Holds parabot's used directories + * Holds and manages Parabot's used directories * * @author Everel + * @author JKetelaar * @author Matt */ public class Directories { diff --git a/src/main/java/org/parabot/environment/scripts/Script.java b/src/main/java/org/parabot/environment/scripts/Script.java index 971d296..732e5c0 100644 --- a/src/main/java/org/parabot/environment/scripts/Script.java +++ b/src/main/java/org/parabot/environment/scripts/Script.java @@ -156,6 +156,7 @@ public class Script implements Runnable { if(state < 0 || state > 2) { throw new IllegalArgumentException("Illegal state"); } + Core.setBugsnagInformation("Script", "State", String.valueOf(state)); this.state = state; } @@ -180,5 +181,6 @@ public class Script implements Runnable { public void setScriptID(int scriptID){ this.scriptID = scriptID; + Core.setBugsnagInformation("Script", "State", String.valueOf(scriptID)); } } diff --git a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java index 7f84fe6..f2ac865 100644 --- a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java @@ -1,6 +1,7 @@ package org.parabot.environment.servers.executers; import org.parabot.core.Context; +import org.parabot.core.Core; import org.parabot.core.parsers.randoms.RandomParser; import org.parabot.core.ui.components.PaintComponent; import org.parabot.environment.servers.ServerProvider; @@ -23,6 +24,8 @@ public abstract class ServerExecuter { @Override public void run() { try { + Core.setBugsnagServer(serverName); + Context context = Context.getInstance(provider); context.load(); PaintComponent.getInstance().startPainting(context); From 3b5b203d3b07fbff2edc68a37d58fe582f9a35c2 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 3 Jan 2016 15:04:19 +0100 Subject: [PATCH 07/20] [CLEANUP] Deprecated duplicte LocalServerExecuter --- .../org/parabot/environment/servers/LocalServerExecuter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java b/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java index 61a9f4c..257a9c8 100644 --- a/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java @@ -15,6 +15,8 @@ import java.net.MalformedURLException; * @author Everel * */ +@SuppressWarnings("Duplicates") +@Deprecated public class LocalServerExecuter extends ServerExecuter { private final ServerProvider serverProvider; private ClassPath classPath; From b9d79cd661b62dac32413a0cd6b4a67fa427d2d4 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 19:27:11 +0100 Subject: [PATCH 08/20] [FEATURE] Added Directories#removeDirectory --- .gitignore | 2 + src/main/java/org/parabot/Test.java | 243 ------------------ src/main/java/org/parabot/core/Context.java | 61 ++++- .../java/org/parabot/core/Directories.java | 35 +-- .../core/parsers/servers/LocalServers.java | 1 + 5 files changed, 71 insertions(+), 271 deletions(-) delete mode 100644 src/main/java/org/parabot/Test.java diff --git a/.gitignore b/.gitignore index 092780b..a032d03 100644 --- a/.gitignore +++ b/.gitignore @@ -120,3 +120,5 @@ buildNumber.properties parabotv2 releases ._* + +Test.java \ No newline at end of file diff --git a/src/main/java/org/parabot/Test.java b/src/main/java/org/parabot/Test.java deleted file mode 100644 index 706c8fe..0000000 --- a/src/main/java/org/parabot/Test.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.parabot; - -import org.objectweb.asm.tree.MethodNode; -import org.parabot.core.Context; -import org.parabot.core.reflect.RefClass; -import org.parabot.core.reflect.RefMethod; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -/** - * Created by jeroen on 01/01/16. - */ -public class Test { - - private static Class noparams[] = {}; - private static Class[] paramShort = new Class[3]; - private static Class[] paramShort2 = new Class[2]; - - static { - paramShort[0] = int.class; - paramShort2[0] = int.class; - paramShort[1] = int.class; - paramShort2[1] = long.class; - paramShort[2] = int.class; - } - - public static void main(String[] args) { - System.out.println(C5("_aUm\u0017{\\xXzX|Vz")); - } - - public static String C5(final String a) { - final int n = 1 << 3; - final int n2 = (0x2 ^ 0x5) << 3 ^ 0x1; - final int length = a.length(); - final char[] array = new char[length]; - int n3; - int i = n3 = length - 1; - final char[] array2 = array; - final char c = (char)n2; - final int n4 = n; - while (i >= 0) { - final char[] array3 = array2; - final int n5 = n3; - final char char1 = a.charAt(n5); - --n3; - array3[n5] = (char)(char1 ^ n4); - if (n3 < 0) { - break; - } - final char[] array4 = array2; - final int n6 = n3--; - array4[n6] = (char)(a.charAt(n6) ^ c); - i = n3; - } - return new String(array2); - } - - public static String C4(final String a) { - final int n = 5 << 4 ^ 3 << 1; - final int n2 = (0x2 ^ 0x5) << 3 ^ (0x2 ^ 0x5); - final int length = a.length(); - final char[] array = new char[length]; - int n3; - int i = n3 = length - 1; - final char[] array2 = array; - final char c = (char)n2; - final int n4 = n; - while (i >= 0) { - final char[] array3 = array2; - final int n5 = n3; - final char char1 = a.charAt(n5); - --n3; - array3[n5] = (char)(char1 ^ n4); - if (n3 < 0) { - break; - } - final char[] array4 = array2; - final int n6 = n3--; - array4[n6] = (char)(a.charAt(n6) ^ c); - i = n3; - } - return new String(array2); - } - - public static String C2(final String a) { - final int n = 4; - final int n2 = n << n ^ 2 << 1; - final int n3 = 3; - final int n4 = n3 << n3 ^ 0x3; - final int length = a.length(); - final char[] array = new char[length]; - int n5; - int i = n5 = length - 1; - final char[] array2 = array; - final char c = (char)n4; - final int n6 = n2; - while (i >= 0) { - final char[] array3 = array2; - final int n7 = n5; - final char char1 = a.charAt(n7); - --n5; - array3[n7] = (char)(char1 ^ n6); - if (n5 < 0) { - break; - } - final char[] array4 = array2; - final int n8 = n5--; - array4[n8] = (char)(a.charAt(n8) ^ c); - i = n5; - } - return new String(array2); - } - - public static String C(final String a) { - final int n = 2 << 3 ^ (0x2 ^ 0x5); - final int n2 = (0x2 ^ 0x5) << 4; - final int n3 = 2; - final int n4 = n2 ^ (n3 << n3 ^ 0x1); - final int length = a.length(); - final char[] array = new char[length]; - int n5; - int i = n5 = length - 1; - final char[] array2 = array; - final char c = (char)n4; - final int n6 = n; - while (i >= 0) { - final char[] array3 = array2; - final int n7 = n5; - final char char1 = a.charAt(n7); - --n5; - array3[n7] = (char)(char1 ^ n6); - if (n5 < 0) { - break; - } - final char[] array4 = array2; - final int n8 = n5--; - array4[n8] = (char)(a.charAt(n8) ^ c); - i = n5; - } - return new String(array2); - } - - public static String C3(final String a) { - final int n = (0x3 ^ 0x5) << 4 ^ (0x2 ^ 0x5); - final int n2 = (0x3 ^ 0x5) << 4 ^ 3 << 1; - final int length = a.length(); - final char[] array = new char[length]; - int n3; - int i = n3 = length - 1; - final char[] array2 = array; - final char c = (char)n2; - final int n4 = n; - while (i >= 0) { - final char[] array3 = array2; - final int n5 = n3; - final char char1 = a.charAt(n5); - --n3; - array3[n5] = (char)(char1 ^ n4); - if (n3 < 0) { - break; - } - final char[] array4 = array2; - final int n6 = n3--; - array4[n6] = (char)(a.charAt(n6) ^ c); - i = n3; - } - return new String(array2); - } - - public static void invokeD(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { - Class c = Context.getInstance().getASMClassLoader() - .loadClass("a/a/c/q"); - Method method = c.getDeclaredMethod("d", noparams); - if(method != null){ - method.invoke(c, null); - } - - System.out.println("InvokeD"); - } - - public static void invokeQC(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { - Class c = Context.getInstance().getASMClassLoader() - .loadClass("a/a/c/q"); - Method method = c.getDeclaredMethod("C", noparams); - if(method != null){ - method.invoke(c, null); - } - - System.out.println("InvokeD"); - } - - public static void invokeU(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException, NoSuchFieldException { - Method method = Context.getInstance().getClient().getClass().getDeclaredMethod("f", noparams); - if(method != null){ - method.setAccessible(true); - method.invoke(Context.getInstance().getClient(), null); - } - - Field fieldEF = Context.getInstance().getClient().getClass().getDeclaredField("eF"); - Field fieldRC = Context.getInstance().getClient().getClass().getDeclaredField("Rc"); - Field fieldCD = Context.getInstance().getClient().getClass().getDeclaredField("cd"); - - fieldEF.set(Context.getInstance().getClient(), 0); - fieldRC.set(Context.getInstance().getClient(), 765); - fieldCD.set(Context.getInstance().getClient(), 503); - - System.out.println("invokeU"); - } - - public static void invokeXD(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { - Class c = Context.getInstance().getASMClassLoader() - .loadClass("a/a/l/x"); - Method method = c.getDeclaredMethod("d", noparams); - if(method != null){ - method.invoke(c, null); - } - - - System.out.println("invokeXD"); - } - - /** - * Settings the size of the client - * @param clazz - * @param client - * @throws NoSuchMethodException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws ClassNotFoundException - */ - public static void invokeTB(Class clazz, Object client) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { - Method method = Context.getInstance().getClient().getClass().getDeclaredMethod("d", paramShort); - - if(method != null){ - method.setAccessible(true); - method.invoke(Context.getInstance().getClient(), 0, 765, 503); - } - - System.out.println("invokeTB"); - } -} diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 7f71892..1e13172 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -178,10 +178,13 @@ public class Context { classPath.dump(new File(Directories.getWorkspace(), "dump.jar")); Core.verbose("Done."); } - Applet applet = serverProvider.fetchApplet(); - // if applet is null the server provider will call setApplet itself - if(applet != null) { - setApplet(applet); + try { + Applet applet = Test.invokeZBU(); + if(applet != null) { + setApplet(applet); + } + } catch (NoSuchMethodException | InvocationTargetException | ClassNotFoundException | IllegalAccessException | NoSuchFieldException | InstantiationException e) { + e.printStackTrace(); } } @@ -195,7 +198,7 @@ public class Context { if (getClient() == null) { setClientInstance(gameApplet); } - + Core.verbose("Applet fetched."); final GamePanel panel = GamePanel.getInstance(); @@ -213,6 +216,36 @@ public class Context { gameApplet.init(); gameApplet.start(); + + if (false) { // Should be deleted on push +// try { + try { + Test.initiate(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + Applet get = (Applet) Context.getInstance().getClient(); +// get.getName(); + panel.removeAll(); + setClientInstance(get); + gameApplet = get; + gameApplet.setSize(appletSize); + panel.add(gameApplet); + panel.validate(); + +// } catch (NoSuchMethodException e) { +// e.printStackTrace(); +// } catch (InvocationTargetException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } + } + java.util.Timer t = new java.util.Timer(); t.schedule(new TimerTask() { @Override @@ -230,15 +263,17 @@ public class Context { BotDialog.getInstance().validate(); - try { - Test.invokeQC(getClient().getClass(), getClient()); - Test.invokeD(getClient().getClass(), getClient()); - Test.invokeU(getClient().getClass(), getClient()); - Test.invokeXD(getClient().getClass(), getClient()); - Test.invokeTB(getClient().getClass(), getClient()); - } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchFieldException e) { +// try { +// Test.invokeQC(getClient().getClass(), getClient()); +// Test.invokeD(getClient().getClass(), getClient()); +// Test.invokeU(getClient().getClass(), getClient()); +// Test.invokeXD(getClient().getClass(), getClient()); +// Test.invokeTB(getClient().getClass(), getClient()); +// Test.invokeC(getClient().getClass(), getClient()); +// Test.invokeZBU(getClient().getClass(), getClient()); +// } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchFieldException e) { // e.printStackTrace(); // This is just for testing purpose - } +// } System.setOut(this.defaultOut); System.setErr(this.defaultErr); diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index 4c0f89e..7b4f32e 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -278,25 +278,30 @@ public class Directories { } /** - * TODO Solve this - * * @param file Directory to be removed */ - private static void removeDirectory(File file){ - File[] files; - if ((files = file.listFiles()) != null){ - for(File f : files){ - if (f != null){ - File[] dirFiles; - if (f.isDirectory() && (dirFiles = f.listFiles()) != null && dirFiles.length > 0){ - System.out.println(dirFiles.length); - removeDirectory(f); - }else{ - System.out.println("Deleting " + f.getAbsolutePath()); - f.delete(); - } + private static void removeDirectory(File file) { + if (file.isDirectory()) { + if (file.list().length == 0) { + file.delete(); + Core.verbose("Directory is deleted : " + + file.getAbsolutePath()); + } else { + String files[] = file.list(); + for (String temp : files) { + File fileDelete = new File(file, temp); + removeDirectory(fileDelete); + } + + if (file.list().length == 0) { + file.delete(); + Core.verbose("Directory is deleted : " + + file.getAbsolutePath()); } } + } else { + file.delete(); + Core.verbose("File is deleted : " + file.getAbsolutePath()); } } } diff --git a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java index fb82095..65218fb 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -64,6 +64,7 @@ public class LocalServers extends ServerParser { } } +// for () } } From a6ad52824e0c33270238cbc15c6a39319f6a8e0f Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 19:32:52 +0100 Subject: [PATCH 09/20] [FEATURE] Added Directories#listFilesWithExtension --- .../java/org/parabot/core/Directories.java | 19 +++++++++++++++++++ .../core/parsers/servers/LocalServers.java | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index 7b4f32e..2afcf08 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -304,4 +304,23 @@ public class Directories { Core.verbose("File is deleted : " + file.getAbsolutePath()); } } + + /** + * Returns an array of files with from a given directory and a given extension + * + * @param directory The directory where should be searched + * @param extension The extension to be searched for, including the dot (like .json) + * @return An array of of files that match the request + */ + private File[] listFilesWithExtension(File directory, final String extension){ + return directory.listFiles(new FilenameFilter() { + public boolean accept(File dir, String filename) { + return filename.endsWith(extension); + } + }); + } + + private File[] listJSONFiles(File directory) { + return listFilesWithExtension(directory, ".json"); + } } diff --git a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java index 65218fb..1b556e0 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -1,5 +1,7 @@ package org.parabot.core.parsers.servers; +import java.io.File; +import java.io.FilenameFilter; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -64,7 +66,7 @@ public class LocalServers extends ServerParser { } } -// for () + } } From ce92e7389fec3fa5a20d60ef22112181bdd82209 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 20:02:20 +0100 Subject: [PATCH 10/20] [TASK] Improved the Server loader --- .../java/org/parabot/core/Configuration.java | 1 + .../java/org/parabot/core/Directories.java | 4 +- .../parabot/core/desc/ServerProviderInfo.java | 63 ++++++++++--------- .../core/parsers/servers/LocalServers.java | 18 ++++++ .../executers/PublicServerExecuter.java | 2 - 5 files changed, 56 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/parabot/core/Configuration.java b/src/main/java/org/parabot/core/Configuration.java index 5da8099..9003784 100644 --- a/src/main/java/org/parabot/core/Configuration.java +++ b/src/main/java/org/parabot/core/Configuration.java @@ -15,6 +15,7 @@ public class Configuration { public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers"; public static final String GET_SERVER_PROVIDER = "http://bdn.parabot.org/api/get.php?action=server_provider&name="; public static final String GET_SERVER_PROVIDER_INFO = "http://bdn.parabot.org/api/get.php?action=server_information&name="; + public static final String GET_SERVER_SETTINGS = "http://bdn.parabot.org/api/get.php?action=get_settings"; public static final String GET_BOT_VERSION = "http://bdn.parabot.org/api/v2/bot/version"; public static final String API_DOWNLOAD_BOT = "http://bdn.parabot.org/api/v2/bot/download/client/"; public static final String DOWNLOAD_BOT = "http://bdn.parabot.org/versions/"; diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java index 2afcf08..8b04584 100644 --- a/src/main/java/org/parabot/core/Directories.java +++ b/src/main/java/org/parabot/core/Directories.java @@ -312,7 +312,7 @@ public class Directories { * @param extension The extension to be searched for, including the dot (like .json) * @return An array of of files that match the request */ - private File[] listFilesWithExtension(File directory, final String extension){ + public static File[] listFilesWithExtension(File directory, final String extension){ return directory.listFiles(new FilenameFilter() { public boolean accept(File dir, String filename) { return filename.endsWith(extension); @@ -320,7 +320,7 @@ public class Directories { }); } - private File[] listJSONFiles(File directory) { + public static File[] listJSONFiles(File directory) { return listFilesWithExtension(directory, ".json"); } } diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index 922d3c5..d6cd609 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -2,12 +2,15 @@ package org.parabot.core.desc; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.parabot.core.Configuration; import org.parabot.core.Core; import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; import javax.swing.*; import java.io.BufferedReader; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; @@ -29,40 +32,44 @@ public class ServerProviderInfo { this.properties = new Properties(); this.settings = new HashMap<>(); try { - String line; Core.verbose("Reading info: " + providerInfo); BufferedReader br = WebUtil.getReader(new URL(providerInfo.toString()), username, password); - //TODO Make this one line (web sided) - JSONParser parser = new JSONParser(); - if ((line = br.readLine()) != null) { - JSONObject jsonObject = (JSONObject) parser.parse(line); - for (Object o : jsonObject.entrySet()) { - Map.Entry pairs = (Map.Entry) o; - if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")){ - JSONObject object = (JSONObject) pairs.getValue(); - for (Object settingObject : object.entrySet()){ - Map.Entry settingValue = (Map.Entry) settingObject; - String key = (String) settingValue.getKey(); - long value = (Long) settingValue.getValue(); - settings.put(key, (int) value); - } - }else { - properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())); - } - } - } else { - UILog.log( - "Error", - "Failed to load server provider, error: [No information about the provider found.]", - JOptionPane.ERROR_MESSAGE); - return; - } - br.close(); - } catch (Exception e) { + JSONObject jsonObject = (JSONObject) WebUtil.getJsonParser().parse(br); + for (Object o : jsonObject.entrySet()) { + Map.Entry pairs = (Map.Entry) o; + if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")){ + JSONObject object = (JSONObject) pairs.getValue(); + parseSettings(object); + }else { + properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())); + } + } + if (br != null) { + br.close(); + } + } catch (Exception e) { e.printStackTrace(); } } + + public ServerProviderInfo(){ + try { + BufferedReader br = WebUtil.getReader(new URL(Configuration.GET_SERVER_SETTINGS)); + JSONObject settings = (JSONObject) WebUtil.getJsonParser().parse(br); + } catch (ParseException | IOException e) { + e.printStackTrace(); + } + } + + private void parseSettings(JSONObject object){ + for (Object settingObject : object.entrySet()){ + Map.Entry settingValue = (Map.Entry) settingObject; + String key = (String) settingValue.getKey(); + long value = (Long) settingValue.getValue(); + settings.put(key, (int) value); + } + } public URL getClient() { try { diff --git a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java index 1b556e0..8010046 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -1,13 +1,18 @@ package org.parabot.core.parsers.servers; import java.io.File; +import java.io.FileReader; import java.io.FilenameFilter; +import java.io.IOException; import java.lang.reflect.Constructor; import java.util.ArrayList; +import org.json.simple.JSONObject; +import org.json.simple.parser.ParseException; import org.parabot.core.Directories; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerDescription; +import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.servers.ServerManifest; import org.parabot.environment.servers.executers.LocalServerExecuter; import org.parabot.environment.servers.loader.ServerLoader; @@ -66,7 +71,20 @@ public class LocalServers extends ServerParser { } } + for (File file : Directories.listJSONFiles(Directories.getServerPath())){ + try { + JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(file)); + String name = (String) object.get("name"); + String clientClass = (String) object.get("client-class"); + JSONObject locations = (JSONObject) object.get("locations"); + String server = (String) locations.get("server"); + String hooks = (String) locations.get("hooks"); + + } catch (IOException | ParseException e) { + e.printStackTrace(); + } + } } } diff --git a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java index 4b69b10..7e32445 100644 --- a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java @@ -56,10 +56,8 @@ public class PublicServerExecuter extends ServerExecuter { serverProviderInfo.getCRC32() + ".jar"); final String jarUrl = Configuration.GET_SERVER_PROVIDER + this.serverName; - System.out.println(jarUrl); Core.verbose("Downloading: " + jarUrl + " ..."); - if(destination.exists()) { Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); From 6d3ab146acec60ebfe39734065aa8fa1768525bf Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 21:30:26 +0100 Subject: [PATCH 11/20] [FEATURE] Finished local server loading --- .../parabot/core/desc/ServerProviderInfo.java | 24 +++- .../core/parsers/servers/LocalServers.java | 33 ++++- .../environment/api/utils/FileUtil.java | 23 +++ .../executers/LocalPublicServerExecuter.java | 134 ++++++++++++++++++ 4 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index d6cd609..ba20206 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -16,6 +16,7 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Properties; +import java.util.zip.CRC32; /** * Gets the information for the selected server provider @@ -53,13 +54,32 @@ public class ServerProviderInfo { } } - public ServerProviderInfo(){ + public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs){ + this.properties = new Properties(); + this.settings = new HashMap<>(); + try { BufferedReader br = WebUtil.getReader(new URL(Configuration.GET_SERVER_SETTINGS)); JSONObject settings = (JSONObject) WebUtil.getJsonParser().parse(br); + parseSettings(settings); } catch (ParseException | IOException e) { e.printStackTrace(); } + + this.properties.setProperty("client_jar", clientJar); + this.properties.setProperty("hooks", hooks); + this.properties.setProperty("name", name); + this.properties.setProperty("client_class", clientClass); + this.properties.setProperty("provider_crc32", String.valueOf(getCRC32(name, "provider"))); + this.properties.setProperty("client_crc32", String.valueOf(getCRC32(name, "client"))); + this.properties.setProperty("bank_tabs", String.valueOf(bankTabs)); + } + + private long getCRC32(String name, String type){ + CRC32 crc = new CRC32(); + name += "-" + type; + crc.update(name.getBytes()); + return crc.getValue(); } private void parseSettings(JSONObject object){ @@ -107,7 +127,7 @@ public class ServerProviderInfo { } public long getCRC32() { - return Long.parseLong(properties.getProperty("provider_crc32")); + return Long.parseLong(properties.getProperty("provider_crc32")); } public long getClientCRC32() { diff --git a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java index 8010046..a1dc8a6 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -5,22 +5,37 @@ import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; import java.lang.reflect.Constructor; +import java.net.URL; import java.util.ArrayList; +import java.util.Collections; +import java.util.Objects; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; +import org.parabot.core.Configuration; +import org.parabot.core.Context; +import org.parabot.core.Core; import org.parabot.core.Directories; +import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerDescription; +import org.parabot.core.desc.ServerProviderInfo; +import org.parabot.core.ui.components.VerboseLoader; +import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.servers.ServerManifest; +import org.parabot.environment.servers.ServerProvider; +import org.parabot.environment.servers.executers.LocalPublicServerExecuter; import org.parabot.environment.servers.executers.LocalServerExecuter; +import org.parabot.environment.servers.executers.PublicServerExecuter; import org.parabot.environment.servers.loader.ServerLoader; +import javax.swing.*; + /** * Parses local server providers located in the servers directory * - * @author Everel + * @author Everel, JKetelaar */ public class LocalServers extends ServerParser { @@ -31,7 +46,7 @@ public class LocalServers extends ServerParser { basePath.parseJarFiles(false); basePath.addClasses(Directories.getServerPath()); - final ArrayList classPaths = new ArrayList(); + final ArrayList classPaths = new ArrayList<>(); classPaths.add(basePath); for (final ClassPath classPath : basePath.getJarFiles()) { classPaths.add(classPath); @@ -75,12 +90,26 @@ public class LocalServers extends ServerParser { try { JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(file)); String name = (String) object.get("name"); + String author = (String) object.get("author"); + double version = (Double) object.get("version"); String clientClass = (String) object.get("client-class"); + Object bank; + int bankTabs = 0; + if ((bank = object.get("bank")) != null){ + bankTabs = (int) bank; + } JSONObject locations = (JSONObject) object.get("locations"); String server = (String) locations.get("server"); + String provider = (String) locations.get("provider"); String hooks = (String) locations.get("hooks"); + ServerProviderInfo serverProviderInfo = new ServerProviderInfo(server, hooks, name, clientClass, bankTabs); + + System.out.println(server); + ServerDescription desc = new ServerDescription(name, + author, version); + SERVER_CACHE.put(desc, new LocalPublicServerExecuter(name, serverProviderInfo, server, provider)); } catch (IOException | ParseException e) { e.printStackTrace(); } diff --git a/src/main/java/org/parabot/environment/api/utils/FileUtil.java b/src/main/java/org/parabot/environment/api/utils/FileUtil.java index 6d0b914..ba7ea9c 100644 --- a/src/main/java/org/parabot/environment/api/utils/FileUtil.java +++ b/src/main/java/org/parabot/environment/api/utils/FileUtil.java @@ -2,7 +2,9 @@ package org.parabot.environment.api.utils; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -65,4 +67,25 @@ public class FileUtil { return null; } + + public static void copyFile(File sourceFile, File destFile) + throws IOException { + if (!sourceFile.exists()) { + return; + } + if (!destFile.exists()) { + destFile.createNewFile(); + } + FileChannel source = null; + FileChannel destination = null; + source = new FileInputStream(sourceFile).getChannel(); + destination = new FileOutputStream(destFile).getChannel(); + if (source != null) { + destination.transferFrom(source, 0, source.size()); + } + if (source != null) { + source.close(); + } + destination.close(); + } } diff --git a/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java new file mode 100644 index 0000000..912745c --- /dev/null +++ b/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java @@ -0,0 +1,134 @@ +package org.parabot.environment.servers.executers; + +import org.parabot.core.Configuration; +import org.parabot.core.Context; +import org.parabot.core.Core; +import org.parabot.core.Directories; +import org.parabot.core.build.BuildPath; +import org.parabot.core.classpath.ClassPath; +import org.parabot.core.desc.ServerProviderInfo; +import org.parabot.core.forum.AccountManager; +import org.parabot.core.forum.AccountManagerAccess; +import org.parabot.core.ui.components.VerboseLoader; +import org.parabot.core.ui.utils.UILog; +import org.parabot.environment.api.utils.FileUtil; +import org.parabot.environment.api.utils.WebUtil; +import org.parabot.environment.servers.ServerProvider; +import org.parabot.environment.servers.loader.ServerLoader; + +import javax.swing.*; +import java.io.File; +import java.lang.reflect.Constructor; +import java.net.URL; + +/** + * + * Fetches a server provider from the local config file + * + * @author JKetelaar + * + */ +public class LocalPublicServerExecuter extends ServerExecuter { + private String serverName; + private String serverUrl; + private String providerUrl; + private ServerProviderInfo serverProviderInfo; + + public LocalPublicServerExecuter(final String serverName, final ServerProviderInfo serverProviderInfo, String serverUrl, String providerUrl) { + this.serverName = serverName; + this.serverUrl = serverUrl; + this.providerUrl = providerUrl; + this.serverProviderInfo = serverProviderInfo; + } + + @Override + public void run() { + try { + final File destination = new File(Directories.getCachePath(), + serverProviderInfo.getCRC32() + ".jar"); + + Core.verbose("Downloading: " + providerUrl + " ..."); + + if(destination.exists()) { + Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); + } else { + File local; + if ((local = new File(providerUrl)).exists()){ + FileUtil.copyFile(local, destination); + Core.verbose("Server provider copied..."); + }else { + WebUtil.downloadFile(new URL(providerUrl), destination, VerboseLoader.get()); + Core.verbose("Server provider downloaded..."); + } + } + + final File clientDestination = new File(Directories.getCachePath(), + serverProviderInfo.getClientCRC32() + ".jar"); + + Core.verbose("Downloading: " + serverUrl + " ..."); + + if(clientDestination.exists()) { + Core.verbose("Found cached client [CRC32: " + serverProviderInfo.getClientCRC32() + "]"); + } else { + File local; + if ((local = new File(serverUrl)).exists()){ + FileUtil.copyFile(local, clientDestination); + Core.verbose("Server client copied..."); + }else { + WebUtil.downloadFile(new URL(serverUrl), clientDestination, VerboseLoader.get()); + Core.verbose("Server client downloaded..."); + } + } + + final ClassPath classPath = new ClassPath(); + classPath.addJar(destination); + + BuildPath.add(destination.toURI().toURL()); + + ServerLoader serverLoader = new ServerLoader(classPath); + final String[] classNames = serverLoader.getServerClassNames(); + if (classNames.length == 0) { + UILog.log( + "Error", + "Failed to load server provider, error: [No provider found in jar file.]", + JOptionPane.ERROR_MESSAGE); + return; + } else if (classNames.length > 1) { + UILog.log( + "Error", + "Failed to load server provider, error: [Multiple providers found in jar file.]"); + return; + } + + final String className = classNames[0]; + try { + final Class providerClass = serverLoader + .loadClass(className); + final Constructor con = providerClass.getConstructor(); + final ServerProvider serverProvider = (ServerProvider) con + .newInstance(); + Context.getInstance(serverProvider).setProviderInfo(serverProviderInfo); + super.finalize(serverProvider, this.serverName); + } catch (NoClassDefFoundError | ClassNotFoundException ignored) { + UILog.log( + "Error", + "Failed to load server provider, error: [This server provider is not compatible with this version of parabot]", + JOptionPane.ERROR_MESSAGE); + } catch (Throwable t) { + t.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider.", + JOptionPane.ERROR_MESSAGE); + } + + } catch (Exception e) { + e.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider, post the stacktrace/error on the parabot forums.", + JOptionPane.ERROR_MESSAGE); + } + + } +} From 46c5232cf4b7e4dca19a138f4971d018a772f8a9 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 21:40:41 +0100 Subject: [PATCH 12/20] [FEATURE] Added JavaUtil#getVersion --- src/main/java/org/parabot/Landing.java | 2 ++ .../java/org/parabot/core/lib/javafx/JavaFX.java | 1 - .../parabot/environment/api/utils/JavaUtil.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/parabot/environment/api/utils/JavaUtil.java diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 4ca6c03..68b9012 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -11,6 +11,7 @@ import org.parabot.core.network.proxy.ProxyType; import org.parabot.core.ui.BotUI; import org.parabot.core.ui.ServerSelector; import org.parabot.core.ui.utils.UILog; +import org.parabot.environment.api.utils.JavaUtil; import javax.swing.*; import java.awt.*; @@ -29,6 +30,7 @@ public final class Landing { private static String username; private static String password; public static void main(String... args) throws IOException { + System.out.println(JavaUtil.JAVA_VERSION); Core.initiateBugsnagInstance(); parseArgs(args); diff --git a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java index 4f62259..502558a 100644 --- a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java +++ b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java @@ -67,5 +67,4 @@ public class JavaFX extends Library { public static boolean isValid() { return valid; } - } diff --git a/src/main/java/org/parabot/environment/api/utils/JavaUtil.java b/src/main/java/org/parabot/environment/api/utils/JavaUtil.java new file mode 100644 index 0000000..ad6952b --- /dev/null +++ b/src/main/java/org/parabot/environment/api/utils/JavaUtil.java @@ -0,0 +1,15 @@ +package org.parabot.environment.api.utils; + +/** + * @author JKetelaar + */ +public class JavaUtil { + public static double JAVA_VERSION = getVersion(); + + static double getVersion () { + String version = System.getProperty("java.version"); + int pos = version.indexOf('.'); + pos = version.indexOf('.', pos+1); + return Double.parseDouble (version.substring (0, pos)); + } +} From b1e046d74b2a745f5207e3ce773ed682a814cc6f Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 21:45:59 +0100 Subject: [PATCH 13/20] [FEATURE] Added Library#requiresJar --- src/main/java/org/parabot/Landing.java | 1 - src/main/java/org/parabot/core/lib/Library.java | 6 ++++++ src/main/java/org/parabot/core/lib/javafx/JavaFX.java | 6 ++++++ src/main/java/org/parabot/core/lib/naga/Naga.java | 5 +++++ src/main/java/org/parabot/environment/Environment.java | 2 +- 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 68b9012..de1cd97 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -30,7 +30,6 @@ public final class Landing { private static String username; private static String password; public static void main(String... args) throws IOException { - System.out.println(JavaUtil.JAVA_VERSION); Core.initiateBugsnagInstance(); parseArgs(args); diff --git a/src/main/java/org/parabot/core/lib/Library.java b/src/main/java/org/parabot/core/lib/Library.java index 73e4073..9ac49e5 100644 --- a/src/main/java/org/parabot/core/lib/Library.java +++ b/src/main/java/org/parabot/core/lib/Library.java @@ -41,6 +41,12 @@ public abstract class Library { * @return url */ public abstract URL getDownloadLink(); + + /** + * Defines if the system requires a jar + * @return boolean + */ + public abstract boolean requiresJar(); /** diff --git a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java index 502558a..5684e45 100644 --- a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java +++ b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java @@ -7,6 +7,7 @@ import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.lib.Library; +import org.parabot.environment.api.utils.JavaUtil; /** * @@ -59,6 +60,11 @@ public class JavaFX extends Library { return null; } + @Override + public boolean requiresJar() { + return JavaUtil.JAVA_VERSION <= 1.7; + } + @Override public String getLibraryName() { return "JavaFX"; diff --git a/src/main/java/org/parabot/core/lib/naga/Naga.java b/src/main/java/org/parabot/core/lib/naga/Naga.java index e1645d4..9154e7e 100644 --- a/src/main/java/org/parabot/core/lib/naga/Naga.java +++ b/src/main/java/org/parabot/core/lib/naga/Naga.java @@ -56,6 +56,11 @@ public class Naga extends Library { return null; } + @Override + public boolean requiresJar() { + return true; + } + @Override public String getLibraryName() { return "Naga"; diff --git a/src/main/java/org/parabot/environment/Environment.java b/src/main/java/org/parabot/environment/Environment.java index adef982..66041bd 100644 --- a/src/main/java/org/parabot/environment/Environment.java +++ b/src/main/java/org/parabot/environment/Environment.java @@ -33,7 +33,7 @@ public class Environment { libs.add(new Naga()); for(Library lib : libs) { - if(!lib.hasJar()) { + if(!lib.hasJar() && lib.requiresJar()) { Core.verbose("Downloading " + lib.getLibraryName() + "..."); VerboseLoader.setState("Downloading " + lib.getLibraryName() + "..."); WebUtil.downloadFile(lib.getDownloadLink(), lib.getJarFile(), VerboseLoader.get()); From 609fbd817016b3df37ea643e532cfe0ad144dcf8 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 21:48:00 +0100 Subject: [PATCH 14/20] [BUGFIX] Solve issue --- src/main/java/org/parabot/environment/Environment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/parabot/environment/Environment.java b/src/main/java/org/parabot/environment/Environment.java index 66041bd..aca9ec0 100644 --- a/src/main/java/org/parabot/environment/Environment.java +++ b/src/main/java/org/parabot/environment/Environment.java @@ -43,7 +43,6 @@ public class Environment { lib.init(); } - Core.verbose("Loading server: " + desc.toString()); ServerParser.SERVER_CACHE.get(desc).run(); From d475ac9e45084eb322ae9960430d5de67c0e3d23 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sat, 9 Jan 2016 21:48:33 +0100 Subject: [PATCH 15/20] [BUGFIX] Solve issue #31 --- src/main/java/org/parabot/environment/Environment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/environment/Environment.java b/src/main/java/org/parabot/environment/Environment.java index aca9ec0..c8c8759 100644 --- a/src/main/java/org/parabot/environment/Environment.java +++ b/src/main/java/org/parabot/environment/Environment.java @@ -43,7 +43,7 @@ public class Environment { lib.init(); } - Core.verbose("Loading server: " + desc.toString()); + Core.verbose("Loading server: " + desc.toString() + "..."); ServerParser.SERVER_CACHE.get(desc).run(); From 5a7f7a20a4dfbc77fb27ce2a824caddba4af9c86 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 10 Jan 2016 00:00:14 +0100 Subject: [PATCH 16/20] [CLEANUP] Commented out testing parts --- src/main/java/org/parabot/core/Context.java | 54 +++++++++---------- .../core/asm/redirect/URLRedirect.java | 8 +++ 2 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 src/main/java/org/parabot/core/asm/redirect/URLRedirect.java diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 1e13172..c69eb01 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -217,34 +217,34 @@ public class Context { gameApplet.init(); gameApplet.start(); - if (false) { // Should be deleted on push -// try { - try { - Test.initiate(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - Applet get = (Applet) Context.getInstance().getClient(); -// get.getName(); - panel.removeAll(); - setClientInstance(get); - gameApplet = get; - gameApplet.setSize(appletSize); - panel.add(gameApplet); - panel.validate(); - -// } catch (NoSuchMethodException e) { -// e.printStackTrace(); -// } catch (InvocationTargetException e) { -// e.printStackTrace(); -// } catch (IllegalAccessException e) { -// e.printStackTrace(); +// if (false) { // Should be deleted on push +//// try { +// try { +// Test.initiate(); +// } catch (NoSuchMethodException e) { +// e.printStackTrace(); +// } catch (InvocationTargetException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } +// Applet get = (Applet) Context.getInstance().getClient(); +//// get.getName(); +// panel.removeAll(); +// setClientInstance(get); +// gameApplet = get; +// gameApplet.setSize(appletSize); +// panel.add(gameApplet); +// panel.validate(); +// +//// } catch (NoSuchMethodException e) { +//// e.printStackTrace(); +//// } catch (InvocationTargetException e) { +//// e.printStackTrace(); +//// } catch (IllegalAccessException e) { +//// e.printStackTrace(); +//// } // } - } java.util.Timer t = new java.util.Timer(); t.schedule(new TimerTask() { diff --git a/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java b/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java new file mode 100644 index 0000000..c4de84f --- /dev/null +++ b/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java @@ -0,0 +1,8 @@ +package org.parabot.core.asm.redirect; + +/** + * @author JKetelaar + */ +public class URLRedirect{ + +} \ No newline at end of file From ee22d680135eb6d10dcdadf0480fcec0d0a14cbb Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 10 Jan 2016 00:01:19 +0100 Subject: [PATCH 17/20] [CLEANUP] Commented out testing parts --- src/main/java/org/parabot/core/Context.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index c69eb01..02aff4a 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -1,7 +1,6 @@ package org.parabot.core; import org.json.simple.parser.JSONParser; -import org.parabot.Test; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerProviderInfo; From 091249d5be3037b6497ce0f29d9fc153877ac482 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 10 Jan 2016 00:02:54 +0100 Subject: [PATCH 18/20] [CLEANUP] Commented out testing parts --- src/main/java/org/parabot/core/Context.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 02aff4a..f7df125 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -177,14 +177,19 @@ public class Context { classPath.dump(new File(Directories.getWorkspace(), "dump.jar")); Core.verbose("Done."); } - try { - Applet applet = Test.invokeZBU(); - if(applet != null) { - setApplet(applet); - } - } catch (NoSuchMethodException | InvocationTargetException | ClassNotFoundException | IllegalAccessException | NoSuchFieldException | InstantiationException e) { - e.printStackTrace(); + Applet applet = serverProvider.fetchApplet(); + // if applet is null the server provider will call setApplet itself + if(applet != null) { + setApplet(applet); } +// try { +// Applet applet = Test.invokeZBU(); +// if(applet != null) { +// setApplet(applet); +// } +// } catch (NoSuchMethodException | InvocationTargetException | ClassNotFoundException | IllegalAccessException | NoSuchFieldException | InstantiationException e) { +// e.printStackTrace(); +// } } /** From b69d1feb2df281e0316be8b200297fa93bb41a4b Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 10 Jan 2016 00:04:21 +0100 Subject: [PATCH 19/20] [CLEANUP] Commented out testing parts --- src/main/java/org/parabot/core/asm/RedirectClassAdapter.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index fce88ff..3421a50 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -3,7 +3,6 @@ package org.parabot.core.asm; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -import org.parabot.Test; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.asm.redirect.*; @@ -95,8 +94,6 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { str_out.println(className + " " + o); if (!className.toLowerCase().contains("parabot")) { dec_out.println(o + ":"); - dec_out.println("\t" + Test.C((String) o)); - dec_out.println("\t" + Test.C2((String) o)); dec_out.println(); } } From f90e7f3bebea9a6824d204d9e4d6a9f4c3268bad Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Sun, 10 Jan 2016 00:08:53 +0100 Subject: [PATCH 20/20] [CLEANUP] Removed outcommented code --- src/main/java/org/parabot/core/Context.java | 55 +-------------------- 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index f7df125..c895f1d 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -18,10 +18,9 @@ import org.parabot.environment.scripts.uliratha.UlirathaClient; import org.parabot.environment.servers.ServerProvider; import java.applet.Applet; -import java.awt.Dimension; +import java.awt.*; import java.io.File; import java.io.PrintStream; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.TimerTask; @@ -29,7 +28,7 @@ import java.util.TimerTask; /** * Game context * - * @author Everel + * @author Everel, JKetelaar, Matt */ public class Context { public static final HashMap threadGroups = new HashMap(); @@ -182,14 +181,6 @@ public class Context { if(applet != null) { setApplet(applet); } -// try { -// Applet applet = Test.invokeZBU(); -// if(applet != null) { -// setApplet(applet); -// } -// } catch (NoSuchMethodException | InvocationTargetException | ClassNotFoundException | IllegalAccessException | NoSuchFieldException | InstantiationException e) { -// e.printStackTrace(); -// } } /** @@ -221,35 +212,6 @@ public class Context { gameApplet.init(); gameApplet.start(); -// if (false) { // Should be deleted on push -//// try { -// try { -// Test.initiate(); -// } catch (NoSuchMethodException e) { -// e.printStackTrace(); -// } catch (InvocationTargetException e) { -// e.printStackTrace(); -// } catch (IllegalAccessException e) { -// e.printStackTrace(); -// } -// Applet get = (Applet) Context.getInstance().getClient(); -//// get.getName(); -// panel.removeAll(); -// setClientInstance(get); -// gameApplet = get; -// gameApplet.setSize(appletSize); -// panel.add(gameApplet); -// panel.validate(); -// -//// } catch (NoSuchMethodException e) { -//// e.printStackTrace(); -//// } catch (InvocationTargetException e) { -//// e.printStackTrace(); -//// } catch (IllegalAccessException e) { -//// e.printStackTrace(); -//// } -// } - java.util.Timer t = new java.util.Timer(); t.schedule(new TimerTask() { @Override @@ -266,19 +228,6 @@ public class Context { Core.verbose("Done."); BotDialog.getInstance().validate(); - -// try { -// Test.invokeQC(getClient().getClass(), getClient()); -// Test.invokeD(getClient().getClass(), getClient()); -// Test.invokeU(getClient().getClass(), getClient()); -// Test.invokeXD(getClient().getClass(), getClient()); -// Test.invokeTB(getClient().getClass(), getClient()); -// Test.invokeC(getClient().getClass(), getClient()); -// Test.invokeZBU(getClient().getClass(), getClient()); -// } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchFieldException e) { -// e.printStackTrace(); // This is just for testing purpose -// } - System.setOut(this.defaultOut); System.setErr(this.defaultErr); }