From 5d50c3c57137a43af52f23f017c06bda48804c99 Mon Sep 17 00:00:00 2001 From: chrrs <9766338+chrrs@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:18:06 +0100 Subject: [PATCH] feat: support Forge and NeoForge (#24) --- .gitignore | 1 + README.md | 11 +- build.gradle.kts | 136 ++++++++++++------ settings.gradle.kts | 11 +- .../java/me/chrr/scribble/PlatformEntry.java | 54 +++++++ src/main/java/me/chrr/scribble/Scribble.java | 9 +- .../me/chrr/scribble/book/FileChooser.java | 9 +- .../chrr/scribble/compat/ModMenuCompat.java | 4 +- .../chrr/scribble/config/ConfigManager.java | 8 +- src/main/resources/META-INF/mods.toml | 20 +++ .../resources/META-INF/neoforge.mods.toml | 19 +++ src/main/resources/fabric.mod.json | 4 +- src/main/resources/pack.mcmeta | 6 + src/main/resources/scribble.accesswidener | 1 + stonecutter.gradle.kts | 16 ++- .../gradle.properties | 5 +- versions/1.20.1-forge/gradle.properties | 11 ++ .../{1.21 => 1.21-fabric}/gradle.properties | 5 +- versions/1.21-neoforge/gradle.properties | 13 ++ .../gradle.properties | 5 +- versions/1.21.3-neoforge/gradle.properties | 13 ++ 21 files changed, 293 insertions(+), 68 deletions(-) create mode 100644 src/main/java/me/chrr/scribble/PlatformEntry.java create mode 100644 src/main/resources/META-INF/mods.toml create mode 100644 src/main/resources/META-INF/neoforge.mods.toml create mode 100644 src/main/resources/pack.mcmeta rename versions/{1.20.1 => 1.20.1-fabric}/gradle.properties (67%) create mode 100644 versions/1.20.1-forge/gradle.properties rename versions/{1.21 => 1.21-fabric}/gradle.properties (66%) create mode 100644 versions/1.21-neoforge/gradle.properties rename versions/{1.21.3 => 1.21.3-fabric}/gradle.properties (66%) create mode 100644 versions/1.21.3-neoforge/gradle.properties diff --git a/.gitignore b/.gitignore index 7c77fff..83e6380 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .gradle/ build/ run/ +logs/ .idea/ .vscode/ \ No newline at end of file diff --git a/README.md b/README.md index 7de1993..6852f00 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,20 @@ [![Modrinth](https://img.shields.io/modrinth/dt/yXAvIk0x?style=flat-square&logo=modrinth)](https://modrinth.com/mod/scribble) [![CurseForge](https://img.shields.io/curseforge/dt/1051344?style=flat-square&logo=curseforge)](https://curseforge.com/minecraft/mc-mods/scribble) -Read more about it on [Modrinth](https://modrinth.com/mod/scribble) or [CurseForge](https://curseforge.com/minecraft/mc-mods/scribble). +Read more about it on [Modrinth](https://modrinth.com/mod/scribble) +or [CurseForge](https://curseforge.com/minecraft/mc-mods/scribble). ## Project Structure Scribble supports multiple Minecraft versions using [Stonecutter](https://stonecutter.kikugie.dev/). The easiest way to interact with this is by using an IDE such as IntelliJ. To switch between versions, -use the Gradle tasks under the `stonecutter` category. Make sure to switch back to `1.21.3` to commit changes. +use the Gradle tasks under the `stonecutter` category. Make sure to switch back to `1.21.3-fabric` to commit changes. ### Release checklist - Update the version number. - - Change in `gradle.properties`. - - Add an entry in `CHANGELOG.md`. + - Change in `gradle.properties`. + - Add an entry in `CHANGELOG.md`. - Commit and push a new tag. (example: `v1.2.3`) - - Tag name is the version number prefixed by `v`. + - Tag name is the version number prefixed by `v`. - Manually trigger the Publish workflow on GitHub. diff --git a/build.gradle.kts b/build.gradle.kts index 681f6bf..2c149af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,17 +1,25 @@ import me.modmuss50.mpp.ReleaseType plugins { - id("fabric-loom") version "1.7-SNAPSHOT" + id("dev.architectury.loom") version "1.7-SNAPSHOT" id("me.modmuss50.mod-publish-plugin") version "0.5.1" } -fun Project.prop(namespace: String, key: String) = - property("$namespace.$key") as String +fun Project.hasProp(namespace: String, key: String) = hasProperty("$namespace.$key") +fun Project.prop(namespace: String, key: String) = property("$namespace.$key") as String val minecraftVersion = stonecutter.current.version +val loader = loom.platform.get().name.lowercase() group = prop("mod", "group") -version = "${prop("mod", "version")}+mc$minecraftVersion" +version = "${prop("mod", "version")}+mc$minecraftVersion-$loader" + +if (stonecutter.current.isActive) { + rootProject.tasks.register("runActive") { + group = "project" + dependsOn(tasks.named("runClient")) + } +} base { archivesName.set(prop("mod", "name")) @@ -20,62 +28,98 @@ base { loom { accessWidenerPath = rootProject.file("src/main/resources/scribble.accesswidener") - runConfigs["client"].ideConfigGenerated(true) + runConfigs.forEach { it.ideConfigGenerated(false) } runConfigs["client"].runDir = "../../run" - runConfigs["server"].ideConfigGenerated(false) + if (loader == "forge") { + forge.mixinConfig("scribble.mixins.json") + } } repositories { + maven("https://maven.neoforged.net/releases/") maven("https://maven.terraformersmc.com/releases/") maven("https://maven.shedaniel.me/") } dependencies { - fun fabricApiModule(name: String) = - modImplementation(fabricApi.module(name, prop("fabric", "apiVersion"))) - minecraft("com.mojang:minecraft:$minecraftVersion") - mappings("net.fabricmc:yarn:${prop("fabric", "yarnVersion")}:v2") - modImplementation("net.fabricmc:fabric-loader:${prop("fabric", "loaderVersion")}") - include(fabricApiModule("fabric-resource-loader-v0")!!) + // Yarn mappings + @Suppress("UnstableApiUsage") + mappings(loom.layered { + mappings("net.fabricmc:yarn:${prop("fabric", "yarnVersion")}:v2") + + if (hasProp("neoforge", "yarnPatch")) { + mappings("dev.architectury:yarn-mappings-patch-neoforge:${prop("neoforge", "yarnPatch")}") + } + }) + + // Loader dependencies + when (loader) { + "fabric" -> { + fun fabricApiModule(name: String) = + modImplementation(fabricApi.module(name, prop("fabric", "apiVersion"))) + + modImplementation("net.fabricmc:fabric-loader:${prop("fabric", "loaderVersion")}") + include(fabricApiModule("fabric-resource-loader-v0")!!) + } + + "neoforge" -> "neoForge"("net.neoforged:neoforge:${prop("neoforge", "version")}") + "forge" -> "forge"("net.minecraftforge:forge:${prop("forge", "version")}") + } - modCompileOnlyApi("com.terraformersmc:modmenu:${prop("modmenu", "version")}") - modCompileOnlyApi("me.shedaniel.cloth:cloth-config-fabric:${prop("clothconfig", "version")}") + // Third party mod compat dependencies + if (loader == "fabric") modCompileOnly("com.terraformersmc:modmenu:${prop("modmenu", "version")}") + modCompileOnly("me.shedaniel.cloth:cloth-config-$loader:${prop("clothconfig", "version")}") // Test dependencies testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.3") testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.3") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.3") - testImplementation("org.mockito:mockito-core:5.12.0") -} - -// renderButton was changed to renderWidget after 1.20.3 -stonecutter.swap("renderWidget") { - val method = - if (stonecutter.compare(minecraftVersion, "1.20.3") >= 0) "renderWidget" - else "renderButton" - - "protected void $method(DrawContext context, int mouseX, int mouseY, float delta) {" + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.3") } tasks { processResources { // We construct our minecraft dependency string based on the versions provided in gradle.properties - val gameVersions = prop("minecraft", "versions").split(",") + val gameVersions = prop("platform", "versions").split(",") val first = gameVersions.firstOrNull()!! val last = gameVersions.lastOrNull()!! - val minecraftDependency = if (gameVersions.size == 1) first else ">=$first <=$last" - - inputs.property("version", project.version) - filesMatching("fabric.mod.json") { - expand( - "modName" to prop("mod", "name"), - "modVersion" to prop("mod", "version"), - "minecraftDependency" to minecraftDependency - ) + + // Inject the properties into the mod manifest file + if (loader == "fabric") { + inputs.property("version", project.version) + filesMatching("fabric.mod.json") { + expand( + "modVersion" to prop("mod", "version"), + "minecraftDependency" to if (gameVersions.size == 1) first else ">=$first <=$last" + ) + } + + exclude("META-INF/mods.toml") + exclude("META-INF/neoforge.mods.toml") + } else if (loader == "forge" || loader == "neoforge") { + filesMatching("META-INF/*mods.toml") { + expand( + "modVersion" to prop("mod", "version"), + "minecraftDependency" to if (gameVersions.size == 1) "[$first]" else "[$first, $last]" + ) + } + + exclude("fabric.mod.json") + + if (loader == "neoforge" && stonecutter.eval(minecraftVersion, ">=1.20.5")) { + exclude("META-INF/mods.toml") + } else { + exclude("META-INF/neoforge.mods.toml") + } + } + } + + if (loader == "neoforge" || loader == "forge") { + remapJar { + atAccessWideners.add("scribble.accesswidener") } } @@ -94,29 +138,41 @@ tasks { } java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + val version = + if (stonecutter.eval(minecraftVersion, ">=1.20.6")) JavaVersion.VERSION_21 + else JavaVersion.VERSION_17 + sourceCompatibility = version + targetCompatibility = version } publishMods { - displayName.set("${prop("mod", "version")} - Fabric $minecraftVersion") + val displayLoader = when (loader) { + "forge" -> "Forge" + "fabric" -> "Fabric" + "neoforge" -> "NeoForge" + else -> loader + } + + displayName.set("${prop("mod", "version")} - $displayLoader $minecraftVersion") file.set(tasks.remapJar.get().archiveFile) changelog.set(providers.environmentVariable("CHANGELOG")) type.set(if (prop("mod", "version").contains("beta")) ReleaseType.BETA else ReleaseType.STABLE) - modLoaders.addAll("fabric", "quilt") + modLoaders.addAll(prop("platform", "loaders").split(",")) - val gameVersions = prop("minecraft", "versions").split(",") + val gameVersions = prop("platform", "versions").split(",") modrinth { projectId.set(prop("modrinth", "id")) accessToken.set(providers.environmentVariable("MODRINTH_TOKEN")) minecraftVersions.addAll(gameVersions) + optional("cloth-config") } curseforge { projectId.set(prop("curseforge", "id")) accessToken.set(providers.environmentVariable("CURSEFORGE_TOKEN")) minecraftVersions.addAll(gameVersions) + optional("cloth-config") } } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 3ce68ce..374bca8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,8 @@ import dev.kikugie.stonecutter.StonecutterSettings pluginManagement { repositories { maven("https://maven.fabricmc.net/") + maven("https://maven.architectury.dev") + maven("https://maven.neoforged.net/releases/") maven("https://maven.kikugie.dev/releases") gradlePluginPortal() } @@ -14,8 +16,13 @@ plugins { extensions.configure { shared { - versions("1.20.1", "1.21", "1.21.3") - vcsVersion = "1.21.3" + fun add(version: String, vararg loaders: String) = + loaders.forEach { vers("$version-$it", version) } + + add("1.20.1", "fabric", "forge") + add("1.21", "fabric", "neoforge") + add("1.21.3", "fabric", "neoforge") + vcsVersion = "1.21.3-fabric" } kotlinController = true diff --git a/src/main/java/me/chrr/scribble/PlatformEntry.java b/src/main/java/me/chrr/scribble/PlatformEntry.java new file mode 100644 index 0000000..e8c633d --- /dev/null +++ b/src/main/java/me/chrr/scribble/PlatformEntry.java @@ -0,0 +1,54 @@ +package me.chrr.scribble; + +//? if fabric { + +import net.fabricmc.api.ClientModInitializer; + +@SuppressWarnings("unused") +public class PlatformEntry implements ClientModInitializer { + @Override + public void onInitializeClient() { + Scribble.init(); + } +} +//?} elif neoforge { + +/*import me.chrr.scribble.compat.ClothConfigScreenFactory; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; + +@Mod(value = Scribble.MOD_ID, dist = Dist.CLIENT) +public class PlatformEntry { + public PlatformEntry(ModContainer mod) { + Scribble.init(); + + if (ModList.get().isLoaded("cloth_config")) { + mod.registerExtensionPoint(IConfigScreenFactory.class, + (container, parent) -> ClothConfigScreenFactory.create(parent)); + } + } +} +*///?} elif forge { + +/*import me.chrr.scribble.compat.ClothConfigScreenFactory; +import net.minecraftforge.client.ConfigScreenHandler; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.loading.FMLLoader; + +@Mod(Scribble.MOD_ID) +public class PlatformEntry { + public PlatformEntry() { + Scribble.init(); + + if (FMLLoader.getDist().isClient() && ModList.get().isLoaded("cloth_config")) { + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, + () -> new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> ClothConfigScreenFactory.create(parent))); + } + } +} +*///?} \ No newline at end of file diff --git a/src/main/java/me/chrr/scribble/Scribble.java b/src/main/java/me/chrr/scribble/Scribble.java index 8c45fd0..eff7978 100644 --- a/src/main/java/me/chrr/scribble/Scribble.java +++ b/src/main/java/me/chrr/scribble/Scribble.java @@ -1,21 +1,19 @@ package me.chrr.scribble; import me.chrr.scribble.config.ConfigManager; -import net.fabricmc.api.ClientModInitializer; import net.minecraft.util.Identifier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.IOException; -public class Scribble implements ClientModInitializer { +public class Scribble { public static final String MOD_ID = "scribble"; public static Logger LOGGER = LogManager.getLogger(); public static final ConfigManager CONFIG_MANAGER = new ConfigManager(); - @Override - public void onInitializeClient() { + public static void init() { try { CONFIG_MANAGER.load(); } catch (IOException e) { @@ -28,9 +26,6 @@ public static int getBookScreenYOffset(int screenHeight) { } public static Identifier id(String path) { - //? if >=1.21 { return Identifier.of(MOD_ID, path); - //?} else - /*return new Identifier(MOD_ID, path);*/ } } diff --git a/src/main/java/me/chrr/scribble/book/FileChooser.java b/src/main/java/me/chrr/scribble/book/FileChooser.java index 776afd7..171032d 100644 --- a/src/main/java/me/chrr/scribble/book/FileChooser.java +++ b/src/main/java/me/chrr/scribble/book/FileChooser.java @@ -1,7 +1,6 @@ package me.chrr.scribble.book; import me.chrr.scribble.Scribble; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.util.Language; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; @@ -61,7 +60,13 @@ public static void chooseBook(boolean save, Consumer pathConsumer) { } public static Path createAndGetBookDirectory() { - Path gameDir = FabricLoader.getInstance().getGameDir(); + //? if fabric { + Path gameDir = net.fabricmc.loader.api.FabricLoader.getInstance().getGameDir(); + //?} elif neoforge { + /*Path gameDir = net.neoforged.fml.loading.FMLPaths.GAMEDIR.get(); + *///?} elif forge + /*Path gameDir = net.minecraftforge.fml.loading.FMLPaths.GAMEDIR.get();*/ + Path booksDir = gameDir.resolve("books"); try { diff --git a/src/main/java/me/chrr/scribble/compat/ModMenuCompat.java b/src/main/java/me/chrr/scribble/compat/ModMenuCompat.java index 3a907fa..ee52c80 100644 --- a/src/main/java/me/chrr/scribble/compat/ModMenuCompat.java +++ b/src/main/java/me/chrr/scribble/compat/ModMenuCompat.java @@ -1,5 +1,6 @@ package me.chrr.scribble.compat; +//? if fabric { import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; import net.fabricmc.loader.api.FabricLoader; @@ -13,4 +14,5 @@ public ConfigScreenFactory getModConfigScreenFactory() { return null; } } -} \ No newline at end of file +} +//?} \ No newline at end of file diff --git a/src/main/java/me/chrr/scribble/config/ConfigManager.java b/src/main/java/me/chrr/scribble/config/ConfigManager.java index d10ed0d..70e22dc 100644 --- a/src/main/java/me/chrr/scribble/config/ConfigManager.java +++ b/src/main/java/me/chrr/scribble/config/ConfigManager.java @@ -2,7 +2,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import net.fabricmc.loader.api.FabricLoader; import java.io.IOException; import java.nio.file.Files; @@ -32,6 +31,11 @@ public void save() throws IOException { } private Path getConfigPath() { - return FabricLoader.getInstance().getConfigDir().resolve("scribble.json"); + //? if fabric { + return net.fabricmc.loader.api.FabricLoader.getInstance().getConfigDir().resolve("scribble.json"); + //?} else if neoforge { + /*return net.neoforged.fml.loading.FMLPaths.CONFIGDIR.get().resolve("Scribble.json"); + *///?} else + /*return net.minecraftforge.fml.loading.FMLPaths.CONFIGDIR.get().resolve("config.json");*/ } } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..e469d02 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,20 @@ +modLoader = "javafml" +loaderVersion = "[1,)" +issueTrackerURL = "https://github.com/chrrs/scribble/issues" +license = "MIT" + +[[mods]] +modId = "scribble" +version = "${modVersion}" +displayName = "Scribble" +description = "Expertly edit your books with rich formatting options, page utilities and more!" +authors = "chrrrs" +logoFile = "assets/scribble/icon.png" + +[[mixins]] +config = "scribble.mixins.json" + +[[dependencies.scribble]] +modId = "minecraft" +mandatory = true +versionRange = "${minecraftDependency}" \ No newline at end of file diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..8441c21 --- /dev/null +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,19 @@ +modLoader = "javafml" +loaderVersion = "[1,)" +issueTrackerURL = "https://github.com/chrrs/scribble/issues" +license = "MIT" + +[[mods]] +modId = "scribble" +version = "${modVersion}" +displayName = "Scribble" +description = "Expertly edit your books with rich formatting options, page utilities and more!" +authors = "chrrrs" +logoFile = "assets/scribble/icon.png" + +[[mixins]] +config = "scribble.mixins.json" + +[[dependencies.scribble]] +modId = "minecraft" +versionRange = "${minecraftDependency}" \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index a928fc8..86c9cdf 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "id": "scribble", "version": "${modVersion}", - "name": "${modName}", + "name": "Scribble", "description": "Expertly edit your books with rich formatting options, page utilities and more!", "authors": [ "chrrrs" @@ -24,7 +24,7 @@ "environment": "client", "entrypoints": { "client": [ - "me.chrr.scribble.Scribble" + "me.chrr.scribble.PlatformEntry" ], "modmenu": [ "me.chrr.scribble.compat.ModMenuCompat" diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..9718482 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Scribble", + "pack_format": 6 + } +} \ No newline at end of file diff --git a/src/main/resources/scribble.accesswidener b/src/main/resources/scribble.accesswidener index b8fb878..44b9408 100644 --- a/src/main/resources/scribble.accesswidener +++ b/src/main/resources/scribble.accesswidener @@ -6,6 +6,7 @@ accessible class net/minecraft/client/gui/screen/ingame/BookEditScreen$Line accessible field net/minecraft/client/gui/screen/ingame/BookEditScreen$PageContent lines [Lnet/minecraft/client/gui/screen/ingame/BookEditScreen$Line; accessible field net/minecraft/client/gui/screen/ingame/BookEditScreen$PageContent lineStarts [I +extendable class net/minecraft/client/gui/screen/ingame/BookEditScreen$PageContent accessible method net/minecraft/client/gui/screen/ingame/BookEditScreen$Position (II)V diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 7c45cea..46b3098 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -2,7 +2,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "1.21.3" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.3-fabric" /* [SC] DO NOT EDIT */ // Read the versions from CHISELED_VERSIONS, and only build / publish those versions. // If it's blank, we build / publish all available versions. @@ -28,3 +28,17 @@ stonecutter registerChiseled tasks.register("chiseledPublish", stonecutter.chise group = "project" ofTask("publishMods") } + +stonecutter configureEach { + // Define loader constants + val loader = current.project.split("-").last() + consts(listOf("fabric", "forge", "neoforge").map { it to (loader == it) }) + + // renderButton was changed to renderWidget after 1.20.3 + swap("renderWidget") { + val method = + if (stonecutter.eval(current.version, ">=1.20.3")) "renderWidget" + else "renderButton" + "protected void $method(DrawContext context, int mouseX, int mouseY, float delta) {" + } +} diff --git a/versions/1.20.1/gradle.properties b/versions/1.20.1-fabric/gradle.properties similarity index 67% rename from versions/1.20.1/gradle.properties rename to versions/1.20.1-fabric/gradle.properties index bd02945..4044b44 100644 --- a/versions/1.20.1/gradle.properties +++ b/versions/1.20.1-fabric/gradle.properties @@ -1,5 +1,6 @@ -# Minecraft Properties -minecraft.versions=1.20,1.20.1 +loom.platform=fabric +platform.loaders=fabric,quilt +platform.versions=1.20,1.20.1 # Fabric Properties # check these on https://modmuss50.me/fabric.html diff --git a/versions/1.20.1-forge/gradle.properties b/versions/1.20.1-forge/gradle.properties new file mode 100644 index 0000000..99564b5 --- /dev/null +++ b/versions/1.20.1-forge/gradle.properties @@ -0,0 +1,11 @@ +loom.platform=forge +platform.loaders=forge,neoforge +platform.versions=1.20,1.20.1 + +# Forge Properties +# check these on https://files.minecraftforge.net/net/minecraftforge/forge/ +forge.version=1.20.1-47.2.23 + +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +fabric.yarnVersion=1.20.1+build.10 \ No newline at end of file diff --git a/versions/1.21/gradle.properties b/versions/1.21-fabric/gradle.properties similarity index 66% rename from versions/1.21/gradle.properties rename to versions/1.21-fabric/gradle.properties index 228f5e0..88b93cd 100644 --- a/versions/1.21/gradle.properties +++ b/versions/1.21-fabric/gradle.properties @@ -1,5 +1,6 @@ -# Minecraft Properties -minecraft.versions=1.21,1.21.1 +loom.platform=fabric +platform.loaders=fabric,quilt +platform.versions=1.21,1.21.1 # Fabric Properties # check these on https://modmuss50.me/fabric.html diff --git a/versions/1.21-neoforge/gradle.properties b/versions/1.21-neoforge/gradle.properties new file mode 100644 index 0000000..e864d3b --- /dev/null +++ b/versions/1.21-neoforge/gradle.properties @@ -0,0 +1,13 @@ +loom.platform=neoforge +platform.loaders=neoforge +platform.versions=1.21,1.21.1 + +# NeoForge Properties +# check these on https://projects.neoforged.net/neoforged/neoforge +# check mappings patch version on https://maven.architectury.dev/dev/architectury/yarn-mappings-patch-neoforge/ +neoforge.version=21.0.143 +neoforge.yarnPatch=1.21+build.4 + +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +fabric.yarnVersion=1.21+build.2 \ No newline at end of file diff --git a/versions/1.21.3/gradle.properties b/versions/1.21.3-fabric/gradle.properties similarity index 66% rename from versions/1.21.3/gradle.properties rename to versions/1.21.3-fabric/gradle.properties index 6c287a7..e620e69 100644 --- a/versions/1.21.3/gradle.properties +++ b/versions/1.21.3-fabric/gradle.properties @@ -1,5 +1,6 @@ -# Minecraft Properties -minecraft.versions=1.21.2,1.21.3 +loom.platform=fabric +platform.loaders=fabric,quilt +platform.versions=1.21.2,1.21.3 # Fabric Properties # check these on https://modmuss50.me/fabric.html diff --git a/versions/1.21.3-neoforge/gradle.properties b/versions/1.21.3-neoforge/gradle.properties new file mode 100644 index 0000000..80cb446 --- /dev/null +++ b/versions/1.21.3-neoforge/gradle.properties @@ -0,0 +1,13 @@ +loom.platform=neoforge +platform.loaders=neoforge +platform.versions=1.21.2,1.21.3 + +# NeoForge Properties +# check these on https://projects.neoforged.net/neoforged/neoforge +# check mappings patch version on https://maven.architectury.dev/dev/architectury/yarn-mappings-patch-neoforge/ +neoforge.version=21.3.6-beta +neoforge.yarnPatch=1.21+build.4 + +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +fabric.yarnVersion=1.21.3+build.2 \ No newline at end of file