1
0
Fork 0
mirror of https://github.com/PaperMC/Paper.git synced 2025-02-17 02:34:30 +01:00

clearPlugins() and clearCommands() for PluginManager and CommandMap respectively

By: Dinnerbone <dinnerbone@dinnerbone.com>
This commit is contained in:
Bukkit/Spigot 2011-01-28 14:18:24 +00:00
parent 595cb5d166
commit 14c7da2f6e
6 changed files with 40 additions and 0 deletions

View file

@ -26,4 +26,8 @@ public interface CommandMap {
*/
public boolean dispatch(Player sender, String cmdLine);
/**
* Clears all registered commands.
*/
public void clearCommands();
}

View file

@ -86,6 +86,12 @@ public final class SimpleCommandMap implements CommandMap {
return isRegisteredCommand;
}
public void clearCommands() {
synchronized (this) {
knownCommands.clear();
}
}
private static class VersionCommand extends Command {
private final Server server;

View file

@ -80,6 +80,11 @@ public interface PluginManager {
*/
public void disablePlugins();
/**
* Disables and removes all plugins
*/
public void clearPlugins();
/**
* Calls a player related event with the given details
*

View file

@ -188,6 +188,15 @@ public final class SimplePluginManager implements PluginManager {
}
}
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;
@ -301,10 +302,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();
}
}