Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SpongeForge for Minecraft 1.20.6 #4006

Merged
merged 17 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 7 additions & 16 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -133,19 +133,6 @@ val mixins by sourceSets.registering {
}
}

sourceSets.configureEach {
val sourceSet = this
val isMain = "main".equals(sourceSet.name)

val sourcesJarName: String = if (isMain) "sourcesJar" else (sourceSet.name + "SourcesJar")
tasks.register(sourcesJarName, Jar::class.java) {
group = "build"
val classifier = if (isMain) "sources" else (sourceSet.name + "-sources")
archiveClassifier.set(classifier)
from(sourceSet.allJava)
}
}

dependencies {
// api
api("org.spongepowered:spongeapi:$apiVersion")
Expand Down Expand Up @@ -364,16 +351,20 @@ allprojects {
}
}
}

sourceSets.configureEach {
val sourceSet = this
val sourceJarName: String = if ("main" == this.name) "sourceJar" else "${this.name}SourceJar"
tasks.register(sourceJarName, Jar::class.java) {
val isMain = "main" == sourceSet.name

val sourcesJarName: String = if (isMain) "sourcesJar" else (sourceSet.name + "SourcesJar")
tasks.register(sourcesJarName, Jar::class.java) {
group = "build"
val classifier = if ("main" == sourceSet.name) "sources" else "${sourceSet.name}sources"
val classifier = if (isMain) "sources" else (sourceSet.name + "-sources")
archiveClassifier.set(classifier)
from(sourceSet.allJava)
}
}

afterEvaluate {
publishing {
repositories {
Expand Down
149 changes: 79 additions & 70 deletions forge/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import dev.architectury.at.AccessTransformSet
import dev.architectury.at.io.AccessTransformFormats
import net.fabricmc.loom.api.LoomGradleExtensionAPI
import net.fabricmc.loom.task.RemapJarTask
import org.gradle.configurationcache.extensions.capitalized
import net.fabricmc.loom.util.Constants
import net.fabricmc.loom.util.FileSystemUtil
import net.fabricmc.loom.util.LfWriter
import net.fabricmc.loom.util.aw2at.Aw2At
import java.nio.charset.StandardCharsets
import java.nio.file.Files

buildscript {
repositories {
maven("https://oss.sonatype.org/content/repositories/snapshots/")
maven("https://repo.spongepowered.org/repository/maven-public") {
name = "sponge"
}
Expand All @@ -17,7 +22,7 @@ plugins {
alias(libs.plugins.shadow)
id("implementation-structure")
alias(libs.plugins.blossom)
id("net.smoofyuniverse.loom") version "1.1-SNAPSHOT"
id("dev.architectury.loom") version "1.6-SNAPSHOT"
}

val commonProject = parent!!
Expand Down Expand Up @@ -69,7 +74,7 @@ val gameLayerConfig: NamedDomainObjectProvider<Configuration> = configurations.r
extendsFrom(gameLibrariesConfig.get())

afterEvaluate {
extendsFrom(configurations.getByName("minecraftNamed"))
extendsFrom(configurations.getByName("minecraftNamedCompile"))
}
}

Expand Down Expand Up @@ -146,33 +151,10 @@ configurations.configureEach {
if (name != "minecraft") { // awful terrible hack sssh
exclude(group = "com.mojang", module = "minecraft")
}
}

sourceSets.configureEach {
val sourceSet = this
val isMain = "main".equals(sourceSet.name)
val classifier = if (isMain) "sources" else (sourceSet.name + "-sources")

val sourcesJarName: String = if (isMain) "sourcesJar" else (sourceSet.name + "SourcesJar")
val sourcesJarTask = tasks.register(sourcesJarName, Jar::class) {
group = "build"
archiveClassifier.set(classifier + "-dev")
from(sourceSet.allJava)
}

val remapSourcesJarName = "remap" + sourcesJarName.capitalized()

// remapSourcesJar is already registered (but disabled) by Loom
if (!isMain) {
tasks.register(remapSourcesJarName, net.fabricmc.loom.task.RemapSourcesJarTask::class)
}

tasks.named(remapSourcesJarName, net.fabricmc.loom.task.RemapSourcesJarTask::class) {
group = "loom"
archiveClassifier.set(classifier)
inputFile.set(sourcesJarTask.flatMap { it.archiveFile })
dependsOn(sourcesJarTask)
enabled = true
// Fix that can be found in Forge MDK too
resolutionStrategy {
force("net.sf.jopt-simple:jopt-simple:5.0.4")
}
}

Expand All @@ -199,6 +181,11 @@ extensions.configure(LoomGradleExtensionAPI::class) {
configuration(gameShadedLibrariesConfig.get())
}
}

// Arch-loom bug, skip broken union-relauncher
runs.forEach {
it.mainClass.set("net.minecraftforge.bootstrap.ForgeBootstrap")
}
}

dependencies {
Expand Down Expand Up @@ -256,11 +243,8 @@ dependencies {
}

val runTaskOnly = runTaskOnlyConfig.name
testPluginsProject?.also {
runTaskOnly(project(it.path)) {
exclude(group = "org.spongepowered")
}
}
// Arch-loom bug, fix support of MOD_CLASSES
runTaskOnly("net.minecraftforge:bootstrap-dev:2.1.1")
}

val forgeManifest = java.manifest {
Expand All @@ -282,9 +266,6 @@ val mixinConfigs: MutableSet<String> = spongeImpl.mixinConfigurations
tasks {
jar {
manifest.from(forgeManifest)

// Undo Loom devlibs dir
destinationDirectory.set(project.buildDir.resolve("libs"))
}
val forgeAppLaunchJar by registering(Jar::class) {
archiveClassifier.set("applaunch")
Expand Down Expand Up @@ -316,7 +297,7 @@ tasks {
}

val forgeServicesDevJar by registering(Jar::class) {
archiveClassifier.set("services-dev")
archiveClassifier.set("services")
manifest.from(forgeManifest)

from(commonProject.sourceSets.named("applaunch").map { it.output })
Expand All @@ -327,14 +308,30 @@ tasks {

afterEvaluate {
withType(net.fabricmc.loom.task.AbstractRunTask::class) {
classpath += files(forgeServicesDevJar, forgeLangJar, runTaskOnlyConfig)
// Default classpath is a mess, we better start a new one from scratch
classpath = files(
configurations.getByName("forgeRuntimeLibrary"),
forgeServicesDevJar, forgeLangJar, runTaskOnlyConfig
)

testPluginsProject?.also {
val testPluginsOutput = it.sourceSets.getByName("main").output
val dirs: MutableList<File> = mutableListOf()
dirs.add(testPluginsOutput.resourcesDir!!)
dirs.addAll(testPluginsOutput.classesDirs)
environment["SPONGE_PLUGINS"] = dirs.joinToString("&")

dependsOn(it.tasks.classes)
}

argumentProviders += CommandLineArgumentProvider {
mixinConfigs.asSequence()
.flatMap { sequenceOf("--mixin.config", it) }
.toList()
}

// jvmArguments.add("-Dbsl.debug=true") // Uncomment to debug bootstrap classpath

sourceSets.forEach {
dependsOn(it.classesTaskName)
}
Expand Down Expand Up @@ -378,7 +375,7 @@ tasks {

shadowJar {
group = "shadow"
archiveClassifier.set("mod-dev")
archiveClassifier.set("mod")

mergeServiceFiles()
configurations = listOf(gameShadedLibrariesConfig.get())
Expand All @@ -399,14 +396,29 @@ tasks {
from(forgeLaunch.output)
from(forgeAccessors.output)
from(forgeMixins.output)
}

val remapShadowJar = register("remapShadowJar", RemapJarTask::class) {
group = "loom"
archiveClassifier.set("mod")
val accessWideners = listOf("common.accesswidener")

inputFile.set(shadowJar.flatMap { it.archiveFile })
atAccessWideners.add("common.accesswidener")
doLast {
// Convert AW to AT
val at = AccessTransformSet.create()
FileSystemUtil.getJarFileSystem(archiveFile.get().asFile, false).use { fsDelegate ->
val fs = fsDelegate.get()
val atPath = fs.getPath(Constants.Forge.ACCESS_TRANSFORMER_PATH)

for (aw in accessWideners) {
val awPath = fs.getPath(aw)
Files.newBufferedReader(awPath, StandardCharsets.UTF_8).use { reader ->
at.merge(Aw2At.toAccessTransformSet(reader))
}
Files.delete(awPath)
}

LfWriter(Files.newBufferedWriter(atPath)).use { writer ->
AccessTransformFormats.FML.write(writer, at)
}
}
}
}

val universalJar = register("universalJar", Jar::class) {
Expand All @@ -418,7 +430,7 @@ tasks {
from(forgeServicesShadowJar.archiveFile.map { zipTree(it) })

into("jars") {
from(remapShadowJar)
from(shadowJar)
rename("spongeforge-(.*)-mod.jar", "spongeforge-mod.jar")

from(forgeLangJar)
Expand Down Expand Up @@ -463,33 +475,28 @@ indraSpotlessLicenser {
property("url", projectUrl)
}

val sourcesJar by tasks.existing
val forgeAppLaunchJar by tasks.existing
val forgeLaunchJar by tasks.existing
val forgeMixinsJar by tasks.existing

publishing {
publications {
register("sponge", MavenPublication::class) {
artifact(tasks.named("remapJar")) {
builtBy(tasks.named("remapJar"))
}
artifact(sourcesJar) {
builtBy(tasks.named("remapSourcesJar"))
}
artifact(tasks.named("remapShadowJar")) {
builtBy(tasks.named("remapShadowJar"))
}
artifact(forgeAppLaunchJar.get())
artifact(forgeLaunchJar.get())
artifact(forgeMixinsJar.get())
artifact(tasks["applaunchSourcesJar"])
artifact(tasks["launchSourcesJar"])
artifact(tasks["mixinsSourcesJar"])
artifact(tasks["universalJar"])

artifact(tasks["jar"])
artifact(tasks["sourcesJar"])

artifact(tasks["forgeMixinsJar"])
artifact(tasks["mixinsSourcesJar"])

artifact(tasks["forgeAccessorsJar"])
artifact(tasks["accessorsSourcesJar"])

artifact(tasks["forgeLaunchJar"])
artifact(tasks["launchSourcesJar"])

artifact(tasks["forgeAppLaunchJar"])
artifact(tasks["applaunchSourcesJar"])

pom {
artifactId = project.name.toLowerCase()
artifactId = project.name.lowercase()
this.name.set(project.name)
this.description.set(project.description)
this.url.set(projectUrl)
Expand All @@ -511,6 +518,7 @@ publishing {
}

tasks.register("printConfigsHierarchy") {
group = "debug"
doLast {
configurations.forEach { conf: Configuration ->
val seen = mutableSetOf<Configuration>()
Expand All @@ -532,6 +540,7 @@ fun printParents(conf: Configuration, indent: String, seen: MutableSet<Configura
}

tasks.register("printConfigsResolution") {
group = "debug"
doLast {
configurations.forEach { conf: Configuration ->
println()
Expand Down
3 changes: 2 additions & 1 deletion forge/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name=SpongeForge
implementation=Forge
description=The SpongeAPI implementation for MinecraftForge

forgeVersion=45.1.19
forgeVersion=50.0.22
loom.platform=forge
fabric.loom.dontRemap=true
mixinConfigs=mixins.spongeforge.accessors.json,mixins.spongeforge.api.json,mixins.spongeforge.inventory.json,mixins.spongeforge.core.json,mixins.spongeforge.tracker.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public static IModFileInfo parsePluginMetadata(final IModFile iModFile) {
}

final PluginFileConfigurable config = new PluginFileConfigurable(container);
return new ModFileInfo(modFile, config, List.of());
return new ModFileInfo(modFile, config, (info) -> {}, List.of());
} catch (final Exception e) {
AppLaunch.logger().warn("Could not read metadata for plugin file '{}'", modFile, e);
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import cpw.mods.modlauncher.Environment;
import cpw.mods.modlauncher.Launcher;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.fml.loading.moddiscovery.AbstractJarFileModProvider;
import net.minecraftforge.fml.loading.moddiscovery.AbstractModProvider;
import net.minecraftforge.forgespi.locating.IDependencyLocator;
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.IModLocator;
Expand All @@ -42,7 +42,7 @@
import java.util.Map;

// works with ForgeProductionBootstrap to make this whole thing go
public class SpongeForgeDependencyLocator extends AbstractJarFileModProvider implements IDependencyLocator {
public class SpongeForgeDependencyLocator extends AbstractModProvider implements IDependencyLocator {
private static final Logger LOGGER = LogManager.getLogger();

private LibraryManager libraryManager;
Expand Down
Loading
Loading