Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1plugins {
2 id("net.neoforged.moddev.legacyforge")
3 id("dev.kikugie.postprocess.jsonlang")
4 id("me.modmuss50.mod-publish-plugin")
5 id("maven-publish")
6}
7
8val minecraft = stonecutter.current.version
9val mcVersion = stonecutter.current.project.substringBeforeLast('-')
10version = "${property("mod.version")}+${property("deps.minecraft")}"
11if (property("mod.test_build") != "0") version = "$version-tb${property("mod.test_build")}"
12
13tasks.named<ProcessResources>("processResources") {
14 fun prop(name: String) = project.property(name) as String
15
16 val props = HashMap<String, String>().apply {
17 this["version"] = "$version"
18 this["minecraft"] = prop("mod.mc_dep_forge")
19 }
20
21 filesMatching(listOf("neoforge.mod.json", "META-INF/neoforge.mods.toml", "META-INF/mods.toml")) {
22 expand(props)
23 }
24}
25
26version = "$version-forge"
27base.archivesName = property("mod.id") as String
28
29jsonlang {
30 languageDirectories = listOf("assets/${property("mod.id")}/lang")
31 prettyPrint = true
32}
33
34
35repositories {
36 maven ( "https://maven.minecraftforge.net" ) {
37 name = "Minecraft Forge"
38 }
39 maven {
40 name = "Parchment Mappings"
41 url = uri("https://maven.parchmentmc.org")
42 content {
43 includeGroupAndSubgroups("org.parchmentmc")
44 }
45 }
46 maven {
47 name = "Modrinth"
48 url = uri("https://api.modrinth.com/maven")
49 content {
50 includeGroupAndSubgroups("maven.modrinth")
51 }
52 }
53 maven {
54 name = "Terraformers (Mod Menu)"
55 url = uri("https://maven.terraformersmc.com/releases/")
56 content {
57 includeGroupAndSubgroups("com.terraformersmc")
58 includeGroupAndSubgroups("dev.emi")
59 }
60 }
61 maven {
62 name = "Architectury"
63 url = uri("https://maven.architectury.dev/")
64 content {
65 includeGroupAndSubgroups("dev.architectury")
66 includeGroupAndSubgroups("me.shedaniel")
67 }
68 }
69 maven {
70 name = "Jitpack (DimLib)"
71 url = uri("https://jitpack.io")
72 content {
73 includeGroupAndSubgroups("com.github.iPortalTeam")
74 }
75 }
76 maven {
77 name = "CC: Tweaked"
78 url = uri("https://maven.squiddev.cc")
79 content {
80 includeGroupAndSubgroups("cc.tweaked")
81 }
82 }
83 maven {
84 name = "Fabricators of Create (Snapshots)"
85 url = uri("https://mvn.devos.one/snapshots")
86 content {
87 includeGroupAndSubgroups("net.createmod")
88 includeGroupAndSubgroups("dev.engine-room")
89 includeGroupAndSubgroups("io.github.fabricators_of_create")
90 }
91 }
92 maven {
93 name = "Fabricators of Create (Releases)"
94 url = uri("https://mvn.devos.one/releases")
95 content {
96 includeGroupAndSubgroups("net.createmod")
97 includeGroupAndSubgroups("dev.engine-room")
98 includeGroupAndSubgroups("io.github.fabricators_of_create")
99 }
100 }
101 maven {
102 name = "Create, Ponder, Flywheel"
103 url = uri("https://maven.createmod.net")
104 content {
105 includeGroupAndSubgroups("net.createmod")
106 includeGroupAndSubgroups("dev.engine-room")
107 includeGroupAndSubgroups("com.simibubi")
108 }
109 }
110 maven {
111 name = "Fuzs Mod Resources"
112 url = uri("https://raw.githubusercontent.com/Fuzss/modresources/main/maven/")
113 content {
114 includeGroupAndSubgroups("fuzs")
115 }
116 }
117 maven {
118 name = "Registrate"
119 url = uri("https://maven.ithundxr.dev/mirror")
120 content {
121 includeGroupAndSubgroups("com.tterrag")
122 }
123 }
124 maven {
125 name = "Sinytra (FFAPI)"
126 url = uri("https://maven.su5ed.dev/releases")
127 content {
128 includeGroupAndSubgroups("dev.su5ed")
129 }
130 }
131 maven {
132 name = "Sinytra"
133 url = uri("https://maven.su5ed.dev/releases")
134 content {
135 includeGroupAndSubgroups("org.sinytra")
136 includeGroupAndSubgroups("dev.su5ed")
137 }
138 }
139}
140
141legacyForge {
142 version = property("deps.forge") as String
143 validateAccessTransformers = true
144
145 if (hasProperty("deps.parchment")) parchment {
146 val (mc, ver) = (property("deps.parchment") as String).split(':')
147 mappingsVersion = ver
148 minecraftVersion = mc
149 }
150
151 runs {
152 register("client") {
153 gameDirectory = file("run/")
154 client()
155 }
156 register("server") {
157 gameDirectory = file("run/")
158 server()
159 }
160 }
161
162 mods {
163 register(property("mod.id") as String) {
164 sourceSet(sourceSets["main"])
165 }
166 }
167 sourceSets["main"].resources.srcDir("src/main/generated")
168}
169
170
171dependencies {
172 modImplementation("dev.architectury:architectury-forge:${property("deps.architectury")}")
173 modImplementation("me.shedaniel.cloth:cloth-config-forge:${property("deps.cloth")}")
174 modImplementation("cc.tweaked:cc-tweaked-${property("deps.minecraft")}-forge:${property("deps.cct")}")
175 modCompileOnly("dev.emi:emi-forge:${property("deps.emi")}+${property("deps.minecraft")}:api")
176 modRuntimeOnly("dev.emi:emi-forge:${property("deps.emi")}+${property("deps.minecraft")}")
177
178
179 // Create
180 modCompileOnly("com.simibubi.create:create-${property("deps.minecraft")}:${property("deps.create")}:slim") { isTransitive = false }
181 modImplementation("net.createmod.ponder:Ponder-Forge-${property("deps.minecraft")}:${property("deps.ponder")}")
182 modCompileOnly("dev.engine-room.flywheel:flywheel-forge-api-${property("deps.minecraft")}:${property("deps.flywheel")}")
183 modRuntimeOnly("dev.engine-room.flywheel:flywheel-forge-${property("deps.minecraft")}:${property("deps.flywheel")}")
184 modImplementation("com.tterrag.registrate:Registrate:${property("deps.registrate")}")
185
186 // https://maven.su5ed.dev/#/releases/dev/su5ed/sinytra/fabric-api
187 // The Forge backport bundles relevant modules of FFAPI instead of requiring the entire mod.
188 modImplementation("dev.su5ed.sinytra:fabric-loader:2.7.11+0.16.5+1.20.1")
189 modImplementation("dev.su5ed.sinytra.fabric-api:fabric-api-base:0.4.32+ef105b4977")
190 modImplementation("dev.su5ed.sinytra.fabric-api:fabric-networking-api-v1:1.3.14+fb7c822677")
191 modImplementation("dev.su5ed.sinytra.fabric-api:fabric-resource-loader-v0:0.11.12+4b4151c077")
192 jarJar("dev.su5ed.sinytra:fabric-loader:2.7.11+0.16.5+1.20.1")
193 jarJar("dev.su5ed.sinytra.fabric-api:fabric-api-base:0.4.32+ef105b4977")
194 jarJar("dev.su5ed.sinytra.fabric-api:fabric-networking-api-v1:1.3.14+fb7c822677")
195 jarJar("dev.su5ed.sinytra.fabric-api:fabric-resource-loader-v0:0.11.12+4b4151c077")
196
197
198 annotationProcessor("org.spongepowered:mixin:0.8.5:processor")
199 annotationProcessor("io.github.llamalad7:mixinextras-common:0.5.0")
200 compileOnly("io.github.llamalad7:mixinextras-common:0.5.0")
201 implementation("io.github.llamalad7:mixinextras-forge:0.5.0")
202 jarJar("io.github.llamalad7:mixinextras-forge:0.5.0")
203 implementation("org.jspecify:jspecify:1.0.0")
204}
205
206
207mixin {
208 add(sourceSets["main"], "infinity.refmap.json")
209 config("infinity-forge.mixins.json")
210}
211
212tasks.named<Jar>("jar") {
213 manifest {
214 attributes(
215 "MixinConfigs" to "infinity-forge.mixins.json"
216 )
217 }
218}
219
220tasks.register<Sync>("syncDatagen") {
221 from(project(":${minecraft}-fabric").tasks.named("runDatagen"))
222 into(file("src/main/generated/"))
223}
224
225tasks {
226 processResources {
227 exclude("**/fabric.mod.json", "**/*.accesswidener", "**/neoforge.mods.toml")
228 exclude("**/config/21")
229 exclude("**/config/22")
230 }
231
232 named("createMinecraftArtifacts") {
233 dependsOn("stonecutterGenerate")
234 }
235
236 register<Copy>("buildAndCollect") {
237 group = "build"
238 from(jar.map { it.archiveFile })
239 into(rootProject.layout.buildDirectory.file("libs/${project.property("mod.version")}"))
240 dependsOn("build")
241 }
242}
243
244java {
245 withSourcesJar()
246 val javaCompat = if (stonecutter.eval(stonecutter.current.version, ">=1.20.5")) {
247 JavaVersion.VERSION_21
248 } else {
249 JavaVersion.VERSION_17
250 }
251 sourceCompatibility = javaCompat
252 targetCompatibility = javaCompat
253}
254
255val additionalVersionsStr = findProperty("publish.additionalVersions") as String?
256val additionalVersions: List<String> = additionalVersionsStr
257 ?.split(",")
258 ?.map { it.trim() }
259 ?.filter { it.isNotEmpty() }
260 ?: emptyList()
261
262publishMods {
263 file = (tasks.named<org.gradle.jvm.tasks.Jar>("reobfJar").map { it.archiveFile.get() })
264 additionalFiles.from(tasks.named<org.gradle.jvm.tasks.Jar>("sourcesJar").map { it.archiveFile.get() })
265
266 type = STABLE
267 displayName = "${property("mod.name")} ${property("mod.version")} for ${stonecutter.current.version} Forge"
268 version = "${property("mod.version")}+${property("deps.minecraft")}-forge"
269 changelog = provider { rootProject.file("CHANGELOG-LATEST.md").readText() }
270 modLoaders.add("forge")
271
272 modrinth {
273 projectId = property("publish.modrinth") as String
274 accessToken = env.MODRINTH_API_KEY.orNull()
275 minecraftVersions.add(stonecutter.current.version)
276 minecraftVersions.addAll(additionalVersions)
277 requires("architectury-api")
278 requires("cloth-config")
279 if (hasProperty("deps.emi")) {
280 optional("emi")
281 }
282 if (hasProperty("deps.rrv")) {
283 optional("rrv")
284 }
285
286 }
287
288 curseforge {
289 projectId = property("publish.curseforge") as String
290 accessToken = env.CURSEFORGE_API_KEY.orNull()
291 minecraftVersions.add(stonecutter.current.version)
292 minecraftVersions.addAll(additionalVersions)
293 requires("architectury-api")
294 requires("cloth-config")
295 if (hasProperty("deps.emi")) {
296 optional("emi")
297 }
298 if (hasProperty("deps.rrv")) {
299 optional("rrv")
300 }
301 }
302}
303
304publishing {
305 publications {
306 create<MavenPublication>("maven") {
307 groupId = "net.lerariemann"
308 artifactId = "infinity"
309 version = "${property("mod.version")}+${property("deps.minecraft")}"
310
311 from(components["java"])
312 }
313 }
314}