Skip to content

Commit

Permalink
Merge branch 'main' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
wagyourtail committed Jul 13, 2024
2 parents c66fc4c + 71a99ec commit 19eada3
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ abstract class UniminedExtension(val project: Project) {
var useGlobalCache: Boolean by FinalizeOnRead(true)
var forceReload: Boolean by FinalizeOnRead(project.properties["unimined.forceReload"] == "true")

/**
* VERY not recommended to disable
*/
@set:ApiStatus.Experimental
var footgunChecks: Boolean by FinalizeOnRead(true)

var fabricApi = project.extensions.create("fabricApi", FabricLikeApiExtension::class.java)

private val sourceSets by lazy {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,11 @@ open class MappingNamespaceTree {
return namespaces[name.lowercase()] ?: throw IllegalArgumentException("Namespace $name does not exist")
}

@ApiStatus.Experimental
fun findNamespace(name: String): Namespace? {
return namespaces[name.lowercase()]
}

override fun toString(): String {
var s = "MappingNamespaceTree.MappingNamespace: {\n"
for (namespace in namespaces.values) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import java.nio.file.Path
import java.nio.file.StandardOpenOption
import java.util.*
import java.util.concurrent.CompletableFuture
import kotlin.io.path.writeText
import java.util.jar.Manifest
import kotlin.io.path.*

class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.MixinMetadata(parent) {
private val GSON = GsonBuilder().setPrettyPrinting().create()
Expand Down Expand Up @@ -111,7 +112,15 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M
}

override fun writeExtra(fs: FileSystem) {
if (!parent.noRefmap.contains("BaseMixin")) {
val noRefmap = parent.noRefmap.contains("BaseMixin")
val manifest = fs.getPath("META-INF/MANIFEST.MF").let { file ->
if (file.exists()) {
file.inputStream().use { Manifest(it) }
} else {
Manifest()
}
}
if (!noRefmap) {
for ((name, json) in refmaps) {
if (json.isEmpty()) continue
parent.logger.info("[Unimined/MixinMetaData] Writing refmap $name")
Expand All @@ -123,6 +132,13 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M
StandardOpenOption.TRUNCATE_EXISTING
)
}
manifest.mainAttributes.putValue("Fabric-Loom-Mixin-Remap-Type", "mixin")
} else {
manifest.mainAttributes.putValue("Fabric-Loom-Mixin-Remap-Type", "static")
}
fs.getPath("META-INF").createDirectories()
fs.getPath("META-INF/MANIFEST.MF").outputStream(StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE).use {
manifest.write(it)
}
for ((name, json) in mixinJsons) {
parent.logger.info("[Unimined/MixinMetaData] Writing mixin config $name")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,13 +278,16 @@ abstract class AbstractMinecraftTransformer protected constructor(
}
// ensure all minecraft ones on same mappings
// get current mappings
for ((sourceSet, minecraftConfig) in minecraftConfigs.nonNullValues()) {
if (provider.mappings.devNamespace != minecraftConfig.mappings.devNamespace ||
provider.mappings.devFallbackNamespace != minecraftConfig.mappings.devFallbackNamespace) {
throw IllegalArgumentException("All combined minecraft configs must be on the same mappings, found ${provider.sourceSet} on ${provider.mappings.devNamespace}/${provider.mappings.devFallbackNamespace} and $sourceSet on ${minecraftConfig.mappings.devNamespace}/${minecraftConfig.mappings.devFallbackNamespace}")
}
if (provider.version != minecraftConfig.version) {
throw IllegalArgumentException("All combined minecraft configs must be on the same version, found ${provider.sourceSet} on ${provider.version} and $sourceSet on ${minecraftConfig.version}")
if (project.unimined.footgunChecks) {
for ((sourceSet, minecraftConfig) in minecraftConfigs.nonNullValues()) {
if (provider.mappings.devNamespace != minecraftConfig.mappings.devNamespace ||
provider.mappings.devFallbackNamespace != minecraftConfig.mappings.devFallbackNamespace
) {
throw IllegalArgumentException("All combined minecraft configs must be on the same mappings, found ${provider.sourceSet} on ${provider.mappings.devNamespace}/${provider.mappings.devFallbackNamespace} and $sourceSet on ${minecraftConfig.mappings.devNamespace}/${minecraftConfig.mappings.devFallbackNamespace}")
}
if (provider.version != minecraftConfig.version) {
throw IllegalArgumentException("All combined minecraft configs must be on the same version, found ${provider.sourceSet} on ${provider.version} and $sourceSet on ${minecraftConfig.version}")
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import xyz.wagyourtail.unimined.api.unimined
import xyz.wagyourtail.unimined.internal.minecraft.MinecraftProvider
import xyz.wagyourtail.unimined.api.minecraft.MinecraftJar
import xyz.wagyourtail.unimined.util.FinalizeOnRead
import xyz.wagyourtail.unimined.util.SemVerUtils

open class BabricMinecraftTransformer(project: Project, provider: MinecraftProvider): FabricMinecraftTransformer(project, provider) {

Expand All @@ -25,39 +26,6 @@ open class BabricMinecraftTransformer(project: Project, provider: MinecraftProvi
)
}

override fun merge(clientjar: MinecraftJar, serverjar: MinecraftJar): MinecraftJar {
val INTERMEDIARY = provider.mappings.getNamespace("intermediary")
val CLIENT = provider.mappings.getNamespace("client")
val SERVER = provider.mappings.getNamespace("server")
val clientJarFixed = MinecraftJar(
clientjar.parentPath,
clientjar.name,
clientjar.envType,
clientjar.version,
clientjar.patches,
CLIENT,
CLIENT,
clientjar.awOrAt,
clientjar.extension,
clientjar.path
)
val serverJarFixed = MinecraftJar(
serverjar.parentPath,
serverjar.name,
serverjar.envType,
serverjar.version,
serverjar.patches,
SERVER,
SERVER,
serverjar.awOrAt,
serverjar.extension,
serverjar.path
)
val intermediaryClientJar = provider.minecraftRemapper.provide(clientJarFixed, INTERMEDIARY, CLIENT)
val intermediaryServerJar = provider.minecraftRemapper.provide(serverJarFixed, INTERMEDIARY, SERVER)
return super.merge(intermediaryClientJar, intermediaryServerJar, true)
}

override fun addMavens() {
super.addMavens()
project.unimined.glassLauncherMaven("babric")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import xyz.wagyourtail.unimined.api.runs.RunConfig
import xyz.wagyourtail.unimined.api.unimined
import xyz.wagyourtail.unimined.internal.minecraft.MinecraftProvider
import xyz.wagyourtail.unimined.api.minecraft.MinecraftJar
import xyz.wagyourtail.unimined.util.SemVerUtils
import java.io.InputStreamReader
import java.nio.file.Files

Expand All @@ -31,6 +32,53 @@ abstract class FabricMinecraftTransformer(
project.unimined.fabricMaven()
}

override fun merge(clientjar: MinecraftJar, serverjar: MinecraftJar): MinecraftJar {
if (canCombine) {
return super.merge(clientjar, serverjar)
} else if (this is BabricMinecraftTransformer || SemVerUtils.matches(fabricDep.version!!, ">=0.16.0")) {
val INTERMEDIARY = provider.mappings.getNamespace("intermediary")
val CLIENT = if (this is BabricMinecraftTransformer) {
provider.mappings.findNamespace("clientOfficial") ?: provider.mappings.getNamespace("client")
} else {
provider.mappings.getNamespace("clientOfficial")
}
val SERVER = if (this is BabricMinecraftTransformer) {
provider.mappings.findNamespace("serverOfficial") ?: provider.mappings.getNamespace("server")
} else {
provider.mappings.getNamespace("serverOfficial")
}
val clientJarFixed = MinecraftJar(
clientjar.parentPath,
clientjar.name,
clientjar.envType,
clientjar.version,
clientjar.patches,
CLIENT,
CLIENT,
clientjar.awOrAt,
clientjar.extension,
clientjar.path
)
val serverJarFixed = MinecraftJar(
serverjar.parentPath,
serverjar.name,
serverjar.envType,
serverjar.version,
serverjar.patches,
SERVER,
SERVER,
serverjar.awOrAt,
serverjar.extension,
serverjar.path
)
val intermediaryClientJar = provider.minecraftRemapper.provide(clientJarFixed, INTERMEDIARY, CLIENT)
val intermediaryServerJar = provider.minecraftRemapper.provide(serverJarFixed, INTERMEDIARY, SERVER)
return super.merge(intermediaryClientJar, intermediaryServerJar, true)
}
throw UnsupportedOperationException("Merging is not supported for this version")
}


override fun addIncludeToModJson(json: JsonObject, dep: Dependency, path: String) {
var jars = json.get("jars")?.asJsonArray
if (jars == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ abstract class RemapJarTaskImpl @Inject constructor(@get:Internal val provider:
if (path.isEmpty()) {
project.logger.lifecycle("[Unimined/RemapJar ${this.path}] detected empty remap path, jumping to after remap tasks")
provider.mcPatcher.afterRemapJarTask(this, inputFile)
afterRemap(inputFile, inputFile)
afterRemap(inputFile)
return
}

Expand All @@ -81,7 +81,7 @@ abstract class RemapJarTaskImpl @Inject constructor(@get:Internal val provider:
for (i in path.indices) {
val step = path[i]
project.logger.info("[Unimined/RemapJar ${this.path}] $step")
val nextTarget = project.buildDir.resolve("tmp").resolve(name).toPath().resolve("${inputFile.nameWithoutExtension}-temp-${step.name}.jar")
val nextTarget = temporaryDir.toPath().resolve("${inputFile.nameWithoutExtension}-temp-${step.name}.jar")
nextTarget.deleteIfExists()

val mc = provider.getMinecraft(
Expand All @@ -107,15 +107,15 @@ abstract class RemapJarTaskImpl @Inject constructor(@get:Internal val provider:
}
project.logger.info("[Unimined/RemapJar ${path}] after remap tasks started ${System.currentTimeMillis()}")
provider.mcPatcher.afterRemapJarTask(this, prevTarget)
afterRemap(inputFile, prevTarget)
afterRemap(prevTarget)
project.logger.info("[Unimined/RemapJar ${path}] after remap tasks finished ${System.currentTimeMillis()}")
}

private fun afterRemap(inputFile: Path, afterRemapJar: Path) {
private fun afterRemap(afterRemapJar: Path) {
// merge in manifest from input jar
inputFile.readZipInputStreamFor("META-INF/MANIFEST.MF", false) { inp ->
afterRemapJar.readZipInputStreamFor("META-INF/MANIFEST.MF", false) { inp ->
// write to temp file
val inpTmp = project.buildDir.resolve("tmp").resolve(name).toPath().resolve("input-manifest.MF")
val inpTmp = temporaryDir.toPath().resolve("input-manifest.MF")
inpTmp.outputStream(StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING).use { out ->
inp.copyTo(out)
}
Expand Down

0 comments on commit 19eada3

Please sign in to comment.