diff --git a/build.gradle.kts b/build.gradle.kts index 03fd12ce48..b4bff61430 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,9 @@ tasks.register("printPaperVersion") { } } -tasks.register("gibWork") { +/* +// Used when updating to a new Minecraft version +tasks.register("pickUpdateDirectory") { val issue = providers.gradleProperty("updateTaskListIssue").get() val patchesFolder = layout.projectDirectory.dir("paper-server/patches/").convertToPath() val storage = layout.cache.resolve("last-updating-folder").also { it.parent.createDirectories() } @@ -122,7 +124,7 @@ tasks.register("gibWork") { } } -tasks.register("showWork") { +tasks.register("showUpdateDirectories") { val patchDir = layout.projectDirectory.dir("paper-server/patches/unapplied/").convertToPath() doLast { @@ -137,7 +139,7 @@ tasks.register("showWork") { } } -tasks.register("checkWork") { +tasks.register("moveUpdateDirectory") { notCompatibleWithConfigurationCache("This task is interactive") fun expandUserHome(path: String): Path { return Path.of(path.replaceFirst("^~".toRegex(), System.getProperty("user.home"))) @@ -179,7 +181,6 @@ tasks.register("checkWork") { } // see gradle.properties -/* if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) { tasks.collectAtsFromPatches { val dir = layout.projectDirectory.dir("patches/unapplied/server") diff --git a/paper-api/build.gradle.kts b/paper-api/build.gradle.kts index 7dd682b4b9..9a03c630be 100644 --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts @@ -1,7 +1,7 @@ plugins { `java-library` `maven-publish` - idea // Paper + idea } java { @@ -14,6 +14,7 @@ val bungeeCordChatVersion = "1.20-R0.2" val adventureVersion = "4.17.0" val slf4jVersion = "2.0.9" val log4jVersion = "2.17.1" + val apiAndDocs: Configuration by configurations.creating { attributes { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION)) @@ -26,7 +27,7 @@ configurations.api { extendsFrom(apiAndDocs) } -// Paper start - configure mockito agent that is needed in newer java versions +// Configure mockito agent that is needed in newer Java versions val mockitoAgent = configurations.register("mockitoAgent") abstract class MockitoAgentProvider : CommandLineArgumentProvider { @get:CompileClasspath @@ -36,27 +37,29 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider { return listOf("-javaagent:" + fileCollection.files.single().absolutePath) } } -// Paper end - configure mockito agent that is needed in newer java versions dependencies { - api("com.mojang:brigadier:1.3.10") // Paper - Brigadier command api + // api dependencies are listed transitively to API consumers api("com.google.guava:guava:33.3.1-jre") api("com.google.code.gson:gson:2.11.0") - // Paper start - adventure - api("net.md-5:bungeecord-chat:$bungeeCordChatVersion-deprecated+build.19") { - exclude("com.google.guava", "guava") - } - // Paper - adventure api("org.yaml:snakeyaml:2.2") api("org.joml:joml:1.10.8") { isTransitive = false // https://github.com/JOML-CI/JOML/issues/352 } - // Paper start api("com.googlecode.json-simple:json-simple:1.1.1") { isTransitive = false // includes junit } api("it.unimi.dsi:fastutil:8.5.15") + api("org.apache.logging.log4j:log4j-api:$log4jVersion") + api("org.slf4j:slf4j-api:$slf4jVersion") + api("com.mojang:brigadier:1.3.10") + + // Deprecate bungeecord-chat in favor of adventure + api("net.md-5:bungeecord-chat:$bungeeCordChatVersion-deprecated+build.19") { + exclude("com.google.guava", "guava") + } + apiAndDocs(platform("net.kyori:adventure-bom:$adventureVersion")) apiAndDocs("net.kyori:adventure-api") apiAndDocs("net.kyori:adventure-text-minimessage") @@ -64,38 +67,35 @@ dependencies { apiAndDocs("net.kyori:adventure-text-serializer-legacy") apiAndDocs("net.kyori:adventure-text-serializer-plain") apiAndDocs("net.kyori:adventure-text-logger-slf4j") - api("org.apache.logging.log4j:log4j-api:$log4jVersion") - api("org.slf4j:slf4j-api:$slf4jVersion") implementation("org.ow2.asm:asm:9.7.1") implementation("org.ow2.asm:asm-commons:9.7.1") - // Paper end - api("org.apache.maven:maven-resolver-provider:3.9.6") // Paper - make API dependency for Paper Plugins + api("org.apache.maven:maven-resolver-provider:3.9.6") // make API dependency for Paper Plugins compileOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") compileOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") - val annotations = "org.jetbrains:annotations:$annotationsVersion" // Paper - we don't want Java 5 annotations... + // Annotations - Slowly migrate to jspecify + val annotations = "org.jetbrains:annotations:$annotationsVersion" compileOnly(annotations) testCompileOnly(annotations) - // Paper start - add checker val checkerQual = "org.checkerframework:checker-qual:3.33.0" compileOnlyApi(checkerQual) testCompileOnly(checkerQual) - // Paper end - api("org.jspecify:jspecify:1.0.0") // Paper - add jspecify + api("org.jspecify:jspecify:1.0.0") + + // Test dependencies testImplementation("org.apache.commons:commons-lang3:3.12.0") testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") testImplementation("org.mockito:mockito-core:5.14.1") testImplementation("org.ow2.asm:asm-tree:9.7.1") - mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // Paper - configure mockito agent that is needed in newer java versions + mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // configure mockito agent that is needed in newer java versions testRuntimeOnly("org.junit.platform:junit-platform-launcher") } -// Paper start val generatedApiPath: java.nio.file.Path = rootProject.projectDir.toPath().resolve("paper-api-generator/generated") idea { module { @@ -109,8 +109,7 @@ sourceSets { } } } -// Paper end -// Paper start - brigadier API + val outgoingVariants = arrayOf("runtimeElements", "apiElements", "sourcesElements", "javadocElements") val mainCapability = "${project.group}:${project.name}:${project.version}" configurations { @@ -133,15 +132,13 @@ configurations { } } } -// Paper end configure { publications.create("maven") { - // Paper start - brigadier API + // For Brigadier API outgoingVariants.forEach { suppressPomMetadataWarningsFor(it) } - // Paper end from(components["java"]) } } @@ -181,14 +178,10 @@ tasks.withType { options.links( "https://guava.dev/releases/33.3.1-jre/api/docs/", "https://javadoc.io/doc/org.yaml/snakeyaml/2.2/", - "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", // Paper - we don't want Java 5 annotations - // "https://javadoc.io/doc/net.md-5/bungeecord-chat/$bungeeCordChatVersion/", // Paper - don't link to bungee chat - // Paper start - add missing javadoc links + "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", "https://javadoc.io/doc/org.joml/joml/1.10.8/index.html", "https://www.javadoc.io/doc/com.google.code.gson/gson/2.11.0", "https://jspecify.dev/docs/api/", - // Paper end - // Paper start "https://jd.advntr.dev/api/$adventureVersion/", "https://jd.advntr.dev/key/$adventureVersion/", "https://jd.advntr.dev/text-minimessage/$adventureVersion/", @@ -198,8 +191,7 @@ tasks.withType { "https://jd.advntr.dev/text-logger-slf4j/$adventureVersion/", "https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/", "https://javadoc.io/doc/org.apache.logging.log4j/log4j-api/$log4jVersion/", - // Paper end - "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", // Paper + "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", ) options.tags("apiNote:a:API Note:") @@ -227,20 +219,18 @@ tasks.withType { tasks.test { useJUnitPlatform() - // Paper start - configure mockito agent that is needed in newer java versions + + // configure mockito agent that is needed in newer java versions val provider = objects.newInstance() provider.fileCollection.from(mockitoAgent) jvmArgumentProviders.add(provider) - // Paper end - configure mockito agent that is needed in newer java versions } -// Paper start - compile tests with -parameters for better junit parameterized test names +// Compile tests with -parameters for better junit parameterized test names tasks.compileTestJava { options.compilerArgs.add("-parameters") } -// Paper end -// Paper start val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) { badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;") jarToScan.set(tasks.jar.flatMap { it.archiveFile }) @@ -249,8 +239,7 @@ val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks. tasks.check { dependsOn(scanJar) } -// Paper end -// Paper start + val scanJarForOldGeneratedCode = tasks.register("scanJarForOldGeneratedCode", io.papermc.paperweight.tasks.ScanJarForOldGeneratedCode::class) { mcVersion.set(providers.gradleProperty("mcVersion")) annotation.set("Lio/papermc/paper/generated/GeneratedFrom;") @@ -260,4 +249,3 @@ val scanJarForOldGeneratedCode = tasks.register("scanJarForOldGeneratedCode", io tasks.check { dependsOn(scanJarForOldGeneratedCode) } -// Paper end diff --git a/paper-server/build.gradle.kts b/paper-server/build.gradle.kts index c07f189f60..baa638e0dd 100644 --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts @@ -111,7 +111,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { } val alsoShade: Configuration by configurations.creating -// Paper start - configure mockito agent that is needed in newer java versions +// Configure mockito agent that is needed in newer java versions val mockitoAgent = configurations.register("mockitoAgent") abstract class MockitoAgentProvider : CommandLineArgumentProvider { @get:CompileClasspath @@ -121,65 +121,63 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider { return listOf("-javaagent:" + fileCollection.files.single().absolutePath) } } -// Paper end - configure mockito agent that is needed in newer java versions dependencies { implementation(project(":paper-api")) - implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency - // Paper start + implementation("ca.spottedleaf:concurrentutil:0.0.2") implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.kyori:adventure-text-serializer-ansi:4.17.0") // Keep in sync with adventureVersion from Paper-API build file + /* - Required to add the missing Log4j2Plugins.dat file from log4j-core - which has been removed by Mojang. Without it, log4j has to classload - all its classes to check if they are plugins. - Scanning takes about 1-2 seconds so adding this speeds up the server start. + Required to add the missing Log4j2Plugins.dat file from log4j-core + which has been removed by Mojang. Without it, log4j has to classload + all its classes to check if they are plugins. + Scanning takes about 1-2 seconds so adding this speeds up the server start. */ - implementation("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - implementation - log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins + implementation("org.apache.logging.log4j:log4j-core:2.19.0") + log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Needed to generate meta for our Log4j plugins runtimeOnly(log4jPlugins.output) alsoShade(log4jPlugins.output) - implementation("io.netty:netty-codec-haproxy:4.1.97.Final") // Paper - Add support for proxy protocol - // Paper end - implementation("org.apache.logging.log4j:log4j-iostreams:2.24.1") // Paper - remove exclusion - implementation("org.ow2.asm:asm-commons:9.7.1") - implementation("org.spongepowered:configurate-yaml:4.2.0-SNAPSHOT") // Paper - config files - implementation("commons-lang:commons-lang:2.6") - runtimeOnly("org.xerial:sqlite-jdbc:3.47.0.0") - runtimeOnly("com.mysql:mysql-connector-j:9.1.0") - runtimeOnly("com.lmax:disruptor:3.4.4") // Paper - // Paper start - Use Velocity cipher + implementation("com.velocitypowered:velocity-native:3.3.0-SNAPSHOT") { isTransitive = false } - // Paper end - Use Velocity cipher + implementation("io.netty:netty-codec-haproxy:4.1.97.Final") // Add support for proxy protocol + implementation("org.apache.logging.log4j:log4j-iostreams:2.24.1") + implementation("org.ow2.asm:asm-commons:9.7.1") + implementation("org.spongepowered:configurate-yaml:4.2.0-SNAPSHOT") + implementation("commons-lang:commons-lang:2.6") + runtimeOnly("org.xerial:sqlite-jdbc:3.47.0.0") + runtimeOnly("com.mysql:mysql-connector-j:9.1.0") + runtimeOnly("com.lmax:disruptor:3.4.4") runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6") runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") - testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test + testImplementation("io.github.classgraph:classgraph:4.8.47") // For mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0") testImplementation("org.hamcrest:hamcrest:2.2") testImplementation("org.mockito:mockito-core:5.14.1") - mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // Paper - configure mockito agent that is needed in newer java versions + mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // Configure mockito agent that is needed in newer java versions testImplementation("org.ow2.asm:asm-tree:9.7.1") - testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") // Paper - CartesianTest - implementation("net.neoforged:srgutils:1.0.9") // Paper - mappings handling - implementation("net.neoforged:AutoRenamingTool:2.0.3") // Paper - remap plugins - // Paper start - Remap reflection + testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") // CartesianTest + + implementation("net.neoforged:srgutils:1.0.9") // Mappings handling + implementation("net.neoforged:AutoRenamingTool:2.0.3") // Remap plugins + + // Remap reflection val reflectionRewriterVersion = "0.0.3" implementation("io.papermc:reflection-rewriter:$reflectionRewriterVersion") implementation("io.papermc:reflection-rewriter-runtime:$reflectionRewriterVersion") implementation("io.papermc:reflection-rewriter-proxy-generator:$reflectionRewriterVersion") - // Paper end - Remap reflection - // Paper start - spark + + // Spark implementation("me.lucko:spark-api:0.1-20240720.200737-2") implementation("me.lucko:spark-paper:1.10.119-SNAPSHOT") - // Paper end - spark } tasks.jar { @@ -190,13 +188,13 @@ tasks.jar { val buildTime = if (build != null) Instant.now() else Instant.EPOCH val gitHash = git.exec(providers, "rev-parse", "--short=7", "HEAD").get().trim() val implementationVersion = "$mcVersion-${build ?: "DEV"}-$gitHash" - val date = git.exec(providers, "show", "-s", "--format=%ci", gitHash).get().trim() // Paper - val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() // Paper + val date = git.exec(providers, "show", "-s", "--format=%ci", gitHash).get().trim() + val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "Paper", "Implementation-Version" to implementationVersion, - "Implementation-Vendor" to date, // Paper + "Implementation-Vendor" to date, "Specification-Title" to "Paper", "Specification-Version" to project.version, "Specification-Vendor" to "Paper Team", @@ -204,8 +202,8 @@ tasks.jar { "Brand-Name" to "Paper", "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), - "Git-Branch" to gitBranch, // Paper - "Git-Commit" to gitHash, // Paper + "Git-Branch" to gitBranch, + "Git-Commit" to gitHash, ) for (tld in setOf("net", "com", "org")) { attributes("$tld/bukkit", "Sealed" to true) @@ -213,13 +211,11 @@ tasks.jar { } } -// Paper start - compile tests with -parameters for better junit parameterized test names +// Compile tests with -parameters for better junit parameterized test names tasks.compileTestJava { options.compilerArgs.add("-parameters") } -// Paper end -// Paper start val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks.ScanJarForBadCalls::class) { badAnnotations.add("Lio/papermc/paper/annotation/DoNotUse;") jarToScan.set(tasks.jar.flatMap { it.archiveFile }) @@ -228,8 +224,8 @@ val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks. tasks.check { dependsOn(scanJar) } -// Paper end -// Paper start - use TCA for console improvements + +// Use TCA for console improvements tasks.jar { val archiveOperations = services.archiveOperations from(alsoShade.elements.map { @@ -242,7 +238,6 @@ tasks.jar { } }) } -// Paper end - use TCA for console improvements tasks.test { include("**/**TestSuite.class") @@ -251,11 +246,11 @@ tasks.test { forkEvery = 1 excludeTags("Slow") } - // Paper start - configure mockito agent that is needed in newer java versions + + // Configure mockito agent that is needed in newer java versions val provider = objects.newInstance() provider.fileCollection.from(mockitoAgent) jvmArgumentProviders.add(provider) - // Paper end - configure mockito agent that is needed in newer java versions } fun TaskContainer.registerRunTask(