Skip to content

Commit

Permalink
add preliminary jarjar support
Browse files Browse the repository at this point in the history
  • Loading branch information
wagyourtail committed Mar 24, 2024
1 parent 8971b0c commit fe1e7c0
Showing 1 changed file with 57 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package xyz.wagyourtail.unimined.internal.minecraft.patch.forge.fg3

import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import net.minecraftforge.binarypatcher.ConsoleTool
import org.apache.commons.io.output.NullOutputStream
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
import org.gradle.api.logging.LogLevel
import org.jetbrains.annotations.ApiStatus
Expand All @@ -13,6 +16,7 @@ import xyz.wagyourtail.unimined.api.minecraft.MinecraftJar
import xyz.wagyourtail.unimined.api.minecraft.task.RemapJarTask
import xyz.wagyourtail.unimined.api.runs.RunConfig
import xyz.wagyourtail.unimined.api.unimined
import xyz.wagyourtail.unimined.internal.minecraft.patch.fabric.FabricLikeMinecraftTransformer
import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.ForgeLikeMinecraftTransformer
import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.MinecraftForgeMinecraftTransformer
import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.NeoForgedMinecraftTransformer
Expand All @@ -21,7 +25,6 @@ import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.fg3.mcpconfig.Mcp
import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.fg3.mcpconfig.McpExecutor
import xyz.wagyourtail.unimined.internal.minecraft.patch.jarmod.JarModMinecraftTransformer
import xyz.wagyourtail.unimined.internal.minecraft.resolver.AssetsDownloader
import xyz.wagyourtail.unimined.internal.minecraft.transform.fixes.FixFG2Coremods
import xyz.wagyourtail.unimined.internal.minecraft.transform.fixes.FixFG2ResourceLoading
import xyz.wagyourtail.unimined.internal.minecraft.transform.merge.ClassMerger
import xyz.wagyourtail.unimined.util.*
Expand Down Expand Up @@ -59,6 +62,13 @@ class FG3MinecraftTransformer(project: Project, val parent: ForgeLikeMinecraftTr
parent.accessTransformerTransformer.accessTransformerPaths = listOf("fml_at.cfg", "forge_at.cfg", "META-INF/accesstransformer.cfg")
}

private val include: Configuration? =
if (provider.minecraftData.mcVersionCompare(provider.version, "1.18") >= 0) {
project.configurations.maybeCreate("include".withSourceSet(provider.sourceSet))
} else {
null
}

override val prodNamespace by lazy {
if (userdevCfg["mcp"].asString.contains("neoform")) {
provider.mappings.getNamespace("mojmap")
Expand Down Expand Up @@ -524,8 +534,53 @@ class FG3MinecraftTransformer(project: Project, val parent: ForgeLikeMinecraftTr
return parent.accessTransformerTransformer.afterRemap(fixForge(baseMinecraft))
}

private fun addIncludeToMetadata(json: JsonObject, dep: Dependency, path: String) {
var jars = json.get("jars")?.asJsonArray
if (jars == null) {
jars = JsonArray()
json.add("jars", jars)
}
jars.add(JsonObject().apply {
add("identifier", JsonObject().apply {
addProperty("group", dep.group)
addProperty("artifact", dep.name)
})
add("version", JsonObject().apply {
addProperty("range", "[${dep.version},)")
addProperty("artifactVersion", dep.version)
})
addProperty("path", path)
})
}

private fun doJarJar(remapJarTask: RemapJarTask, output: Path) {
output.openZipFileSystem(mapOf("mutable" to true)).use { fs ->
val mod = fs.getPath("META-INF/jarjar/metadata.json")
val json = JsonObject()

Files.createDirectories(fs.getPath("META-INF/jarjar/"))
val includeCache = provider.localCache.resolve("includeCache")
Files.createDirectories(includeCache)
for (dep in include!!.dependencies) {
val path = fs.getPath("META-INF/jarjar/${dep.name}-${dep.version}.jar")
if (!Files.exists(path)) {
Files.copy(
include.files(dep).first { it.extension == "jar" }.toPath(),
includeCache.resolve("${dep.name}-${dep.version}.jar"),
StandardCopyOption.REPLACE_EXISTING
)
}

addIncludeToMetadata(json, dep, "META-INF/jarjar/${dep.name}-${dep.version}.jar")
}
Files.write(mod, FabricLikeMinecraftTransformer.GSON.toJson(json).toByteArray(), StandardOpenOption.TRUNCATE_EXISTING)
}
}

override fun afterRemapJarTask(remapJarTask: RemapJarTask, output: Path) {
//TODO: JarJar
if (provider.minecraftData.mcVersionCompare(provider.version, "1.18") >= 0) {
doJarJar(remapJarTask, output)
}
}

private fun fixForge(baseMinecraft: MinecraftJar): MinecraftJar {
Expand Down

0 comments on commit fe1e7c0

Please sign in to comment.