From cbcbaa2f2957582eda69f5b14079fae8e4fd4252 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sun, 3 May 2020 20:26:57 -0400 Subject: [PATCH] Improve Init --- build.gradle | 3 +-- .../thebrokenrail/scriptcraft/api/ScriptCraftAPI.java | 5 ++--- .../thebrokenrail/scriptcraft/api/bridge/Bridges.java | 1 + .../{event/Events.java => bridge/EventBridges.java} | 8 ++++---- .../scriptcraft/core/ScriptCraftCore.java | 10 ++++++++-- .../scriptcraft/core/ScriptCraftEntrypoint.java | 3 +++ src/main/resources/fabric.mod.json | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) rename src/main/java/com/thebrokenrail/scriptcraft/api/{event/Events.java => bridge/EventBridges.java} (58%) diff --git a/build.gradle b/build.gradle index 9eaf077..ac9c081 100644 --- a/build.gradle +++ b/build.gradle @@ -26,12 +26,11 @@ apply from: './typescript.build.gradle' apply from: './jni.build.gradle' processResources { - inputs.property 'version', version inputs.property 'name', rootProject.name from(sourceSets.main.resources.srcDirs) { include 'fabric.mod.json' - expand 'version': version, 'name': rootProject.name + expand 'name': rootProject.name } from(sourceSets.main.resources.srcDirs) { diff --git a/src/main/java/com/thebrokenrail/scriptcraft/api/ScriptCraftAPI.java b/src/main/java/com/thebrokenrail/scriptcraft/api/ScriptCraftAPI.java index e0f1e7b..4b47b03 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/api/ScriptCraftAPI.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/api/ScriptCraftAPI.java @@ -1,7 +1,6 @@ package com.thebrokenrail.scriptcraft.api; import com.thebrokenrail.scriptcraft.api.bridge.Bridges; -import com.thebrokenrail.scriptcraft.api.event.Events; import com.thebrokenrail.scriptcraft.core.ScriptCraftEntrypoint; @SuppressWarnings("unused") @@ -21,8 +20,8 @@ public class ScriptCraftAPI implements ScriptCraftEntrypoint { return false; } - static { + @Override + public void registerBridges() { Bridges.init(); - Events.init(); } } \ No newline at end of file diff --git a/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java b/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java index a95b507..174ce8a 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java @@ -15,5 +15,6 @@ public class Bridges { InventoryBridges.register(); PlayerEntityBridges.register(); BlockEntityBridges.register(); + EventBridges.register(); } } diff --git a/src/main/java/com/thebrokenrail/scriptcraft/api/event/Events.java b/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/EventBridges.java similarity index 58% rename from src/main/java/com/thebrokenrail/scriptcraft/api/event/Events.java rename to src/main/java/com/thebrokenrail/scriptcraft/api/bridge/EventBridges.java index 61a843d..db98846 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/api/event/Events.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/EventBridges.java @@ -1,10 +1,10 @@ -package com.thebrokenrail.scriptcraft.api.event; +package com.thebrokenrail.scriptcraft.api.bridge; import com.thebrokenrail.scriptcraft.core.ScriptCraftCore; import net.fabricmc.fabric.api.event.world.WorldTickCallback; -public class Events { - public static void init() { - WorldTickCallback.EVENT.register(world -> ScriptCraftCore.useBridge("TickEvent.run", world)); +class EventBridges { + static void register() { + WorldTickCallback.EVENT.register(world -> ScriptCraftCore.useBridge("Event.tick", world)); } } diff --git a/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftCore.java b/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftCore.java index c5700da..1d8339f 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftCore.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftCore.java @@ -5,6 +5,7 @@ import com.thebrokenrail.scriptcraft.core.quickjs.QuickJSManager; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Pattern; @@ -40,15 +41,20 @@ public class ScriptCraftCore implements ModInitializer { @Override protected Object run(QuickJSNative quickjs) { List mods = FabricLoader.getInstance().getEntrypoints(NAMESPACE, ScriptCraftEntrypoint.class); + List initializedMods = new ArrayList<>(); for (ScriptCraftEntrypoint mod : mods) { if (MOD_ID_PATTERN.matcher(mod.getModID()).matches()) { + mod.registerBridges(); if (mod.shouldAutoLoad()) { - quickjs.run("import '" + mod.getModID() + "';"); + initializedMods.add(mod); } } else { - throw new RuntimeException("Invalid Mod ID: " + mod.getModID()); + System.err.println("Invalid Mod ID: " + mod.getModID()); } } + for (ScriptCraftEntrypoint mod : initializedMods) { + quickjs.run("import '" + mod.getModID() + "';"); + } return null; } }); diff --git a/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftEntrypoint.java b/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftEntrypoint.java index 44524d8..8dcea50 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftEntrypoint.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/core/ScriptCraftEntrypoint.java @@ -8,4 +8,7 @@ public interface ScriptCraftEntrypoint { default boolean shouldAutoLoad() { return true; } + + default void registerBridges() { + } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 45b8c09..080a177 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "scriptcraft", - "version": "${version}", + "version": "1.0.0", "name": "${name}", "description": "JS API for Minecraft", "authors": [