diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000..fda997a --- /dev/null +++ b/CREDITS @@ -0,0 +1,203 @@ +Part of the buildscript is adapted from https://github.com/LogicFan/shadow-json-transformer under the Apache v2 license. +The license text is below: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/LICENSE b/LICENSE index 749453c..ce146a3 100644 --- a/LICENSE +++ b/LICENSE @@ -5,22 +5,27 @@ Refer to CREDITS, LICENSE, and README.original.md (whichever of these exist) inside their directories for full information, including reproductions of their original license texts. -## SpongeMixins +Part of the buildscript is adapted from https://github.com/LogicFan/shadow-json-transformer under the Apache v2 license. +Requisite notices are in CREDITS in the repository root. Another part is adapted from +https://github.com/GTNewHorizons/GTNHGradle under the LGPLv3. Again, requisite notices are in CREDITS. -Directory: module-spongemixins +## SpongeMixins +Directory: spongemixins LICENSE: LGPLv3 ## MixinBooterLegacy - -Directory: module-mixinbooterlegacy +Directory: mixinbooterlegacy LICENSE: LGPLv2.1 ## GasStation - -Directory: module-gasstation -LICENSE: LGPLv3+SNEED +Directory: gasstation +LICENSE: LGPLv3 ## GTNHMixins +Directory: gtnhmixins +LICENSE: LGPLv3 -Directory: module-gtnhmixins +## UniMixinsPlugin +Directory: UniMixinsPlugin LICENSE: LGPLv3 +Not technically a module proper, it just hosts shared build logic for the others. diff --git a/README.md b/README.md index 01fdf14..42ecc0b 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,7 @@ The project needs to be compiled using Java 8. For example: `JAVA_HOME=/path/to/ * `-Plocal`: use the locally built version of `unimix` when building the Mixin module. * Invoke `./gradlew publishToMavenLocal` in the UniMix repo first to install a local build. * `-PenableAltMixin`: build alternate flavors of the Mixin module, not just UniMix. +* `-PpublishAll`: publish all modules, not just the combined one. ### Roadmap diff --git a/UniMixinsPlugin/.gitignore b/UniMixinsPlugin/.gitignore new file mode 100644 index 0000000..63d3097 --- /dev/null +++ b/UniMixinsPlugin/.gitignore @@ -0,0 +1,2 @@ +.gradle +.kotlin diff --git a/UniMixinsPlugin/build.gradle.kts b/UniMixinsPlugin/build.gradle.kts new file mode 100644 index 0000000..99c911f --- /dev/null +++ b/UniMixinsPlugin/build.gradle.kts @@ -0,0 +1,45 @@ +plugins { + kotlin("jvm") version "2.1.21" + `java-gradle-plugin` +} + +repositories { + mavenCentral() + gradlePluginPortal() + maven { + url = uri("https://maven.wagyourtail.xyz/releases") + } +} + +dependencies { + implementation("xyz.wagyourtail.unimined:xyz.wagyourtail.unimined.gradle.plugin:1.3.14") + implementation("com.palantir.git-version:com.palantir.git-version.gradle.plugin:3.3.0") + implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:8.3.6") + implementation("com.google.code.gson:gson:2.13.1") + implementation("org.apache.ant:ant:1.10.15") +} + +gradlePlugin { + plugins { + create("unimixinsConfig") { + id = "unimixinsConfig" + implementationClass = "UniMixinsExtender" + } + create("unimixins") { + id = "unimixins" + implementationClass = "UniMixinsPlugin" + } + } +} + +kotlin { + jvmToolchain(21) +} + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} \ No newline at end of file diff --git a/UniMixinsPlugin/settings.gradle.kts b/UniMixinsPlugin/settings.gradle.kts new file mode 100644 index 0000000..43346a0 --- /dev/null +++ b/UniMixinsPlugin/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "UniMixinsPlugin" \ No newline at end of file diff --git a/UniMixinsPlugin/src/main/kotlin/McmodInfoMerger.kt b/UniMixinsPlugin/src/main/kotlin/McmodInfoMerger.kt new file mode 100644 index 0000000..378c96c --- /dev/null +++ b/UniMixinsPlugin/src/main/kotlin/McmodInfoMerger.kt @@ -0,0 +1,128 @@ +import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext +import com.google.gson.GsonBuilder +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonNull +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import com.google.gson.JsonPrimitive +import org.gradle.api.file.FileTreeElement +import java.io.InputStreamReader +import org.apache.tools.zip.ZipOutputStream +import org.apache.tools.zip.ZipEntry +import org.gradle.api.logging.Logging + +/** + * Adapted from https://github.com/LogicFan/shadow-json-transformer. + * @author Logic Fan + * @author ah-OOG-ah + */ +class McmodInfoMerger(private val parentModid: String) : Transformer { + private val GSON = GsonBuilder().setPrettyPrinting().create() + private val LOGGER = Logging.getLogger(McmodInfoMerger::class.java) + private var json: JsonElement? = null + private val targetFile = "mcmod.info" + // GSON adds the extra quotes when parsing, so we add them to the comparison string + private val comparisonModid = "\"$parentModid\"" + + override fun canTransformResource(element: FileTreeElement?): Boolean { + return targetFile == element?.relativePath.toString() + } + + override fun transform(context: TransformerContext?) { + val j: JsonElement? + try { + val inputStream = context?.`is` + j = if (inputStream == null) + null + else + JsonParser.parseReader(InputStreamReader(inputStream, "UTF-8")) + } catch (e: Exception) { + throw RuntimeException("error on processing json", e) + } + + val modObj = if (j is JsonArray && !j.isEmpty) j.get(0) as JsonObject + else throw RuntimeException("Mod objects should be in an array!") + + if (modObj.get("modid").toString() != comparisonModid) { + modObj.add("parent", JsonPrimitive(parentModid)) + } + + json = if (json == null) j else mergeJson(json, j) + } + + override fun hasTransformedResource(): Boolean { + return json != null + } + + override fun modifyOutputStream(os: ZipOutputStream?, preserveFileTimestamps: Boolean) { + val entry = ZipEntry(targetFile) + entry.time = TransformerContext.getEntryTimestamp(preserveFileTimestamps, entry.time) + os!!.putNextEntry(entry) + os.write(GSON.toJson(json).toByteArray()) + + json = null + } + + override fun getName(): String { + return "McmodInfoMerger" + } + + /** + * @param lhs a JsonElement + * @param rhs a JsonElement + * @param id used for logging purpose only + * @return the merged JsonElement + */ + fun mergeJson(lhs: JsonElement?, rhs: JsonElement?, id: String = ""): JsonElement? { + if (rhs == null || rhs is JsonNull) { + return lhs + } else if (lhs == null || lhs is JsonNull) { + return rhs + } else if (lhs is JsonArray && rhs is JsonArray) { + return mergeJsonArray(lhs, rhs) + } else if (lhs is JsonObject && rhs is JsonObject) { + return mergeJsonObject(lhs, rhs, id) + } else if (lhs is JsonPrimitive && rhs is JsonPrimitive) { + return mergeJsonPrimitive(lhs, rhs, id) + } else { + LOGGER.warn("conflicts for property {} detected, {} & {}", + id, lhs.toString(), rhs.toString()) + return lhs + } + } + + fun mergeJsonArray(lhs: JsonArray, rhs: JsonArray): JsonArray { + val array = JsonArray() + array.addAll(lhs) + array.addAll(rhs) + return array + } + + fun mergeJsonObject(lhs: JsonObject, rhs: JsonObject, id: String): JsonObject { + val obj = JsonObject() + + val properties = HashSet() + properties.addAll(lhs.keySet()) + properties.addAll(rhs.keySet()) + for (property in properties) { + obj.add( + property, + mergeJson(lhs.get(property), + rhs.get(property), + "$id:$property")) + } + + return obj + } + + fun mergeJsonPrimitive(lhs: JsonPrimitive, rhs: JsonPrimitive, id: String): JsonPrimitive { + if (lhs != rhs) { + LOGGER.warn("[McmodInfoMerger] conflicts for property {} detected, {} & {}", id, lhs.toString(), rhs.toString()) + } + + return lhs + } +} +//*/ \ No newline at end of file diff --git a/UniMixinsPlugin/src/main/kotlin/UniMixinsExtender.kt b/UniMixinsPlugin/src/main/kotlin/UniMixinsExtender.kt new file mode 100644 index 0000000..877769a --- /dev/null +++ b/UniMixinsPlugin/src/main/kotlin/UniMixinsExtender.kt @@ -0,0 +1,9 @@ +import org.gradle.api.Plugin +import org.gradle.api.Project + +@Suppress("unused") +class UniMixinsExtender : Plugin { + override fun apply(project: Project) { + project.extensions.create("unimixins", UniMixinsExtension::class.java) + } +} \ No newline at end of file diff --git a/UniMixinsPlugin/src/main/kotlin/UniMixinsExtension.kt b/UniMixinsPlugin/src/main/kotlin/UniMixinsExtension.kt new file mode 100644 index 0000000..c0daff0 --- /dev/null +++ b/UniMixinsPlugin/src/main/kotlin/UniMixinsExtension.kt @@ -0,0 +1,6 @@ +import org.gradle.api.provider.Property + +interface UniMixinsExtension { + val uniMixVersion: Property + val fmlCorePlugin: Property +} \ No newline at end of file diff --git a/UniMixinsPlugin/src/main/kotlin/UniMixinsPlugin.kt b/UniMixinsPlugin/src/main/kotlin/UniMixinsPlugin.kt new file mode 100644 index 0000000..39601f9 --- /dev/null +++ b/UniMixinsPlugin/src/main/kotlin/UniMixinsPlugin.kt @@ -0,0 +1,204 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.palantir.gradle.gitversion.GitVersionCacheService +import org.apache.tools.ant.filters.ReplaceTokens +import org.gradle.api.JavaVersion +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.component.AdhocComponentWithVariants +import org.gradle.api.component.ConfigurationVariantDetails +import org.gradle.api.file.DuplicatesStrategy +import org.gradle.api.plugins.BasePluginExtension +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.jvm.tasks.Jar +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.language.jvm.tasks.ProcessResources +import xyz.wagyourtail.unimined.api.UniminedExtension +import java.io.File + + +@Suppress("unused") +class UniMixinsPlugin : Plugin { + + override fun apply(project: Project) { + val plugins = project.plugins + plugins.apply("java") + plugins.apply("xyz.wagyourtail.unimined") + plugins.apply("com.palantir.git-version") + plugins.apply("com.gradleup.shadow") + + val minecraftVersion = "1.7.10" + val forgeVersion = "10.13.4.1614-1.7.10" + + val extensions = project.extensions + extensions.getByType(JavaPluginExtension::class.java).withSourcesJar() + val unimixins = extensions.getByType(UniMixinsExtension::class.java) + + extensions.configure("java") { + it.sourceCompatibility = JavaVersion.VERSION_1_8 + it.targetCompatibility = JavaVersion.VERSION_1_8 + it.toolchain { + it.languageVersion.set(JavaLanguageVersion.of(8)) + } + } + + project.dependencies.add("compileOnly", "net.minecraftforge:forge:1.12.2-14.23.5.2860:universal") + + val gitVersion = GitVersionCacheService + .getSharedGitVersionCacheService(project) + .get() + val versionDetails = gitVersion + .getVersionDetails(project.projectDir, null) + project.version = getUniMixinsVersion(gitVersion, project) + project.group = "io.github.legacymoddingmc" + + val nameSuffix = if (project.name == "all") "" else "-${project.name}" + extensions.configure("base") { + it.archivesName.set("+unimixins$nameSuffix-1.7.10") + } + + val sourceSets = extensions.getByName("sourceSets") as SourceSetContainer + val generated = sourceSets.create("generated") + val genDir = project.layout.buildDirectory.file("genResources") + + generated.resources.srcDir(genDir) + + val tasks = project.tasks + + val generateEmbeddedCorePluginFile = tasks.register("generateEmbeddedCorePluginFile") { + it.doLast { + val fmlCorePlugin = unimixins.fmlCorePlugin.orNull + if (fmlCorePlugin != null) { + val dir = File(genDir.get().asFile, "META-INF") + dir.mkdirs() + + val embeddedFile = File(dir, "EmbeddedFMLCorePlugins.txt") + embeddedFile.writeText(fmlCorePlugin) + } + } + } + + tasks.named("processResources", ProcessResources::class.java) { task -> + task.dependsOn(generateEmbeddedCorePluginFile) + + task.filesMatching("mcmod.info") { copy -> + copy.filter(mapOf("tokens" to mapOf( + "minecraftVersion" to minecraftVersion, + "uniMixinsVersion" to project.version.toString(), + "projectUrl" to "https://github.com/LegacyModdingMC/UniMixins")), + ReplaceTokens::class.java) + } + } + + val cfgs = project.configurations + val shadowImplementation = cfgs.maybeCreate("shadowImplementation") + val shadowImplSources = cfgs.maybeCreate("shadowImplSources") + val shadowSources = cfgs.maybeCreate("shadowSources") + for (cfg in listOf(shadowImplementation, shadowImplSources)) { + cfg.isCanBeConsumed = false + cfg.isCanBeResolved = true + } + + shadowImplementation.extendsFrom(shadowImplSources) + for (config in listOf("compileClasspath", "runtimeClasspath", "testCompileClasspath", "testRuntimeClasspath")) { + cfgs.getByName(config).extendsFrom(shadowImplementation) + } + + // Add the sources from the dual set... + shadowSources.dependencies.addAllLater(project.provider { + shadowImplSources.dependencies.map { + if (it is ProjectDependency) { + project.dependencies.project(mapOf( + "path" to it.path, + "configuration" to "sourcesElements")) + } else { + project.dependencies.create("${it.group}:${it.name}:${it.version}:sources") + } + } + }) + + // ...and copy the files into the source jar + val sourcesJar = tasks.named("sourcesJar", Jar::class.java) + sourcesJar.configure { + it.duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + it.dependsOn(shadowSources) + it.from(shadowSources.map { source -> + project.zipTree(source) + }) + } + + val shadowJar = tasks.named("shadowJar", ShadowJar::class.java) + shadowJar.configure { sJar -> + sJar.from(generated.resources) + sJar.configurations = listOf(shadowImplementation) + sJar.archiveClassifier.set("dev") + + sJar.manifest { manifest -> + manifest.attributes(mapOf( + "Commit-ID" to versionDetails.gitHash, + "FMLCorePlugin" to unimixins.fmlCorePlugin.orNull + ).filterValues { it != null }) + } + + // Copy licenses to a folder in META-INF, for the merged jar. + val licenses = listOf("CREDITS", "LICENSE*", "README*") + sJar.from(project.projectDir) { + it.include(licenses); it.into("META-INF/licenses/${project.name}") + } + + // And ensure they end up in the root, too. + sJar.from(project.projectDir) { it.include(licenses); it.into("") } + } + + for (outgoingConfig in listOf("runtimeElements", "apiElements")) { + val outgoing = cfgs.getByName(outgoingConfig) + outgoing.outgoing.artifacts.clear() + outgoing.outgoing.artifact(shadowJar) + } + + tasks.named("jar", Jar::class.java).configure { jar -> + jar.archiveClassifier.set("dev-preshadow") + } + + val shadowRuntimeElements = cfgs.getByName("shadowRuntimeElements") + val javaComponent = project.components.named("java").get() as AdhocComponentWithVariants + javaComponent.withVariantsFromConfiguration(shadowRuntimeElements, ConfigurationVariantDetails::skip) + + extensions.configure("unimined") { unimined -> + unimined.minecraft(sourceSets.getByName("main"), true) { + version = minecraftVersion + defaultRemapJar = false + defaultRemapSourcesJar = false + + mappings { + searge() + mcp("stable", "12-1.7.10") + } + + minecraftForge { + loader(forgeVersion) + } + + val remapJar = remap(tasks.getByName("shadowJar")) { + prodNamespace("searge") + } + + tasks.named("assemble").configure { assemble -> + assemble.dependsOn(remapJar) + } + } + } + } + + private fun getUniMixinsVersion(versionCacheService: GitVersionCacheService, project: Project): String { + val override = System.getenv("VERSION") + if (override != null) { + println("VERSION set! Overriding version to $override") + return override + } + + return versionCacheService.getGitVersion(project.projectDir, null) + } +} diff --git a/all/build.gradle.kts b/all/build.gradle.kts new file mode 100644 index 0000000..eb80821 --- /dev/null +++ b/all/build.gradle.kts @@ -0,0 +1,75 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +plugins { + id("unimixins") +} + +dependencies { + // TODO: make this work + shadowImplementation(project(":mixin")) + + shadowImplSources(project(":compat")) + shadowImplSources(project(":mixingasm")) + shadowImplSources(project(":spongemixins")) + shadowImplSources(project(":mixinbooterlegacy")) + shadowImplSources(project(":gasstation")) + shadowImplSources(project(":gtnhmixins")) + shadowImplSources(project(":mixinextras")) +} + +val moduleList = + "\\nMixin," + + "Compat," + + "Mixingasm," + + "SpongeMixins," + + "MixinBooterLegacy," + + "GasStation," + + "GTNHMixins, and" + + "MixinExtras." + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "moduleList" to moduleList + )) + } +} + +tasks.shadowJar { + // Exclude errant license files + exclude("LICENSE*") + exclude("README.original.md") + + // Merge mcmod.info files + transform(McmodInfoMerger("unimixins")) + + // Merge list of coremods + append("META-INF/EmbeddedFMLCorePlugins.txt") + + // Merge service files + mergeServiceFiles() + + // Only keep the manifest from this jar + files("META-INF/MANIFEST.MF") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } + manifest { + attributes( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + // Manually set this, because it doesn't need to be embedded + "FMLCorePlugin" to "io.github.legacymoddingmc.unimixins.all.AllCore", + "MixinConfigs" to "mixins.gtnhmixins.json,mixins.gasstation.json,mixins.gtnhmixins.json,mixingasm.mixin.json", + "Premain-Class" to "org.spongepowered.tools.agent.MixinAgent", + "Agent-Class" to "org.spongepowered.tools.agent.MixinAgent", + "Can-Redefine-Classes" to true, + "Can-Retransform-Classes" to true, + "Implementation-Version" to unimixins.uniMixVersion.get() + ) + } +} + +unimined.minecraft { + +} \ No newline at end of file diff --git a/module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java b/all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java similarity index 67% rename from module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java rename to all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java index 48c29d3..d6e52af 100644 --- a/module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java +++ b/all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllCore.java @@ -1,5 +1,6 @@ package io.github.legacymoddingmc.unimixins.all; +import java.net.URL; import java.util.*; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; @@ -14,17 +15,22 @@ public class AllCore implements IFMLLoadingPlugin { public static final Logger LOGGER = LogManager.getLogger("unimixins"); - private static List> embeddedCorePluginClasses = new ArrayList<>(); - private static List embeddedCorePluginInstances = new ArrayList<>(); + private static final List> embeddedCorePluginClasses = new ArrayList<>(); + private static final List embeddedCorePluginInstances = new ArrayList<>(); + private static final URL embeddedCorePluginsFile = AllCore.class.getResource("/META-INF/EmbeddedFMLCorePlugins.txt"); static { try { - for(String s : IOUtils.toString(AllCore.class.getResource("/META-INF/unimixins-all.EmbeddedFMLCorePlugins.txt")).split(" ")) { + // The file contains a duplicate, and I can't be bothered to remove it at build time. + final HashSet embeddedPlugins = (embeddedCorePluginsFile == null) + ? new HashSet<>() + : new HashSet<>(Arrays.asList(IOUtils.toString(embeddedCorePluginsFile).split("\n"))); + + for (String s : embeddedPlugins) { Class cls = Class.forName(s); embeddedCorePluginClasses.add(cls); } - - } catch(Exception e) { + } catch (Exception e) { throw new RuntimeException(e); } } @@ -32,9 +38,9 @@ public class AllCore implements IFMLLoadingPlugin { public AllCore() { LOGGER.info("Instantiating AllCore"); - for(Class cls : embeddedCorePluginClasses) { + for (Class cls : embeddedCorePluginClasses) { try { - embeddedCorePluginInstances.add((IFMLLoadingPlugin)cls.newInstance()); + embeddedCorePluginInstances.add((IFMLLoadingPlugin) cls.newInstance()); } catch (Exception e) { throw new RuntimeException(e); } @@ -44,10 +50,8 @@ public AllCore() { @Override public String[] getASMTransformerClass() { List classes = new ArrayList<>(); - for(IFMLLoadingPlugin p : embeddedCorePluginInstances) { - for(String s : p.getASMTransformerClass()) { - classes.add(s); - } + for (IFMLLoadingPlugin p : embeddedCorePluginInstances) { + Collections.addAll(classes, p.getASMTransformerClass()); } return classes.toArray(new String[0]); } @@ -64,7 +68,7 @@ public String getSetupClass() { @Override public void injectData(Map data) { - for(IFMLLoadingPlugin p : embeddedCorePluginInstances) { + for (IFMLLoadingPlugin p : embeddedCorePluginInstances) { p.injectData(data); } } @@ -77,9 +81,9 @@ public String getAccessTransformerClass() { public static class CombinedAccessTransformer implements IClassTransformer { private final List delegates = new ArrayList<>(); public CombinedAccessTransformer() { - for(IFMLLoadingPlugin plugin : embeddedCorePluginInstances) { + for (IFMLLoadingPlugin plugin : embeddedCorePluginInstances) { String atClass = plugin.getAccessTransformerClass(); - if(atClass != null) { + if (atClass != null) { try { delegates.add((IClassTransformer) Class.forName(atClass).newInstance()); } catch (Exception e) { @@ -91,7 +95,7 @@ public CombinedAccessTransformer() { @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - for(IClassTransformer delegate : delegates) { + for (IClassTransformer delegate : delegates) { basicClass = delegate.transform(name, transformedName, basicClass); } return basicClass; diff --git a/module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java b/all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java similarity index 50% rename from module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java rename to all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java index 9d980e4..672d645 100644 --- a/module-all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java +++ b/all/src/main/java/io/github/legacymoddingmc/unimixins/all/AllModule.java @@ -5,7 +5,7 @@ /** * This is only here so unimixins shows up in the mod list GUI as a single mod. */ -@Mod(modid = "unimixins", version = "@VERSION@", acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = "unimixins", version = "@VERSION@", acceptableRemoteVersions = "*") +@Mod(modid = "unimixins", useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = "unimixins", useMetadata = true, acceptableRemoteVersions = "*") public class AllModule { } diff --git a/module-all/src/main/resources/CREDITS b/all/src/main/resources/CREDITS similarity index 100% rename from module-all/src/main/resources/CREDITS rename to all/src/main/resources/CREDITS diff --git a/all/src/main/resources/mcmod.info b/all/src/main/resources/mcmod.info new file mode 100644 index 0000000..e752bed --- /dev/null +++ b/all/src/main/resources/mcmod.info @@ -0,0 +1,11 @@ +[ + { + "modid": "unimixins", + "name": "UniMixins", + "description": "UniMixins composite jar consisting of the following modules:@moduleList@", + "version": "@uniMixinsVersion@", + "mcversion": "1.7.10", + "url": "@projectUrl@", + "authorList": ["makamys"] + } +] \ No newline at end of file diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 8c03cc0..0000000 --- a/build.gradle +++ /dev/null @@ -1,148 +0,0 @@ -/** The root of the build. Exposed for flexibility, but you shouldn't edit it - unless you have to. Edit project.gradle instead. */ - -buildscript { - repositories { - mavenCentral() - maven { - name = "forge" - url = "https://maven.minecraftforge.net/" - } - maven { - url = "https://jitpack.io" - } - } - dependencies { - classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.11' - } -} - -plugins { - id 'com.github.johnrengelman.shadow' version '6.1.0' apply false -} - -allprojects { - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'maven-publish' - // For some reason this is needed when using Gradle 6.9 (but not if using 4.4.1) - repositories { - mavenCentral() - mavenLocal() - maven { - name 'Overmind forge repo mirror' - url 'https://gregtech.overminddl1.com/' - } - maven { - name = "forge" - url = "https://maven.minecraftforge.net/" - } - maven { - name = 'sponge' - url = 'https://repo.spongepowered.org/maven/' - } - maven { - url = "https://mvn.falsepattern.com/releases" - } - maven { - name = "GTNH Maven" - url = "http://jenkins.usrv.eu:8081/nexus/content/groups/public/" - allowInsecureProtocol = true - } - maven { - url 'https://jitpack.io' - } - } - - apply from: "${project.rootDir}/buildscript/forge-1.7.gradle" - - def projectVersion = version - - dependencies { - // TODO only include IFMLLoadingPlugin, Mod and ComparableVersion - compileOnly "net.minecraftforge:forge:1.12.2-14.23.5.2860:universal" - } - - // When publishing locally, publish every module and use the -1.7.10 suffix. - // Otherwise (for GTNH maven) only publish the -all module and don't use the suffix or the -all name or the unimixins group. - ext.localPublish = System.getenv("MAVEN_USER") == null; - ext.publishModuleToMaven = project.name == "module-all" || localPublish - ext.mavenIdSuffix = localPublish ? "-1.7.10" : "" - ext.mavenGroupId = localPublish ? project.group : project.group.replace(".unimixins", "") - - if(project.name.startsWith("module-") && project.name != "module-mixin" && project.name != "module-common") { - if(project.name != "module-all") { - task sourcesJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'sources' - } - } - - afterEvaluate { - if(project.name != "module-all") { - task devJar(type: Jar) { - classifier = 'dev' - def jarTask = (jar.enabled ? jar : shadowJar) - from zipTree(jarTask.getOutputs().getFiles().getSingleFile()) - manifest = jarTask.manifest - - dependsOn jarTask - } - } - - reobf.dependsOn devJar - - artifacts { - archives tasks."sourcesJar" - archives tasks."devJar" - } - - if(publishModuleToMaven) { - publishing { - publications { - create("maven", MavenPublication) { - artifact jar.enabled ? jar : shadowJar - artifact source: tasks."sourcesJar", classifier: 'sources' - artifact source: tasks."devJar", classifier: 'dev' - artifactId = archivesBaseName.substring(1).replace("-1.7.10", mavenIdSuffix).replace("-all", localPublish ? "-all" : "") - version = projectVersion - groupId = mavenGroupId - } - } - } - } - - project.tasks.forEach { - if(it.name.startsWith("publish") && it.name.contains("PublicationTo")) { - it.dependsOn reobf - } - } - } - } - - publishing { - repositories { - if (System.getenv("MAVEN_USER") != null) { - maven { - url = System.getenv("MAVEN_URL") - allowInsecureProtocol = System.getenv("MAVEN_URL").startsWith("http://") // Mostly for the GTNH maven - credentials { - username = System.getenv("MAVEN_USER") ?: "NONE" - password = System.getenv("MAVEN_PASSWORD") ?: "NONE" - } - } - } - } - } - - // Put license, credits and readme in jar - - delete "$projectDir/build/tmp/license" - - copy { - from "$projectDir" - into "$projectDir/build/tmp/license" - include "CREDITS", "LICENSE*", "README*" - } - - sourceSets.main.resources.srcDir("build/tmp/license") -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..6242e87 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,14 @@ +// The previous buildscript was spaghetti +// Time will tell if I do better. +plugins { + id("unimixins") apply false +} + +// See buildSrc/src/main/kotlin/UniMixinsPlugin for shared config logic. +subprojects { + apply(plugin = "unimixinsConfig") + + configure { + uniMixVersion = "0.15.3+mixin.0.8.7" + } +} diff --git a/buildscript/forge-1.7-mixin.gradle b/buildscript/forge-1.7-mixin.gradle deleted file mode 100644 index 9612084..0000000 --- a/buildscript/forge-1.7-mixin.gradle +++ /dev/null @@ -1,54 +0,0 @@ -/** Applying this file in a Forge build will imbue it with the powers of Mixin. */ - -repositories { - maven { - name = 'sponge' - url = 'https://repo.spongepowered.org/maven/' - } -} - -def embedMixin = !project.hasProperty("nomixin"); - -if(!embedMixin){ - project.version += "+nomixin" -} - -dependencies { - if(embedMixin){ - embed('org.spongepowered:mixin:0.7.11-SNAPSHOT'){ - setTransitive false - } - } else { - compile('org.spongepowered:mixin:0.7.11-SNAPSHOT'){ - setTransitive false - } - } -} - -ext.outRefMapFile = "${tasks.compileJava.temporaryDir}/${project.modid}.mixin.refmap.json" - -jar { - manifest { - attributes ( - 'MixinConfigs': "${project.modid}.mixin.json", - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'TweakOrder': 0, - - // If these two are not set, Forge will not detect the mod, it will only run the mixins - 'FMLCorePluginContainsFMLMod': 'true', - 'ForceLoadAsMod': 'true', - ) - } - - from outRefMapFile; -} - -def outSrgFile = "${tasks.compileJava.temporaryDir}/outSrg.srg" - -afterEvaluate { - tasks.compileJava.options.compilerArgs += ["-AreobfSrgFile=${tasks.reobf.srg}", "-AoutSrgFile=${outSrgFile}", "-AoutRefMapFile=${outRefMapFile}"]; -} - -reobf { - addExtraSrgFile outSrgFile -} diff --git a/buildscript/forge-1.7.gradle b/buildscript/forge-1.7.gradle deleted file mode 100644 index dcfcffb..0000000 --- a/buildscript/forge-1.7.gradle +++ /dev/null @@ -1,151 +0,0 @@ -/** Common code for Forge 1.7.10 builds */ - -apply plugin: 'forge' - -ext.publishDir = project.multiproject_structure.toBoolean() ? "${projectDir}/../publish" : "${rootDir}/publish" - -def runCommand(cmd) { - def commitHashProc = cmd.execute(null, file("${projectDir}")) - commitHashProc.waitFor() - if(commitHashProc.exitValue() == 0){ - def commitHash = commitHashProc.text.trim() - - return commitHash - } else { - println commitHashProc.err.text - println(cmd + " exited with non-zero return value") - return null - } -} - -def getCommitVersion() { - def ver = null - - def versionPath = publishDir + "/version.txt" - if(file(versionPath).isFile()) { - ver = file(versionPath).text - } else { - - try { - ver = runCommand("git describe --tags --dirty") ?: "UNKNOWN-" + runCommand("git describe --always --dirty") ?: "UNKNOWN" - } catch(Exception e){ - println "Failed to run " + cmd + ": " + e.getMessage() - ver = "UNKNOWN" - } - } - - ver = ver.trim() - if(ver.charAt(0) == 'v') { - ver = ver.substring(1) - } - - return ver -} - -project.version = getCommitVersion() - -group = project.group -archivesBaseName = "${project.archives_base}-${project.minecraft_version}" - -minecraft { - version = "${project.minecraft_version}-${project.forge_version}" - runDir = "run" - replace '@VERSION@', project.version -} - -// These settings allow you to choose what version of Java you want to be compatible with. Forge 1.7.10 runs on Java 6 to 8. -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -repositories { - maven { - name = "chickenbones" - url = "http://chickenbones.net/maven/" - } -} - -configurations { - embed - compile.extendsFrom(embed) - shade - compile.extendsFrom(shade) -} - -if(project.enable_mixin.toBoolean()) { - apply from: "buildscript/forge-1.7-mixin.gradle" -} - -project.ext.override_dependencies = false - -if(file("project.gradle").exists()){ - apply from: "project.gradle" -} - -if(!project.ext.override_dependencies) { - dependencies { - runtimeOnly "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev" - runtimeOnly "codechicken:CodeChickenCore:1.7.10-1.0.7.47:dev" - } -} - -jar { - from(sourceSets.main.output); - - // embed libraries in jar - from configurations.embed.collect { - exclude '**/LICENSE', '**/LICENSE.txt' - it.isDirectory() ? it : zipTree(it) - } - - configurations.shade.each { dep -> - from(project.zipTree(dep)){ - exclude '**/LICENSE', '**/LICENSE.txt', 'META-INF', 'META-INF/**' - } - } -} - -processResources { - // This will ensure that this task is redone when the versions or any - // user-defined properties change. - inputs.property "version", version - inputs.property "mcversion", project.minecraft.version - inputs.properties project.ext.getProperties() - - filesMatching('*.info') { - expand project.properties - } -} - -// Ensures that the encoding of source files is set to UTF-8, see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" -} - -// Add git commit hash to MANIFEST.MF - -def getCommitHash(){ - try { - def commitHashProc = "git describe --always --dirty".execute() - commitHashProc.waitFor() - if(commitHashProc.exitValue() == 0){ - def commitHash = commitHashProc.text.trim() - - return commitHash - } else { - println commitHashProc.err.text - throw new Exception("git describe exited with non-zero return value") - } - } catch(Exception e){ - println "Failed to get commit version: " + e.getMessage() - } - return "UNKNOWN" // fallback -} - - -jar { - manifest { - attributes ( - 'Commit-ID': getCommitHash(), - ) - } -} diff --git a/module-common/LICENSE b/common/LICENSE similarity index 100% rename from module-common/LICENSE rename to common/LICENSE diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 0000000..cab1f62 --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + id("unimixins") +} + +unimined.minecraft { + +} diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/abstraction/ComparableVersion.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/abstraction/ComparableVersion.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/abstraction/ComparableVersion.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/abstraction/ComparableVersion.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/AnnotatedProperties.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/AnnotatedProperties.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/AnnotatedProperties.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/AnnotatedProperties.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/ConfigUtil.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/ConfigUtil.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/ConfigUtil.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/ConfigUtil.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyCollection.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyCollection.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyCollection.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyCollection.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyToken.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyToken.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyToken.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/config/PropertyToken.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckConfig.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckConfig.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckConfig.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckConfig.java diff --git a/module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckHelper.java b/common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckHelper.java similarity index 100% rename from module-common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckHelper.java rename to common/src/main/java/io/github/legacymoddingmc/unimixins/common/sanitycheck/SanityCheckHelper.java diff --git a/module-compat/LICENSE b/compat/LICENSE similarity index 100% rename from module-compat/LICENSE rename to compat/LICENSE diff --git a/compat/build.gradle.kts b/compat/build.gradle.kts new file mode 100644 index 0000000..490239b --- /dev/null +++ b/compat/build.gradle.kts @@ -0,0 +1,30 @@ +unimixins { + fmlCorePlugin = "io.github.legacymoddingmc.unimixins.compat.CompatCore" +} + +plugins { + id("unimixins") +} + +dependencies { + compileOnly("org.spongepowered:mixin:0.8.5") + shadowImplementation(project(":common")) { + isTransitive = false + } +} + +tasks.shadowJar { + relocate("io.github.legacymoddingmc.unimixins.common", "io.github.legacymoddingmc.unimixins.compat.repackage.common") + + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + ) + } +} + +unimined.minecraft { + +} \ No newline at end of file diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatConfig.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatConfig.java similarity index 100% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatConfig.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatConfig.java diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatCore.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatCore.java similarity index 100% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatCore.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatCore.java diff --git a/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java new file mode 100644 index 0000000..781a7e9 --- /dev/null +++ b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java @@ -0,0 +1,11 @@ +package io.github.legacymoddingmc.unimixins.compat; + +import cpw.mods.fml.common.Mod; + +/** + * This is only here to help Forge detect the mod. + */ +@Mod(modid = "unimixins-compat", useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = "unimixins-compat", useMetadata = true, acceptableRemoteVersions = "*") +public class CompatModule { +} diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CrashReportEnhancer.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CrashReportEnhancer.java similarity index 100% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CrashReportEnhancer.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CrashReportEnhancer.java diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/MixinErrorHandler.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/MixinErrorHandler.java similarity index 100% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/MixinErrorHandler.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/MixinErrorHandler.java diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/api/RemapASMForMixin.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/api/RemapASMForMixin.java similarity index 100% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/api/RemapASMForMixin.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/api/RemapASMForMixin.java diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java similarity index 83% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java index 536bace..b0f6c03 100644 --- a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java +++ b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/ASMRemapperTransformer.java @@ -52,10 +52,10 @@ public class ASMRemapperTransformer implements IClassTransformer { @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - if(basicClass == null) { + if (basicClass == null) { return null; } - if(transformedName.startsWith("io.github.legacymoddingmc.unimixins.compat.asm.") + if (transformedName.startsWith("io.github.legacymoddingmc.unimixins.compat.asm.") || transformedName.startsWith("com.google.") || transformedName.startsWith("org.apache.") || transformedName.startsWith("org.objectweb.asm.") @@ -63,28 +63,29 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) boolean foundWrongAsm = containsAnyPattern(basicClass, getWrongASMPackagePrefixesRaw()); - if(!foundWrongAsm) return basicClass; + if (!foundWrongAsm) return basicClass; - boolean foundShadedAsm = containsAnyPattern(basicClass, SHADED_ASM_PACKAGE_PREFIXES_RAW); + // Remap if we've found shaded ASM + boolean doRemap = containsAnyPattern(basicClass, SHADED_ASM_PACKAGE_PREFIXES_RAW); - boolean doRemap = foundShadedAsm; - - if(!doRemap) { + if (!doRemap) { ClassNode classNode = new ClassNode(); ClassReader classReaderForNode = new ClassReader(basicClass); classReaderForNode.accept(classNode, 0); - if(classNode.interfaces != null) { - for (String itf : classNode.interfaces) { + if (classNode.interfaces != null) { + for (Object itf : classNode.interfaces) { if (itf.equals("org/spongepowered/asm/mixin/extensibility/IMixinConfigPlugin")) { doRemap = true; break; } } } - if(!doRemap) { - if(classNode.visibleAnnotations != null) { - for (AnnotationNode ann : classNode.visibleAnnotations) { + if (!doRemap) { + if (classNode.visibleAnnotations != null) { + for (Object o : classNode.visibleAnnotations) { + final AnnotationNode ann = (AnnotationNode) o; + if (ann.desc.equals("Lio/github/legacymoddingmc/unimixins/compat/api/RemapASMForMixin;")) { doRemap = true; break; @@ -94,7 +95,7 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) } } - if(doRemap) { + if (doRemap) { ClassReader classReader = new ClassReader(basicClass); LOGGER.info("Transforming class " + transformedName + " to fit current mixin environment."); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); @@ -106,11 +107,11 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) } private static boolean containsAnyPattern(byte[] array, List patterns) { - if(array == null) { + if (array == null) { return false; } - for(byte[] pattern : patterns) { - if(Bytes.indexOf(array, pattern) != -1) { + for (byte[] pattern : patterns) { + if (Bytes.indexOf(array, pattern) != -1) { return true; } } @@ -118,13 +119,15 @@ private static boolean containsAnyPattern(byte[] array, List patterns) { } private static String getRealASMPackagePrefix() { - if(realASMPackagePrefix == null) { + if (realASMPackagePrefix == null) { try { ClassReader cr = new ClassReader(Launch.classLoader.getClassBytes("org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin")); ClassNode cn = new ClassNode(); cr.accept(cn, 0); - for (MethodNode m : cn.methods) { + for (Object o : cn.methods) { + final MethodNode m = (MethodNode) o; + if (m.name.equals("preApply")) { int classNodeDescStart = StringUtils.ordinalIndexOf(m.desc, "L", 2); int classNodeDescEnd = StringUtils.ordinalIndexOf(m.desc, "L", 3); @@ -137,7 +140,7 @@ private static String getRealASMPackagePrefix() { e.printStackTrace(); throw new RuntimeException("Failed to determine real package name Mixin's shaded ASM."); } finally { - if(realASMPackagePrefix == null) { + if (realASMPackagePrefix == null) { realASMPackagePrefix = "UNKNOWN"; } @@ -148,14 +151,14 @@ private static String getRealASMPackagePrefix() { } private static List getWrongASMPackagePrefixes() { - if(wrongASMPackagePrefixes == null) { + if (wrongASMPackagePrefixes == null) { wrongASMPackagePrefixes = ASM_PACKAGE_PREFIXES.stream().filter(x -> !x.equals(getRealASMPackagePrefix())).collect(Collectors.toList()); } return wrongASMPackagePrefixes; } private static List getWrongASMPackagePrefixesRaw() { - if(wrongASMPackagePrefixesRaw == null) { + if (wrongASMPackagePrefixesRaw == null) { wrongASMPackagePrefixesRaw = getWrongASMPackagePrefixes().stream().map(x -> x.getBytes(StandardCharsets.UTF_8)).collect(Collectors.toList()); } return wrongASMPackagePrefixesRaw; @@ -173,10 +176,9 @@ private static class SpongepoweredASMRemapper extends Remapper { @Override public String map(String typeName) { - for(String s : ASM_PACKAGE_PREFIXES) { - if(typeName.startsWith(s)) { - String newName = ASMRemapperTransformer.getRealASMPackagePrefix() + typeName.substring(s.length()); - return newName; + for (String s : ASM_PACKAGE_PREFIXES) { + if (typeName.startsWith(s)) { + return ASMRemapperTransformer.getRealASMPackagePrefix() + typeName.substring(s.length()); } } return super.map(typeName); diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java similarity index 88% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java index 4a68bac..1e0767b 100644 --- a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java +++ b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/EnhanceCrashReportsTransformer.java @@ -18,9 +18,9 @@ public class EnhanceCrashReportsTransformer implements IClassTransformer { @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - if(basicClass == null) return null; + if (basicClass == null) return null; - if(name.equals("cpw.mods.fml.common.FMLCommonHandler")) { + if (name.equals("cpw.mods.fml.common.FMLCommonHandler")) { return transformFMLCommonHandler(basicClass); } return basicClass; @@ -44,21 +44,23 @@ private static byte[] transformFMLCommonHandler(byte[] bytes) { ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); - for(MethodNode m : classNode.methods) { + for (Object o : classNode.methods) { + final MethodNode m = (MethodNode) o; + if (m.name.equals("enhanceCrashReport")) { AbstractInsnNode injectionTarget = null; - for(int i = 0; i < m.instructions.size(); i++) { + for (int i = 0; i < m.instructions.size(); i++) { AbstractInsnNode ain = m.instructions.get(i); - if(ain instanceof InsnNode) { + if (ain instanceof InsnNode) { InsnNode in = (InsnNode)ain; - if(in.getOpcode() == RETURN) { + if (in.getOpcode() == RETURN) { injectionTarget = in; break; } } } - if(injectionTarget != null) { + if (injectionTarget != null) { InsnList inject = new InsnList(); //ALOAD crashReport inject.add(new VarInsnNode(ALOAD, 1)); diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java similarity index 74% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java index 5a9cadd..6837b97 100644 --- a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java +++ b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer.java @@ -21,12 +21,12 @@ public class HackClasspathModDiscoveryTransformer implements IClassTransformer { @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - if(basicClass == null) { + if (basicClass == null) { return null; } - if(transformedName.startsWith("org.objectweb.asm.")) return basicClass; + if (transformedName.startsWith("org.objectweb.asm.")) return basicClass; - if(transformedName.equals("cpw.mods.fml.common.discovery.ModDiscoverer")) { + if (transformedName.equals("cpw.mods.fml.common.discovery.ModDiscoverer")) { basicClass = doTransformModDiscoverer(basicClass); } return basicClass; @@ -39,15 +39,17 @@ private byte[] doTransformModDiscoverer(byte[] bytes) { ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); - for(MethodNode m : classNode.methods) { - if(m.name.equals("findClasspathMods")) { - Iterator it = m.instructions.iterator(); + for (Object o : classNode.methods) { + final MethodNode m = (MethodNode) o; - while(it.hasNext()) { + if (m.name.equals("findClasspathMods")) { + @SuppressWarnings("unchecked") Iterator it = m.instructions.iterator(); + + while (it.hasNext()) { AbstractInsnNode i = it.next(); - if(i.getOpcode() == INVOKESTATIC) { + if (i.getOpcode() == INVOKESTATIC) { MethodInsnNode mi = (MethodInsnNode)i; - if(mi.owner.equals("cpw/mods/fml/relauncher/CoreModManager") && mi.name.equals("getReparseableCoremods") && mi.desc.equals("()Ljava/util/List;")) { + if (mi.owner.equals("cpw/mods/fml/relauncher/CoreModManager") && mi.name.equals("getReparseableCoremods") && mi.desc.equals("()Ljava/util/List;")) { m.instructions.insertBefore(mi, new MethodInsnNode(INVOKESTATIC, "io/github/legacymoddingmc/unimixins/compat/asm/HackClasspathModDiscoveryTransformer$Hooks", "redirectGetReparseableCoremods", mi.desc)); it.remove(); break; @@ -56,10 +58,11 @@ private byte[] doTransformModDiscoverer(byte[] bytes) { } } } + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); classNode.accept(writer); return writer.toByteArray(); - } catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); } diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java similarity index 89% rename from module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java rename to compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java index acd4f93..737bf08 100644 --- a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java +++ b/compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer.java @@ -29,7 +29,7 @@ public static boolean wantsToRun() { } private static Set getUniMixinsJavaAgentJars() { - if(uniMixinsJavaAgentJars == null) { + if (uniMixinsJavaAgentJars == null) { uniMixinsJavaAgentJars = new HashSet<>(); try { for (String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { @@ -53,11 +53,11 @@ private static Set getUniMixinsJavaAgentJars() { @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - if(basicClass == null) { + if (basicClass == null) { return null; } - if(transformedName.equals("cpw.mods.fml.common.discovery.ModDiscoverer")) { + if (transformedName.equals("cpw.mods.fml.common.discovery.ModDiscoverer")) { basicClass = doTransformModDiscoverer(basicClass); } return basicClass; @@ -70,8 +70,10 @@ private byte[] doTransformModDiscoverer(byte[] bytes) { ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); - for(MethodNode m : classNode.methods) { - if(m.name.equals("identifyMods")) { + for (Object o : classNode.methods) { + final MethodNode m = (MethodNode) o; + + if (m.name.equals("identifyMods")) { InsnList patch = new InsnList(); patch.add(new VarInsnNode(ALOAD, 0)); patch.add(new MethodInsnNode(INVOKESTATIC, "io/github/legacymoddingmc/unimixins/compat/asm/IgnoreDuplicateJarsTransformer$Hooks", "preIdentifyMods", "(Lcpw/mods/fml/common/discovery/ModDiscoverer;)V")); @@ -95,14 +97,14 @@ public static void preIdentifyMods(ModDiscoverer dis) { List candidates = getModCandidates(dis); Map> modCandidatesByFile = new HashMap<>(); - for(ModCandidate mc : candidates) { + for (ModCandidate mc : candidates) { modCandidatesByFile.computeIfAbsent(getModContainer(mc), x -> new ArrayList<>()).add(mc); } - for(Map.Entry> e : modCandidatesByFile.entrySet()) { + for (Map.Entry> e : modCandidatesByFile.entrySet()) { File file = e.getKey(); List mcs = e.getValue(); - if(getUniMixinsJavaAgentJars().contains(file)) { + if (getUniMixinsJavaAgentJars().contains(file)) { Iterator it = mcs.iterator(); while(mcs.size() > 1 && it.hasNext()) { ModCandidate mc = it.next(); @@ -125,7 +127,8 @@ public static void preIdentifyMods(ModDiscoverer dis) { private static List getModCandidates(ModDiscoverer dis) throws Exception { Field f = dis.getClass().getDeclaredField("candidates"); f.setAccessible(true); - return (List)f.get(dis); + //noinspection unchecked + return (List) f.get(dis); } private static File getModContainer(ModCandidate mc) throws Exception { diff --git a/module-compat/src/main/resources/mcmod.info b/compat/src/main/resources/mcmod.info similarity index 64% rename from module-compat/src/main/resources/mcmod.info rename to compat/src/main/resources/mcmod.info index b6ca1da..615f8b8 100644 --- a/module-compat/src/main/resources/mcmod.info +++ b/compat/src/main/resources/mcmod.info @@ -3,13 +3,11 @@ "modid": "unimixins-compat", "name": "UniMixins: Compatibility", "description": "UniMixins module that improves compatibility and helps debug crashes.", - "version": "${version}", - "mcversion": "${minecraft_version}", - "url": "${project_url}", + "version": "@uniMixinsVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "makamys" - ], + "authorList": ["makamys"], "credits": "", "logoFile": "", "screenshots": [] diff --git a/module-compatfuture/LICENSE b/compatfuture/LICENSE similarity index 100% rename from module-compatfuture/LICENSE rename to compatfuture/LICENSE diff --git a/compatfuture/build.gradle.kts b/compatfuture/build.gradle.kts new file mode 100644 index 0000000..8d5e6fe --- /dev/null +++ b/compatfuture/build.gradle.kts @@ -0,0 +1,24 @@ +unimixins { + fmlCorePlugin = "io.github.legacymoddingmc.unimixins.compatfuture.CompatFutureCore" +} + +plugins { + id("unimixins") +} + +tasks.shadowJar { + configurations = listOf() + + relocate("io.github.legacymoddingmc.unimixins.compat.stub.cpw", "cpw") + + manifest { + attributes ( + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + ) + } +} + +unimined.minecraft { + +} diff --git a/module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureCore.java b/compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureCore.java similarity index 100% rename from module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureCore.java rename to compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureCore.java diff --git a/module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java b/compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java similarity index 61% rename from module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java rename to compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java index 5f72507..3e891a6 100644 --- a/module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java +++ b/compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/CompatFutureModule.java @@ -5,7 +5,7 @@ /** * This is only here to help Forge detect the mod. */ -@Mod(modid = "unimixins-compatfuture", version = "@VERSION@", acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = "unimixins-compatfuture", version = "@VERSION@", acceptableRemoteVersions = "*") +@Mod(modid = "unimixins-compatfuture", useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = "unimixins-compatfuture", useMetadata = true, acceptableRemoteVersions = "*") public class CompatFutureModule { } diff --git a/module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/stub/cpw/mods/fml/relauncher/IFMLLoadingPlugin.java b/compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/stub/cpw/mods/fml/relauncher/IFMLLoadingPlugin.java similarity index 100% rename from module-compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/stub/cpw/mods/fml/relauncher/IFMLLoadingPlugin.java rename to compatfuture/src/main/java/io/github/legacymoddingmc/unimixins/compatfuture/stub/cpw/mods/fml/relauncher/IFMLLoadingPlugin.java diff --git a/module-compatfuture/src/main/resources/mcmod.info b/compatfuture/src/main/resources/mcmod.info similarity index 65% rename from module-compatfuture/src/main/resources/mcmod.info rename to compatfuture/src/main/resources/mcmod.info index 96cfc19..4a635b4 100644 --- a/module-compatfuture/src/main/resources/mcmod.info +++ b/compatfuture/src/main/resources/mcmod.info @@ -3,13 +3,11 @@ "modid": "unimixins-compatfuture", "name": "UniMixins: Future Compatibility", "description": "UniMixins module that makes the mod usable on 1.8.9 ~ 1.12.2.", - "version": "${version}", - "mcversion": "${minecraft_version}", - "url": "${project_url}", + "version": "@uniMixinsVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "makamys" - ], + "authorList": ["makamys"], "credits": "", "logoFile": "", "screenshots": [] diff --git a/module-gasstation/COPYING b/gasstation/COPYING similarity index 100% rename from module-gasstation/COPYING rename to gasstation/COPYING diff --git a/module-gasstation/COPYING.LESSER b/gasstation/COPYING.LESSER similarity index 100% rename from module-gasstation/COPYING.LESSER rename to gasstation/COPYING.LESSER diff --git a/module-gasstation/CREDITS b/gasstation/CREDITS similarity index 100% rename from module-gasstation/CREDITS rename to gasstation/CREDITS diff --git a/module-gasstation/LICENSE b/gasstation/LICENSE similarity index 100% rename from module-gasstation/LICENSE rename to gasstation/LICENSE diff --git a/module-gasstation/README.original.md b/gasstation/README.original.md similarity index 100% rename from module-gasstation/README.original.md rename to gasstation/README.original.md diff --git a/gasstation/build.gradle.kts b/gasstation/build.gradle.kts new file mode 100644 index 0000000..3d1e851 --- /dev/null +++ b/gasstation/build.gradle.kts @@ -0,0 +1,53 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +unimixins { + fmlCorePlugin = "com.falsepattern.gasstation.core.GasStationCore" +} + +plugins { + id("unimixins") +} + +val gasstationVersion = "0.5.1" +val gasMixVersion = "0.8.5-gasstation_7" +version = "$version+$gasstationVersion" + +repositories { + maven { + url = uri("https://mvn.falsepattern.com/releases") + } +} + +dependencies { + compileOnly("org.spongepowered:mixin:$gasMixVersion") + compileOnly(project(":mixinbooterlegacy")) + shadow(project(":common")) { + isTransitive = false + } +} + +tasks.shadowJar { + configurations = listOf(project.configurations.shadow.get()) + relocate("io.github.legacymoddingmc.unimixins.common", "io.github.legacymoddingmc.unimixins.gasstation.repackage.common") + + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + "MixinConfigs" to "mixins.gasstation.json", + ) + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "gasstationVersion" to gasstationVersion + )) + } +} + +unimined.minecraft { + +} diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java b/gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java similarity index 83% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java rename to gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java index 7e4b66b..6bcdaad 100644 --- a/module-gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java +++ b/gasstation/src/main/java/com/falsepattern/gasstation/GasStation.java @@ -3,12 +3,12 @@ import cpw.mods.fml.common.Mod; @Mod(modid = Tags.MODID, - version = Tags.VERSION, name = Tags.MODNAME, + useMetadata = true, acceptableRemoteVersions = "*") @net.minecraftforge.fml.common.Mod(modid = Tags.MODID, - version = Tags.VERSION, name = Tags.MODNAME, + useMetadata = true, acceptableRemoteVersions = "*") public class GasStation { } diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/IEarlyMixinLoader.java b/gasstation/src/main/java/com/falsepattern/gasstation/IEarlyMixinLoader.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/IEarlyMixinLoader.java rename to gasstation/src/main/java/com/falsepattern/gasstation/IEarlyMixinLoader.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/ILateMixinLoader.java b/gasstation/src/main/java/com/falsepattern/gasstation/ILateMixinLoader.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/ILateMixinLoader.java rename to gasstation/src/main/java/com/falsepattern/gasstation/ILateMixinLoader.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/MinecraftURLClassPath.java b/gasstation/src/main/java/com/falsepattern/gasstation/MinecraftURLClassPath.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/MinecraftURLClassPath.java rename to gasstation/src/main/java/com/falsepattern/gasstation/MinecraftURLClassPath.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/Tags.java b/gasstation/src/main/java/com/falsepattern/gasstation/Tags.java similarity index 62% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/Tags.java rename to gasstation/src/main/java/com/falsepattern/gasstation/Tags.java index ee74e39..591a63e 100644 --- a/module-gasstation/src/main/java/com/falsepattern/gasstation/Tags.java +++ b/gasstation/src/main/java/com/falsepattern/gasstation/Tags.java @@ -5,8 +5,8 @@ public class Tags { // GRADLETOKEN_* will be replaced by your configuration values at build time - public static final String MODID = "GRADLETOKEN_MODID"; - public static final String MODNAME = "GRADLETOKEN_MODNAME"; + public static final String MODID = "gasstation"; + public static final String MODNAME = "GasStation"; public static final String VERSION = "GRADLETOKEN_VERSION"; - public static final String GROUPNAME = "GRADLETOKEN_GROUPNAME"; + public static final String GROUPNAME = "com.falsepattern.gasstation"; } \ No newline at end of file diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/core/GasStationCore.java b/gasstation/src/main/java/com/falsepattern/gasstation/core/GasStationCore.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/core/GasStationCore.java rename to gasstation/src/main/java/com/falsepattern/gasstation/core/GasStationCore.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/DevMixinPlugin.java b/gasstation/src/main/java/com/falsepattern/gasstation/mixins/DevMixinPlugin.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/DevMixinPlugin.java rename to gasstation/src/main/java/com/falsepattern/gasstation/mixins/DevMixinPlugin.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/IModDiscovererMixin.java b/gasstation/src/main/java/com/falsepattern/gasstation/mixins/IModDiscovererMixin.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/IModDiscovererMixin.java rename to gasstation/src/main/java/com/falsepattern/gasstation/mixins/IModDiscovererMixin.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/LoadControllerMixin.java b/gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/LoadControllerMixin.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/LoadControllerMixin.java rename to gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/LoadControllerMixin.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/LoaderMixin.java b/gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/LoaderMixin.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/LoaderMixin.java rename to gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/LoaderMixin.java diff --git a/module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/ModDiscovererMixin.java b/gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/ModDiscovererMixin.java similarity index 100% rename from module-gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/ModDiscovererMixin.java rename to gasstation/src/main/java/com/falsepattern/gasstation/mixins/mixin/dev/ModDiscovererMixin.java diff --git a/module-gasstation/src/main/java/io/github/legacymoddingmc/unimixins/gasstation/GasStationModule.java b/gasstation/src/main/java/io/github/legacymoddingmc/unimixins/gasstation/GasStationModule.java similarity index 100% rename from module-gasstation/src/main/java/io/github/legacymoddingmc/unimixins/gasstation/GasStationModule.java rename to gasstation/src/main/java/io/github/legacymoddingmc/unimixins/gasstation/GasStationModule.java diff --git a/module-gasstation/src/main/resources/mcmod.info b/gasstation/src/main/resources/mcmod.info similarity index 65% rename from module-gasstation/src/main/resources/mcmod.info rename to gasstation/src/main/resources/mcmod.info index 6053a33..08619c1 100644 --- a/module-gasstation/src/main/resources/mcmod.info +++ b/gasstation/src/main/resources/mcmod.info @@ -3,13 +3,11 @@ "modid": "gasstation", "name": "UniMixins: GasStation", "description": "UniMixins module that provides GasStation extras.\nDepends on: SpongeMixins, MixinBooterLegacy, MixinExtras", - "version": "${extraVersion}+uni.${uniVersion}", - "mcversion": "${mcversion}", - "url": "${project_url}", + "version": "@gasstationVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "FalsePattern" - ], + "authorList": ["FalsePattern"], "credits": "", "logoFile": "", "screenshots": [], diff --git a/module-gasstation/src/main/resources/mixins.gasstation.json b/gasstation/src/main/resources/mixins.gasstation.json similarity index 100% rename from module-gasstation/src/main/resources/mixins.gasstation.json rename to gasstation/src/main/resources/mixins.gasstation.json diff --git a/module-gasstation/src/main/resources/mixins.gasstation.refmap.json b/gasstation/src/main/resources/mixins.gasstation.refmap.json similarity index 100% rename from module-gasstation/src/main/resources/mixins.gasstation.refmap.json rename to gasstation/src/main/resources/mixins.gasstation.refmap.json diff --git a/gradle.properties b/gradle.properties index 6ed1bc8..5957d27 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1 @@ -# Mod properties -modid=unimixins -archives_base=+unimixins -# http://maven.apache.org/guides/mini/guide-naming-conventions.html -group=io.github.legacymoddingmc.unimixins - -# Forge properties -minecraft_version=1.7.10 -forge_version=10.13.4.1614-1.7.10 - -enable_mixin=false -multiproject_structure=false - -project_url=https://github.com/LegacyModdingMC/UniMixins +org.gradle.jvmargs = -Xmx2G diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3ab0b72..0b55a3b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..8197baf 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' -exec "$JAVACMD" "$@" +exec "$JAVACMD" "$@" \ No newline at end of file diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..c138ebb 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,15 +76,17 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal -:omega +:omega \ No newline at end of file diff --git a/module-gtnhmixins/CREDITS b/gtnhmixins/CREDITS similarity index 100% rename from module-gtnhmixins/CREDITS rename to gtnhmixins/CREDITS diff --git a/module-gtnhmixins/LICENSE b/gtnhmixins/LICENSE similarity index 100% rename from module-gtnhmixins/LICENSE rename to gtnhmixins/LICENSE diff --git a/module-gtnhmixins/README.original.md b/gtnhmixins/README.original.md similarity index 100% rename from module-gtnhmixins/README.original.md rename to gtnhmixins/README.original.md diff --git a/gtnhmixins/build.gradle.kts b/gtnhmixins/build.gradle.kts new file mode 100644 index 0000000..d6a1038 --- /dev/null +++ b/gtnhmixins/build.gradle.kts @@ -0,0 +1,86 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.apache.tools.ant.filters.ReplaceTokens + +unimixins { + fmlCorePlugin = "com.gtnewhorizon.gtnhmixins.core.GTNHMixinsCore" +} + +plugins { + id("unimixins") +} + +val gtnhMixinsVersion = "2.2.0" +val mixinExtrasVersion = "0.1.1" + +val shadowMixinExtras by configurations.creating + +repositories { + maven { + name = "GTNH Third-Party Maven" + url = uri("https://nexus.gtnewhorizons.com/repository/thirdparty/") + } +} + +dependencies { + compileOnly("org.spongepowered:mixin:0.8.7") + shadow(project(":common")) { + isTransitive = false + } + compileOnly(project(":mixingasm")) { + isTransitive = false + } + compileOnly("com.github.LlamaLad7:MixinExtras:$mixinExtrasVersion") + shadowMixinExtras("com.github.LlamaLad7:MixinExtras:$mixinExtrasVersion") +} + +// Create the mixinExtrasJar ShadowJar task +val mixinExtrasJar by tasks.registering(ShadowJar::class) { + destinationDirectory = file("build/tmp") + archiveClassifier = "mixinExtras" + archiveVersion = mixinExtrasVersion + configurations = listOf(shadowMixinExtras) + + relocate("com.llamalad7.mixinextras", "com.gtnewhorizon.mixinextras") + relocate("org.objectweb.asm", "org.spongepowered.asm.lib") +} + +// Configure the main shadowJar +tasks.shadowJar { + configurations = listOf(project.configurations.shadow.get()) + + relocate("org.objectweb.asm", "org.spongepowered.asm.lib") + relocate("io.github.legacymoddingmc.unimixins.common", "io.github.legacymoddingmc.unimixins.gtnhmixins.repackage.common") + + from(zipTree(mixinExtrasJar.get().archiveFile)) { + eachFile { + if (!path.endsWith(".class")) exclude() + path = "data/legacy_gtnh_mixinextras/" + path.replace(".class", ".klass") + } + } + + manifest { + attributes( + mapOf( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + "MixinConfigs" to "mixins.gtnhmixins.json", + ) + ) + } + + dependsOn(mixinExtrasJar) +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "gtnhMixinsVersion" to gtnhMixinsVersion, + )) + } +} + +unimined.minecraft { + //replaceIn("GTNHMixins.java") + //replace("GRADLETOKEN_VERSION", extraVersion) +} diff --git a/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java new file mode 100644 index 0000000..3708e86 --- /dev/null +++ b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java @@ -0,0 +1,19 @@ +package com.gtnewhorizon.gtnhmixins; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Mod(modid = GTNHMixins.MODID, name = GTNHMixins.NAME, useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = GTNHMixins.MODID, name = GTNHMixins.NAME, useMetadata = true, acceptableRemoteVersions = "*") +public class GTNHMixins { + public static final String NAME = "GTNHMixins"; + public static final String MODID = "gtnhmixins"; + /** + * @deprecated This may not actually reflect the version, use FML methods to detect the version if needed. + */ + @Deprecated + public static final String VERSION = "2.2.0"; + public static final Logger LOGGER = LogManager.getLogger(NAME); +} \ No newline at end of file diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/IEarlyMixinLoader.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/IEarlyMixinLoader.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/IEarlyMixinLoader.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/IEarlyMixinLoader.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/ILateMixinLoader.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/ILateMixinLoader.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/ILateMixinLoader.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/ILateMixinLoader.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/LateMixin.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/LateMixin.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/LateMixin.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/LateMixin.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/Reflection.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/Reflection.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/Reflection.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/Reflection.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/core/GTNHMixinsCore.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/core/GTNHMixinsCore.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/core/GTNHMixinsCore.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/core/GTNHMixinsCore.java diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/mixins/LateMixinOrchestrationMixin.java b/gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/mixins/LateMixinOrchestrationMixin.java similarity index 100% rename from module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/mixins/LateMixinOrchestrationMixin.java rename to gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/mixins/LateMixinOrchestrationMixin.java diff --git a/module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsConfig.java b/gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsConfig.java similarity index 100% rename from module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsConfig.java rename to gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsConfig.java diff --git a/module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsModule.java b/gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsModule.java similarity index 100% rename from module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsModule.java rename to gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/GTNHMixinsModule.java diff --git a/module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/asm/LegacyGTNHMixinExtrasGenerator.java b/gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/asm/LegacyGTNHMixinExtrasGenerator.java similarity index 100% rename from module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/asm/LegacyGTNHMixinExtrasGenerator.java rename to gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/asm/LegacyGTNHMixinExtrasGenerator.java diff --git a/module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/util/LaunchClassLoaderUtils.java b/gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/util/LaunchClassLoaderUtils.java similarity index 100% rename from module-gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/util/LaunchClassLoaderUtils.java rename to gtnhmixins/src/main/java/io/github/legacymoddingmc/unimixins/gtnhmixins/util/LaunchClassLoaderUtils.java diff --git a/module-gtnhmixins/src/main/resources/mcmod.info b/gtnhmixins/src/main/resources/mcmod.info similarity index 60% rename from module-gtnhmixins/src/main/resources/mcmod.info rename to gtnhmixins/src/main/resources/mcmod.info index e9d5e34..23da0e6 100644 --- a/module-gtnhmixins/src/main/resources/mcmod.info +++ b/gtnhmixins/src/main/resources/mcmod.info @@ -1,15 +1,13 @@ [ { - "modid": "${extraModid}", + "modid": "gtnhmixins", "name": "UniMixins: GTNHMixins", "description": "UniMixins module that provides GTNHMixins extras and MixinExtras with the GTNH package name.\nDepends on: SpongeMixins", - "version": "${extraVersion}+uni.${uniVersion}", - "mcversion": "${mcversion}", - "url": "${project_url}", + "version": "@gtnhMixinsVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "mitchej123" - ], + "authorList": ["mitchej123"], "credits": "", "logoFile": "", "screenshots": [], diff --git a/module-gtnhmixins/src/main/resources/mixins.gtnhmixins.json b/gtnhmixins/src/main/resources/mixins.gtnhmixins.json similarity index 100% rename from module-gtnhmixins/src/main/resources/mixins.gtnhmixins.json rename to gtnhmixins/src/main/resources/mixins.gtnhmixins.json diff --git a/module-gtnhmixins/src/main/resources/mixins.gtnhmixins.refmap.json b/gtnhmixins/src/main/resources/mixins.gtnhmixins.refmap.json similarity index 100% rename from module-gtnhmixins/src/main/resources/mixins.gtnhmixins.refmap.json rename to gtnhmixins/src/main/resources/mixins.gtnhmixins.refmap.json diff --git a/module-gtnhmixins/src/main/resources/template/mixins.template.early.json b/gtnhmixins/src/main/resources/template/mixins.template.early.json similarity index 100% rename from module-gtnhmixins/src/main/resources/template/mixins.template.early.json rename to gtnhmixins/src/main/resources/template/mixins.template.early.json diff --git a/mixin/build.gradle.kts b/mixin/build.gradle.kts new file mode 100644 index 0000000..be5634a --- /dev/null +++ b/mixin/build.gradle.kts @@ -0,0 +1,193 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.apache.tools.ant.filters.ReplaceTokens + +unimixins { + fmlCorePlugin = "io.github.legacymoddingmc.unimixins.mixin.MixinCore" +} + +plugins { + id("unimixins") +} + +val versionBase = version.toString() + +val spongepoweredMixinVersion = "0.8.7" + +val asmVersion = "9.7.1" + +repositories { + maven { + name = "GTNH Third-Party Maven" + url = uri("https://nexus.gtnewhorizons.com/repository/thirdparty/") + } +} + +val shadowSourcesUniMix: Configuration by configurations.creating + +val mixinVersion = unimixins.uniMixVersion.get() +val mixinDep = "io.github.legacymoddingmc:sponge-mixin:$mixinVersion" + +val mixinFlavorClassifier = "unimix.${mixinVersion.replace('+', '-')}" + +dependencies { + compileOnly("org.spongepowered:mixin:$spongepoweredMixinVersion") + compileOnly(project(":common")) { + isTransitive = false + } + + shadowImplementation(project(":common")) { + isTransitive = false + } + shadowImplementation(mixinDep) { + exclude(group = "org.ow2.asm") + } + shadowImplementation("org.ow2.asm:asm-tree:$asmVersion") + shadowImplementation("org.ow2.asm:asm-commons:$asmVersion") + shadowImplementation("org.ow2.asm:asm-util:$asmVersion") + + shadowSourcesUniMix("$mixinDep:sources") { + isTransitive = false + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "mixinClassifier" to mixinFlavorClassifier, + "version" to "$versionBase+$mixinFlavorClassifier" + )) + } +} + +// We want to *not* relocate ASM in the bridge classes. So we use a multi-step +// build procedure: + +// 1. Create relocated Mixin jar, without the bridge classes +val mixinJarTask = tasks.register("mixinJarUniMix", ShadowJar::class) { + destinationDirectory = file("build/tmp") + archiveClassifier = "tmpUnimix" + configurations = listOf(project.configurations.shadowImplementation.get()) + + relocate("org.objectweb.asm", "org.spongepowered.asm.lib") + relocate("com.google", "org.spongepowered.libraries.com.google") + + exclude("org/spongepowered/asm/bridge/RemapperAdapter.class") + exclude("org/spongepowered/asm/bridge/RemapperAdapterFML.class") + + // Exclude stuff that's compiled for Java 16 + + exclude("org/spongepowered/asm/service/modlauncher/*") + exclude("org/spongepowered/asm/launch/MixinTransformationServiceLegacy*") + exclude("org/spongepowered/asm/launch/MixinLaunchPlugin*") + exclude("org/spongepowered/asm/launch/MixinTransformationService*") + exclude("org/spongepowered/asm/launch/platform/container/ContainerHandleModLauncherEx*") + + exclude("META-INF/services/cpw.mods.modlauncher.api.ITransformationService") + exclude("META-INF/services/cpw.mods.modlauncher.serviceapi.ILaunchPluginService") + + exclude("**/module-info.class") + + // Exclude jar-specific stuff + exclude("META-INF/MANIFEST.MF", "META-INF/maven/**", "META-INF/*.RSA", "META-INF/*.SF") +} + +// 2. Create Mixin jar without relocation, with *only* the bridge classes +val bridgeJarTask = tasks.register("bridgeJarUniMix", ShadowJar::class) { + destinationDirectory = file("build/tmp") + archiveClassifier = "tmpBridgeUniMix" + configurations = listOf(project.configurations.shadowImplementation.get()) + + include("org/spongepowered/asm/bridge/*") +} + +// 3. Combine the two jars +tasks.shadowJar { + // Clear defaults for the shadow jar + configurations = listOf() + + version = "$versionBase+$mixinFlavorClassifier" + from(sourceSets["main"].output) + + relocate( + "io.github.legacymoddingmc.unimixins.common", + "io.github.legacymoddingmc.unimixins.mixin.repackage.common" + ) + + dependsOn(mixinJarTask) + dependsOn(bridgeJarTask) + + from(zipTree(mixinJarTask.get().archiveFile).matching { + exclude("module-info.class") + eachFile { + if (path.startsWith("META-INF/services/")) { + @Suppress("NULL_FOR_NONNULL_TYPE") + filter { l -> + if (l.startsWith("org.spongepowered.asm.service.modlauncher.")) + return@filter null + else + return@filter l + } + } + } + }) + + // Copy licenses to modularized path too + from(zipTree(mixinJarTask.get().archiveFile).matching { + include("LICENSE*") + }) { + into("META-INF/licenses/mixin") + } + + from(zipTree(bridgeJarTask.get().archiveFile).matching { + include("org/spongepowered/asm/bridge/*") + }) + + manifest { + attributes( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + "Premain-Class" to "org.spongepowered.tools.agent.MixinAgent", + "Agent-Class" to "org.spongepowered.tools.agent.MixinAgent", + "Can-Redefine-Classes" to true, + "Can-Retransform-Classes" to true, + "Implementation-Version" to mixinVersion + ) + } + + doLast { + delete(mixinJarTask.get().archiveFile) + delete(bridgeJarTask.get().archiveFile) + } +} + +val shadowSourcesJarTask = tasks.register("shadowSourcesJar", ShadowJar::class) { + from(sourceSets["main"].allSource) + + version = "$versionBase+$mixinFlavorClassifier" + archiveClassifier = "sources" + configurations = listOf(shadowSourcesUniMix) +} + +tasks.jar { + dependsOn(shadowSourcesJarTask) + dependsOn(tasks.shadowJar) +} + +/*if (publishModuleToMaven){ + publishing { + publications { + create("maven$_flavor", MavenPublication) { + artifact tasks."shadowJar$_flavor" + artifact tasks."shadowSourcesJar" + + artifactId = archivesBaseName.substring(1) + (mixinFlavor == "unimix" ? "" : "-" + mixinFlavor) + groupId = mavenGroupId + } + } + } +}*/ + +unimined.minecraft { + +} diff --git a/module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinCore.java b/mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinCore.java similarity index 100% rename from module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinCore.java rename to mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinCore.java diff --git a/module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModidDecorator.java b/mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModidDecorator.java similarity index 100% rename from module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModidDecorator.java rename to mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModidDecorator.java diff --git a/module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModule.java b/mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModule.java similarity index 100% rename from module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModule.java rename to mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinModule.java diff --git a/module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinSanityCheck.java b/mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinSanityCheck.java similarity index 100% rename from module-mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinSanityCheck.java rename to mixin/src/main/java/io/github/legacymoddingmc/unimixins/mixin/MixinSanityCheck.java diff --git a/mixin/src/main/resources/mcmod.info b/mixin/src/main/resources/mcmod.info new file mode 100644 index 0000000..9c60b33 --- /dev/null +++ b/mixin/src/main/resources/mcmod.info @@ -0,0 +1,16 @@ +[ + { + "modid": "unimixins-mixin", + "name": "UniMixins: Mixin (UniMix)", + "description": "UniMixins module that provides the UniMix fork of Mixin (version: @mixinClassifier@).", + "version": "@version@", + "mcversion": "1.7.10", + "url": "@projectUrl@", + "updateUrl": "", + "authorList": ["makamys"], + "credits": "", + "logoFile": "", + "screenshots": [], + "dependencies": [] + } +] diff --git a/module-mixinbooterlegacy/CREDITS b/mixinbooterlegacy/CREDITS similarity index 100% rename from module-mixinbooterlegacy/CREDITS rename to mixinbooterlegacy/CREDITS diff --git a/module-mixinbooterlegacy/LICENSE b/mixinbooterlegacy/LICENSE similarity index 100% rename from module-mixinbooterlegacy/LICENSE rename to mixinbooterlegacy/LICENSE diff --git a/mixinbooterlegacy/build.gradle.kts b/mixinbooterlegacy/build.gradle.kts new file mode 100644 index 0000000..b8e9055 --- /dev/null +++ b/mixinbooterlegacy/build.gradle.kts @@ -0,0 +1,55 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +unimixins { + fmlCorePlugin = "io.github.tox1cozz.mixinbooterlegacy.MixinBooterLegacyPlugin" +} + +plugins { + id("unimixins") +} + +repositories { + maven { + name = "sponge" + url = uri("https://repo.spongepowered.org/maven/") + } + maven { + url = uri("https://mvn.falsepattern.com/releases") + } +} + +dependencies { + compileOnly("org.spongepowered:mixin:0.8.5-gasstation_7") + shadow(project(":common")) { + isTransitive = false + } +} + +val mblVersion = "1.2.1" +version = "$version+$mblVersion" + +tasks.shadowJar { + configurations = listOf(project.configurations.shadow.get()) + + relocate("io.github.legacymoddingmc.unimixins.common", "io.github.legacymoddingmc.unimixins.mixinbooterlegacy.repackage.common") + + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + ) + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "mblVersion" to mblVersion + )) + } +} + +unimined.minecraft { + +} diff --git a/module-mixinbooterlegacy/src/main/java/io/github/legacymoddingmc/unimixins/mixinbooterlegacy/MixinBooterLegacyModule.java b/mixinbooterlegacy/src/main/java/io/github/legacymoddingmc/unimixins/mixinbooterlegacy/MixinBooterLegacyModule.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/legacymoddingmc/unimixins/mixinbooterlegacy/MixinBooterLegacyModule.java rename to mixinbooterlegacy/src/main/java/io/github/legacymoddingmc/unimixins/mixinbooterlegacy/MixinBooterLegacyModule.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/IEarlyMixinLoader.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/IEarlyMixinLoader.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/IEarlyMixinLoader.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/IEarlyMixinLoader.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/ILateMixinLoader.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/ILateMixinLoader.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/ILateMixinLoader.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/ILateMixinLoader.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/LateMixin.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/LateMixin.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/LateMixin.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/LateMixin.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java similarity index 95% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java index 8a63434..c5b6714 100644 --- a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java +++ b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java @@ -83,8 +83,8 @@ public String getAccessTransformerClass() { return null; } - @Mod(modid = "mixinbooterlegacy", name = "MixinBooterLegacy", version = "@VERSION@", acceptableRemoteVersions = "*") - @net.minecraftforge.fml.common.Mod(modid = "mixinbooterlegacy", name = "MixinBooterLegacy", version = "@VERSION@", acceptableRemoteVersions = "*") + @Mod(modid = "mixinbooterlegacy", name = "MixinBooterLegacy", useMetadata = true, acceptableRemoteVersions = "*") + @net.minecraftforge.fml.common.Mod(modid = "mixinbooterlegacy", name = "MixinBooterLegacy", useMetadata = true, acceptableRemoteVersions = "*") public static class Container { } diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/loader/mixin/LoadControllerMixin.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/loader/mixin/LoadControllerMixin.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/loader/mixin/LoadControllerMixin.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinbooterlegacy/loader/mixin/LoadControllerMixin.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/LICENSE b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/LICENSE similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/LICENSE rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/LICENSE diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasAnnotationProcessor.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasAnnotationProcessor.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasAnnotationProcessor.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasAnnotationProcessor.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasBootstrap.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasBootstrap.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasBootstrap.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/MixinExtrasBootstrap.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValue.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValue.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValue.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValue.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjectionInfo.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjectionInfo.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjectionInfo.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjectionInfo.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjector.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjector.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjector.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyExpressionValueInjector.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiver.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiver.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiver.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiver.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjectionInfo.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjectionInfo.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjectionInfo.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjectionInfo.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjector.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjector.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjector.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReceiverInjector.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValue.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValue.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValue.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValue.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjectionInfo.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjectionInfo.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjectionInfo.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjectionInfo.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjector.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjector.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjector.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/ModifyReturnValueInjector.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithCondition.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithCondition.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithCondition.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithCondition.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjectionInfo.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjectionInfo.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjectionInfo.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjectionInfo.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjector.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjector.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjector.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/injector/WrapWithConditionInjector.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/CompatibilityHelper.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/CompatibilityHelper.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/CompatibilityHelper.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/CompatibilityHelper.java diff --git a/module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/InjectorUtils.java b/mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/InjectorUtils.java similarity index 100% rename from module-mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/InjectorUtils.java rename to mixinbooterlegacy/src/main/java/io/github/tox1cozz/mixinextras/utils/InjectorUtils.java diff --git a/module-mixinbooterlegacy/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/mixinbooterlegacy/src/main/resources/META-INF/services/javax.annotation.processing.Processor similarity index 100% rename from module-mixinbooterlegacy/src/main/resources/META-INF/services/javax.annotation.processing.Processor rename to mixinbooterlegacy/src/main/resources/META-INF/services/javax.annotation.processing.Processor diff --git a/module-mixinbooterlegacy/src/main/resources/mcmod.info b/mixinbooterlegacy/src/main/resources/mcmod.info similarity index 69% rename from module-mixinbooterlegacy/src/main/resources/mcmod.info rename to mixinbooterlegacy/src/main/resources/mcmod.info index 6725bd8..35affe4 100644 --- a/module-mixinbooterlegacy/src/main/resources/mcmod.info +++ b/mixinbooterlegacy/src/main/resources/mcmod.info @@ -3,13 +3,11 @@ "modid": "mixinbooterlegacy", "name": "UniMixins: MixinBooterLegacy", "description": "UniMixins module that provides MixinBooterLegacy extras and MixinExtras with MixinBooterLegacy's package name.", - "version": "${extraVersion}+uni.${uniVersion}", - "mcversion": "${mcversion}", - "url": "${project_url}", + "version": "@mblVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "Rongmario", "tox1cozZ" - ], + "authorList": ["Rongmario", "tox1cozZ"], "credits": "Thanks Rongmario for a MixinBooter on Minecraft 1.12.2.", "logoFile": "", "screenshots": [], diff --git a/module-mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.json b/mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.json similarity index 100% rename from module-mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.json rename to mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.json diff --git a/module-mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.refmap.json b/mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.refmap.json similarity index 100% rename from module-mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.refmap.json rename to mixinbooterlegacy/src/main/resources/mixin.mixinbooterlegacy.refmap.json diff --git a/module-mixinextras/LICENSE b/mixinextras/LICENSE similarity index 100% rename from module-mixinextras/LICENSE rename to mixinextras/LICENSE diff --git a/mixinextras/build.gradle.kts b/mixinextras/build.gradle.kts new file mode 100644 index 0000000..523b513 --- /dev/null +++ b/mixinextras/build.gradle.kts @@ -0,0 +1,40 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +unimixins { + fmlCorePlugin = "io.github.legacymoddingmc.unimixins.mixinextras.MixinExtrasCore" +} + +plugins { + id("unimixins") +} + +val mixinExtrasVersion = "0.4.1" + +dependencies { + shadowImplSources("io.github.llamalad7:mixinextras-common:$mixinExtrasVersion") +} +version = "$version+$mixinExtrasVersion" + +tasks.shadowJar { + relocate("org.objectweb.asm", "org.spongepowered.asm.lib") + + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + ) + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "mixinExtrasVersion" to mixinExtrasVersion + )) + } +} + +unimined.minecraft { + +} diff --git a/module-mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasCore.java b/mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasCore.java similarity index 100% rename from module-mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasCore.java rename to mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasCore.java diff --git a/mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java b/mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java new file mode 100644 index 0000000..e19f916 --- /dev/null +++ b/mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java @@ -0,0 +1,12 @@ +package io.github.legacymoddingmc.unimixins.mixinextras; + +import cpw.mods.fml.common.Mod; + +/** + * This is only here to help Forge detect the mod. + */ +@Mod(modid = "mixinextras", useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = "mixinextras", useMetadata = true, acceptableRemoteVersions = "*") +public class MixinExtrasModule { +} + diff --git a/mixinextras/src/main/resources/mcmod.info b/mixinextras/src/main/resources/mcmod.info new file mode 100644 index 0000000..5969968 --- /dev/null +++ b/mixinextras/src/main/resources/mcmod.info @@ -0,0 +1,16 @@ +[ + { + "modid": "mixinextras", + "name": "UniMixins: MixinExtras", + "description": "UniMixins module that provides MixinExtras (version: @mixinExtrasVersion@).", + "version": "@mixinExtrasVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", + "updateUrl": "", + "authorList": ["LlamaLad7"], + "credits": "", + "logoFile": "", + "screenshots": [], + "dependencies": [] + } +] diff --git a/module-mixingasm/CREDITS b/mixingasm/CREDITS similarity index 100% rename from module-mixingasm/CREDITS rename to mixingasm/CREDITS diff --git a/module-mixingasm/LICENSE b/mixingasm/LICENSE similarity index 100% rename from module-mixingasm/LICENSE rename to mixingasm/LICENSE diff --git a/mixingasm/build.gradle.kts b/mixingasm/build.gradle.kts new file mode 100644 index 0000000..ae47714 --- /dev/null +++ b/mixingasm/build.gradle.kts @@ -0,0 +1,43 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +plugins { + id("unimixins") +} + +val mixingasmVersion = "0.3" +version = "$version+$mixingasmVersion" + +dependencies { + implementation(project(":mixin")) + shadow(project(":common")) { + isTransitive = false + } +} + +tasks.shadowJar { + configurations = listOf(project.configurations.shadow.get()) + + relocate("io.github.legacymoddingmc.unimixins.common", "io.github.legacymoddingmc.unimixins.mixingasm.repackage.common") + + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + "MixinConfigs" to "mixingasm.mixin.json", + "TweakOrder" to 0, + ) + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "mixingasmVersion" to mixingasmVersion + )) + } +} + +unimined.minecraft { + +} diff --git a/module-mixingasm/src/main/java/io/github/legacymoddingmc/unimixins/mixingasm/MixingasmModule.java b/mixingasm/src/main/java/io/github/legacymoddingmc/unimixins/mixingasm/MixingasmModule.java similarity index 100% rename from module-mixingasm/src/main/java/io/github/legacymoddingmc/unimixins/mixingasm/MixingasmModule.java rename to mixingasm/src/main/java/io/github/legacymoddingmc/unimixins/mixingasm/MixingasmModule.java diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java b/mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java similarity index 98% rename from module-mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java rename to mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java index aa9466a..aefce04 100644 --- a/module-mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java +++ b/mixingasm/src/main/java/makamys/mixingasm/ConfigHelper.java @@ -34,7 +34,7 @@ public Path getDefaultConfigFilePath(Path relPath) throws IOException { String urlString = resourceURL.getPath(); int lastExclamation = urlString.lastIndexOf('!'); String newURLString = urlString.substring(0, lastExclamation); - return FileSystems.newFileSystem(new File(URI.create(newURLString)).toPath(), null).getPath(resourceRelPath); + return FileSystems.newFileSystem(new File(URI.create(newURLString)).toPath(), (ClassLoader) null).getPath(resourceRelPath); case "file": return new File(URI.create(resourceURL.toString())).toPath(); default: diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/MixinConfigPlugin.java b/mixingasm/src/main/java/makamys/mixingasm/MixinConfigPlugin.java similarity index 100% rename from module-mixingasm/src/main/java/makamys/mixingasm/MixinConfigPlugin.java rename to mixingasm/src/main/java/makamys/mixingasm/MixinConfigPlugin.java diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/Mixingasm.java b/mixingasm/src/main/java/makamys/mixingasm/Mixingasm.java similarity index 100% rename from module-mixingasm/src/main/java/makamys/mixingasm/Mixingasm.java rename to mixingasm/src/main/java/makamys/mixingasm/Mixingasm.java diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/api/IMixinSafeTransformer.java b/mixingasm/src/main/java/makamys/mixingasm/api/IMixinSafeTransformer.java similarity index 100% rename from module-mixingasm/src/main/java/makamys/mixingasm/api/IMixinSafeTransformer.java rename to mixingasm/src/main/java/makamys/mixingasm/api/IMixinSafeTransformer.java diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/api/MixinSafeTransformer.java b/mixingasm/src/main/java/makamys/mixingasm/api/MixinSafeTransformer.java similarity index 100% rename from module-mixingasm/src/main/java/makamys/mixingasm/api/MixinSafeTransformer.java rename to mixingasm/src/main/java/makamys/mixingasm/api/MixinSafeTransformer.java diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/api/TransformerInclusions.java b/mixingasm/src/main/java/makamys/mixingasm/api/TransformerInclusions.java similarity index 100% rename from module-mixingasm/src/main/java/makamys/mixingasm/api/TransformerInclusions.java rename to mixingasm/src/main/java/makamys/mixingasm/api/TransformerInclusions.java diff --git a/mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java b/mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java new file mode 100644 index 0000000..a9653ed --- /dev/null +++ b/mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java @@ -0,0 +1,10 @@ +package makamys.mixingasm.forge; + +import cpw.mods.fml.common.Mod; +import makamys.mixingasm.Mixingasm; + +@Mod(modid = Mixingasm.MODID, useMetadata = true, acceptableRemoteVersions = "*") +@net.minecraftforge.fml.common.Mod(modid = Mixingasm.MODID, useMetadata = true, acceptableRemoteVersions = "*") +public class MixingasmMod { + +} \ No newline at end of file diff --git a/module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_exclusion_list.txt b/mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_exclusion_list.txt similarity index 100% rename from module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_exclusion_list.txt rename to mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_exclusion_list.txt diff --git a/module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list.txt b/mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list.txt similarity index 100% rename from module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list.txt rename to mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list.txt diff --git a/module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list_default.txt b/mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list_default.txt similarity index 100% rename from module-mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list_default.txt rename to mixingasm/src/main/resources/assets/mixingasm/default_config/mixingasm/transformer_inclusion_list_default.txt diff --git a/module-mixingasm/src/main/resources/mcmod.info b/mixingasm/src/main/resources/mcmod.info similarity index 53% rename from module-mixingasm/src/main/resources/mcmod.info rename to mixingasm/src/main/resources/mcmod.info index 5506344..50bc215 100644 --- a/module-mixingasm/src/main/resources/mcmod.info +++ b/mixingasm/src/main/resources/mcmod.info @@ -2,14 +2,12 @@ { "modid": "mixingasm", "name": "UniMixins: Mixingasm", - "description": "UniMixins module that implements Mixingasm (version: ${extraVersion}).", - "version": "${extraVersion}+uni.${uniVersion}", - "mcversion": "${minecraft_version}", - "url": "${project_url}", + "description": "UniMixins module that implements Mixingasm (version: @mixingasmVersion@).", + "version": "@mixingasmVersion@+uni.@uniMixinsVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", "updateUrl": "", - "authorList": [ - "makamys" - ], + "authorList": ["makamys"], "credits": "", "logoFile": "", "screenshots": [] diff --git a/module-mixingasm/src/main/resources/mixingasm.mixin.json b/mixingasm/src/main/resources/mixingasm.mixin.json similarity index 100% rename from module-mixingasm/src/main/resources/mixingasm.mixin.json rename to mixingasm/src/main/resources/mixingasm.mixin.json diff --git a/module-all/build.gradle b/module-all/build.gradle deleted file mode 100644 index 035ce30..0000000 --- a/module-all/build.gradle +++ /dev/null @@ -1,196 +0,0 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-all-1.7.10") - -// The order of these determines the order embedded core plugins get initialized in -ext.moduleNames = ["module-mixin", "module-compat", "module-mixingasm", "module-spongemixins", "module-mixinbooterlegacy", "module-gasstation", "module-gtnhmixins", "module-mixinextras"] - -def getJarTaskName(name, classifier) { - if(name == "module-mixin") { - return ":module-mixin:shadow${classifier == 'sources' ? 'Sources' : ''}JarUnimix" - } else { - def candidate = ":" + name + ":" + (classifier + "Jar").uncapitalize() - if(classifier == 'dev' && (tasks.findByPath(candidate) == null)) { - return getJarTaskName(name, '') - } else { - return candidate - } - } -} - -def getModuleJar(name, classifier = '') { - return tasks.getByPath(getJarTaskName(name, classifier)).getOutputs().getFiles().getSingleFile() -} - -def getModuleJars(classifier = '') { - return moduleNames.collect { getModuleJar(it, classifier) } -} - -import java.util.jar.Manifest; - -def getManifest(file) { - def man = null - zipTree(file).matching { include 'META-INF/MANIFEST.MF' }.getSingleFile().withInputStream { - man = new Manifest(it).mainAttributes - } - return man -} - -task createMergedMcmodInfo() { - outputs.file("build/tmp/mcmod.info") - outputs.upToDateWhen { false } - doLast { - def mergedJson = [] - getModuleJars().each { - def json = new groovy.json.JsonSlurper().parseText(zipTree(it).matching { include 'mcmod.info' }.getSingleFile().text) - json[0]["parent"] = "unimixins" - mergedJson += json - } - - def desc = mergedJson.collect{ it.name.split(": ")[1]}.join("; ") - mergedJson = [ - [ - modid: "unimixins", - name: "UniMixins", - description: "UniMixins composite jar consisting of the following modules:\n" + desc, - version: version, - mcversion: "1.7.10", - url: project_url, - authorList: ["makamys"], - ] - ] + mergedJson - - file("build/tmp/mcmod.info").text = groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(mergedJson)) - return file("build/tmp/mcmod.info") - } - - moduleNames.each { dependsOn tasks.getByPath(":$it:build") } -} - -task createEmbeddedCorePluginsFile() { - def path = "build/tmp/unimixins-all.EmbeddedFMLCorePlugins.txt" - outputs.file(path) - outputs.upToDateWhen { false } - doLast { - file(path).text = getModuleJars().findResults { getManifest(it).getValue("FMLCorePlugin") }.join(' ') - return file(path) - } - - moduleNames.each { dependsOn tasks.getByPath(":$it:build") } -} - -task createMergedAnnotationProcessorConfig() { - def path = "build/tmp/javax.annotation.processing.Processor" - outputs.file(path) - outputs.upToDateWhen { false } - doLast { - // MixinExtras's APs have to be registered before Mixin's, - // so we manually merge the APs to ensure this is the case. - file(path).text = """com.llamalad7.mixinextras.ap.MixinExtrasAP -io.github.tox1cozz.mixinextras.MixinExtrasAnnotationProcessor -org.spongepowered.tools.obfuscation.MixinObfuscationProcessorInjection -org.spongepowered.tools.obfuscation.MixinObfuscationProcessorTargets -""" - - return file(path) - } -} - -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -shadowJar { - classifier = '' -} - -task devJar(type: ShadowJar) { - classifier = 'dev' -} - -tasks.withType(ShadowJar) { - if(name == "shadowJar" || name == "devJar") { - dependsOn tasks.createMergedMcmodInfo - dependsOn tasks.createEmbeddedCorePluginsFile - dependsOn tasks.createMergedAnnotationProcessorConfig - - from sourceSets.main.output - configurations = [project.configurations.shadow] - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.all.repackage.common' - - (["module-common"] + moduleNames).each { - def name = it - def j = getModuleJar(it, classifier) - into "" - from(zipTree(j)){ - exclude 'mcmod.info' - exclude 'META-INF/MANIFEST.MF' - exclude 'CREDITS', 'LICENSE*', 'README*' - exclude 'META-INF/services/javax.annotation.processing.Processor' - into("") - } - from(zipTree(j)){ - include 'CREDITS', 'LICENSE*', 'README*' - into("META-INF/licenses/$name") - } - } - - from tasks.createMergedMcmodInfo.getOutputs().getFiles().getSingleFile() - from(tasks.createEmbeddedCorePluginsFile.getOutputs().getFiles().getSingleFile()) { - into 'META-INF' - } - from(tasks.createMergedAnnotationProcessorConfig.getOutputs().getFiles().getSingleFile()) { - into 'META-INF/services' - } - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'FMLCorePlugin': 'io.github.legacymoddingmc.unimixins.all.AllCore', - 'MixinConfigs': 'mixins.gtnhmixins.json,mixins.gasstation.json,mixins.gtnhmixins.json,mixingasm.mixin.json', - 'Premain-Class': 'org.spongepowered.tools.agent.MixinAgent', - 'Agent-Class': 'org.spongepowered.tools.agent.MixinAgent', - 'Can-Redefine-Classes': true, - 'Can-Retransform-Classes': true, - ) - } - - doFirst { - manifest.attributes ( - 'Implementation-Version': getManifest(getModuleJar("module-mixin")).getValue("Implementation-Version") - ) - } - } -} - -jar { - enabled = false - dependsOn shadowJar, devJar -} - -task sourcesJar(type: ShadowJar) { - dependsOn devJar - - classifier = 'sources' - - moduleNames.each { - def j = getModuleJar(it, 'sources') - from(zipTree(j)){ - exclude 'mcmod.info' - exclude 'META-INF/MANIFEST.MF' - exclude 'CREDITS', 'LICENSE*', 'README*' - exclude 'META-INF/services/javax.annotation.processing.Processor' - } - } - - from(zipTree(tasks.devJar.getOutputs().getFiles().getSingleFile())) { - include "CREDITS" - include "META-INF/licenses/**" - } -} - -clean { - moduleNames.each { dependsOn tasks.getByPath(":$it:clean") } -} - -reobf.enabled = false diff --git a/module-common/build.gradle b/module-common/build.gradle deleted file mode 100644 index 2ea2755..0000000 --- a/module-common/build.gradle +++ /dev/null @@ -1,4 +0,0 @@ -archivesBaseName = archivesBaseName.replace("-1.7.10", "-common-1.7.10" ) - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false diff --git a/module-compat/build.gradle b/module-compat/build.gradle deleted file mode 100644 index eae2953..0000000 --- a/module-compat/build.gradle +++ /dev/null @@ -1,28 +0,0 @@ -dependencies { - compileOnly('org.spongepowered:mixin:0.8.5') - shadow(project(":module-common")) { - transitive = false - } -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-compat-1.7.10") - -apply plugin: "com.github.johnrengelman.shadow" - -shadowJar { - configurations = [project.configurations.shadow] - classifier = '' - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.compat.repackage.common' - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'FMLCorePlugin': 'io.github.legacymoddingmc.unimixins.compat.CompatCore' - ) - } -} - -jar.dependsOn shadowJar -jar.enabled = false diff --git a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java b/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java deleted file mode 100644 index 0ab38f8..0000000 --- a/module-compat/src/main/java/io/github/legacymoddingmc/unimixins/compat/CompatModule.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.legacymoddingmc.unimixins.compat; - -import cpw.mods.fml.common.Mod; - -/** - * This is only here to help Forge detect the mod. - */ -@Mod(modid = "unimixins-compat", version = "@VERSION@", acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = "unimixins-compat", version = "@VERSION@", acceptableRemoteVersions = "*") -public class CompatModule { -} diff --git a/module-compatfuture/build.gradle b/module-compatfuture/build.gradle deleted file mode 100644 index b3605a1..0000000 --- a/module-compatfuture/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -archivesBaseName = archivesBaseName.replace("-1.7.10", "-compatfuture-1.7.10") - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -shadowJar { - archiveClassifier = "" - configurations = [] - relocate 'io.github.legacymoddingmc.unimixins.compat.stub.cpw', 'cpw' - - manifest { - attributes ( - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'FMLCorePlugin': 'io.github.legacymoddingmc.unimixins.compatfuture.CompatFutureCore' - ) - } -} - -jar.dependsOn shadowJar -jar.enabled = false diff --git a/module-gasstation/build.gradle b/module-gasstation/build.gradle deleted file mode 100644 index a634aee..0000000 --- a/module-gasstation/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -dependencies { - compileOnly("org.spongepowered:mixin:$gasMixVersion") - compileOnly project(':module-mixinbooterlegacy') - shadow(project(":module-common")) { - transitive = false - } -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-gasstation-1.7.10") - -shadowJar { - configurations = [project.configurations.shadow] - classifier = '' - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.gasstation.repackage.common' - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'MixinConfigs': 'mixins.gasstation.json', - 'FMLCorePlugin': 'com.falsepattern.gasstation.core.GasStationCore' - ) - } -} - -jar { - enabled = false - dependsOn shadowJar -} - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -ext.uniVersion = version -ext.mcversion = "1.7.10" -version += "+" + ext.extraVersion - -minecraft { - replace("GRADLETOKEN_MODID", "gasstation") - replace("GRADLETOKEN_MODNAME", "GasStation") - replace("GRADLETOKEN_VERSION", extraVersion) - replace("GRADLETOKEN_GROUPNAME", "com.falsepattern.gasstation") -} diff --git a/module-gasstation/gradle.properties b/module-gasstation/gradle.properties deleted file mode 100644 index f29cf31..0000000 --- a/module-gasstation/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -extraVersion=0.5.1 -gasMixVersion=0.8.5-gasstation_7 diff --git a/module-gtnhmixins/build.gradle b/module-gtnhmixins/build.gradle deleted file mode 100644 index 0e35600..0000000 --- a/module-gtnhmixins/build.gradle +++ /dev/null @@ -1,74 +0,0 @@ -def mixinExtrasVersion = "0.1.1" - -configurations.create("shadowMixinExtras") - -dependencies { - compileOnly('org.spongepowered:mixin:0.8.7') - shadow(project(":module-common")) { - transitive = false - } - compileOnly(project(":module-mixingasm")) { - transitive = false - } - compileOnly("com.github.LlamaLad7:MixinExtras:$mixinExtrasVersion") - shadowMixinExtras("com.github.LlamaLad7:MixinExtras:$mixinExtrasVersion") -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-gtnhmixins-1.7.10") - -apply plugin: "com.github.johnrengelman.shadow" - -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -task mixinExtrasJar(type: ShadowJar) { - destinationDirectory = file("build/tmp") - archiveClassifier.set("mixinExtras") - archiveVersion = mixinExtrasVersion - configurations = [project.configurations.shadowMixinExtras] - relocate 'com.llamalad7.mixinextras', 'com.gtnewhorizon.mixinextras' - relocate 'org.objectweb.asm', 'org.spongepowered.asm.lib' -} - -shadowJar { - classifier = '' - configurations = [project.configurations.shadow] - - relocate 'org.objectweb.asm', 'org.spongepowered.asm.lib' - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.gtnhmixins.repackage.common' - - from(zipTree(tasks.mixinExtrasJar.archiveFile)) { - eachFile({ - setPath("data/legacy_gtnh_mixinextras/" + getPath().replaceAll("\\.class", ".klass")) - }) - } - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'MixinConfigs': 'mixins.gtnhmixins.json', - 'FMLCorePlugin': 'com.gtnewhorizon.gtnhmixins.core.GTNHMixinsCore' - ) - } -} - -jar { - dependsOn shadowJar - enabled = false -} - -shadowJar.dependsOn mixinExtrasJar - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -ext.uniVersion = version -ext.extraModid = "gtnhmixins" -ext.mcversion = "1.7.10" -version += "+" + ext.extraVersion - -minecraft { - replaceIn("GTNHMixins.java") - replace("GRADLETOKEN_VERSION", extraVersion) -} diff --git a/module-gtnhmixins/gradle.properties b/module-gtnhmixins/gradle.properties deleted file mode 100644 index c9fd235..0000000 --- a/module-gtnhmixins/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -extraVersion=2.2.0 diff --git a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java b/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java deleted file mode 100644 index 5cda72e..0000000 --- a/module-gtnhmixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gtnewhorizon.gtnhmixins; - -import cpw.mods.fml.common.Mod; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -@Mod(modid = GTNHMixins.MODID, version = GTNHMixins.VERSION, name = GTNHMixins.NAME, acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = GTNHMixins.MODID, version = GTNHMixins.VERSION, name = GTNHMixins.NAME, acceptableRemoteVersions = "*") -public class GTNHMixins { - public static final String NAME = "GTNHMixins"; - public static final String MODID = "gtnhmixins"; - public static final String VERSION = "GRADLETOKEN_VERSION"; - public static final Logger LOGGER = LogManager.getLogger(NAME); -} \ No newline at end of file diff --git a/module-mixin/build.gradle b/module-mixin/build.gradle deleted file mode 100644 index 40a0863..0000000 --- a/module-mixin/build.gradle +++ /dev/null @@ -1,287 +0,0 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -buildscript { - repositories { - gradlePluginPortal() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0' - } -} - -def versionBase = version -archivesBaseName = archivesBaseName.replace("-1.7.10", "-mixin-1.7.10") - -configurations.archives.artifacts.clear() - -dependencies { - compileOnly("org.spongepowered:mixin:$spongepoweredMixinVersion") - compileOnly(project(":module-common")) { - transitive = false - } -} - -apply plugin: "com.github.johnrengelman.shadow" - -def flavors = (!project.hasProperty("enableAltMixin") ? [] : ["spongepowered", "fabric", "gasmix", "gtnh"]) + ["unimix"] - -flavors.each { - def mixinFlavor = it - def _flavor = it.capitalize() - def mixinFlavorClassifier = "UNKNOWN" - def mixinFlavorCapitalized = [spongepowered: "SpongePowered", fabric: "Fabric", gasmix: "GasMix", gtnh: "GTNH", unimix: "UniMix"][mixinFlavor] - def mixinVersion = "UNKNOWN" - - configurations.create("shadow$_flavor") - configurations.create("shadowBridge$_flavor") - configurations.create("shadowSources$_flavor") - - dependencies { - add("shadow$_flavor", project(":module-common"), { - transitive = false - }) - } - - if (mixinFlavor == "fabric" || mixinFlavor == "spongepowered" || mixinFlavor == "unimix" || mixinFlavor == "gtnh") { - // Fabric / SpongePowered / UniMix / GTNH - - if (mixinFlavor == "fabric" || mixinFlavor == "unimix") { - def uniLocal = mixinFlavor == "unimix" && project.hasProperty("local") - def uniJitpack = mixinFlavor == "unimix" && !uniLocal - - mixinVersion = mixinFlavor == "fabric" ? fabricMixinVersion : unimixMixinVersion - if (uniLocal) { - mixinVersion += "-local" - } - - // jitpack differences: - // - domain is com instead of io (for some strange reason) - // - we have to use _ instead of + in version string because the latter is not supported (for some strange reason) - // - artifact id is UniMix, not sponge-mixin (this one makes sense at least) - - def mixinGroup = mixinFlavor == "fabric" ? "net.fabricmc" : "${uniJitpack ? 'com' : 'io'}.github.legacymoddingmc" - def mixinArtifactId = uniJitpack ? "UniMix" : "sponge-mixin" - def mixinDepVersion = uniJitpack ? mixinVersion.replace('+', '_') : mixinVersion - def mixinDep = "$mixinGroup:$mixinArtifactId:$mixinDepVersion" - - mixinFlavorClassifier = "$mixinFlavor.${mixinVersion.replace('+', '-')}" - - dependencies { - add("shadow$_flavor", "$mixinDep", { - exclude group: "org.ow2.asm" - }) - add("shadow$_flavor", "org.ow2.asm:asm-tree:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-commons:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-util:$asmVersion") - - add("shadowBridge$_flavor", "$mixinDep", { - transitive = false - }) - - add("shadowSources$_flavor", "$mixinDep:sources", { - transitive = false - }) - } - } else if(mixinFlavor == "spongepowered") { - mixinVersion = spongepoweredMixinVersion - - mixinFlavorClassifier = "spongepowered.$mixinVersion" - - dependencies { - add("shadow$_flavor", "org.spongepowered:mixin:$mixinVersion") - add("shadowBridge$_flavor", "org.spongepowered:mixin:$mixinVersion", { - transitive = false - }) - add("shadow$_flavor", "com.google.guava:guava:21.0") - add("shadow$_flavor", "com.google.code.gson:gson:2.2.4") - add("shadow$_flavor", "org.ow2.asm:asm-tree:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-commons:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-util:$asmVersion") - - add("shadowSources$_flavor", "org.spongepowered:mixin:$mixinVersion:sources") - } - } else if(mixinFlavor == "gtnh") { - // Adapted from GTNHMixins's build script - - mixinVersion = gtnhMixinVersion - mixinFlavorClassifier = "gtnh.$mixinVersion" - - dependencies { - add("shadow$_flavor", "org.spongepowered:mixin:$mixinVersion") - add("shadow$_flavor", "org.ow2.asm:asm-tree:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-commons:$asmVersion") - add("shadow$_flavor", "org.ow2.asm:asm-util:$asmVersion") - add("shadow$_flavor", "com.google.guava:guava:21.0") - add("shadowBridge$_flavor", "org.spongepowered:mixin:$spongepoweredMixinVersion") - add("shadowSources$_flavor", "org.spongepowered:mixin:$spongepoweredMixinVersion:sources") - } - - } - - // We want to *not* relocate ASM in the bridge classes. So we use a multi-step - // build procedure: - - // 1. Create relocated Mixin jar, without the bridge classes - task("mixinJar$_flavor", type: ShadowJar) { - destinationDirectory = file("build/tmp") - classifier = "tmpMixin$_flavor" - configurations = [project.configurations."shadow$_flavor"] - - relocate 'org.objectweb.asm', 'org.spongepowered.asm.lib' - if(mixinFlavor != "gtnh") { - relocate 'com.google', 'org.spongepowered.libraries.com.google' - } else { - // we don't use this ASM package name - //relocate 'org.objectweb.asm', 'org.spongepowered.libraries.org.objectweb.asm' - relocate 'com.google.common', 'org.spongepowered.libraries.com.google.common' - relocate 'com.google.thirdparty.publicsuffix', 'org.spongepowered.libraries.com.google.thirdparty.publicsuffix' - } - - exclude 'org/spongepowered/asm/bridge/RemapperAdapter.class' - exclude 'org/spongepowered/asm/bridge/RemapperAdapterFML.class' - - // Exclude stuff that's compiled for Java 16 - - exclude 'org/spongepowered/asm/service/modlauncher/*' - exclude 'org/spongepowered/asm/launch/MixinTransformationServiceLegacy*' - exclude 'org/spongepowered/asm/launch/MixinLaunchPlugin*' - exclude 'org/spongepowered/asm/launch/MixinTransformationService*' - exclude 'org/spongepowered/asm/launch/platform/container/ContainerHandleModLauncherEx*' - - exclude 'META-INF/services/cpw.mods.modlauncher.api.ITransformationService' - exclude 'META-INF/services/cpw.mods.modlauncher.serviceapi.ILaunchPluginService' - - exclude '**/module-info.class' - - // Exclude jar-specific stuff - - exclude 'META-INF/MANIFEST.MF', 'META-INF/maven/**', 'META-INF/*.RSA', 'META-INF/*.SF' - } - - // 2. Create Mixin jar without relocation, with *only* the bridge classes - task("bridgeJar$_flavor", type: ShadowJar) { - destinationDirectory = file("build/tmp") - classifier = "tmpBridge$_flavor" - configurations = [project.configurations."shadowBridge$_flavor"] - - include '*.jar' - include 'org/spongepowered/asm/bridge/*' - } - - // 3. Combine the two jars - task("shadowJar$_flavor", type: ShadowJar) { - version = versionBase + "+" + mixinFlavorClassifier - from(sourceSets.main.output) { - exclude "mcmod.info" - } - - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.mixin.repackage.common' - - dependsOn "mixinJar$_flavor" - dependsOn "bridgeJar$_flavor" - dependsOn "mixinJar$_flavor" - dependsOn "bridgeJar$_flavor" - - from zipTree(tasks."mixinJar$_flavor".archiveFile).matching { - exclude 'module-info.class' - eachFile { - if(it.path.startsWith("META-INF/services/")) { - it.filter({l -> !l.startsWith("org.spongepowered.asm.service.modlauncher.") ? l : null}) - } - } - } - from zipTree(tasks."bridgeJar$_flavor".archiveFile).matching { include 'org/spongepowered/asm/bridge/*' } - - doLast { - delete tasks."mixinJar$_flavor".archiveFile - delete tasks."bridgeJar$_flavor".archiveFile - } - } - - jar.dependsOn("shadowJar$_flavor") - } else if (mixinFlavor == "gasmix") { - // GasMix - - mixinVersion = gasmixMixinVersion - - mixinFlavorClassifier = "gasmix.$mixinVersion" - - dependencies { - add("shadow$_flavor", "org.spongepowered:mixin:$mixinVersion") - add("shadowSources$_flavor", "org.spongepowered:mixin:$mixinVersion:sources") - } - - task("shadowJar$_flavor", type: ShadowJar) { - from(sourceSets.main.output) { - exclude "mcmod.info" - } - - version = versionBase + "+" + mixinFlavorClassifier - classifier = '' - configurations = [project.configurations."shadow$_flavor"] - - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.mixin.repackage.common' - } - - jar.dependsOn("shadowJar$_flavor") - } - - // Common - - task("createMcmodInfo$_flavor", type: Copy) { - outputs.upToDateWhen { false } - from 'src/main/resources/mcmod.info' - into "build/tmp/mcmod.${mixinFlavor}.info" - filter { - line -> line.replaceAll('@MIXIN_CLASSIFIER@', mixinFlavorClassifier).replaceAll('@MIXIN_SOURCE_CAPITALIZED@', mixinFlavorCapitalized).replaceAll('@VERSION@', "$versionBase+$mixinFlavorClassifier").replaceAll('@PROJECT_URL@', project.project_url) - } - } - - tasks."shadowJar$_flavor" { - dependsOn("createMcmodInfo$_flavor") - from "build/tmp/mcmod.${mixinFlavor}.info/mcmod.info" - - manifest { - attributes( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': 'true', - 'ForceLoadAsMod': 'true', - 'FMLCorePlugin': 'io.github.legacymoddingmc.unimixins.mixin.MixinCore', - 'Premain-Class': 'org.spongepowered.tools.agent.MixinAgent', - 'Agent-Class': 'org.spongepowered.tools.agent.MixinAgent', - 'Can-Redefine-Classes': true, - 'Can-Retransform-Classes': true, - 'Implementation-Version': mixinVersion - ) - } - } - - task("shadowSourcesJar$_flavor", type: ShadowJar) { - from sourceSets.main.allSource - - version = versionBase + "+" + mixinFlavorClassifier - classifier = "sources" - configurations = [project.configurations."shadowSources$_flavor"] - } - - jar.dependsOn("shadowSourcesJar$_flavor") - - if(publishModuleToMaven){ - publishing { - publications { - create("maven$_flavor", MavenPublication) { - artifact tasks."shadowJar$_flavor" - artifact tasks."shadowSourcesJar$_flavor" - - artifactId = archivesBaseName.substring(1).replace("-1.7.10", mavenIdSuffix) + (mixinFlavor == "unimix" ? "" : "-" + mixinFlavor) - groupId = mavenGroupId - } - } - } - } -} - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -jar.enabled = false diff --git a/module-mixin/gradle.properties b/module-mixin/gradle.properties deleted file mode 100644 index b46db7e..0000000 --- a/module-mixin/gradle.properties +++ /dev/null @@ -1,7 +0,0 @@ -fabricMixinVersion=0.15.3+mixin.0.8.7 -unimixMixinVersion=0.15.4+mixin.0.8.7 -spongepoweredMixinVersion=0.8.7 -gtnhMixinVersion=0.8.7-GTNH-2 -gasmixMixinVersion=0.8.7-gasstation_7 - -asmVersion=9.7.1 diff --git a/module-mixin/src/main/resources/mcmod.info b/module-mixin/src/main/resources/mcmod.info deleted file mode 100644 index aeaaead..0000000 --- a/module-mixin/src/main/resources/mcmod.info +++ /dev/null @@ -1,16 +0,0 @@ -[ -{ - "modid": "unimixins-mixin", - "name": "UniMixins: Mixin (@MIXIN_SOURCE_CAPITALIZED@)", - "description": "UniMixins module that provides the @MIXIN_SOURCE_CAPITALIZED@ fork of Mixin (version: @MIXIN_CLASSIFIER@).", - "version": "@VERSION@", - "mcversion": "1.7.10", - "url": "@PROJECT_URL@", - "updateUrl": "", - "authorList": ["makamys"], - "credits": "", - "logoFile": "", - "screenshots": [], - "dependencies": [] -} -] diff --git a/module-mixinbooterlegacy/build.gradle b/module-mixinbooterlegacy/build.gradle deleted file mode 100644 index e586306..0000000 --- a/module-mixinbooterlegacy/build.gradle +++ /dev/null @@ -1,52 +0,0 @@ -repositories { - maven { - name = 'sponge' - url = 'https://repo.spongepowered.org/maven/' - } - maven { - url = "https://mvn.falsepattern.com/releases" - } -} - -dependencies { - compileOnly('org.spongepowered:mixin:0.8.5-gasstation_7') - shadow(project(":module-common")) { - transitive = false - } -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-mixinbooterlegacy-1.7.10") - -apply plugin: "com.github.johnrengelman.shadow" - -shadowJar { - classifier = '' - configurations = [project.configurations.shadow] - - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.mixinbooterlegacy.repackage.common' - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'FMLCorePlugin': 'io.github.tox1cozz.mixinbooterlegacy.MixinBooterLegacyPlugin', - ) - } -} - -jar { - dependsOn shadowJar - enabled = false -} - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -ext.uniVersion = version -ext.mcversion = "1.7.10" -version += "+" + extraVersion - -minecraft { - replace("@VERSION@", extraVersion) -} diff --git a/module-mixinbooterlegacy/gradle.properties b/module-mixinbooterlegacy/gradle.properties deleted file mode 100644 index 9c81cc2..0000000 --- a/module-mixinbooterlegacy/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -extraVersion=1.2.1 diff --git a/module-mixinextras/build.gradle b/module-mixinextras/build.gradle deleted file mode 100644 index 7bf8d87..0000000 --- a/module-mixinextras/build.gradle +++ /dev/null @@ -1,54 +0,0 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -configurations { - shadowSources -} - -ext.uniVersion = version -ext.extraVersion = mixinExtrasVersion - -dependencies { - shadow("io.github.llamalad7:mixinextras-common:$extraVersion") - shadowSources("io.github.llamalad7:mixinextras-common:$extraVersion:sources") -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-mixinextras-1.7.10") -version += "+${extraVersion}" - -apply plugin: "com.github.johnrengelman.shadow" - -shadowJar { - classifier = '' - configurations = [project.configurations.shadow] - - relocate 'org.objectweb.asm', 'org.spongepowered.asm.lib' - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': 'true', - 'ForceLoadAsMod': 'true', - 'FMLCorePlugin': 'io.github.legacymoddingmc.unimixins.mixinextras.MixinExtrasCore', - ) - } -} - -task("shadowSources", type: ShadowJar) { - from sourceSets.main.allSource - classifier = "sources" - configurations = [project.configurations."shadowSources"] -} - -sourcesJar { - enabled = false - dependsOn shadowSources -} - -jar { - enabled = false - dependsOn shadowJar -} - -// ForgeGradle's reobfuscator breaks classes containing CONSTANT_InterfaceMethodRefs, which MixinExtras happens to contain -// Also obfuscation is unnecessary anyway since this module does not reference Minecraft classes -reobf.enabled = false diff --git a/module-mixinextras/gradle.properties b/module-mixinextras/gradle.properties deleted file mode 100644 index 6829a87..0000000 --- a/module-mixinextras/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -mixinExtrasVersion=0.4.1 diff --git a/module-mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java b/module-mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java deleted file mode 100644 index 86eba8c..0000000 --- a/module-mixinextras/src/main/java/io/github/legacymoddingmc/unimixins/mixinextras/MixinExtrasModule.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.legacymoddingmc.unimixins.mixinextras; - -import cpw.mods.fml.common.Mod; - -/** - * This is only here to help Forge detect the mod. - */ -@Mod(modid = "mixinextras", version = "@VERSION@", acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = "mixinextras", version = "@VERSION@", acceptableRemoteVersions = "*") -public class MixinExtrasModule { -} - diff --git a/module-mixinextras/src/main/resources/mcmod.info b/module-mixinextras/src/main/resources/mcmod.info deleted file mode 100644 index 9787185..0000000 --- a/module-mixinextras/src/main/resources/mcmod.info +++ /dev/null @@ -1,16 +0,0 @@ -[ -{ - "modid": "mixinextras", - "name": "UniMixins: MixinExtras", - "description": "UniMixins module that provides MixinExtras (version: ${extraVersion}).", - "version": "${extraVersion}+uni.${uniVersion}", - "mcversion": "${minecraft_version}", - "url": "${project_url}", - "updateUrl": "", - "authorList": ["LlamaLad7"], - "credits": "", - "logoFile": "", - "screenshots": [], - "dependencies": [] -} -] diff --git a/module-mixingasm/build.gradle b/module-mixingasm/build.gradle deleted file mode 100644 index c4a6366..0000000 --- a/module-mixingasm/build.gradle +++ /dev/null @@ -1,43 +0,0 @@ -dependencies { - compile project(":module-mixin") - compile files(tasks.getByPath(":module-mixin:shadowJarUnimix").getOutputs().getFiles().getSingleFile()) - shadow(project(":module-common")) { - transitive = false - } -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-mixingasm-1.7.10") - -apply plugin: "com.github.johnrengelman.shadow" - -shadowJar { - classifier = '' - configurations = [project.configurations.shadow] - - relocate 'io.github.legacymoddingmc.unimixins.common', 'io.github.legacymoddingmc.unimixins.mixingasm.repackage.common' - - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - 'MixinConfigs': 'mixingasm.mixin.json', - 'TweakOrder': 0, - ) - } -} - -jar { - dependsOn shadowJar - enabled = false -} - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -ext.uniVersion = version -version += "+" + ext.extraVersion - -minecraft { - replace("@VERSION@", extraVersion) -} diff --git a/module-mixingasm/gradle.properties b/module-mixingasm/gradle.properties deleted file mode 100644 index a1382d6..0000000 --- a/module-mixingasm/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -extraVersion=0.3 diff --git a/module-mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java b/module-mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java deleted file mode 100644 index cdb26b7..0000000 --- a/module-mixingasm/src/main/java/makamys/mixingasm/forge/MixingasmMod.java +++ /dev/null @@ -1,10 +0,0 @@ -package makamys.mixingasm.forge; - -import cpw.mods.fml.common.Mod; -import makamys.mixingasm.Mixingasm; - -@Mod(modid = Mixingasm.MODID, version = "@VERSION@", acceptableRemoteVersions = "*") -@net.minecraftforge.fml.common.Mod(modid = Mixingasm.MODID, version = "@VERSION@", acceptableRemoteVersions = "*") -public class MixingasmMod { - -} \ No newline at end of file diff --git a/module-spongemixins/build.gradle b/module-spongemixins/build.gradle deleted file mode 100644 index 95d3b35..0000000 --- a/module-spongemixins/build.gradle +++ /dev/null @@ -1,28 +0,0 @@ -dependencies { - compileOnly('org.spongepowered:mixin:0.8.5') -} - -archivesBaseName = archivesBaseName.replace("-1.7.10", "-spongemixins-1.7.10") - -shadowJar { - archiveClassifier = '' - configurations = [] - relocate 'com.gtnewhorizon', 'ru.timeconqueror.spongemixins.repackage.com.gtnewhorizon' - manifest { - attributes ( - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - 'FMLCorePluginContainsFMLMod': true, - 'ForceLoadAsMod': true, - ) - } -} - -// Obfuscation is unnecessary since this module does not reference Minecraft classes -reobf.enabled = false - -ext.uniVersion = version -ext.mcversion = "1.7.10" -version += "+gtnh." + ext.extraVersion - -jar.dependsOn shadowJar -jar.enabled = false diff --git a/module-spongemixins/gradle.properties b/module-spongemixins/gradle.properties deleted file mode 100644 index bbd524e..0000000 --- a/module-spongemixins/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -extraVersion=2.0.1 diff --git a/module-spongemixins/src/main/resources/mcmod.info b/module-spongemixins/src/main/resources/mcmod.info deleted file mode 100644 index 85d4c82..0000000 --- a/module-spongemixins/src/main/resources/mcmod.info +++ /dev/null @@ -1,17 +0,0 @@ -[ - { - "modid": "spongemixins", - "name": "UniMixins: SpongeMixins", - "description": "UniMixins module that provides an emulation of SpongeMixins (version: ${extraVersion} from GTNHMixins).", - "version": "${extraVersion}+gtnh.uni.${uniVersion}", - "mcversion": "${minecraft_version}", - "url": "${project_url}", - "updateUrl": "", - "authorList": [ - "Time_Conqueror", "mitchej123" - ], - "credits": "SpongePowered Team", - "logoFile": "", - "screenshots": [] - } -] diff --git a/project.gradle b/project.gradle deleted file mode 100644 index e69de29..0000000 diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 7d60482..0000000 --- a/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include 'module-mixin' -include 'module-compat' -include 'module-compatfuture' -include 'module-mixingasm' -include 'module-spongemixins' -include 'module-mixinbooterlegacy' -include 'module-gasstation' -include 'module-gtnhmixins' -include 'module-mixinextras' -include 'module-all' -include 'module-common' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..9911497 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,41 @@ +pluginManagement { + repositories { + mavenCentral() + maven { + url = uri("https://maven.neoforged.net/releases") + } + maven { + url = uri("https://maven.minecraftforge.net/") + } + maven { + url = uri("https://maven.fabricmc.net/") + } + maven { + url = uri("https://maven.wagyourtail.xyz/releases") + } + maven { + url = uri("https://maven.wagyourtail.xyz/snapshots") + } + gradlePluginPortal { + content { + excludeGroup("org.apache.logging.log4j") + } + } + } + + includeBuild("UniMixinsPlugin") +} + +rootProject.name = "UniMixins" + +include("common") +include("mixin") +include("compat") +include("compatfuture") +include("mixingasm") +include("spongemixins") +include("mixinbooterlegacy") +include("gasstation") +include("gtnhmixins") +include("mixinextras") +include("all") diff --git a/module-spongemixins/CREDITS b/spongemixins/CREDITS similarity index 100% rename from module-spongemixins/CREDITS rename to spongemixins/CREDITS diff --git a/module-spongemixins/LICENSE b/spongemixins/LICENSE similarity index 100% rename from module-spongemixins/LICENSE rename to spongemixins/LICENSE diff --git a/module-spongemixins/LICENSE.LGPLv3 b/spongemixins/LICENSE.LGPLv3 similarity index 100% rename from module-spongemixins/LICENSE.LGPLv3 rename to spongemixins/LICENSE.LGPLv3 diff --git a/module-spongemixins/LICENSE.SpongeMixins b/spongemixins/LICENSE.SpongeMixins similarity index 100% rename from module-spongemixins/LICENSE.SpongeMixins rename to spongemixins/LICENSE.SpongeMixins diff --git a/spongemixins/build.gradle.kts b/spongemixins/build.gradle.kts new file mode 100644 index 0000000..01fbacf --- /dev/null +++ b/spongemixins/build.gradle.kts @@ -0,0 +1,36 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +plugins { + id("unimixins") +} + +dependencies { + compileOnly("org.spongepowered:mixin:0.8.5") +} + +val extraVersion = "2.0.1" +version = "$version+gtnh.$extraVersion" + +tasks.shadowJar { + configurations = listOf() + relocate("com.gtnewhorizon", "ru.timeconqueror.spongemixins.repackage.com.gtnewhorizon") + manifest { + attributes ( + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to true, + "ForceLoadAsMod" to true, + ) + } +} + +tasks.processResources { + files("mcmod.info") { + filter("tokens" to mapOf( + "gtnhMixinsVersion" to extraVersion + )) + } +} + +unimined.minecraft { + +} diff --git a/module-spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java b/spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java similarity index 100% rename from module-spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java rename to spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/GTNHMixins.java diff --git a/module-spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java b/spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java similarity index 100% rename from module-spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java rename to spongemixins/src/main/java/com/gtnewhorizon/gtnhmixins/MinecraftURLClassPath.java diff --git a/module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/MinecraftURLClassPath.java b/spongemixins/src/main/java/ru/timeconqueror/spongemixins/MinecraftURLClassPath.java similarity index 100% rename from module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/MinecraftURLClassPath.java rename to spongemixins/src/main/java/ru/timeconqueror/spongemixins/MinecraftURLClassPath.java diff --git a/module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/SpongeMixins.java b/spongemixins/src/main/java/ru/timeconqueror/spongemixins/SpongeMixins.java similarity index 100% rename from module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/SpongeMixins.java rename to spongemixins/src/main/java/ru/timeconqueror/spongemixins/SpongeMixins.java diff --git a/module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/core/SpongeMixinsCore.java b/spongemixins/src/main/java/ru/timeconqueror/spongemixins/core/SpongeMixinsCore.java similarity index 100% rename from module-spongemixins/src/main/java/ru/timeconqueror/spongemixins/core/SpongeMixinsCore.java rename to spongemixins/src/main/java/ru/timeconqueror/spongemixins/core/SpongeMixinsCore.java diff --git a/spongemixins/src/main/resources/mcmod.info b/spongemixins/src/main/resources/mcmod.info new file mode 100644 index 0000000..5cfa7bd --- /dev/null +++ b/spongemixins/src/main/resources/mcmod.info @@ -0,0 +1,15 @@ +[ + { + "modid": "spongemixins", + "name": "UniMixins: SpongeMixins", + "description": "UniMixins module that provides an emulation of SpongeMixins (version: @gtnhMixinsVersion@ from GTNHMixins).", + "version": "@gtnhMixinsVersion@+gtnh.uni.@uniMixinsVersion@", + "mcversion": "@minecraftVersion@", + "url": "@projectUrl@", + "updateUrl": "", + "authorList": ["Time_Conqueror", "mitchej123"], + "credits": "SpongePowered Team", + "logoFile": "", + "screenshots": [] + } +]