Isolate CIT resewn compat
This commit is contained in:
@@ -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 {
|
||||
|
||||
70
buildSrc/src/InnerJarsUnpacker.kt
Normal file
70
buildSrc/src/InnerJarsUnpacker.kt
Normal file
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
@@ -21,5 +21,8 @@ interface SubscriptionList {
|
||||
}
|
||||
.toList()
|
||||
}
|
||||
init {
|
||||
require(allLists.isNotEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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}"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user