diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index f54a66f3..372657c2 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -61,6 +61,7 @@ public class CarpetServer // static for now - easier to handle all around the co e.onServerLoaded(server); }); scriptServer = new CarpetScriptServer(); + scriptServer.loadAllWorldScripts(); MobAI.resetTrackers(); } diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java index 033a6dc1..347876f2 100644 --- a/src/main/java/carpet/commands/ScriptCommand.java +++ b/src/main/java/carpet/commands/ScriptCommand.java @@ -205,7 +205,7 @@ public class ScriptCommand ))))))))); LiteralArgumentBuilder a = literal("load").requires( (player) -> player.hasPermissionLevel(2) ). then(argument("package", StringArgumentType.word()). - suggests( (cc, bb) -> suggestMatching(CarpetServer.scriptServer.listAvailableModules(),bb)). + suggests( (cc, bb) -> suggestMatching(CarpetServer.scriptServer.listAvailableModules(true),bb)). executes((cc) -> { boolean success = CarpetServer.scriptServer.addScriptHost(cc.getSource(), StringArgumentType.getString(cc, "package"), true); diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index 142bfd6f..f9e5c602 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -1,5 +1,6 @@ package carpet.script; +import carpet.settings.CarpetSettings; import carpet.CarpetServer; import carpet.script.bundled.CameraPathModule; import carpet.script.bundled.FileModule; @@ -51,6 +52,17 @@ public class CarpetScriptServer stopAll = false; resetErrorSnooper(); holyMoly = CarpetServer.minecraft_server.getCommandManager().getDispatcher().getRoot().getChildren().stream().map(CommandNode::getName).collect(Collectors.toSet()); + } + + public void loadAllWorldScripts() + { + if (CarpetSettings.scriptsAutoload) + { + for (String moduleName: listAvailableModules(false)) + { + addScriptHost(CarpetServer.minecraft_server.getCommandSource(), moduleName, true); + } + } } @@ -77,12 +89,15 @@ public class CarpetScriptServer return null; } - public List listAvailableModules() + public List listAvailableModules(boolean includeBuiltIns) { List moduleNames = new ArrayList<>(); - for (ModuleInterface mi: bundledModuleData) + if (includeBuiltIns) { - moduleNames.add(mi.getName()); + for (ModuleInterface mi : bundledModuleData) + { + moduleNames.add(mi.getName()); + } } File folder = CarpetServer.minecraft_server.getLevelStorage().resolveFile( CarpetServer.minecraft_server.getLevelName(), "scripts"); diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index a91c1be9..6e2cd407 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -209,6 +209,13 @@ public class CarpetSettings @Rule(desc = "Enables /script command", extra = "An in-game scripting API for Scarpet programming language", category = COMMAND) public static boolean commandScript = true; + @Rule( + desc = "Scarpet script from world files will autoload on server/world start ", + extra = "if /script is enabled", + category = CREATIVE + ) + public static boolean scriptsAutoload = false; + @Rule(desc = "Enables /player command to control/spawn players", category = COMMAND) public static boolean commandPlayer = true;