mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-24 03:38:04 +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;
|
package emu.grasscutter.plugin;
|
||||||
|
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
|
import emu.grasscutter.plugin.api.ServerHook;
|
||||||
import emu.grasscutter.server.game.GameServer;
|
import emu.grasscutter.server.game.GameServer;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base class for all plugins to extend.
|
* The base class for all plugins to extend.
|
||||||
*/
|
*/
|
||||||
public abstract class Plugin {
|
public abstract class Plugin {
|
||||||
|
private final ServerHook server = ServerHook.getInstance();
|
||||||
|
|
||||||
private PluginIdentifier identifier;
|
private PluginIdentifier identifier;
|
||||||
|
private URLClassLoader classLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is reflected into.
|
* This method is reflected into.
|
||||||
@ -15,9 +22,11 @@ public abstract class Plugin {
|
|||||||
* Set plugin variables.
|
* Set plugin variables.
|
||||||
* @param identifier The plugin's identifier.
|
* @param identifier The plugin's identifier.
|
||||||
*/
|
*/
|
||||||
private void initializePlugin(PluginIdentifier identifier) {
|
private void initializePlugin(PluginIdentifier identifier, URLClassLoader classLoader) {
|
||||||
if(this.identifier == null)
|
if(this.identifier == null)
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
|
if(this.classLoader == null)
|
||||||
|
this.classLoader = classLoader;
|
||||||
else Grasscutter.getLogger().warn(this.identifier.name + " had a reinitialization attempt.");
|
else Grasscutter.getLogger().warn(this.identifier.name + " had a reinitialization attempt.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +64,24 @@ public abstract class Plugin {
|
|||||||
* @return A server instance.
|
* @return A server instance.
|
||||||
*/
|
*/
|
||||||
public final GameServer getServer() {
|
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. */
|
/* Called when the plugin is first loaded. */
|
||||||
|
@ -73,7 +73,7 @@ public final class PluginManager {
|
|||||||
|
|
||||||
Class<?> pluginClass = loader.loadClass(pluginConfig.mainClass);
|
Class<?> pluginClass = loader.loadClass(pluginConfig.mainClass);
|
||||||
Plugin pluginInstance = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
|
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.
|
fileReader.close(); // Close the file reader.
|
||||||
} catch (ClassNotFoundException ignored) {
|
} catch (ClassNotFoundException ignored) {
|
||||||
@ -89,14 +89,14 @@ public final class PluginManager {
|
|||||||
* Load the specified plugin.
|
* Load the specified plugin.
|
||||||
* @param plugin The plugin instance.
|
* @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);
|
Grasscutter.getLogger().info("Loading plugin: " + identifier.name);
|
||||||
|
|
||||||
// Add the plugin's identifier.
|
// Add the plugin's identifier.
|
||||||
try {
|
try {
|
||||||
Class<Plugin> pluginClass = Plugin.class;
|
Class<Plugin> pluginClass = Plugin.class;
|
||||||
Method method = pluginClass.getDeclaredMethod("initializePlugin", PluginIdentifier.class);
|
Method method = pluginClass.getDeclaredMethod("initializePlugin", PluginIdentifier.class, URLClassLoader.class);
|
||||||
method.setAccessible(true); method.invoke(plugin, identifier); method.setAccessible(false);
|
method.setAccessible(true); method.invoke(plugin, identifier, classLoader); method.setAccessible(false);
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
Grasscutter.getLogger().warn("Failed to add plugin identifier: " + identifier.name);
|
Grasscutter.getLogger().warn("Failed to add plugin identifier: " + identifier.name);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user