From ae5bc4df15748155adddb1b654a7cac02ef6a07f Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:44:02 +0300 Subject: [PATCH] Separate Forge runtime into its own subproject --- .gitignore | 3 +- build.gradle | 39 +-------- forge-runtime/.gitignore | 6 ++ forge-runtime/build.gradle | 82 +++++++++++++++++++ .../mcp/MethodsReturnNonnullByDefault.java | 3 +- .../java/net/fabricmc/loom/inject/Pair.java | 0 .../loom/inject/YarnNamingService.java | 0 ...ForgeLoomMixinRemapperInjectorService.java | 0 .../mixin/MixinIntermediaryDevRemapper.java | 0 ...w.mods.modlauncher.api.INameMappingService | 0 ...ods.modlauncher.api.ITransformationService | 0 settings.gradle | 3 +- .../providers/LaunchProvider.java | 3 +- .../forge/MinecraftPatchedProvider.java | 19 ----- .../net/fabricmc/loom/util/Constants.java | 2 + 15 files changed, 101 insertions(+), 59 deletions(-) create mode 100644 forge-runtime/.gitignore create mode 100644 forge-runtime/build.gradle rename {src/forgeInject => forge-runtime/src/main}/java/mcp/MethodsReturnNonnullByDefault.java (90%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/Pair.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/YarnNamingService.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java (100%) rename {src/forgeInject => forge-runtime/src/main}/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService (100%) rename {src/forgeInject => forge-runtime/src/main}/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService (100%) diff --git a/.gitignore b/.gitignore index 4354f60f..6a36faa2 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ !/Jenkinsfile !/checkstyle.xml !/codenarc.groovy -!/bootstrap \ No newline at end of file +!/bootstrap +!/forge-runtime diff --git a/build.gradle b/build.gradle index 087850a4..42442548 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,7 @@ plugins { id 'codenarc' id "org.cadixdev.licenser" version "0.5.0" id 'com.github.johnrengelman.shadow' version '7.0.0' + id 'net.kyori.blossom' version '1.3.0' } sourceCompatibility = 16 @@ -40,20 +41,6 @@ if (!isSnapshot) { logger.lifecycle(":building plugin v${version}") -configurations { - forgeInjectShadow - forgeInjectCompileClasspath.extendsFrom(forgeInjectShadow) - forgeInjectRuntimeClasspath.extendsFrom(forgeInjectShadow) -} - -sourceSets { - forgeInject -} - -tasks.compileForgeInjectJava { - options.release = 8 -} - repositories { mavenCentral() maven { url "https://maven.fabricmc.net/" } @@ -159,14 +146,6 @@ dependencies { implementation ('de.oceanlabs.mcp:mcinjector:3.8.0') implementation ('com.opencsv:opencsv:5.4') - // Forge injection - forgeInjectShadow ('net.fabricmc:tiny-mappings-parser:0.2.2.14') - forgeInjectImplementation ('cpw.mods:modlauncher:6.1.3') - forgeInjectImplementation ('org.spongepowered:mixin:0.8.2') - forgeInjectImplementation ('com.google.code.gson:gson:2.8.6') - forgeInjectImplementation ('com.google.guava:guava:21.0') - forgeInjectImplementation ('org.apache.logging.log4j:log4j-api:2.11.2') - // Testing testImplementation(gradleTestKit()) testImplementation('org.spockframework:spock-core:2.0-groovy-3.0') { @@ -177,13 +156,8 @@ dependencies { compileOnly 'org.jetbrains:annotations:20.1.0' } -task forgeInjectJar(type: ShadowJar, dependsOn: [compileForgeInjectJava, processForgeInjectResources]) { - relocate 'net.fabricmc.mapping', 'net.fabricmc.loom.mapping' - relocate 'net.fabricmc.mappings', 'net.fabricmc.loom.mappings' - configurations = [project.configurations.forgeInjectShadow] - classifier = 'forgeinject' - from compileForgeInjectJava.outputs - from processForgeInjectResources.outputs +blossom { + replaceToken '$LOOM_VERSION', version } jar { @@ -191,13 +165,7 @@ jar { } task mainJar(type: Jar, dependsOn: jar) { - dependsOn forgeInjectJar - from zipTree(jar.archiveFile) - from(forgeInjectJar.outputs) { - into "inject" - rename { "injection.jar" } - } manifest { attributes 'Implementation-Version': project.version + ' Build(' + buildNum + ')' @@ -225,7 +193,6 @@ license { exclude '**/loom/util/DownloadUtil.java' exclude '**/projects' exclude '**/loom/util/FileSystemUtil.java' - exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' } checkstyle { diff --git a/forge-runtime/.gitignore b/forge-runtime/.gitignore new file mode 100644 index 00000000..31ecb657 --- /dev/null +++ b/forge-runtime/.gitignore @@ -0,0 +1,6 @@ +# Ignore everything +/* + +!/src +!/build.gradle +!/.gitignore diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle new file mode 100644 index 00000000..34303aea --- /dev/null +++ b/forge-runtime/build.gradle @@ -0,0 +1,82 @@ +plugins { + id 'java' + id 'maven-publish' + id 'com.github.johnrengelman.shadow' + id 'org.cadixdev.licenser' +} + +group = rootProject.group +archivesBaseName = 'architectury-loom-forge-runtime' +version = rootProject.version + +sourceCompatibility = 8 +targetCompatibility = 8 + +configurations { + include + compileOnly.extendsFrom include +} + +tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + it.options.release = 8 +} + +repositories { + mavenCentral() + maven { url "https://maven.fabricmc.net/" } + maven { + url "https://maven.minecraftforge.net/" + content { + excludeGroupByRegex "org\\.eclipse\\.?.*" + } + } +} + +dependencies { + include ('net.fabricmc:tiny-mappings-parser:0.2.2.14') + compileOnly ('cpw.mods:modlauncher:6.1.3') + compileOnly ('org.spongepowered:mixin:0.8.2') + compileOnly ('com.google.code.gson:gson:2.8.6') + compileOnly ('com.google.guava:guava:21.0') + compileOnly ('org.apache.logging.log4j:log4j-api:2.11.2') +} + +jar { + archiveClassifier = "slim" +} + +shadowJar { + archiveClassifier = "" + configurations = [project.configurations.include] + relocate "net.fabricmc.mapping", "dev.architectury.loom.forgeruntime.shadow.mapping" + relocate "net.fabricmc.mappings", "dev.architectury.loom.forgeruntime.shadow.mappings" +} + +assemble.dependsOn shadowJar + +license { + header rootProject.file("HEADER") + include "**/*.java" + exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' +} + +publishing { + publications { + maven(MavenPublication) { + from components.java + } + } + + repositories { + if (System.getenv("MAVEN_PASS") != null) { + maven { + url = "https://deploy.shedaniel.me/" + credentials { + username = "shedaniel" + password = System.getenv("MAVEN_PASS") + } + } + } + } +} diff --git a/src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java b/forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java similarity index 90% rename from src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java rename to forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java index 8fbac050..8ec54e47 100644 --- a/src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java +++ b/forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java @@ -25,7 +25,8 @@ package mcp; /** - * A dummy class, required for some Forge classes to load. + * A dummy class, required for some Forge classes to load + * because {@code MethodsReturnNonnullByDefault} in MCP has runtime retention. * * @deprecated Don't use this in your mods. JetBrains annotations are there for you. */ diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/Pair.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/Pair.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/YarnNamingService.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/YarnNamingService.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java diff --git a/src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService similarity index 100% rename from src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService rename to forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService diff --git a/src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService similarity index 100% rename from src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService rename to forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService diff --git a/settings.gradle b/settings.gradle index 26763f4c..0b542936 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = "architectury-loom" -include "bootstrap" \ No newline at end of file +include "bootstrap" +include "forge-runtime" diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index 9aeb74d1..4cf96b94 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -136,7 +136,8 @@ public class LaunchProvider extends DependencyProvider { annotationDependency = addDependency(Constants.Dependencies.JETBRAINS_ANNOTATIONS + Constants.Dependencies.Versions.JETBRAINS_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); if (getExtension().isForge()) { - addDependency(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, "compileOnly"); + addDependency(Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME, JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME); + addDependency(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); } postPopulationScheduler.accept(this::writeRemapClassPath); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 108450a6..995cb208 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -339,25 +339,6 @@ public class MinecraftPatchedProvider extends DependencyProvider { copyAll(getExtension().getForgeUniversalProvider().getForge(), environment.patchedSrgJar.apply(this)); copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), environment.patchedSrgJar.apply(this)); }); - - logger.lifecycle(":injecting loom classes into minecraft"); - File injection = File.createTempFile("loom-injection", ".jar"); - - try (InputStream in = MinecraftProvider.class.getResourceAsStream("/inject/injection.jar")) { - FileUtils.copyInputStreamToFile(in, injection); - } - - for (Environment environment : Environment.values()) { - String side = environment.side(); - File target = environment.patchedSrgJar.apply(this); - walkFileSystems(injection, target, it -> { - if (it.getFileName().toString().equals("MANIFEST.MF")) { - return false; - } - - return getExtension().useFabricMixin || !it.getFileName().toString().endsWith("cpw.mods.modlauncher.api.ITransformationService"); - }, this::copyReplacing); - } } private void accessTransformForge(Logger logger) throws Exception { diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index f4d12355..6f6f4f45 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -91,6 +91,7 @@ public class Constants { public static final String TERMINAL_CONSOLE_APPENDER = "net.minecrell:terminalconsoleappender:"; public static final String JETBRAINS_ANNOTATIONS = "org.jetbrains:annotations:"; public static final String JAVAX_ANNOTATIONS = "com.google.code.findbugs:jsr305:"; // I hate that I have to add these. + public static final String FORGE_RUNTIME = "dev.architectury:architectury-loom-forge-runtime:"; private Dependencies() { } @@ -104,6 +105,7 @@ public class Constants { public static final String TERMINAL_CONSOLE_APPENDER = "1.2.0"; public static final String JETBRAINS_ANNOTATIONS = "19.0.0"; public static final String JAVAX_ANNOTATIONS = "3.0.2"; + public static final String FORGE_RUNTIME = "$LOOM_VERSION"; // replaced with current version at build time private Versions() { }