merge with head

By: stevenh <steven.hartland@multiplay.co.uk>
This commit is contained in:
Bukkit/Spigot
2011-01-29 17:18:32 +00:00
12 changed files with 289 additions and 15 deletions

View File

@@ -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
*

View File

@@ -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
*

View File

@@ -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);
}
}
}
}
}

View File

@@ -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();
}
}