From acce96eda1f150a503371275bc40a8ea670e60b4 Mon Sep 17 00:00:00 2001 From: mjarduk Date: Sun, 19 Apr 2026 16:22:26 +0300 Subject: [PATCH 1/3] Resolve the build issues caused by dependsOn. Unfortunately, as it turns out, declaring the depedency on the task from Minecraft is condemnable enough to gradle that we can't actually do it that way. Let's hardwire it so that it at least builds instead. --- projects/Fabric/build.gradle.kts | 1 - projects/Minecraft/build.gradle.kts | 4 ---- projects/NeoForge/build.gradle.kts | 4 ++++ 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index aec8506..5e8f76c 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -40,7 +40,6 @@ afterEvaluate { extensions.getByType().configureJarTask(tasks.shadowJar.get()) } -// TODO: Figure out how to declare this in :Minecraft instead tasks.named("processResources") { dependsOn(project(":Minecraft").tasks.named("processResources")) } \ No newline at end of file diff --git a/projects/Minecraft/build.gradle.kts b/projects/Minecraft/build.gradle.kts index c0a8d01..3503b98 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -29,10 +29,6 @@ val generateBlockstatesTask = tasks.register("generateBlockstates") { outputs.dir(project.layout.buildDirectory.dir("generated/resources")) } -tasks.named("processResources") { - dependsOn(generateBlockstatesTask) -} - sourceSets.main.get().resources { srcDir(generateBlockstatesTask) } \ No newline at end of file diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index 7fcf2cd..5ee6d21 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -43,4 +43,8 @@ sourceSets.main { afterEvaluate { extensions.getByType().configureJarTask(tasks.shadowJar.get()) +} + +tasks.named("processResources") { + dependsOn(project(":Minecraft").tasks.named("processResources")) } \ No newline at end of file From f3d45b7e580a5680f854b67d5f0caacd5187eefc Mon Sep 17 00:00:00 2001 From: mjarduk Date: Sun, 19 Apr 2026 16:25:26 +0300 Subject: [PATCH 2/3] Even better, move it to a common point. --- buildSrc/src/main/kotlin/oc-loader.gradle.kts | 4 ++++ projects/Fabric/build.gradle.kts | 9 ++------- projects/NeoForge/build.gradle.kts | 4 ---- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/buildSrc/src/main/kotlin/oc-loader.gradle.kts b/buildSrc/src/main/kotlin/oc-loader.gradle.kts index 6887605..cd95c06 100644 --- a/buildSrc/src/main/kotlin/oc-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-loader.gradle.kts @@ -43,4 +43,8 @@ tasks.withType { relocate("com.typesafe.config", "li.cil.ocreloaded.lib.config") archiveClassifier.set("all") +} + +tasks.named("processResources") { + dependsOn(project(":Minecraft").tasks.named("processResources")) } \ No newline at end of file diff --git a/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index 5e8f76c..fee5297 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -1,6 +1,5 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar; -import net.fabricmc.loom.task.RemapJarTask; -import com.matyrobbrt.registrationutils.gradle.RegExtension; +import com.matyrobbrt.registrationutils.gradle.RegExtension +import net.fabricmc.loom.task.RemapJarTask evaluationDependsOn(":Minecraft") @@ -38,8 +37,4 @@ tasks.build { afterEvaluate { extensions.getByType().configureJarTask(tasks.shadowJar.get()) -} - -tasks.named("processResources") { - dependsOn(project(":Minecraft").tasks.named("processResources")) } \ No newline at end of file diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index 5ee6d21..7fcf2cd 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -43,8 +43,4 @@ sourceSets.main { afterEvaluate { extensions.getByType().configureJarTask(tasks.shadowJar.get()) -} - -tasks.named("processResources") { - dependsOn(project(":Minecraft").tasks.named("processResources")) } \ No newline at end of file From cbd760775ae669545022d1d60f324f6864470071 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Sun, 19 Apr 2026 16:15:33 -0400 Subject: [PATCH 3/3] Fix running on NeoForge --- .gitignore | 3 +- projects/Core/build.gradle.kts | 34 ++++++++++++++++++- .../repack/com/naef/jnlua/CustomLoader.java | 9 +++++ projects/Fabric/build.gradle.kts | 3 +- .../server/machine/lua/LuaCFactory.java | 7 ++-- .../machine/lua/NativeSupportLoader.java | 9 +++++ .../src/main/resources/ocreloaded.mixins.json | 2 +- projects/NeoForge/build.gradle.kts | 2 ++ 8 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 projects/Core/src/jninject/java/li/cil/repack/com/naef/jnlua/CustomLoader.java create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/NativeSupportLoader.java diff --git a/.gitignore b/.gitignore index 3296c96..03501ba 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ projects/*/bin .vscode .idea -.eclipse \ No newline at end of file +.eclipse +buildSrc/.kotlin \ No newline at end of file diff --git a/projects/Core/build.gradle.kts b/projects/Core/build.gradle.kts index b96f01e..acaf89c 100644 --- a/projects/Core/build.gradle.kts +++ b/projects/Core/build.gradle.kts @@ -6,9 +6,41 @@ repositories { mavenCentral() } +sourceSets { + val jninject by creating {} +} + +val moddedJNLua by tasks.registering(Jar::class) { + archiveFileName.set("OpenComputers-JNLua-injected.jar") + destinationDirectory.set(layout.buildDirectory.dir("injected-libs")) + + from(zipTree(file("../../libs/OpenComputers-JNLua.jar"))) { + exclude("META-INF/MANIFEST.MF") + } + from(sourceSets["jninject"].output) + + manifest { + attributes("Automatic-Module-Name" to "li.cil.oc.jnlua") + } +} + +val moddedLuaJ by tasks.registering(Jar::class) { + archiveFileName.set("OpenComputers-LuaJ-modded.jar") + destinationDirectory.set(layout.buildDirectory.dir("injected-libs")) + + from(zipTree(file("../../libs/OpenComputers-LuaJ.jar"))) { + exclude("META-INF/MANIFEST.MF") + } + + manifest { + attributes("Automatic-Module-Name" to "li.cil.oc.luaj") + } +} + dependencies { compileOnly(libs.slf4j) shadeApi(libs.typesafeConfig) - shadeApi(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + shadeApi(files(moddedJNLua)) + shadeApi(files(moddedLuaJ)) } \ No newline at end of file diff --git a/projects/Core/src/jninject/java/li/cil/repack/com/naef/jnlua/CustomLoader.java b/projects/Core/src/jninject/java/li/cil/repack/com/naef/jnlua/CustomLoader.java new file mode 100644 index 0000000..58565df --- /dev/null +++ b/projects/Core/src/jninject/java/li/cil/repack/com/naef/jnlua/CustomLoader.java @@ -0,0 +1,9 @@ +package li.cil.repack.com.naef.jnlua; + +public class CustomLoader { + + public static void load(String lib) { + System.load(lib); + } + +} diff --git a/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index fee5297..8ea2098 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -27,8 +27,9 @@ sourceSets.main { } tasks.withType { + dependsOn(tasks.shadowJar) inputFile.set(tasks.shadowJar.get().archiveFile) - archiveClassifier.set("") + archiveClassifier.set("mod") } tasks.build { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java index 53b5f01..232591c 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java @@ -14,6 +14,7 @@ import li.cil.ocreloaded.core.machine.architecture.luac.LuaCStateFactory; import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; +import li.cil.repack.com.naef.jnlua.CustomLoader; import li.cil.repack.com.naef.jnlua.LuaState; import li.cil.repack.com.naef.jnlua.LuaState.Library; import li.cil.repack.com.naef.jnlua.LuaStateFiveThree; @@ -67,14 +68,14 @@ public Optional createFactory(String architecture) { LoggerFactory.getLogger(getClass()).info("Loading arch {}", architecture); switch (architecture) { case "lua52": - NativeSupport.getInstance().setLoader(() -> System.load(getTempName(architecture))); + NativeSupport.getInstance().setLoader(() -> CustomLoader.load(getTempName(architecture))); return loaded(() -> new LuaState(), LIBRARIES_52); case "lua53": // Lua53 still needs Lua52 libs if (createFactory("lua52").isEmpty()) return Optional.empty(); NativeSupport.getInstance().setLoader(() -> { - System.load(getTempName("lua52")); - System.load(getTempName(architecture)); + CustomLoader.load(getTempName("lua52")); + CustomLoader.load(getTempName(architecture)); }); return loaded(() -> new LuaStateFiveThree(), LIBRARIES_53); default: diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/NativeSupportLoader.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/NativeSupportLoader.java new file mode 100644 index 0000000..2fcc989 --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/NativeSupportLoader.java @@ -0,0 +1,9 @@ +package li.cil.ocreloaded.minecraft.server.machine.lua; + +import li.cil.repack.com.naef.jnlua.NativeSupport.Loader; + +public interface NativeSupportLoader extends Loader { + + void loadLib(String libPath); + +} diff --git a/projects/Minecraft/src/main/resources/ocreloaded.mixins.json b/projects/Minecraft/src/main/resources/ocreloaded.mixins.json index 06a5e0e..892384f 100644 --- a/projects/Minecraft/src/main/resources/ocreloaded.mixins.json +++ b/projects/Minecraft/src/main/resources/ocreloaded.mixins.json @@ -1,6 +1,6 @@ { "required": true, - "package": "oc.cil.ocreloaded.mixin", + "package": "li.cil.ocreloaded.mixin", "compatibilityLevel": "JAVA_21", "minVersion": "0.8", "client": [ diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index 7fcf2cd..ee2a588 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -30,6 +30,8 @@ repositories { } dependencies { + jarJar(files(project.configurations.getByName("shade"))) + jarJar(files(project.configurations.getByName("shadeApi"))) "additionalRuntimeClasspath"(files(project.configurations.getByName("shade"))) "additionalRuntimeClasspath"(files(project.configurations.getByName("shadeApi"))) shadeApi(project(":Minecraft"))