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()
|
val compatSourceSets: MutableSet<SourceSet> = mutableSetOf()
|
||||||
fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): SourceSet {
|
fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): SourceSet {
|
||||||
val ss = sourceSets.create(name) {
|
val ss = sourceSets.create(name) {
|
||||||
@@ -103,7 +115,7 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): Source
|
|||||||
compatSourceSets.add(ss)
|
compatSourceSets.add(ss)
|
||||||
loom.createRemapConfigurations(ss)
|
loom.createRemapConfigurations(ss)
|
||||||
val mainSS = sourceSets.main.get()
|
val mainSS = sourceSets.main.get()
|
||||||
val upperName = ss.name.replaceFirstChar { it.uppercaseChar() }
|
val upperName = ss.name.capitalizeN()
|
||||||
configurations {
|
configurations {
|
||||||
(ss.implementationConfigurationName) {
|
(ss.implementationConfigurationName) {
|
||||||
extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
|
extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
|
||||||
@@ -140,6 +152,7 @@ val SourceSet.modImplementationConfigurationName
|
|||||||
}!!.sourceConfiguration
|
}!!.sourceConfiguration
|
||||||
val configuredSourceSet = createIsolatedSourceSet("configured")
|
val configuredSourceSet = createIsolatedSourceSet("configured")
|
||||||
val sodiumSourceSet = createIsolatedSourceSet("sodium")
|
val sodiumSourceSet = createIsolatedSourceSet("sodium")
|
||||||
|
val citResewnSourceSet = createIsolatedSourceSet("citresewn")
|
||||||
|
|
||||||
val shadowMe by configurations.creating {
|
val shadowMe by configurations.creating {
|
||||||
exclude(group = "org.jetbrains.kotlin")
|
exclude(group = "org.jetbrains.kotlin")
|
||||||
@@ -163,8 +176,6 @@ val nonModImplentation by configurations.creating {
|
|||||||
configurations.implementation.get().extendsFrom(this)
|
configurations.implementation.get().extendsFrom(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
loom {
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Minecraft dependencies
|
// Minecraft dependencies
|
||||||
@@ -208,6 +219,10 @@ dependencies {
|
|||||||
(configuredSourceSet.modImplementationConfigurationName)(libs.configured)
|
(configuredSourceSet.modImplementationConfigurationName)(libs.configured)
|
||||||
(sodiumSourceSet.modImplementationConfigurationName)(libs.sodium)
|
(sodiumSourceSet.modImplementationConfigurationName)(libs.sodium)
|
||||||
|
|
||||||
|
(citResewnSourceSet.modImplementationConfigurationName)(
|
||||||
|
innerJarsOf("citresewn", dependencies.create(libs.citresewn.get())).asFileTree)
|
||||||
|
(citResewnSourceSet.modImplementationConfigurationName)(libs.citresewn)
|
||||||
|
|
||||||
// Actual dependencies
|
// Actual dependencies
|
||||||
modCompileOnly(libs.rei.api) {
|
modCompileOnly(libs.rei.api) {
|
||||||
exclude(module = "architectury")
|
exclude(module = "architectury")
|
||||||
@@ -227,7 +242,6 @@ dependencies {
|
|||||||
// Dev environment preinstalled mods
|
// Dev environment preinstalled mods
|
||||||
modLocalRuntime(libs.bundles.runtime.required)
|
modLocalRuntime(libs.bundles.runtime.required)
|
||||||
modLocalRuntime(libs.bundles.runtime.optional)
|
modLocalRuntime(libs.bundles.runtime.optional)
|
||||||
modImplementation(modLocalRuntime(project.files("citresewn-defaults-1.2.0+1.21.jar"))!!)
|
|
||||||
modLocalRuntime(libs.jarvis.fabric)
|
modLocalRuntime(libs.jarvis.fabric)
|
||||||
|
|
||||||
transInclude.resolvedConfiguration.resolvedArtifacts.forEach {
|
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.lang.invoke.MethodHandles
|
||||||
import java.util.function.BiPredicate
|
import java.util.function.BiPredicate
|
||||||
@@ -7,6 +7,7 @@ import shcm.shsupercm.fabric.citresewn.defaults.cit.conditions.ConditionNBT
|
|||||||
|
|
||||||
object ConditionNBTMixin {
|
object ConditionNBTMixin {
|
||||||
class Helper<StringMatcher> {
|
class Helper<StringMatcher> {
|
||||||
|
// TODO: make lambdametafactory work by way of modifying the actual modifiers
|
||||||
|
|
||||||
val stringMatcherType = ConditionNBT::class.java.getDeclaredField("matchString").type
|
val stringMatcherType = ConditionNBT::class.java.getDeclaredField("matchString").type
|
||||||
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
package moe.nea.firmament.mixins;
|
package moe.nea.firmament.mixins.compat.citresewn;
|
||||||
|
|
||||||
// People are complaining but this really is not my place to fix things
|
|
||||||
|
|
||||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
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.Codec;
|
||||||
import com.mojang.serialization.DataResult;
|
import com.mojang.serialization.DataResult;
|
||||||
import com.mojang.serialization.DynamicOps;
|
import com.mojang.serialization.DynamicOps;
|
||||||
|
import moe.nea.firmament.compat.citresewn.ConditionNBTMixin;
|
||||||
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
|
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
|
||||||
import moe.nea.firmament.util.ConditionNBTMixin;
|
|
||||||
import net.minecraft.component.ComponentType;
|
import net.minecraft.component.ComponentType;
|
||||||
import net.minecraft.component.DataComponentTypes;
|
import net.minecraft.component.DataComponentTypes;
|
||||||
import net.minecraft.component.type.NbtComponent;
|
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.PropertyKey;
|
||||||
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
|
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
|
||||||
|
|
||||||
|
// People are complaining but this really is not my place to fix things
|
||||||
|
|
||||||
@Mixin(ConditionComponents.class)
|
@Mixin(ConditionComponents.class)
|
||||||
@Pseudo
|
@Pseudo
|
||||||
public class MixinConditionComponents {
|
public class MixinConditionComponents {
|
||||||
@@ -21,5 +21,8 @@ interface SubscriptionList {
|
|||||||
}
|
}
|
||||||
.toList()
|
.toList()
|
||||||
}
|
}
|
||||||
|
init {
|
||||||
|
require(allLists.isNotEmpty())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,9 @@
|
|||||||
"fabric": "*",
|
"fabric": "*",
|
||||||
"fabric-language-kotlin": ">=${fabric_kotlin_version}",
|
"fabric-language-kotlin": ">=${fabric_kotlin_version}",
|
||||||
"minecraft": ">=${minecraft_version}",
|
"minecraft": ">=${minecraft_version}",
|
||||||
"roughlyenoughitems": ">=${rei_version}"
|
"roughlyenoughitems": ">=${rei_version}",
|
||||||
|
"cloth-config": "*",
|
||||||
|
"architectury": "*"
|
||||||
},
|
},
|
||||||
"custom": {
|
"custom": {
|
||||||
"configured": {
|
"configured": {
|
||||||
@@ -62,7 +64,8 @@
|
|||||||
},
|
},
|
||||||
"mc-publish": {
|
"mc-publish": {
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"roughlyenoughitems{modrinth:rei}"
|
"roughlyenoughitems{modrinth:rei}",
|
||||||
|
"architectury{modrinth:architectury-api}"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ class SubscribeAnnotationProcessor(
|
|||||||
}
|
}
|
||||||
subscriptionsFile.close()
|
subscriptionsFile.close()
|
||||||
val metaInf = codeGenerator.createNewFileByPath(
|
val metaInf = codeGenerator.createNewFileByPath(
|
||||||
Dependencies(false),
|
dependencies,
|
||||||
"META-INF/services/moe.nea.firmament.events.subscription.SubscriptionList", extensionName = "")
|
"META-INF/services/moe.nea.firmament.events.subscription.SubscriptionList", extensionName = "")
|
||||||
.bufferedWriter()
|
.bufferedWriter()
|
||||||
metaInf.append("moe.nea.firmament.annotations.generated.")
|
metaInf.append("moe.nea.firmament.annotations.generated.")
|
||||||
|
|||||||
Reference in New Issue
Block a user