package com.thebrokenrail.scriptcraft; import com.thebrokenrail.scriptcraft.quickjs.QuickJS; import com.thebrokenrail.scriptcraft.quickjs.QuickJSManager; import com.thebrokenrail.scriptcraft.util.ScriptCraftEntrypoint; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import java.util.List; import java.util.regex.Pattern; public class ScriptCraft implements ModInitializer { 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(QuickJS quickjs) { List 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; } }); } }