mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-24 04:48:05 +00:00
Added getting resources from the JAR
This commit is contained in:
parent
54658afe68
commit
34c358669b
@ -1,13 +1,20 @@
|
||||
package emu.grasscutter.plugin;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.plugin.api.ServerHook;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.URLClassLoader;
|
||||
|
||||
/**
|
||||
* The base class for all plugins to extend.
|
||||
*/
|
||||
public abstract class Plugin {
|
||||
private final ServerHook server = ServerHook.getInstance();
|
||||
|
||||
private PluginIdentifier identifier;
|
||||
private URLClassLoader classLoader;
|
||||
|
||||
/**
|
||||
* This method is reflected into.
|
||||
@ -15,9 +22,11 @@ public abstract class Plugin {
|
||||
* Set plugin variables.
|
||||
* @param identifier The plugin's identifier.
|
||||
*/
|
||||
private void initializePlugin(PluginIdentifier identifier) {
|
||||
private void initializePlugin(PluginIdentifier identifier, URLClassLoader classLoader) {
|
||||
if(this.identifier == null)
|
||||
this.identifier = identifier;
|
||||
if(this.classLoader == null)
|
||||
this.classLoader = classLoader;
|
||||
else Grasscutter.getLogger().warn(this.identifier.name + " had a reinitialization attempt.");
|
||||
}
|
||||
|
||||
@ -55,7 +64,24 @@ public abstract class Plugin {
|
||||
* @return A server instance.
|
||||
*/
|
||||
public final GameServer getServer() {
|
||||
return Grasscutter.getGameServer();
|
||||
return this.server.getGameServer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an input stream for a resource in the JAR file.
|
||||
* @param resourceName The name of the resource.
|
||||
* @return An input stream.
|
||||
*/
|
||||
public final InputStream getResource(String resourceName) {
|
||||
return this.classLoader.getResourceAsStream(resourceName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the server hook.
|
||||
* @return A server hook singleton.
|
||||
*/
|
||||
public final ServerHook getHandle() {
|
||||
return this.server;
|
||||
}
|
||||
|
||||
/* Called when the plugin is first loaded. */
|
||||
|
@ -73,7 +73,7 @@ public final class PluginManager {
|
||||
|
||||
Class<?> pluginClass = loader.loadClass(pluginConfig.mainClass);
|
||||
Plugin pluginInstance = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
|
||||
this.loadPlugin(pluginInstance, PluginIdentifier.fromPluginConfig(pluginConfig));
|
||||
this.loadPlugin(pluginInstance, PluginIdentifier.fromPluginConfig(pluginConfig), loader);
|
||||
|
||||
fileReader.close(); // Close the file reader.
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
@ -89,14 +89,14 @@ public final class PluginManager {
|
||||
* Load the specified plugin.
|
||||
* @param plugin The plugin instance.
|
||||
*/
|
||||
private void loadPlugin(Plugin plugin, PluginIdentifier identifier) {
|
||||
private void loadPlugin(Plugin plugin, PluginIdentifier identifier, URLClassLoader classLoader) {
|
||||
Grasscutter.getLogger().info("Loading plugin: " + identifier.name);
|
||||
|
||||
// Add the plugin's identifier.
|
||||
try {
|
||||
Class<Plugin> pluginClass = Plugin.class;
|
||||
Method method = pluginClass.getDeclaredMethod("initializePlugin", PluginIdentifier.class);
|
||||
method.setAccessible(true); method.invoke(plugin, identifier); method.setAccessible(false);
|
||||
Method method = pluginClass.getDeclaredMethod("initializePlugin", PluginIdentifier.class, URLClassLoader.class);
|
||||
method.setAccessible(true); method.invoke(plugin, identifier, classLoader); method.setAccessible(false);
|
||||
} catch (Exception ignored) {
|
||||
Grasscutter.getLogger().warn("Failed to add plugin identifier: " + identifier.name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user