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:
parent
595cb5d166
commit
14c7da2f6e
6 changed files with 40 additions and 0 deletions
paper-api/src/main/java/org/bukkit
|
@ -26,4 +26,8 @@ public interface CommandMap {
|
|||
*/
|
||||
public boolean dispatch(Player sender, String cmdLine);
|
||||
|
||||
/**
|
||||
* Clears all registered commands.
|
||||
*/
|
||||
public void clearCommands();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue