dev: switch to stonecutter build system

- This will allow us to build the library for different Minecraft versions at the same time
- Right now, only Fabric and Neoforge 1.21.10 are fully working
- As a bonus, the jar is now even smaller!
This commit is contained in:
Martin Prokoph
2025-11-04 22:21:15 +01:00
parent b484d0287c
commit 8138e17b42
78 changed files with 668 additions and 981 deletions

View File

@@ -0,0 +1,8 @@
plugins {
`kotlin-dsl`
kotlin("jvm") version "2.0.20"
}
repositories {
mavenCentral()
}

View File

@@ -0,0 +1,33 @@
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler
import org.gradle.kotlin.dsl.expand
import org.gradle.kotlin.dsl.maven
import org.gradle.language.jvm.tasks.ProcessResources
import java.util.*
val Project.mod: ModData get() = ModData(this)
fun Project.prop(key: String): String? = findProperty(key)?.toString()
fun String.upperCaseFirst() = replaceFirstChar { if (it.isLowerCase()) it.uppercaseChar() else it }
fun RepositoryHandler.strictMaven(url: String, alias: String, vararg groups: String) = exclusiveContent {
forRepository { maven(url) { name = alias } }
filter { groups.forEach(::includeGroup) }
}
fun ProcessResources.properties(files: Iterable<String>, vararg properties: Pair<String, Any>) {
for ((name, value) in properties) inputs.property(name, value)
filesMatching(files) {
expand(properties.toMap())
}
}
@JvmInline
value class ModData(private val project: Project) {
val id: String get() = requireNotNull(project.prop("mod.id")) { "Missing 'mod.id'" }
val name: String get() = requireNotNull(project.prop("mod.name")) { "Missing 'mod.name'" }
val version: String get() = requireNotNull(project.prop("mod.version")) { "Missing 'mod.version'" }
val group: String get() = requireNotNull(project.prop("mod.group")) { "Missing 'mod.group'" }
fun prop(key: String) = requireNotNull(project.prop("mod.$key")) { "Missing 'mod.$key'" }
fun dep(key: String) = requireNotNull(project.prop("deps.$key")) { "Missing 'deps.$key'" }
}