mirror of
https://github.com/ViaVersion/ViaProxy.git
synced 2024-10-01 04:47:32 +02:00
Added unload mechanism to plugin API
This commit is contained in:
parent
94b3d7de09
commit
f19d70789f
@ -47,6 +47,7 @@ public class PluginManager {
|
|||||||
|
|
||||||
public PluginManager() {
|
public PluginManager() {
|
||||||
this.loadPlugins();
|
this.loadPlugins();
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread(this::unloadPlugins));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ViaProxyPlugin> getPlugins() {
|
public List<ViaProxyPlugin> getPlugins() {
|
||||||
@ -84,7 +85,7 @@ public class PluginManager {
|
|||||||
|
|
||||||
for (ViaProxyPlugin plugin : this.plugins) {
|
for (ViaProxyPlugin plugin : this.plugins) {
|
||||||
if (!plugin.isEnabled()) {
|
if (!plugin.isEnabled()) {
|
||||||
enablePlugin(plugin);
|
this.enablePlugin(plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,13 +128,13 @@ public class PluginManager {
|
|||||||
|
|
||||||
private void enablePlugin(final ViaProxyPlugin plugin) {
|
private void enablePlugin(final ViaProxyPlugin plugin) {
|
||||||
for (String depend : plugin.getDepends()) {
|
for (String depend : plugin.getDepends()) {
|
||||||
final ViaProxyPlugin dependPlugin = getPlugin(depend);
|
final ViaProxyPlugin dependPlugin = this.getPlugin(depend);
|
||||||
if (dependPlugin == null) {
|
if (dependPlugin == null) {
|
||||||
Logger.LOGGER.error("Plugin '" + plugin.getName() + "' depends on '" + depend + "' which is not loaded");
|
Logger.LOGGER.error("Plugin '" + plugin.getName() + "' depends on '" + depend + "' which is not loaded");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!dependPlugin.isEnabled()) {
|
if (!dependPlugin.isEnabled()) {
|
||||||
enablePlugin(dependPlugin);
|
this.enablePlugin(dependPlugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
RStream.of(plugin.getClassLoader()).fields().by("parent").set(dependPlugin.getClassLoader());
|
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();
|
public abstract void onEnable();
|
||||||
|
|
||||||
|
final void disable() {
|
||||||
|
try {
|
||||||
|
this.onDisable();
|
||||||
|
} finally {
|
||||||
|
this.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDisable() {
|
||||||
|
}
|
||||||
|
|
||||||
public final String getName() {
|
public final String getName() {
|
||||||
return (String) this.viaProxyYaml.get("name");
|
return (String) this.viaProxyYaml.get("name");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user