diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index 1f595615..fe54ef7a 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -96,9 +96,9 @@ public class CarpetScriptHost extends ScriptHost } @Override - protected Module getModuleByName(String name) + protected Module getModuleOrLibraryByName(String name) { - Module module = scriptServer.getModule(name); + Module module = scriptServer.getModule(name, true); if (module == null || module.getCode() == null) throw new InternalExpressionException("Unable to locate package: "+name); return module; diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index 135980cd..c7bb9516 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -41,9 +41,9 @@ public class CarpetScriptServer public final CarpetEventServer events; private static final List bundledModuleData = new ArrayList(){{ - add(new BundledModule("camera")); - add(new BundledModule("event_test")); - add(new BundledModule("stats_test")); + add(new BundledModule("camera", false)); + add(new BundledModule("event_test", false)); + add(new BundledModule("stats_test", false)); }}; public CarpetScriptServer() @@ -69,7 +69,7 @@ public class CarpetScriptServer } - public Module getModule(String name) + public Module getModule(String name, boolean allowLibraries) { File folder = CarpetServer.minecraft_server.getLevelStorage().resolveFile( CarpetServer.minecraft_server.getLevelName(), "scripts"); @@ -81,10 +81,14 @@ public class CarpetScriptServer { return new FileModule(script); } + if (allowLibraries && script.getName().equalsIgnoreCase(name+".scl")) + { + return new FileModule(script); + } } for (Module moduleData : bundledModuleData) { - if (moduleData.getName().equalsIgnoreCase(name)) + if (moduleData.getName().equalsIgnoreCase(name) && (allowLibraries || !moduleData.isLibrary())) { return moduleData; } @@ -99,7 +103,7 @@ public class CarpetScriptServer { for (Module mi : bundledModuleData) { - moduleNames.add(mi.getName()); + if (!mi.isLibrary()) moduleNames.add(mi.getName()); } } File folder = CarpetServer.minecraft_server.getLevelStorage().resolveFile( @@ -129,7 +133,7 @@ public class CarpetScriptServer { //TODO add per player modules to support player actions better on a server name = name.toLowerCase(Locale.ROOT); - Module module = getModule(name); + Module module = getModule(name, false); if (module == null) { Messenger.m(source, "r Failed to add "+name+" app"); diff --git a/src/main/java/carpet/script/ScriptHost.java b/src/main/java/carpet/script/ScriptHost.java index d3d609d4..f104731b 100644 --- a/src/main/java/carpet/script/ScriptHost.java +++ b/src/main/java/carpet/script/ScriptHost.java @@ -93,7 +93,7 @@ public abstract class ScriptHost public void importModule(Context c, String moduleName) { if (modules.containsKey(moduleName)) return; // aready imported - Module module = getModuleByName(moduleName); + Module module = getModuleOrLibraryByName(moduleName); if (modules.containsKey(module.getName())) return; // aready imported, once again, in case some discrepancies in names? modules.put(module.getName(), module); ModuleData data = new ModuleData(module); @@ -134,7 +134,7 @@ public abstract class ScriptHost } } - protected abstract Module getModuleByName(String name); // this should be shell out in the executor + protected abstract Module getModuleOrLibraryByName(String name); // this should be shell out in the executor protected abstract void runModuleCode(Context c, Module module); // this should be shell out in the executor diff --git a/src/main/java/carpet/script/bundled/BundledModule.java b/src/main/java/carpet/script/bundled/BundledModule.java index 7b68d8d8..019673ca 100644 --- a/src/main/java/carpet/script/bundled/BundledModule.java +++ b/src/main/java/carpet/script/bundled/BundledModule.java @@ -10,13 +10,15 @@ public class BundledModule extends Module { private String name; private String code; - public BundledModule(String scriptName) + private boolean library; + public BundledModule(String scriptName, boolean isLibrary) { + library = isLibrary; try { name = scriptName.toLowerCase(Locale.ROOT); code = IOUtils.toString( - getClass().getClassLoader().getResourceAsStream("assets/carpet/scripts/"+name+".sc"), + getClass().getClassLoader().getResourceAsStream("assets/carpet/scripts/"+name+(isLibrary?".scl":".sc")), StandardCharsets.UTF_8 ); } @@ -26,15 +28,13 @@ public class BundledModule extends Module code = null; } } - @Override - public String getName() - { - return name; - } @Override - public String getCode() - { - return code; - } + public boolean isLibrary() { return library; } + + @Override + public String getName() { return name; } + + @Override + public String getCode() { return code; } } \ No newline at end of file diff --git a/src/main/java/carpet/script/bundled/FileModule.java b/src/main/java/carpet/script/bundled/FileModule.java index 301fae7a..a72050db 100644 --- a/src/main/java/carpet/script/bundled/FileModule.java +++ b/src/main/java/carpet/script/bundled/FileModule.java @@ -18,11 +18,13 @@ public class FileModule extends Module { private String name; private String code; + private boolean library; public FileModule(File sourceFile) { + library = sourceFile.getName().endsWith(".scl"); try { - name = sourceFile.getName().replaceFirst("\\.sc","").toLowerCase(Locale.ROOT); + name = sourceFile.getName().replaceFirst("\\.scl?","").toLowerCase(Locale.ROOT); code = new String(Files.readAllBytes(sourceFile.toPath())); } catch ( IOException e) @@ -31,12 +33,6 @@ public class FileModule extends Module code = null; } } - public FileModule fromName(String name) - { - File sourceFile = CarpetServer.minecraft_server.getLevelStorage().resolveFile( - CarpetServer.minecraft_server.getLevelName(), "scripts/"+name+".sc"); - return new FileModule(sourceFile); - } @Override public String getName() { @@ -50,9 +46,9 @@ public class FileModule extends Module } @Override - public boolean isInternal() + public boolean isLibrary() { - return false; + return library; } //copied private method from net.minecraft.nbt.NbtIo.read() diff --git a/src/main/java/carpet/script/bundled/Module.java b/src/main/java/carpet/script/bundled/Module.java index adf85549..1cc804f1 100644 --- a/src/main/java/carpet/script/bundled/Module.java +++ b/src/main/java/carpet/script/bundled/Module.java @@ -14,7 +14,7 @@ public abstract class Module { public abstract String getName(); public abstract String getCode(); - public boolean isInternal() {return true; } + public abstract boolean isLibrary(); public Tag getData(String file) {