Paper/build.gradle.kts

214 lines
6.0 KiB
Plaintext
Raw Normal View History

2023-12-06 04:35:33 +01:00
import io.papermc.paperweight.tasks.BaseTask
import io.papermc.paperweight.util.*
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
2023-12-06 04:35:33 +01:00
import java.io.ByteArrayOutputStream
import java.nio.file.Path
import kotlin.io.path.*
plugins {
java
2021-08-18 00:11:04 +02:00
`maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.core") version "1.5.10"
}
allprojects {
apply(plugin = "java")
2021-08-18 00:11:04 +02:00
apply(plugin = "maven-publish")
java {
toolchain {
2021-11-22 09:26:14 +01:00
languageVersion.set(JavaLanguageVersion.of(17))
}
}
}
val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
subprojects {
tasks.withType<JavaCompile> {
options.encoding = Charsets.UTF_8.name()
2021-11-22 09:26:14 +01:00
options.release.set(17)
}
tasks.withType<Javadoc> {
options.encoding = Charsets.UTF_8.name()
}
tasks.withType<ProcessResources> {
filteringCharset = Charsets.UTF_8.name()
}
tasks.withType<Test> {
testLogging {
showStackTraces = true
exceptionFormat = TestExceptionFormat.FULL
events(TestLogEvent.STANDARD_OUT)
}
}
repositories {
mavenCentral()
maven(paperMavenPublicUrl)
}
}
2022-04-07 18:36:19 +02:00
val spigotDecompiler: Configuration by configurations.creating
repositories {
2021-06-13 05:18:50 +02:00
mavenCentral()
maven(paperMavenPublicUrl) {
2022-04-07 18:36:19 +02:00
content {
onlyForConfigurations(
configurations.paperclip.name,
spigotDecompiler.name,
)
}
}
}
dependencies {
2023-12-05 18:20:55 +01:00
paramMappings("net.fabricmc:yarn:1.20.3+build.1:mergedv2")
remapper("net.fabricmc:tiny-remapper:0.8.10:fat")
decompiler("net.minecraftforge:forgeflower:2.0.627.2")
2022-06-07 18:52:56 +02:00
spigotDecompiler("io.papermc:patched-spigot-fernflower:0.1+build.6")
2023-03-20 06:18:33 +01:00
paperclip("io.papermc:paperclip:3.0.3")
}
paperweight {
2021-06-15 06:17:16 +02:00
minecraftVersion.set(providers.gradleProperty("mcVersion"))
serverProject.set(project(":paper-server"))
paramMappingsRepo.set(paperMavenPublicUrl)
remapRepo.set(paperMavenPublicUrl)
decompileRepo.set(paperMavenPublicUrl)
2022-04-07 18:36:19 +02:00
craftBukkit {
fernFlowerJar.set(layout.file(spigotDecompiler.elements.map { it.single().asFile }))
}
paper {
spigotApiPatchDir.set(layout.projectDirectory.dir("patches/api"))
spigotServerPatchDir.set(layout.projectDirectory.dir("patches/server"))
2021-06-11 14:02:28 +02:00
mappingsPatch.set(layout.projectDirectory.file("build-data/mappings-patch.tiny"))
reobfMappingsPatch.set(layout.projectDirectory.file("build-data/reobf-mappings-patch.tiny"))
2021-06-27 05:11:45 +02:00
reobfPackagesToFix.addAll(
"co.aikar.timings",
"com.destroystokyo.paper",
"com.mojang",
"io.papermc.paper",
2021-12-02 08:21:14 +01:00
"ca.spottedleaf",
2021-06-27 05:11:45 +02:00
"net.kyori.adventure.bossbar",
"net.minecraft",
"org.bukkit.craftbukkit",
2021-12-02 08:21:14 +01:00
"org.spigotmc",
2021-06-27 05:11:45 +02:00
)
}
}
2021-08-18 00:11:04 +02:00
tasks.generateDevelopmentBundle {
apiCoordinates.set("io.papermc.paper:paper-api")
mojangApiCoordinates.set("io.papermc.paper:paper-mojangapi")
libraryRepositories.addAll(
"https://repo.maven.apache.org/maven2/",
paperMavenPublicUrl,
2021-08-18 00:11:04 +02:00
)
}
publishing {
2022-02-21 21:44:17 +01:00
if (project.providers.gradleProperty("publishDevBundle").isPresent) {
2021-08-18 00:11:04 +02:00
publications.create<MavenPublication>("devBundle") {
artifact(tasks.generateDevelopmentBundle) {
artifactId = "dev-bundle"
}
}
}
}
allprojects {
publishing {
repositories {
maven("https://repo.papermc.io/repository/maven-snapshots/") {
2021-08-18 00:11:04 +02:00
name = "paperSnapshots"
credentials(PasswordCredentials::class)
}
}
}
}
tasks.register("printMinecraftVersion") {
doLast {
println(providers.gradleProperty("mcVersion").get().trim())
}
}
2022-03-04 10:41:03 +01:00
tasks.register("printPaperVersion") {
doLast {
println(project.version)
}
}
2023-12-06 04:35:33 +01:00
// see gradle.properties
if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
tasks.collectAtsFromPatches {
extraPatchDir.set(layout.projectDirectory.dir("patches/unapplied/server"))
}
tasks.withType<io.papermc.paperweight.tasks.RebuildGitPatches>().configureEach {
filterPatches.set(false)
}
tasks.register("continueServerUpdate", RebasePatches::class) {
projectDir = project.projectDir
appliedPatches = file("patches/server")
unappliedPatches = file("patches/unapplied/server")
}
}
@UntrackedTask(because = "Does not make sense to track state")
abstract class RebasePatches : BaseTask() {
@get:Internal
abstract val projectDir: DirectoryProperty
@get:InputFiles
abstract val appliedPatches: DirectoryProperty
@get:InputFiles
abstract val unappliedPatches: DirectoryProperty
private fun unapplied(): List<Path> =
unappliedPatches.path.listDirectoryEntries("*.patch").sortedBy { it.name }
@TaskAction
fun run() {
for (patch in unapplied()) {
val appliedLoc = appliedPatches.path.resolve(unappliedPatches.path.relativize(patch))
patch.copyTo(appliedLoc)
val out = ByteArrayOutputStream()
val proc = ProcessBuilder()
.directory(projectDir.path)
.command("./gradlew", "applyServerPatches")
.redirectErrorStream(true)
.start()
redirect(proc.inputStream, out)
val exit = proc.waitFor()
patch.deleteIfExists()
if (exit != 0) {
logger.lifecycle("Patch failed at $patch; Git output:")
logger.lifecycle(String(out.toByteArray()))
break
}
val git = Git(projectDir.path)
git("add", appliedPatches.path.toString() + "/*").runSilently()
git("add", unappliedPatches.path.toString() + "/*").runSilently()
logger.lifecycle("Applied $patch")
}
}
}