diff options
author | Linnea Gräf <nea@nea.moe> | 2024-09-12 13:34:11 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-09-12 13:34:11 +0200 |
commit | 52623b715d395f65f96e09f4492285935b797b4b (patch) | |
tree | 1b96097a17dd9c81671478b11d127ce3278ddada | |
parent | ab809e197f3e8c9a51745ee9510bc65c952c0cc8 (diff) | |
download | Firmament-fix/citresewn.tar.gz Firmament-fix/citresewn.tar.bz2 Firmament-fix/citresewn.zip |
Isolate CIT resewn compatfix/citresewn
-rw-r--r-- | build.gradle.kts | 22 | ||||
-rw-r--r-- | buildSrc/src/InnerJarsUnpacker.kt | 70 | ||||
-rw-r--r-- | citresewn-defaults-1.2.0+1.21.jar | bin | 224043 -> 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.kt | 3 | ||||
-rw-r--r-- | src/main/resources/fabric.mod.json | 7 | ||||
-rw-r--r-- | symbols/src/main/kotlin/process/SubscribeAnnotationProcessor.kt | 2 |
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 Binary files differdeleted file mode 100644 index c613fa9..0000000 --- a/citresewn-defaults-1.2.0+1.21.jar +++ /dev/null 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.") |