mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-27 21:10:54 +00:00
Merge pull request #262 from exzork/plugin-system
load all classes from plugin
This commit is contained in:
commit
7739fc1aeb
@ -13,6 +13,8 @@ import java.lang.reflect.Method;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages the server's plugins & the event system.
|
* Manages the server's plugins & the event system.
|
||||||
@ -52,13 +54,22 @@ public final class PluginManager {
|
|||||||
try (URLClassLoader loader = new URLClassLoader(new URL[]{url})) {
|
try (URLClassLoader loader = new URLClassLoader(new URL[]{url})) {
|
||||||
URL configFile = loader.findResource("plugin.json");
|
URL configFile = loader.findResource("plugin.json");
|
||||||
InputStreamReader fileReader = new InputStreamReader(configFile.openStream());
|
InputStreamReader fileReader = new InputStreamReader(configFile.openStream());
|
||||||
|
|
||||||
PluginConfig pluginConfig = Grasscutter.getGsonFactory().fromJson(fileReader, PluginConfig.class);
|
PluginConfig pluginConfig = Grasscutter.getGsonFactory().fromJson(fileReader, PluginConfig.class);
|
||||||
if(!pluginConfig.validate()) {
|
if(!pluginConfig.validate()) {
|
||||||
Utils.logObject(pluginConfig);
|
Utils.logObject(pluginConfig);
|
||||||
Grasscutter.getLogger().warn("Plugin " + plugin.getName() + " has an invalid config file.");
|
Grasscutter.getLogger().warn("Plugin " + plugin.getName() + " has an invalid config file.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JarFile jarFile = new JarFile(plugin);
|
||||||
|
Enumeration<JarEntry> entries = jarFile.entries();
|
||||||
|
while(entries.hasMoreElements()) {
|
||||||
|
JarEntry entry = entries.nextElement();
|
||||||
|
if(entry.isDirectory() || !entry.getName().endsWith(".class")) continue;
|
||||||
|
String className = entry.getName().replace(".class", "").replace("/", ".");
|
||||||
|
Class<?> clazz = loader.loadClass(className);
|
||||||
|
}
|
||||||
|
|
||||||
Class<?> pluginClass = loader.loadClass(pluginConfig.mainClass);
|
Class<?> pluginClass = loader.loadClass(pluginConfig.mainClass);
|
||||||
Plugin pluginInstance = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
|
Plugin pluginInstance = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
|
||||||
|
Loading…
Reference in New Issue
Block a user