Fix Module Loading
Some checks failed
ScriptCraft/pipeline/head There was a failure building this commit
Some checks failed
ScriptCraft/pipeline/head There was a failure building this commit
This commit is contained in:
parent
fca6d18021
commit
7fc1f01736
@ -469,9 +469,25 @@ static int eval_buf(JNIEnv *env, JSContext *ctx, const void *buf, int buf_len, c
|
|||||||
JNIEXPORT void JNICALL Java_com_thebrokenrail_scriptcraft_core_quickjs_QuickJSNative_run(JNIEnv *env, jobject this_val, jstring data) {
|
JNIEXPORT void JNICALL Java_com_thebrokenrail_scriptcraft_core_quickjs_QuickJSNative_run(JNIEnv *env, jobject this_val, jstring data) {
|
||||||
JSContext *ctx = (JSContext *) get_pointer(env, this_val, "ctx");
|
JSContext *ctx = (JSContext *) get_pointer(env, this_val, "ctx");
|
||||||
|
|
||||||
|
JSValue module_name, json_str;
|
||||||
|
char *init_js;
|
||||||
|
|
||||||
const char *native_string = (*env)->GetStringUTFChars(env, data, 0);
|
const char *native_string = (*env)->GetStringUTFChars(env, data, 0);
|
||||||
eval_buf(env, ctx, native_string, strlen(native_string), "<init>", JS_EVAL_TYPE_MODULE);
|
module_name = JS_NewString(ctx, native_string);
|
||||||
(*env)->ReleaseStringUTFChars(env, data, native_string);
|
(*env)->ReleaseStringUTFChars(env, data, native_string);
|
||||||
|
|
||||||
|
json_str = JS_JSONStringify(ctx, module_name, JS_NULL, JS_NULL);
|
||||||
|
JS_FreeValue(ctx, module_name);
|
||||||
|
|
||||||
|
const char *json_native_str = JS_ToCString(ctx, json_str);
|
||||||
|
JS_FreeValue(ctx, json_str);
|
||||||
|
|
||||||
|
asprintf(&init_js, "import %s;", json_native_str);
|
||||||
|
JS_FreeCString(ctx, json_native_str);
|
||||||
|
|
||||||
|
eval_buf(env, ctx, init_js, strlen(init_js), "<init>", JS_EVAL_TYPE_MODULE);
|
||||||
|
|
||||||
|
free(init_js);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_data(char *data, int err) {
|
void print_data(char *data, int err) {
|
||||||
|
@ -55,7 +55,7 @@ public class ScriptCraftCore implements ModInitializer {
|
|||||||
mod.registerBridges();
|
mod.registerBridges();
|
||||||
}
|
}
|
||||||
for (ScriptCraftEntryPoint mod : mods) {
|
for (ScriptCraftEntryPoint mod : mods) {
|
||||||
quickjs.run("import `" + mod.getEntryPoint().replaceAll("`", "\\`") + "`;");
|
quickjs.run(mod.getEntryPoint());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -12,17 +12,26 @@ import java.io.InputStreamReader;
|
|||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class QuickJSModules {
|
public class QuickJSModules {
|
||||||
|
private static boolean isDirectory(String data, String path, Class<?> clazz) {
|
||||||
|
String[] lines = data.split("\n");
|
||||||
|
for (String line : lines) {
|
||||||
|
InputStream stream = clazz.getResourceAsStream(path + File.separator + line);
|
||||||
|
return stream != null;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static String loadModule(String name) {
|
public static String loadModule(String name) {
|
||||||
List<ScriptCraftEntryPoint> mods = FabricLoader.getInstance().getEntrypoints(ScriptCraftCore.NAMESPACE, ScriptCraftEntryPoint.class);
|
List<ScriptCraftEntryPoint> mods = FabricLoader.getInstance().getEntrypoints(ScriptCraftCore.NAMESPACE, ScriptCraftEntryPoint.class);
|
||||||
for (ScriptCraftEntryPoint mod : mods) {
|
for (ScriptCraftEntryPoint mod : mods) {
|
||||||
//noinspection CatchMayIgnoreException
|
//noinspection CatchMayIgnoreException
|
||||||
try {
|
try {
|
||||||
InputStream stream = mod.getClass().getResourceAsStream(File.separator + ScriptCraftCore.NAMESPACE + File.separator + name);
|
String path = File.separator + ScriptCraftCore.NAMESPACE + File.separator + name;
|
||||||
|
InputStream stream = mod.getClass().getResourceAsStream(path);
|
||||||
|
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
StringBuilder textBuilder = new StringBuilder();
|
StringBuilder textBuilder = new StringBuilder();
|
||||||
@ -34,7 +43,7 @@ public class QuickJSModules {
|
|||||||
}
|
}
|
||||||
stream.close();
|
stream.close();
|
||||||
|
|
||||||
return textBuilder.toString();
|
return isDirectory(textBuilder.toString(), path, mod.getClass()) ? null : textBuilder.toString();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
}
|
}
|
||||||
@ -52,13 +61,7 @@ public class QuickJSModules {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String[] BUILTIN_MODULES = new String[]{"scriptcraft-core"};
|
|
||||||
|
|
||||||
public static String normalizeModule(String baseName, String name) {
|
public static String normalizeModule(String baseName, String name) {
|
||||||
if (Arrays.asList(BUILTIN_MODULES).contains(name)) {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
String normalizedPath;
|
String normalizedPath;
|
||||||
|
|
||||||
baseName = baseName.replaceAll("/", File.separator);
|
baseName = baseName.replaceAll("/", File.separator);
|
||||||
@ -83,6 +86,6 @@ public class QuickJSModules {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return normalizedPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ public class QuickJSNative {
|
|||||||
|
|
||||||
public native Object bridge(String method, Object... args) throws JSException;
|
public native Object bridge(String method, Object... args) throws JSException;
|
||||||
|
|
||||||
public native void run(String data);
|
public native void run(String module);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user