mirror of
https://github.com/2006-Scape/Parabot.git
synced 2026-07-02 16:49:10 +00:00
[TASK] Improved JavaScriptLoader
To look further than just the main class
This commit is contained in:
@@ -60,7 +60,6 @@ public class LocalJavaScripts extends ScriptParser {
|
|||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* An environment to load a script
|
* An environment to load a script
|
||||||
*
|
*
|
||||||
* @author Everel
|
* @author Everel, JKetelaar
|
||||||
*/
|
*/
|
||||||
public class JavaScriptLoader extends ASMClassLoader {
|
public class JavaScriptLoader extends ASMClassLoader {
|
||||||
private ClassPath classPath;
|
private ClassPath classPath;
|
||||||
@@ -27,15 +27,55 @@ public class JavaScriptLoader extends ASMClassLoader {
|
|||||||
* @return string array of class names that extends ServerProvider
|
* @return string array of class names that extends ServerProvider
|
||||||
*/
|
*/
|
||||||
public final String[] getScriptClassNames() {
|
public final String[] getScriptClassNames() {
|
||||||
final List<String> classNames = new ArrayList<String>();
|
final List<String> classNames = new ArrayList<>();
|
||||||
for (ClassNode c : classPath.classes.values()) {
|
for (ClassNode c : classPath.classes.values()) {
|
||||||
if (c.superName.replace('/', '.').equals(
|
if (isScriptClass(c)) {
|
||||||
Script.class.getName())) {
|
|
||||||
classNames.add(c.name.replace('/', '.'));
|
classNames.add(c.name.replace('/', '.'));
|
||||||
|
} else {
|
||||||
|
ClassNode superClass = findClassNodeForName(c.superName);
|
||||||
|
if (superClass != null && isScriptClass(superClass)) {
|
||||||
|
classNames.add(c.name.replace('/', '.'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return classNames.toArray(new String[classNames.size()]);
|
|
||||||
|
String[] classes = new String[classNames.size()];
|
||||||
|
for (int i = 0; i < classNames.size(); i++) {
|
||||||
|
classes[i] = classNames.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if given ClassNode is Script class
|
||||||
|
*
|
||||||
|
* @param classNode
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean isScriptClass(ClassNode classNode) {
|
||||||
|
return classNode
|
||||||
|
.superName
|
||||||
|
.replace('/', '.')
|
||||||
|
.equals(Script.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds a ClassNode instance for a given class name
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private ClassNode findClassNodeForName(String name) {
|
||||||
|
for (ClassNode classNode : classPath.classes.values()) {
|
||||||
|
if (classNode.name.equals(name)) {
|
||||||
|
return classNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user