This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
ScriptCraft/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftCore.java

65 lines
2.3 KiB
Java
Raw Normal View History

2020-04-28 00:15:24 +00:00
package com.thebrokenrail.scriptcraft.core;
2020-05-05 00:36:32 +00:00
import com.thebrokenrail.scriptcraft.core.quickjs.JSException;
2020-04-28 00:15:24 +00:00
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSNative;
import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSManager;
2020-04-28 20:18:22 +00:00
import net.fabricmc.api.ModInitializer;
2020-04-28 00:15:24 +00:00
import net.fabricmc.loader.api.FabricLoader;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
@SuppressWarnings("unused")
2020-04-28 20:18:22 +00:00
public class ScriptCraftCore implements ModInitializer {
2020-04-28 00:15:24 +00:00
private static final HashMap<String, Bridge> bridges = new HashMap<>();
public static void addBridge(String name, Bridge bridge) {
bridges.put(name, bridge);
}
2020-05-05 00:36:32 +00:00
public static Object useBridgeNative(String name, Object... args) {
2020-04-28 00:15:24 +00:00
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);
}
2020-05-05 00:36:32 +00:00
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);
}
2020-04-28 00:15:24 +00:00
public static final String NAMESPACE = "scriptcraft";
public static final Pattern MOD_ID_PATTERN = Pattern.compile("[a-z][a-z0-9-_]{1,63}");
2020-04-28 20:18:22 +00:00
@Override
public void onInitialize() {
2020-04-28 00:15:24 +00:00
QuickJSManager.init(new QuickJSManager.Task() {
@Override
protected Object run(QuickJSNative quickjs) {
2020-05-24 18:09:25 +00:00
List<ScriptCraftEntryPoint> mods = FabricLoader.getInstance().getEntrypoints(NAMESPACE, ScriptCraftEntryPoint.class);
for (ScriptCraftEntryPoint mod : mods) {
mod.registerBridges();
2020-04-28 00:15:24 +00:00
}
2020-05-24 18:09:25 +00:00
for (ScriptCraftEntryPoint mod : mods) {
2020-05-26 14:12:45 +00:00
quickjs.run(mod.getEntryPoint());
2020-05-04 00:26:57 +00:00
}
2020-04-28 00:15:24 +00:00
return null;
}
});
}
}