Skip to content

Commit 3f2a85f

Browse files
committed
Stonecutter - 1.0-alpha.3
1 parent 7a845fa commit 3f2a85f

File tree

12 files changed

+375
-91
lines changed

12 files changed

+375
-91
lines changed

.editorconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[*]
2+
end_of_line = lf
3+
4+
[{*.json,*.toml}]
5+
indent_style = tab
6+
indent_size = 4

.gitattributes

Lines changed: 0 additions & 9 deletions
This file was deleted.

build.gradle.kts

Lines changed: 173 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,205 @@
11
plugins {
2-
id("fabric-loom") version "1.12-SNAPSHOT"
3-
id("maven-publish")
4-
id("com.diffplug.spotless") version "8.0.0"
2+
alias(libs.plugins.kotlin.jvm)
3+
alias(libs.plugins.loom)
4+
alias(libs.plugins.publishing)
5+
alias(libs.plugins.blossom)
6+
alias(libs.plugins.ksp)
7+
alias(libs.plugins.fletchingtable.fabric)
58
}
69

7-
class Loader {
8-
val version = property("loader_version")
10+
repositories {
11+
maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") // DevAuth
12+
maven("https://maven.parchmentmc.org") // Parchment
13+
maven("https://maven.neoforged.net/releases") // NeoForge
14+
maven("https://maven.terraformersmc.com/") // Mod Menu
915
}
1016

11-
class Mod {
12-
val version = property("mod_version").toString()
13-
val minecraftVersion = property("minecraft_version")
14-
val description = property("mod_description").toString()
15-
val mavenGroup = property("maven_group").toString()
16-
val archivesBaseName = property("archives_base_name").toString()
17-
val loader = Loader()
17+
class ModData {
18+
val id = property("mod.id") as String
19+
val name = property("mod.name") as String
20+
val version = property("mod.version") as String
21+
val group = property("mod.group") as String
22+
val description = property("mod.description") as String
23+
val source = property("mod.source") as String
24+
val issues = property("mod.issues") as String
25+
val license = property("mod.license") as String
26+
val modrinth = property("mod.modrinth") as String
27+
val curseforge = property("mod.curseforge") as String
28+
val discord = property("mod.discord") as String
29+
30+
val minecraftVersion = property("mod.minecraft_version") as String
31+
val minecraftVersionRange = property("mod.minecraft_version_range") as String
1832
}
1933

20-
val mod = Mod()
21-
version = mod.version
22-
group = mod.mavenGroup
34+
class Dependencies {
35+
val fabricLoaderVersion = property("deps.fabric_loader_version") as String?
36+
37+
val devAuthVersion = property("deps.devauth_version") as String?
38+
val lombokVersion = property("deps.lombok_version") as String?
2339

24-
base {
25-
archivesName = mod.archivesBaseName
40+
// Versioned
41+
val neoForgeVersion = property("deps.neoforge_version") as String?
42+
val fabricApiVersion = property("deps.fabric_api_version") as String?
2643
}
2744

28-
repositories {}
45+
class LoaderData {
46+
val name = loom.platform.get().name.lowercase()
47+
val isFabric = name == "fabric"
48+
val isNeoForge = name == "neoforge"
49+
}
2950

30-
dependencies {
31-
minecraft("com.mojang:minecraft:${mod.minecraftVersion}")
32-
mappings(loom.officialMojangMappings())
33-
modImplementation("net.fabricmc:fabric-loader:${mod.loader.version}")
51+
val mod = ModData()
52+
val deps = Dependencies()
53+
val loader = LoaderData()
54+
55+
group = mod.group
56+
base {
57+
archivesName.set("${mod.id}-${mod.version}+${mod.minecraftVersion}-${loader.name}")
3458
}
3559

36-
tasks.processResources {
37-
val props = buildMap {
38-
put("version", mod.version)
39-
put("mod_description", mod.description)
60+
java {
61+
val requiredJava = when {
62+
stonecutter.eval(stonecutter.current.version, ">=1.20.6") -> JavaVersion.VERSION_21
63+
stonecutter.eval(stonecutter.current.version, ">=1.18") -> JavaVersion.VERSION_17
64+
stonecutter.eval(stonecutter.current.version, ">=1.17") -> JavaVersion.VERSION_16
65+
else -> JavaVersion.VERSION_1_8
4066
}
41-
props.forEach(inputs::property)
42-
filteringCharset = "UTF-8"
43-
filesMatching("fabric.mod.json") {
44-
expand(props)
67+
68+
sourceCompatibility = requiredJava
69+
targetCompatibility = requiredJava
70+
}
71+
72+
stonecutter {
73+
replacements.string {
74+
direction = eval(current.version, ">=1.21.11")
75+
replace("ResourceLocation", "Identifier")
4576
}
4677
}
4778

48-
tasks.withType<JavaCompile>().configureEach {
49-
options.encoding = "UTF-8"
50-
options.release = 21
79+
val currentCommitHash: String by lazy {
80+
Runtime.getRuntime()
81+
.exec("git rev-parse --verify --short HEAD", null, rootDir)
82+
.inputStream.bufferedReader().readText().trim()
5183
}
5284

53-
tasks.jar {
54-
from("LICENSE") {
55-
rename { "${it}_${project.base.archivesName.get()}" }
56-
}
85+
blossom {
86+
replaceToken("@MODID@", mod.id)
87+
replaceToken("@VERSION@", mod.version)
88+
replaceToken("@COMMIT@", currentCommitHash)
5789
}
5890

59-
java {
60-
sourceCompatibility = JavaVersion.VERSION_21
61-
targetCompatibility = JavaVersion.VERSION_21
91+
loom {
92+
silentMojangMappingsLicense()
93+
runConfigs.all {
94+
ideConfigGenerated(stonecutter.current.isActive)
95+
runDir = "../../run"
96+
}
97+
98+
runConfigs.remove(runConfigs["server"]) // Removes server run configs
6299
}
63100

64-
// configure the maven publication
65-
publishing {
66-
publications {
67-
create<MavenPublication>("mavenJava") {
68-
artifactId = mod.archivesBaseName
69-
from(components["java"])
101+
loom.runs {
102+
afterEvaluate {
103+
configureEach {
104+
property("devauth.enabled", "true")
105+
property("devauth.account", "main")
70106
}
71107
}
108+
}
109+
110+
fletchingTable {
111+
lang.create("main") {
112+
patterns.add("assets/${mod.id}/lang/**")
113+
}
114+
}
115+
116+
dependencies {
117+
minecraft("com.mojang:minecraft:${mod.minecraftVersion}")
118+
119+
@Suppress("UnstableApiUsage")
120+
mappings(loom.layered {
121+
officialMojangMappings()
122+
123+
// Parchment mappings (it adds parameter mappings & javadoc)
124+
optionalProp("deps.parchment_version") {
125+
parchment("org.parchmentmc.data:parchment-${mod.minecraftVersion}:$it@zip")
126+
}
127+
})
128+
129+
compileOnly("org.projectlombok:lombok:${deps.lombokVersion}")
130+
annotationProcessor("org.projectlombok:lombok:${deps.lombokVersion}")
131+
modRuntimeOnly("me.djtheredstoner:DevAuth-${loader.name}:${deps.devAuthVersion}")
72132

73-
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
74-
repositories {
133+
if (loader.isFabric) {
134+
modImplementation("net.fabricmc:fabric-loader:${deps.fabricLoaderVersion}")!!
135+
modImplementation("net.fabricmc.fabric-api:fabric-api:${deps.fabricApiVersion}")
136+
optionalProp("deps.modmenu_version") { prop ->
137+
modImplementation("com.terraformersmc:modmenu:$prop") {
138+
exclude(group, "net.fabricmc.fabric-api")
139+
}
140+
}
141+
} else if (loader.isNeoForge) {
142+
"neoForge"("net.neoforged:neoforge:${deps.neoForgeVersion}")
75143
}
76144
}
77145

78-
spotless {
79-
val licenseHeader = rootProject.file("HEADER")
80-
lineEndings = com.diffplug.spotless.LineEnding.UNIX
81-
java {
82-
licenseHeaderFile(licenseHeader)
146+
publishMods {
147+
}
148+
149+
tasks {
150+
processResources {
151+
val props = buildMap {
152+
put("id", mod.id)
153+
put("name", mod.name)
154+
put("version", mod.version)
155+
put("description", mod.description)
156+
put("source", mod.source)
157+
put("issues", mod.issues)
158+
put("license", mod.license)
159+
put("modrinth", mod.modrinth)
160+
put("curseforge", mod.curseforge)
161+
put("discord", mod.discord)
162+
put("minecraft_version_range", mod.minecraftVersionRange)
163+
if (loader.isFabric) {
164+
put("fabric_api_version", deps.fabricApiVersion?.trim())
165+
put("fabric_loader_version", deps.fabricLoaderVersion?.trim())
166+
} else if (loader.isNeoForge) {
167+
put("neoforge_version", deps.neoForgeVersion?.trim())
168+
}
169+
}
170+
171+
props.forEach(inputs::property)
172+
filesMatching("**/lang/en_us.json") { // Defaults description to English translation
173+
expand(props)
174+
filteringCharset = "UTF-8"
175+
}
176+
177+
if (loader.isFabric) {
178+
filesMatching("fabric.mod.json") { expand(props) }
179+
exclude(listOf("META-INF/neoforge.mods.toml"))
180+
}
181+
182+
if (loader.isNeoForge) {
183+
filesMatching("META-INF/neoforge.mods.toml") { expand(props) }
184+
exclude(listOf("fabric.mod.json"))
185+
}
83186
}
84187

85-
kotlin {
86-
licenseHeaderFile(licenseHeader)
188+
// Builds the version into a shared folder in `build/libs/${mod version}/`
189+
register<Copy>("buildAndCollect") {
190+
group = "build"
191+
from(remapJar.map { it.archiveFile }, remapSourcesJar.map { it.archiveFile })
192+
into(rootProject.layout.buildDirectory.file("libs/${project.property("mod.version")}"))
193+
dependsOn("build")
87194
}
88-
}
195+
}
196+
197+
if (stonecutter.current.isActive) {
198+
rootProject.tasks.register("buildActive") {
199+
group = "project"
200+
dependsOn(tasks.named("build"))
201+
}
202+
}
203+
204+
fun <T> optionalProp(property: String, block: (String) -> T?): T? =
205+
findProperty(property)?.toString()?.takeUnless { it.isBlank() }?.let(block)

gradle.properties

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,43 @@
1-
# Done to increase the memory available to gradle.
1+
# Done to increase the memory available to Gradle.
22
org.gradle.jvmargs=-Xmx4G
33
org.gradle.parallel=true
44

55
# IntelliJ IDEA is not yet fully compatible with configuration cache, see: https://github.com/FabricMC/fabric-loom/issues/1349
66
org.gradle.configuration-cache=false
77

8-
# Properties
9-
minecraft_version=1.21.10
10-
loader_version=0.17.3
8+
# Mod properties
9+
mod.name=LightConfig
10+
mod.id=lightconfig
11+
mod.version=1.0-alpha.3
12+
mod.group=btw.lowercase.template
13+
mod.description=A config library.
14+
mod.source=https://github.com/Legacy-Visuals-Project/LightConfig
15+
mod.issues=https://github.com/Legacy-Visuals-Project/LightConfig/issues
16+
mod.license=GPL-3.0-with-linking-exception
17+
mod.modrinth=
18+
mod.curseforge=
19+
mod.discord=https://discord.gg/C8KKgbA8jy
1120

12-
# Mod Properties
13-
mod_version=1.0-alpha.1
14-
mod_description=A config library.
15-
maven_group=org.visuals.legacy.lightconfig
16-
archives_base_name=lightconfig
21+
# Publishing
22+
publish.modrinth=
23+
publish.curseforge=
24+
25+
# Dependencies
26+
deps.fabric_loader_version=0.17.3
27+
28+
deps.devauth_version=1.2.1
29+
deps.lombok_version=1.18.42
30+
deps.mixinconstraints_version=1.1.0
31+
deps.mixinsquared_version=0.2.0
32+
33+
# Build Plugins
34+
# in libs.versions.toml
35+
36+
# Minecraft properties
37+
mod.mc_dep=[VERSIONED]
38+
mod.mc_version=[VERSIONED]
39+
40+
# Versioned
41+
deps.parchment_version=[VERSIONED]
42+
deps.fabric_api_version=[VERSIONED]
43+
deps.neoforge_version=[VERSIONED]

gradle/libs.versions.toml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[versions]
2+
kotlin-jvm = "2.2.0"
3+
loom = "1.11-SNAPSHOT"
4+
publishing = "0.8.4"
5+
blossom = "1.3.2"
6+
ksp = "2.2.0-2.0.2"
7+
fletchingtable = "0.1.0-alpha.13"
8+
spotless = "8.0.0"
9+
10+
[plugins]
11+
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-jvm" }
12+
loom = { id = "dev.architectury.loom", version.ref = "loom" }
13+
publishing = { id = "me.modmuss50.mod-publish-plugin", version.ref = "publishing" }
14+
blossom = { id = "net.kyori.blossom", version.ref = "blossom" }
15+
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
16+
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
17+
fletchingtable-fabric = { id = "dev.kikugie.fletching-table.fabric", version.ref = "fletchingtable" }

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)