@@ -75,6 +75,16 @@ public interface PluginManager {
|
||||
*/
|
||||
public Plugin[] loadPlugins(File directory);
|
||||
|
||||
/**
|
||||
* Disables all the loaded plugins
|
||||
*/
|
||||
public void disablePlugins();
|
||||
|
||||
/**
|
||||
* Disables and removes all plugins
|
||||
*/
|
||||
public void clearPlugins();
|
||||
|
||||
/**
|
||||
* Calls a player related event with the given details
|
||||
*
|
||||
|
||||
@@ -176,12 +176,27 @@ public final class SimplePluginManager implements PluginManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void disablePlugins() {
|
||||
for(Plugin plugin: getPlugins()) {
|
||||
disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public void disablePlugin(final Plugin plugin) {
|
||||
if (plugin.isEnabled()) {
|
||||
plugin.getPluginLoader().disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public void clearPlugins() {
|
||||
synchronized (this) {
|
||||
disablePlugins();
|
||||
plugins.clear();
|
||||
lookupNames.clear();
|
||||
listeners.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls a player related event with the given details
|
||||
*
|
||||
|
||||
@@ -8,6 +8,7 @@ import java.lang.reflect.Constructor;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -366,10 +367,20 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
|
||||
if (plugin.isEnabled()) {
|
||||
JavaPlugin jPlugin = (JavaPlugin)plugin;
|
||||
ClassLoader cloader = jPlugin.getClassLoader();
|
||||
|
||||
server.getPluginManager().callEvent(new PluginEvent(Event.Type.PLUGIN_DISABLE, plugin));
|
||||
|
||||
jPlugin.setEnabled(false);
|
||||
|
||||
if (cloader instanceof PluginClassLoader) {
|
||||
PluginClassLoader loader = (PluginClassLoader)cloader;
|
||||
Set<String> names = loader.getClasses();
|
||||
|
||||
for (String name : names) {
|
||||
classes.remove(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A ClassLoader for plugins, to allow shared classes across multiple plugins
|
||||
@@ -38,4 +39,8 @@ public class PluginClassLoader extends URLClassLoader {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public Set<String> getClasses() {
|
||||
return classes.keySet();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user