From 769ec38bd5ad6ea3d417d756fb1848fdd3de1252 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 29 Dec 2024 13:34:12 -0800 Subject: [PATCH] prepare hardfork build system --- .gitignore | 12 +- build-data/dev-imports.txt | 4 + build.gradle.kts | 124 +++++++----------- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.properties | 2 +- purpur-api/build.gradle.kts.patch | 44 +++++++ purpur-server/build.gradle.kts.patch | 53 ++++++++ .../resources/data/.paperassetsroot.patch | 3 + settings.gradle.kts | 4 +- 9 files changed, 167 insertions(+), 85 deletions(-) create mode 100644 purpur-api/build.gradle.kts.patch create mode 100644 purpur-server/build.gradle.kts.patch create mode 100644 purpur-server/paper-patches/files/src/main/resources/data/.paperassetsroot.patch diff --git a/.gitignore b/.gitignore index 1fd301e1d..1eca5d0cc 100644 --- a/.gitignore +++ b/.gitignore @@ -50,12 +50,14 @@ manifest.mf *~ # other stuff -run/ +/run build-data/ -Purpur-API -Purpur-MojangAPI -Purpur-Server -paper-api-generator +/purpur-server/build.gradle.kts +/purpur-server/src/minecraft +/paper-server +/purpur-api/build.gradle.kts +/paper-api +/paper-api-generator *.jar test-plugin.settings.gradle.kts diff --git a/build-data/dev-imports.txt b/build-data/dev-imports.txt index b818b96e2..1d9862a95 100644 --- a/build-data/dev-imports.txt +++ b/build-data/dev-imports.txt @@ -8,3 +8,7 @@ # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java +# To import minecraft data files, like the default chat type, use `mc_data` as the prefix: +# mc_data chat_type/chat.json +# mc_data dimension_type/overworld.json +# diff --git a/build.gradle.kts b/build.gradle.kts index d472edfdd..35a861b65 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,28 +2,58 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent plugins { - java - `maven-publish` - id("io.papermc.paperweight.patcher") version "1.7.7" -} - -allprojects { - apply(plugin = "java") - apply(plugin = "maven-publish") - - java { - toolchain { - languageVersion = JavaLanguageVersion.of(21) - } - } + java // TODO java launcher tasks + id("io.papermc.paperweight.patcher") version "2.0.0-beta.8" } val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" +paperweight { + upstreams.paper { + ref = providers.gradleProperty("paperCommit") + + patchFile { + path = "paper-server/build.gradle.kts" + outputFile = file("purpur-server/build.gradle.kts") + patchFile = file("purpur-server/build.gradle.kts.patch") + } + patchFile { + path = "paper-api/build.gradle.kts" + outputFile = file("purpur-api/build.gradle.kts") + patchFile = file("purpur-api/build.gradle.kts.patch") + } + patchDir("paperApi") { + upstreamPath = "paper-api" + excludes = setOf("build.gradle.kts") + patchesDir = file("purpur-api/paper-patches") + outputDir = file("paper-api") + } + patchDir("paperApiGenerator") { + upstreamPath = "paper-api-generator" + patchesDir = file("purpur-api-generator/paper-patches") + outputDir = file("paper-api-generator") + } + } +} + subprojects { - tasks.withType().configureEach { + apply(plugin = "java-library") + apply(plugin = "maven-publish") + + extensions.configure { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } + } + + dependencies { + "testRuntimeOnly"("org.junit.platform:junit-platform-launcher") + } + + tasks.withType { options.encoding = Charsets.UTF_8.name() options.release = 21 + options.isFork = true } tasks.withType { options.encoding = Charsets.UTF_8.name() @@ -38,64 +68,18 @@ subprojects { events(TestLogEvent.STANDARD_OUT) } } + tasks.withType().configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + } repositories { mavenCentral() maven(paperMavenPublicUrl) maven("https://jitpack.io") } -} -repositories { - mavenCentral() - maven(paperMavenPublicUrl) { - content { - onlyForConfigurations(configurations.paperclip.name) - } - } -} - -dependencies { - remapper("net.fabricmc:tiny-remapper:0.10.3:fat") - decompiler("org.vineflower:vineflower:1.10.1") - paperclip("io.papermc:paperclip:3.0.3") -} - -paperweight { - serverProject = project(":purpur-server") - - remapRepo = paperMavenPublicUrl - decompileRepo = paperMavenPublicUrl - - usePaperUpstream(providers.gradleProperty("paperCommit")) { - withPaperPatcher { - apiPatchDir = layout.projectDirectory.dir("patches/api") - apiOutputDir = layout.projectDirectory.dir("Purpur-API") - - serverPatchDir = layout.projectDirectory.dir("patches/server") - serverOutputDir = layout.projectDirectory.dir("Purpur-Server") - } - - patchTasks.register("generatedApi") { - isBareDirectory = true - upstreamDirPath = "paper-api-generator/generated" - patchDir = layout.projectDirectory.dir("patches/generated-api") - outputDir = layout.projectDirectory.dir("paper-api-generator/generated") - } - } -} - -tasks.generateDevelopmentBundle { - apiCoordinates = "org.purpurmc.purpur:purpur-api" - libraryRepositories = listOf( - "https://repo.maven.apache.org/maven2/", - paperMavenPublicUrl, - "https://repo.purpurmc.org/snapshots", - ) -} - -allprojects { - publishing { + extensions.configure { repositories { maven("https://repo.purpurmc.org/snapshots") { name = "purpur" @@ -105,14 +89,6 @@ allprojects { } } -publishing { - publications.create("devBundle") { - artifact(tasks.generateDevelopmentBundle) { - artifactId = "dev-bundle" - } - } -} - tasks.register("printMinecraftVersion") { doLast { println(providers.gradleProperty("mcVersion").get().trim()) diff --git a/gradle.properties b/gradle.properties index b179779f7..cb04d40f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,9 +2,9 @@ group = org.purpurmc.purpur version = 1.21.4-R0.1-SNAPSHOT mcVersion = 1.21.4 -paperCommit = bb76819589fcd1a7ccac245998ca32f63d99772a +paperCommit = 54debf494f467a71c561cf8765c4f21725c99dd8 -org.gradle.caching = true +org.gradle.configuration-cache = true +#org.gradle.caching = true org.gradle.parallel = true org.gradle.vfs.watch = false -org.gradle.jvmargs = -Xmx3G diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e2847c820..cea7a793a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/purpur-api/build.gradle.kts.patch b/purpur-api/build.gradle.kts.patch new file mode 100644 index 000000000..5fe5f81c7 --- /dev/null +++ b/purpur-api/build.gradle.kts.patch @@ -0,0 +1,44 @@ +--- a/paper-api/build.gradle.kts ++++ b/paper-api/build.gradle.kts +@@ -105,6 +_,18 @@ + main { + java { + srcDir(generatedApiPath) ++ srcDir(file("../paper-api/src/main/java")) ++ } ++ resources { ++ srcDir(file("../paper-api/src/main/resources")) ++ } ++ } ++ test { ++ java { ++ srcDir(file("../paper-api/src/test/java")) ++ } ++ resources { ++ srcDir(file("../paper-api/src/test/resources")) + } + } + } +@@ -174,7 +_,7 @@ + + tasks.withType { + val options = options as StandardJavadocDocletOptions +- options.overview = "src/main/javadoc/overview.html" ++ options.overview = "../paper-api/src/main/javadoc/overview.html" + options.use() + options.isDocFilesSubDirs = true + options.links( +@@ -212,11 +_,11 @@ + } + + // workaround for https://github.com/gradle/gradle/issues/4046 +- inputs.dir("src/main/javadoc").withPropertyName("javadoc-sourceset") ++ inputs.dir("../paper-api/src/main/javadoc").withPropertyName("javadoc-sourceset") + val fsOps = services.fileSystemOperations + doLast { + fsOps.copy { +- from("src/main/javadoc") { ++ from("../paper-api/src/main/javadoc") { + include("**/doc-files/**") + } + into("build/docs/javadoc") diff --git a/purpur-server/build.gradle.kts.patch b/purpur-server/build.gradle.kts.patch new file mode 100644 index 000000000..36da1beb0 --- /dev/null +++ b/purpur-server/build.gradle.kts.patch @@ -0,0 +1,53 @@ +--- a/paper-server/build.gradle.kts ++++ b/paper-server/build.gradle.kts +@@ -20,8 +_,19 @@ + // macheOldPath = file("F:\\Projects\\PaperTooling\\mache\\versions\\1.21.4\\src\\main\\java") + // gitFilePatches = true + ++ val purpur = forks.register("purpur") { ++ upstream.patchDir("paperServer") { ++ upstreamPath = "paper-server" ++ excludes = setOf("src/minecraft", "patches", "build.gradle.kts") ++ patchesDir = rootDirectory.dir("purpur-server/paper-patches") ++ outputDir = rootDirectory.dir("paper-server") ++ } ++ } ++ ++ activeFork = purpur ++ + paper { +- reobfMappingsPatch = layout.projectDirectory.file("../build-data/reobf-mappings-patch.tiny") ++ paperServerDir = upstreamsDirectory().map { it.dir("paper/paper-server") } + } + + spigot { +@@ -104,7 +_,19 @@ + } + } + +-val log4jPlugins = sourceSets.create("log4jPlugins") ++sourceSets { ++ main { ++ java { srcDir("../paper-server/src/main/java") } ++ resources { srcDir("../paper-server/src/main/resources") } ++ } ++ test { ++ java { srcDir("../paper-server/src/test/java") } ++ resources { srcDir("../paper-server/src/test/resources") } ++ } ++} ++val log4jPlugins = sourceSets.create("log4jPlugins") { ++ java { srcDir("../paper-server/src/log4jPlugins/java") } ++} + configurations.named(log4jPlugins.compileClasspathConfigurationName) { + extendsFrom(configurations.compileClasspath.get()) + } +@@ -123,7 +_,7 @@ + // Paper end - configure mockito agent that is needed in newer java versions + + dependencies { +- implementation(project(":paper-api")) ++ implementation(project(":purpur-api")) + implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency + // Paper start + implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ diff --git a/purpur-server/paper-patches/files/src/main/resources/data/.paperassetsroot.patch b/purpur-server/paper-patches/files/src/main/resources/data/.paperassetsroot.patch new file mode 100644 index 000000000..b41d58b68 --- /dev/null +++ b/purpur-server/paper-patches/files/src/main/resources/data/.paperassetsroot.patch @@ -0,0 +1,3 @@ +--- a/src/main/resources/data/.paperassetsroot ++++ b/src/main/resources/data/.paperassetsroot +@@ -1,0 +_,0 @@ diff --git a/settings.gradle.kts b/settings.gradle.kts index 0ff9678cd..ce2ad53be 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,7 +8,7 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0" } if (!file(".git").exists()) { @@ -32,7 +32,7 @@ if (!file(".git").exists()) { } rootProject.name = "purpur" -for (name in listOf("Purpur-API", "Purpur-Server", "paper-api-generator")) { +for (name in listOf("purpur-api", "purpur-server", "purpur-api-generator")) { val projName = name.lowercase(Locale.ENGLISH) include(projName) findProject(":$projName")!!.projectDir = file(name)