aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-09-12 13:34:11 +0200
committerLinnea Gräf <nea@nea.moe>2024-09-12 13:34:11 +0200
commit52623b715d395f65f96e09f4492285935b797b4b (patch)
tree1b96097a17dd9c81671478b11d127ce3278ddada
parentab809e197f3e8c9a51745ee9510bc65c952c0cc8 (diff)
downloadfirmament-52623b715d395f65f96e09f4492285935b797b4b.tar.gz
firmament-52623b715d395f65f96e09f4492285935b797b4b.tar.bz2
firmament-52623b715d395f65f96e09f4492285935b797b4b.zip
Isolate CIT resewn compat
-rw-r--r--build.gradle.kts22
-rw-r--r--buildSrc/src/InnerJarsUnpacker.kt70
-rw-r--r--citresewn-defaults-1.2.0+1.21.jarbin224043 -> 0 bytes
-rw-r--r--src/compat/citresewn/java/ConditionDirectAccessHelper.kt (renamed from src/main/kotlin/util/ConditionNBTMixin.kt)3
-rw-r--r--src/compat/citresewn/java/moe/nea/firmament/mixins/compat/citresewn/MixinConditionComponents.java (renamed from src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java)8
-rw-r--r--src/main/kotlin/events/subscription/SubscriptionList.kt3
-rw-r--r--src/main/resources/fabric.mod.json7
-rw-r--r--symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt2
8 files changed, 103 insertions, 12 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index cb31469..cdb97ff 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -94,6 +94,18 @@ kotlin {
}
}
}
+fun String.capitalizeN() = replaceFirstChar { it.uppercaseChar() }
+fun innerJarsOf(name: String, dependency: Dependency): FileCollection {
+ val task = tasks.create("unpackInnerJarsFor${name.capitalizeN()}", InnerJarsUnpacker::class) {
+ this.inputJars.setFrom(files(configurations.detachedConfiguration(dependency)))
+ this.outputDir.set(layout.buildDirectory.dir("unpackedJars/$name").also {
+ it.get().asFile.mkdirs()
+ })
+ }
+ println("Constructed innerJars task: ${project.files(task).toList()}")
+ return project.files(task)
+}
+
val compatSourceSets: MutableSet<SourceSet> = mutableSetOf()
fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): SourceSet {
val ss = sourceSets.create(name) {
@@ -103,7 +115,7 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): Source
compatSourceSets.add(ss)
loom.createRemapConfigurations(ss)
val mainSS = sourceSets.main.get()
- val upperName = ss.name.replaceFirstChar { it.uppercaseChar() }
+ val upperName = ss.name.capitalizeN()
configurations {
(ss.implementationConfigurationName) {
extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
@@ -140,6 +152,7 @@ val SourceSet.modImplementationConfigurationName
}!!.sourceConfiguration
val configuredSourceSet = createIsolatedSourceSet("configured")
val sodiumSourceSet = createIsolatedSourceSet("sodium")
+val citResewnSourceSet = createIsolatedSourceSet("citresewn")
val shadowMe by configurations.creating {
exclude(group = "org.jetbrains.kotlin")
@@ -163,8 +176,6 @@ val nonModImplentation by configurations.creating {
configurations.implementation.get().extendsFrom(this)
}
-loom {
-}
dependencies {
// Minecraft dependencies
@@ -208,6 +219,10 @@ dependencies {
(configuredSourceSet.modImplementationConfigurationName)(libs.configured)
(sodiumSourceSet.modImplementationConfigurationName)(libs.sodium)
+ (citResewnSourceSet.modImplementationConfigurationName)(
+ innerJarsOf("citresewn", dependencies.create(libs.citresewn.get())).asFileTree)
+ (citResewnSourceSet.modImplementationConfigurationName)(libs.citresewn)
+
// Actual dependencies
modCompileOnly(libs.rei.api) {
exclude(module = "architectury")
@@ -227,7 +242,6 @@ dependencies {
// Dev environment preinstalled mods
modLocalRuntime(libs.bundles.runtime.required)
modLocalRuntime(libs.bundles.runtime.optional)
- modImplementation(modLocalRuntime(project.files("citresewn-defaults-1.2.0+1.21.jar"))!!)
modLocalRuntime(libs.jarvis.fabric)
transInclude.resolvedConfiguration.resolvedArtifacts.forEach {
diff --git a/buildSrc/src/InnerJarsUnpacker.kt b/buildSrc/src/InnerJarsUnpacker.kt
new file mode 100644
index 0000000..de06467
--- /dev/null
+++ b/buildSrc/src/InnerJarsUnpacker.kt
@@ -0,0 +1,70 @@
+import com.google.gson.Gson
+import com.google.gson.JsonArray
+import com.google.gson.JsonObject
+import com.google.gson.JsonPrimitive
+import java.io.File
+import java.util.zip.ZipInputStream
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.ConfigurableFileCollection
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.OutputFiles
+import org.gradle.api.tasks.TaskAction
+import kotlin.io.path.createDirectories
+import kotlin.io.path.outputStream
+
+abstract class InnerJarsUnpacker : DefaultTask() {
+ @get:InputFiles
+ abstract val inputJars: ConfigurableFileCollection
+
+ @get:OutputDirectory
+ abstract val outputDir: DirectoryProperty
+
+ private fun getFabricModJson(inputFile: File): JsonObject {
+ inputFile.inputStream().use {
+ val zis = ZipInputStream(it)
+ while (true) {
+ val entry = zis.nextEntry ?: error("Failed to find fabric.mod.json")
+ if (entry.name == "fabric.mod.json") {
+ return Gson().fromJson(zis.reader(), JsonObject::class.java)
+ }
+ }
+ }
+ }
+
+ @TaskAction
+ fun unpack() {
+ inputJars.forEach { inputFile ->
+ val fabricModObject = getFabricModJson(inputFile)
+ val jars = fabricModObject["jars"] as? JsonArray ?: error("No jars to unpack in $inputFile")
+ val jarPaths = jars.map {
+ ((it as? JsonObject)?.get("file") as? JsonPrimitive)?.asString
+ ?: error("Invalid Jar $it in $inputFile")
+ }
+ extractJars(inputFile, jarPaths)
+ }
+ }
+
+ private fun extractJars(inputFile: File, jarPaths: List<String>) {
+ val outputFile = outputDir.get().asFile.toPath()
+ val jarPathSet = jarPaths.toMutableSet()
+ inputFile.inputStream().use {
+ val zis = ZipInputStream(it)
+ while (true) {
+ val entry = zis.nextEntry ?: break
+ if (jarPathSet.remove(entry.name)) {
+ val resolvedPath = outputFile.resolve(entry.name)
+ resolvedPath.parent.createDirectories()
+ resolvedPath.outputStream().use { os ->
+ zis.copyTo(os)
+ }
+ }
+ }
+ }
+ if (jarPathSet.isNotEmpty()) {
+ error("Could not extract all jars: $jarPathSet")
+ }
+ }
+}
diff --git a/citresewn-defaults-1.2.0+1.21.jar b/citresewn-defaults-1.2.0+1.21.jar
deleted file mode 100644
index c613fa9..0000000
--- a/citresewn-defaults-1.2.0+1.21.jar
+++ /dev/null
Binary files differ
diff --git a/src/main/kotlin/util/ConditionNBTMixin.kt b/src/compat/citresewn/java/ConditionDirectAccessHelper.kt
index cbc1e66..af97a40 100644
--- a/src/main/kotlin/util/ConditionNBTMixin.kt
+++ b/src/compat/citresewn/java/ConditionDirectAccessHelper.kt
@@ -1,4 +1,4 @@
-package moe.nea.firmament.util
+package moe.nea.firmament.compat.citresewn
import java.lang.invoke.MethodHandles
import java.util.function.BiPredicate
@@ -7,6 +7,7 @@ import shcm.shsupercm.fabric.citresewn.defaults.cit.conditions.ConditionNBT
object ConditionNBTMixin {
class Helper<StringMatcher> {
+ // TODO: make lambdametafactory work by way of modifying the actual modifiers
val stringMatcherType = ConditionNBT::class.java.getDeclaredField("matchString").type
diff --git a/src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java b/src/compat/citresewn/java/moe/nea/firmament/mixins/compat/citresewn/MixinConditionComponents.java
index 602c13d..0743d40 100644
--- a/src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java
+++ b/src/compat/citresewn/java/moe/nea/firmament/mixins/compat/citresewn/MixinConditionComponents.java
@@ -1,6 +1,4 @@
-package moe.nea.firmament.mixins;
-
-// People are complaining but this really is not my place to fix things
+package moe.nea.firmament.mixins.compat.citresewn;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
@@ -9,8 +7,8 @@ import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.DynamicOps;
+import moe.nea.firmament.compat.citresewn.ConditionNBTMixin;
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
-import moe.nea.firmament.util.ConditionNBTMixin;
import net.minecraft.component.ComponentType;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
@@ -30,6 +28,8 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyKey;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+// People are complaining but this really is not my place to fix things
+
@Mixin(ConditionComponents.class)
@Pseudo
public class MixinConditionComponents {
diff --git a/src/main/kotlin/events/subscription/SubscriptionList.kt b/src/main/kotlin/events/subscription/SubscriptionList.kt
index e74a65a..817efc3 100644
--- a/src/main/kotlin/events/subscription/SubscriptionList.kt
+++ b/src/main/kotlin/events/subscription/SubscriptionList.kt
@@ -21,5 +21,8 @@ interface SubscriptionList {
}
.toList()
}
+ init {
+ require(allLists.isNotEmpty())
+ }
}
}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index e027783..cb623dc 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -47,7 +47,9 @@
"fabric": "*",
"fabric-language-kotlin": ">=${fabric_kotlin_version}",
"minecraft": ">=${minecraft_version}",
- "roughlyenoughitems": ">=${rei_version}"
+ "roughlyenoughitems": ">=${rei_version}",
+ "cloth-config": "*",
+ "architectury": "*"
},
"custom": {
"configured": {
@@ -62,7 +64,8 @@
},
"mc-publish": {
"dependencies": [
- "roughlyenoughitems{modrinth:rei}"
+ "roughlyenoughitems{modrinth:rei}",
+ "architectury{modrinth:architectury-api}"
]
}
}
diff --git a/symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt b/symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt
index e6fcd89..5c205cc 100644
--- a/symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt
+++ b/symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt
@@ -61,7 +61,7 @@ class SubscribeAnnotationProcessor(
}
subscriptionsFile.close()
val metaInf = codeGenerator.createNewFileByPath(
- Dependencies(false),
+ dependencies,
"META-INF/services/moe.nea.firmament.events.subscription.SubscriptionList", extensionName = "")
.bufferedWriter()
metaInf.append("moe.nea.firmament.annotations.generated.")