TheBrokenRail
cb9b124ec7
Some checks failed
ScriptCraft/pipeline/head There was a failure building this commit
57 lines
2.1 KiB
Java
57 lines
2.1 KiB
Java
package com.thebrokenrail.scriptcraft.core;
|
|
|
|
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSNative;
|
|
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSManager;
|
|
import net.fabricmc.api.ModInitializer;
|
|
import net.fabricmc.loader.api.FabricLoader;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.regex.Pattern;
|
|
|
|
@SuppressWarnings("unused")
|
|
public class ScriptCraftCore implements ModInitializer {
|
|
private static final HashMap<String, Bridge> bridges = new HashMap<>();
|
|
|
|
public static void addBridge(String name, Bridge bridge) {
|
|
bridges.put(name, bridge);
|
|
}
|
|
|
|
public static Object useBridge(String name, Object... args) {
|
|
QuickJSManager.Task task = new QuickJSManager.Task() {
|
|
@Override
|
|
protected Object run(QuickJSNative quickjs) {
|
|
if (bridges.containsKey(name)) {
|
|
return bridges.get(name).use(args);
|
|
} else {
|
|
throw new RuntimeException("Invalid Bridge: '" + name + '\'');
|
|
}
|
|
}
|
|
};
|
|
return QuickJSManager.sendTaskFromQuickJS(task);
|
|
}
|
|
|
|
public static final String NAMESPACE = "scriptcraft";
|
|
public static final Pattern MOD_ID_PATTERN = Pattern.compile("[a-z][a-z0-9-_]{1,63}");
|
|
|
|
@Override
|
|
public void onInitialize() {
|
|
QuickJSManager.init(new QuickJSManager.Task() {
|
|
@Override
|
|
protected Object run(QuickJSNative quickjs) {
|
|
List<ScriptCraftEntrypoint> mods = FabricLoader.getInstance().getEntrypoints(NAMESPACE, ScriptCraftEntrypoint.class);
|
|
for (ScriptCraftEntrypoint mod : mods) {
|
|
if (MOD_ID_PATTERN.matcher(mod.getModID()).matches()) {
|
|
if (mod.shouldAutoLoad()) {
|
|
quickjs.run("import '" + mod.getModID() + "';");
|
|
}
|
|
} else {
|
|
throw new RuntimeException("Invalid Mod ID: " + mod.getModID());
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
}
|