From fb7b1f79a5b35acbbd5c7ae02c47227831608490 Mon Sep 17 00:00:00 2001 From: altrisi Date: Mon, 23 Jan 2023 22:19:07 +0100 Subject: [PATCH] Fix unchecked removal of commands by app name --- src/main/java/carpet/script/CarpetScriptHost.java | 11 +++++++++-- src/main/java/carpet/script/CarpetScriptServer.java | 9 +++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index 4ce39f44..7462db75 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -83,6 +83,7 @@ public class CarpetScriptHost extends ScriptHost Predicate commandValidator; boolean isRuleApp; public AppStoreManager.StoreNode storeSource; + boolean hasCommand; private CarpetScriptHost(CarpetScriptServer server, Module code, boolean perUser, ScriptHost parent, Map config, Map argTypes, Predicate commandValidator, boolean isRuleApp) { @@ -358,6 +359,12 @@ public class CarpetScriptHost extends ScriptHost } } + // Used to ensure app gets marked as holding command from a central place + private void registerCommand(LiteralArgumentBuilder command) { + scriptServer().server.getCommands().getDispatcher().register(command); + hasCommand = true; + } + public void readCustomArgumentTypes() throws CommandSyntaxException { // read custom arguments @@ -401,7 +408,7 @@ public class CarpetScriptHost extends ScriptHost LiteralArgumentBuilder command = readCommands(commandValidator); if (command != null) { - scriptServer().server.getCommands().getDispatcher().register(command); + registerCommand(command); return true; } else { @@ -523,7 +530,7 @@ public class CarpetScriptHost extends ScriptHost }))); } } - scriptServer().server.getCommands().getDispatcher().register(command); + registerCommand(command); return true; } diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index e2d2f140..4ddf57a4 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -341,10 +341,11 @@ public class CarpetScriptServer extends ScriptServer return false; } // stop all events associated with name - events.removeAllHostEvents(modules.get(name)); - modules.get(name).onClose(); - modules.remove(name); - ((CommandDispatcherInterface)server.getCommands().getDispatcher()).carpet$unregister(name); + CarpetScriptHost host = modules.remove(name); + events.removeAllHostEvents(host); + host.onClose(); + if (host.hasCommand) + ((CommandDispatcherInterface)server.getCommands().getDispatcher()).carpet$unregister(name); if (!isRuleApp) unloadableModules.remove(name); CommandHelper.notifyPlayersCommandsChanged(server); if (notifySource) Messenger.m(source, "gi Removed "+name+" app");