fixed issues with reload and missing command handler
This commit is contained in:
1 parent
724b63df8a
commit
209c3b9262
4 files changed
+36
-17
No files matched your search
@@ -244,13 +244,13 @@ public class ScriptCommand
|
|||||||
suggests( (cc, bb) -> suggestMatching(CarpetServer.scriptServer.listAvailableModules(true),bb)).
|
suggests( (cc, bb) -> suggestMatching(CarpetServer.scriptServer.listAvailableModules(true),bb)).
|
||||||
executes((cc) ->
|
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;
|
return success?1:0;
|
||||||
}).
|
}).
|
||||||
then(literal("global").
|
then(literal("global").
|
||||||
executes((cc) ->
|
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;
|
return success?1:0;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
public Map<Value, Value> appConfig;
|
public Map<Value, Value> appConfig;
|
||||||
public Map<String, CommandArgument> appArgTypes;
|
public Map<String, CommandArgument> appArgTypes;
|
||||||
|
|
||||||
private CarpetScriptHost(CarpetScriptServer server, Module code, boolean perUser, ScriptHost parent, Map<Value, Value> config, Map<String, CommandArgument> argTypes)
|
Function<ServerCommandSource, Boolean> commandValidator;
|
||||||
|
boolean isRuleApp;
|
||||||
|
|
||||||
|
private CarpetScriptHost(CarpetScriptServer server, Module code, boolean perUser, ScriptHost parent, Map<Value, Value> config, Map<String, CommandArgument> argTypes, Function<ServerCommandSource, Boolean> commandValidator, boolean isRuleApp)
|
||||||
{
|
{
|
||||||
super(code, perUser, parent);
|
super(code, perUser, parent);
|
||||||
this.saveTimeout = 0;
|
this.saveTimeout = 0;
|
||||||
@@ -74,11 +77,13 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
}
|
}
|
||||||
appConfig = config;
|
appConfig = config;
|
||||||
appArgTypes = argTypes;
|
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<ServerCommandSource, Boolean> 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
|
// parse code and convert to expression
|
||||||
if (module != null)
|
if (module != null)
|
||||||
{
|
{
|
||||||
@@ -169,7 +174,7 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
@Override
|
@Override
|
||||||
protected ScriptHost duplicate()
|
protected ScriptHost duplicate()
|
||||||
{
|
{
|
||||||
return new CarpetScriptHost(scriptServer, main, false, this, appConfig, appArgTypes);
|
return new CarpetScriptHost(scriptServer, main, false, this, appConfig, appArgTypes, commandValidator, isRuleApp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -84,8 +84,8 @@ public class CarpetScriptServer
|
|||||||
registerBuiltInScript(BundledModule.carpetNative("math", true));
|
registerBuiltInScript(BundledModule.carpetNative("math", true));
|
||||||
registerBuiltInScript(BundledModule.carpetNative("chunk_display", false));
|
registerBuiltInScript(BundledModule.carpetNative("chunk_display", false));
|
||||||
registerBuiltInScript(BundledModule.carpetNative("ai_tracker", false));
|
registerBuiltInScript(BundledModule.carpetNative("ai_tracker", false));
|
||||||
registerSettingsApp(BundledModule.carpetNative("draw_beta", false));
|
registerBuiltInScript(BundledModule.carpetNative("draw_beta", false));
|
||||||
registerSettingsApp(BundledModule.carpetNative("distance_beta", false));
|
registerBuiltInScript(BundledModule.carpetNative("distance_beta", false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CarpetScriptServer(MinecraftServer server)
|
public CarpetScriptServer(MinecraftServer server)
|
||||||
@@ -103,7 +103,7 @@ public class CarpetScriptServer
|
|||||||
tickStart = 0L;
|
tickStart = 0L;
|
||||||
stopAll = false;
|
stopAll = false;
|
||||||
holyMoly = server.getCommandManager().getDispatcher().getRoot().getChildren().stream().map(CommandNode::getName).collect(Collectors.toSet());
|
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()
|
public void initializeForWorld()
|
||||||
@@ -119,7 +119,7 @@ public class CarpetScriptServer
|
|||||||
Messenger.m(server.getCommandSource(), "Auto-loading world scarpet apps");
|
Messenger.m(server.getCommandSource(), "Auto-loading world scarpet apps");
|
||||||
for (String moduleName: listAvailableModules(false))
|
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);
|
return modules.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addScriptHost(ServerCommandSource source, String name, boolean perPlayer, boolean autoload, Function<ServerCommandSource, Boolean> commandValidator)
|
public boolean addScriptHost(ServerCommandSource source, String name, Function<ServerCommandSource, Boolean> commandValidator,
|
||||||
|
boolean perPlayer, boolean autoload, boolean isRuleApp)
|
||||||
{
|
{
|
||||||
//TODO add per player modules to support player actions better on a server
|
//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();
|
long start = System.nanoTime();
|
||||||
name = name.toLowerCase(Locale.ROOT);
|
name = name.toLowerCase(Locale.ROOT);
|
||||||
boolean reload = false;
|
boolean reload = false;
|
||||||
@@ -214,7 +215,7 @@ public class CarpetScriptServer
|
|||||||
Messenger.m(source, "r Failed to add "+name+" app");
|
Messenger.m(source, "r Failed to add "+name+" app");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CarpetScriptHost newHost = CarpetScriptHost.create(this, module, perPlayer, source);
|
CarpetScriptHost newHost = CarpetScriptHost.create(this, module, perPlayer, source, commandValidator, isRuleApp);
|
||||||
if (newHost == null)
|
if (newHost == null)
|
||||||
{
|
{
|
||||||
Messenger.m(source, "r Failed to add "+name+" app");
|
Messenger.m(source, "r Failed to add "+name+" app");
|
||||||
@@ -436,13 +437,26 @@ public class CarpetScriptServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class TransferData
|
||||||
|
{
|
||||||
|
boolean perUser;
|
||||||
|
Function<ServerCommandSource, Boolean> commandValidator;
|
||||||
|
boolean isRuleApp;
|
||||||
|
private TransferData(CarpetScriptHost host)
|
||||||
|
{
|
||||||
|
perUser = host.perUser;
|
||||||
|
commandValidator = host.commandValidator;
|
||||||
|
isRuleApp = host.isRuleApp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void reload(MinecraftServer server)
|
public void reload(MinecraftServer server)
|
||||||
{
|
{
|
||||||
Map<String, Boolean> apps = new HashMap<>();
|
Map<String, TransferData> apps = new HashMap<>();
|
||||||
modules.forEach((s, h) -> apps.put(s, h.perUser));
|
modules.forEach((s, h) -> apps.put(s, new TransferData(h)));
|
||||||
apps.keySet().forEach(s -> removeScriptHost(server.getCommandSource(), s, false, false));
|
apps.keySet().forEach(s -> removeScriptHost(server.getCommandSource(), s, false, false));
|
||||||
CarpetEventServer.Event.clearAllBuiltinEvents();
|
CarpetEventServer.Event.clearAllBuiltinEvents();
|
||||||
init();
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@ public class SettingsManager
|
|||||||
{
|
{
|
||||||
if (rule.getBoolValue() || (rule.type == String.class && !rule.get().equals("false")))
|
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 {
|
} else {
|
||||||
CarpetServer.scriptServer.removeScriptHost(source, rule.scarpetApp, false, true);
|
CarpetServer.scriptServer.removeScriptHost(source, rule.scarpetApp, false, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user