1
0
mirror of https://github.com/GeyserMC/Geyser.git synced 2025-12-19 14:59:27 +00:00
Files
Geyser/core/build.gradle.kts
Kas-tle e2f873466b Update to Gradle 9 (#5976)
* Update gradle to 9.2.0

* Eclipse doesn't like defining a generic in an instanceof check...

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Fix launching on standalone due to Gradle 9 changes

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Update indra to v4; fix as many gradle deprecation warnings as possible

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Do task order suggestion; remove properties comment line

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Fix fabric runServer rask

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Fix :neoforge:runServer gradle task

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Fix libs.versions.toml

* Fix dupe runtask def

* Update architectury-loom and resolve properties issues

---------

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
Co-authored-by: onebeastchris <github@onechris.mozmail.com>
2025-12-12 19:04:34 -08:00

229 lines
7.1 KiB
Plaintext

import org.eclipse.jgit.api.Git
import org.eclipse.jgit.revwalk.RevWalk
import net.kyori.indra.git.RepositoryValueSource
import java.util.Properties
plugins {
// Allow blossom to mark sources root of templates
idea
eclipse
alias(libs.plugins.blossom)
id("geyser.publish-conventions")
id("io.freefair.lombok")
// Allows fabric/neoforge runServer gradle tasks to work correctly
id("dev.architectury.loom-companion")
}
dependencies {
constraints {
implementation(libs.raknet) // Ensure protocol does not override the RakNet version
}
api(projects.common)
api(projects.api)
api(libs.yaml) // Used for extensions
annotationProcessor(libs.configurate.`interface`.ap)
api(libs.configurate.`interface`)
implementation(libs.configurate.yaml)
api(libs.guava)
compileOnly(libs.gson.record.factory) {
isTransitive = false
}
// Fastutil Maps
implementation(libs.bundles.fastutil)
// Network libraries
implementation(libs.websocket)
api(libs.bundles.protocol) {
exclude("com.fasterxml.jackson.core", "jackson-annotations")
}
api(libs.minecraftauth) {
exclude("com.google.code.gson", "gson")
}
api(libs.mcprotocollib) {
exclude("io.netty", "netty-all")
exclude("net.raphimc", "MinecraftAuth")
}
implementation(libs.raknet) {
exclude("io.netty", "*")
}
// Network dependencies we are updating ourselves
api(libs.netty.handler)
implementation(libs.netty.codec.haproxy)
api(libs.netty.transport.native.epoll) { artifact { classifier = "linux-x86_64" } }
implementation(libs.netty.transport.native.epoll) { artifact { classifier = "linux-aarch_64" } }
// kqueue is macos only
implementation(libs.netty.transport.native.kqueue) { artifact { classifier = "osx-x86_64" } }
api(libs.netty.transport.native.io.uring) { artifact { classifier = "linux-x86_64" } }
implementation(libs.netty.transport.native.io.uring) { artifact { classifier = "linux-aarch_64" } }
// Adventure text serialization
api(libs.bundles.adventure)
// command library
api(libs.cloud.core)
api(libs.erosion.common) {
isTransitive = false
}
// Test
testImplementation(platform("org.junit:junit-bom:6.0.0"))
testImplementation(libs.junit)
testImplementation(libs.gson.runtime) // Record support
testImplementation(libs.mockito)
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
// Annotation Processors
compileOnly(projects.ap)
annotationProcessor(projects.ap)
api(libs.events)
api(libs.bstats)
}
abstract class CommitMessageValueSource : RepositoryValueSource.Parameterless<String>() {
override fun obtain(repository: Git): String? {
val headCommitId = repository.repository.resolve("HEAD")
if (headCommitId == null) {
return ""
}
RevWalk(repository.repository).use { walk ->
val commit = walk.parseCommit(headCommitId)
return commit.fullMessage
}
}
}
abstract class RepositoryUrlValueSource : RepositoryValueSource.Parameterless<String>() {
override fun obtain(repository: Git): String? {
return repository.repository.config.getString("remote", "origin", "url")
}
}
val gitBranch = indraGit.branchName().orElse("DEV")
val gitCommit = indraGit.commit()
val gitCommitName = gitCommit.map { it?.name ?: "0".repeat(40) }
val gitCommitAbbrev = gitCommit.map { it?.name?.substring(0, 7) ?: "0".repeat(7) }
val gitCommitMessage = indraGit.repositoryValue(CommitMessageValueSource::class.java).orElse("")
val gitRepositoryUrl = indraGit.repositoryValue(RepositoryUrlValueSource::class.java).orElse("").map {
it.replace("git@github.com:", "https://github.com/")
}
val gitRepositoryIsDev = gitBranch.zip(gitRepositoryUrl) { branch, repo ->
isDevBuild(branch, repo)
}
val gitVersion = gitBranch.zip(gitCommitAbbrev) { branch, commit ->
"git-${branch}-${commit}"
}
val projectVersionProvider = gitRepositoryIsDev.map { isDev ->
if (isDev) project.version.toString() else projectVersion(project).toString()
}
val finalVersion = projectVersionProvider.zip(gitVersion) { projVer, gitVer ->
"$projVer ($gitVer)"
}
val buildNumber = provider { buildNumber().toString() }
val gitPropertiesMap = mapOf(
"git.branch" to gitBranch,
"git.build.number" to buildNumber,
"git.build.version" to finalVersion,
"git.commit.id" to gitCommitName,
"git.commit.id.abbrev" to gitCommitAbbrev,
"git.commit.message.full" to gitCommitMessage,
"git.remote.origin.url" to gitRepositoryUrl
)
val generateGitProperties = tasks.register("generateGitProperties") {
description = "Generates git.properties from Git information."
group = "build"
inputs.properties(gitPropertiesMap)
val generatedPropsFile = layout.buildDirectory.file("generated/git/git.properties")
outputs.file(generatedPropsFile)
doLast {
val props = Properties()
gitPropertiesMap.forEach { (key, provider) ->
props[key] = provider.get()
}
generatedPropsFile.get().asFile.apply {
parentFile.mkdirs()
writer().use { props.store(it, null) }
// remove comment line
val lines = readLines()
if (lines.isNotEmpty()) {
writeText(lines.drop(1).joinToString("\n", postfix = "\n"))
}
}
}
}
tasks.processResources {
from(generateGitProperties) {
into(".")
}
}
tasks.named("sourcesJar") {
dependsOn(tasks.named("processResources"))
}
sourceSets {
main {
blossom {
javaSources {
property("version", finalVersion)
property("gitVersion", gitVersion)
property("buildNumber", buildNumber)
property("branch", gitBranch)
property("commit", gitCommitName)
property("repository", gitRepositoryUrl)
property("devVersion", gitRepositoryIsDev.map { it.toString() })
}
}
}
}
fun isDevBuild(branch: String, repository: String): Boolean {
return branch != "master" || repository.equals("https://github.com/GeyserMC/Geyser", ignoreCase = true).not()
}
// Manual task to download the bedrock data files from the CloudburstMC/Data repository
// Invoke with ./gradlew :core:downloadBedrockData --suffix=1_20_70
// Set suffix to the current Bedrock version
tasks.register<DownloadFilesTask>("downloadBedrockData") {
urls = listOf(
"https://raw.githubusercontent.com/CloudburstMC/Data/master/entity_identifiers.dat",
"https://raw.githubusercontent.com/CloudburstMC/Data/master/block_palette.nbt",
"https://raw.githubusercontent.com/CloudburstMC/Data/master/creative_items.json",
"https://raw.githubusercontent.com/CloudburstMC/Data/master/runtime_item_states.json",
"https://raw.githubusercontent.com/CloudburstMC/Data/master/stripped_biome_definitions.json"
)
suffixedFiles = listOf("block_palette.nbt", "creative_items.json", "runtime_item_states.json")
destinationDir = "$projectDir/src/main/resources/bedrock"
}