mirror of
https://github.com/ViaVersion/ViaProxy.git
synced 2025-03-30 00:09:49 -04:00
Added unload mechanism to plugin API
This commit is contained in:
parent
94b3d7de09
commit
f19d70789f
2 changed files with 43 additions and 3 deletions
src/main/java/net/raphimc/viaproxy/plugins
|
@ -47,6 +47,7 @@ public class PluginManager {
|
|||
|
||||
public PluginManager() {
|
||||
this.loadPlugins();
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::unloadPlugins));
|
||||
}
|
||||
|
||||
public List<ViaProxyPlugin> getPlugins() {
|
||||
|
@ -84,7 +85,7 @@ public class PluginManager {
|
|||
|
||||
for (ViaProxyPlugin plugin : this.plugins) {
|
||||
if (!plugin.isEnabled()) {
|
||||
enablePlugin(plugin);
|
||||
this.enablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -127,13 +128,13 @@ public class PluginManager {
|
|||
|
||||
private void enablePlugin(final ViaProxyPlugin plugin) {
|
||||
for (String depend : plugin.getDepends()) {
|
||||
final ViaProxyPlugin dependPlugin = getPlugin(depend);
|
||||
final ViaProxyPlugin dependPlugin = this.getPlugin(depend);
|
||||
if (dependPlugin == null) {
|
||||
Logger.LOGGER.error("Plugin '" + plugin.getName() + "' depends on '" + depend + "' which is not loaded");
|
||||
return;
|
||||
}
|
||||
if (!dependPlugin.isEnabled()) {
|
||||
enablePlugin(dependPlugin);
|
||||
this.enablePlugin(dependPlugin);
|
||||
}
|
||||
|
||||
RStream.of(plugin.getClassLoader()).fields().by("parent").set(dependPlugin.getClassLoader());
|
||||
|
@ -147,4 +148,32 @@ public class PluginManager {
|
|||
}
|
||||
}
|
||||
|
||||
private void unloadPlugins() {
|
||||
for (ViaProxyPlugin plugin : this.plugins) {
|
||||
if (plugin.isEnabled()) {
|
||||
this.disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void disablePlugin(final ViaProxyPlugin plugin) {
|
||||
for (String depend : plugin.getDepends()) {
|
||||
final ViaProxyPlugin dependPlugin = this.getPlugin(depend);
|
||||
if (dependPlugin == null) {
|
||||
Logger.LOGGER.error("Plugin '" + plugin.getName() + "' depends on '" + depend + "' which is not loaded");
|
||||
return;
|
||||
}
|
||||
if (dependPlugin.isEnabled()) {
|
||||
this.disablePlugin(dependPlugin);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
plugin.disable();
|
||||
Logger.LOGGER.info("Disabled plugin '" + plugin.getName() + "'");
|
||||
} catch (Throwable e) {
|
||||
Logger.LOGGER.error("Failed to disable plugin '" + plugin.getName() + "'", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,6 +41,17 @@ public abstract class ViaProxyPlugin {
|
|||
|
||||
public abstract void onEnable();
|
||||
|
||||
final void disable() {
|
||||
try {
|
||||
this.onDisable();
|
||||
} finally {
|
||||
this.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
}
|
||||
|
||||
public final String getName() {
|
||||
return (String) this.viaProxyYaml.get("name");
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue