From 209c3b926209aa656950eb005f7168afd921e021 Mon Sep 17 00:00:00 2001 From: gnembon Date: Tue, 24 Nov 2020 22:52:05 -0400 Subject: [PATCH] fixed issues with reload and missing command handler --- .../java/carpet/commands/ScriptCommand.java | 4 +-- .../java/carpet/script/CarpetScriptHost.java | 13 ++++--- .../carpet/script/CarpetScriptServer.java | 34 +++++++++++++------ .../java/carpet/settings/SettingsManager.java | 2 +- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java index 3b916bba..29973381 100644 --- a/src/main/java/carpet/commands/ScriptCommand.java +++ b/src/main/java/carpet/commands/ScriptCommand.java @@ -244,13 +244,13 @@ public class ScriptCommand suggests( (cc, bb) -> suggestMatching(CarpetServer.scriptServer.listAvailableModules(true),bb)). executes((cc) -> { - boolean success = CarpetServer.scriptServer.addScriptHost(cc.getSource(), StringArgumentType.getString(cc, "app"), true, false, null); + boolean success = CarpetServer.scriptServer.addScriptHost(cc.getSource(), StringArgumentType.getString(cc, "app"), null, true, false, false); return success?1:0; }). then(literal("global"). executes((cc) -> { - boolean success = CarpetServer.scriptServer.addScriptHost(cc.getSource(), StringArgumentType.getString(cc, "app"), false, false, null); + boolean success = CarpetServer.scriptServer.addScriptHost(cc.getSource(), StringArgumentType.getString(cc, "app"), null, false, false, false); return success?1:0; } ) diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index bb85e001..b7f27fcb 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -57,7 +57,10 @@ public class CarpetScriptHost extends ScriptHost public Map appConfig; public Map appArgTypes; - private CarpetScriptHost(CarpetScriptServer server, Module code, boolean perUser, ScriptHost parent, Map config, Map argTypes) + Function commandValidator; + boolean isRuleApp; + + private CarpetScriptHost(CarpetScriptServer server, Module code, boolean perUser, ScriptHost parent, Map config, Map argTypes, Function commandValidator, boolean isRuleApp) { super(code, perUser, parent); this.saveTimeout = 0; @@ -74,11 +77,13 @@ public class CarpetScriptHost extends ScriptHost } appConfig = config; appArgTypes = argTypes; + this.commandValidator = commandValidator; + this.isRuleApp = isRuleApp; } - public static CarpetScriptHost create(CarpetScriptServer scriptServer, Module module, boolean perPlayer, ServerCommandSource source) + public static CarpetScriptHost create(CarpetScriptServer scriptServer, Module module, boolean perPlayer, ServerCommandSource source, Function commandValidator, boolean isRuleApp) { - CarpetScriptHost host = new CarpetScriptHost(scriptServer, module, perPlayer, null, Collections.emptyMap(), new HashMap<>()); + CarpetScriptHost host = new CarpetScriptHost(scriptServer, module, perPlayer, null, Collections.emptyMap(), new HashMap<>(), commandValidator, isRuleApp); // parse code and convert to expression if (module != null) { @@ -169,7 +174,7 @@ public class CarpetScriptHost extends ScriptHost @Override protected ScriptHost duplicate() { - return new CarpetScriptHost(scriptServer, main, false, this, appConfig, appArgTypes); + return new CarpetScriptHost(scriptServer, main, false, this, appConfig, appArgTypes, commandValidator, isRuleApp); } @Override diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index 18c0e656..69fd0327 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -84,8 +84,8 @@ public class CarpetScriptServer registerBuiltInScript(BundledModule.carpetNative("math", true)); registerBuiltInScript(BundledModule.carpetNative("chunk_display", false)); registerBuiltInScript(BundledModule.carpetNative("ai_tracker", false)); - registerSettingsApp(BundledModule.carpetNative("draw_beta", false)); - registerSettingsApp(BundledModule.carpetNative("distance_beta", false)); + registerBuiltInScript(BundledModule.carpetNative("draw_beta", false)); + registerBuiltInScript(BundledModule.carpetNative("distance_beta", false)); } public CarpetScriptServer(MinecraftServer server) @@ -103,7 +103,7 @@ public class CarpetScriptServer tickStart = 0L; stopAll = false; holyMoly = server.getCommandManager().getDispatcher().getRoot().getChildren().stream().map(CommandNode::getName).collect(Collectors.toSet()); - globalHost = CarpetScriptHost.create(this, null, false, null); + globalHost = CarpetScriptHost.create(this, null, false, null, p -> true, false); } public void initializeForWorld() @@ -119,7 +119,7 @@ public class CarpetScriptServer Messenger.m(server.getCommandSource(), "Auto-loading world scarpet apps"); for (String moduleName: listAvailableModules(false)) { - addScriptHost(server.getCommandSource(), moduleName, true, true, null); + addScriptHost(server.getCommandSource(), moduleName, null, true, true, false); } } @@ -195,10 +195,11 @@ public class CarpetScriptServer return modules.get(name); } - public boolean addScriptHost(ServerCommandSource source, String name, boolean perPlayer, boolean autoload, Function commandValidator) + public boolean addScriptHost(ServerCommandSource source, String name, Function commandValidator, + boolean perPlayer, boolean autoload, boolean isRuleApp) { //TODO add per player modules to support player actions better on a server - boolean isRuleApp = commandValidator != null; + if (commandValidator == null) commandValidator = p -> true; long start = System.nanoTime(); name = name.toLowerCase(Locale.ROOT); boolean reload = false; @@ -214,7 +215,7 @@ public class CarpetScriptServer Messenger.m(source, "r Failed to add "+name+" app"); return false; } - CarpetScriptHost newHost = CarpetScriptHost.create(this, module, perPlayer, source); + CarpetScriptHost newHost = CarpetScriptHost.create(this, module, perPlayer, source, commandValidator, isRuleApp); if (newHost == null) { Messenger.m(source, "r Failed to add "+name+" app"); @@ -436,13 +437,26 @@ public class CarpetScriptServer } } + static class TransferData + { + boolean perUser; + Function commandValidator; + boolean isRuleApp; + private TransferData(CarpetScriptHost host) + { + perUser = host.perUser; + commandValidator = host.commandValidator; + isRuleApp = host.isRuleApp; + } + } + public void reload(MinecraftServer server) { - Map apps = new HashMap<>(); - modules.forEach((s, h) -> apps.put(s, h.perUser)); + Map apps = new HashMap<>(); + modules.forEach((s, h) -> apps.put(s, new TransferData(h))); apps.keySet().forEach(s -> removeScriptHost(server.getCommandSource(), s, false, false)); CarpetEventServer.Event.clearAllBuiltinEvents(); init(); - apps.forEach((s, pp) -> addScriptHost(server.getCommandSource(), s, pp, false, null)); + apps.forEach((s, data) -> addScriptHost(server.getCommandSource(), s,data.commandValidator, data.perUser,false, data.isRuleApp)); } } diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index bc43f6ea..268bb308 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -190,7 +190,7 @@ public class SettingsManager { if (rule.getBoolValue() || (rule.type == String.class && !rule.get().equals("false"))) { - CarpetServer.scriptServer.addScriptHost(source, rule.scarpetApp, false, false, s -> canUseCommand(s, rule.get())); + CarpetServer.scriptServer.addScriptHost(source, rule.scarpetApp, s -> canUseCommand(s, rule.get()), false, false, true); } else { CarpetServer.scriptServer.removeScriptHost(source, rule.scarpetApp, false, true); }