65 lines
2.3 KiB
Java
65 lines
2.3 KiB
Java
package com.thebrokenrail.scriptcraft.core;
|
|
|
|
import com.thebrokenrail.scriptcraft.core.quickjs.JSException;
|
|
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSNative;
|
|
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSManager;
|
|
import com.thebrokenrail.scriptcraft.core.util.Bridge;
|
|
import com.thebrokenrail.scriptcraft.core.util.ScriptCraftEntryPoint;
|
|
import net.fabricmc.api.ModInitializer;
|
|
import net.fabricmc.loader.api.FabricLoader;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
@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 useBridgeNative(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 Object useBridge(String method, Object... args) {
|
|
QuickJSManager.Task task = new QuickJSManager.Task() {
|
|
@Override
|
|
protected Object run(QuickJSNative quickjs) throws JSException {
|
|
return quickjs.bridge(method, args);
|
|
}
|
|
};
|
|
return QuickJSManager.sendTaskToQuickJS(task);
|
|
}
|
|
|
|
public static final String NAMESPACE = "scriptcraft";
|
|
|
|
@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) {
|
|
mod.registerBridges();
|
|
}
|
|
for (ScriptCraftEntryPoint mod : mods) {
|
|
quickjs.run(mod.getEntryPoint());
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
}
|