diff options
author | isXander <xander@isxander.dev> | 2024-04-23 18:07:18 +0100 |
---|---|---|
committer | isXander <xander@isxander.dev> | 2024-04-23 18:07:18 +0100 |
commit | e1d95961881b72f40d8c12d2cdcaeee4d9e6b31b (patch) | |
tree | 8b826cb20fa429ec6502456bcc4c1e07928f8cd2 | |
parent | 66fd6b3fac8c7893037934cd0af0925c59114516 (diff) | |
download | YetAnotherConfigLib-e1d95961881b72f40d8c12d2cdcaeee4d9e6b31b.tar.gz YetAnotherConfigLib-e1d95961881b72f40d8c12d2cdcaeee4d9e6b31b.tar.bz2 YetAnotherConfigLib-e1d95961881b72f40d8c12d2cdcaeee4d9e6b31b.zip |
Last minute 1.20.5 changes
Add changelog
Fix the mods.toml
Re-add fix from 3.3.3
VCS stonecutter version is now 1.20.5
22 files changed, 149 insertions, 102 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index 5f6e0f8..e4de603 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,6 @@ val isForge = loader == "forge" val isForgeLike = isNeoforge || isForge val mcVersion = stonecutter.current.version -val mcDep = findProperty("fmj.mcDep")?.toString() group = "dev.isxander" val versionWithoutMC = "3.4.0" @@ -70,6 +69,21 @@ loom { source(testmod) ideConfigGenerated(true) runDir("../../run") + + if (isForgeLike) { + mods { + register("main") { + sourceSet(sourceSets.main.get()) + } + register("testMod") { + sourceSet(testmod) + } + } + } + + if (isForge) { + programArgs("-mixin.config", "yacl-test.mixins.json") + } } } @@ -103,7 +117,8 @@ repositories { } dependencies { - fun Dependency?.jij(): Dependency? = include(this!!) + fun Dependency?.jij() = this?.let(::include) + fun Dependency?.forgeRuntime() = this?.takeIf { isForgeLike }?.let { "forgeRuntimeLibrary"(it) } minecraft("com.mojang:minecraft:${if (mcVersion.contains("beta")) "1.20.5-pre2" else mcVersion}") @@ -151,14 +166,14 @@ dependencies { "common:common-io", "common:common-image" ).forEach { - implementation("com.twelvemonkeys.$it:${findProperty("deps.imageio")}").jij() + implementation("com.twelvemonkeys.$it:${findProperty("deps.imageio")}").jij().forgeRuntime() } listOf( "json", "gson" ).forEach { - implementation("org.quiltmc.parsers:$it:${findProperty("deps.quiltParsers")}").jij() + implementation("org.quiltmc.parsers:$it:${findProperty("deps.quiltParsers")}").jij().forgeRuntime() } "testmodImplementation"(sourceSets.main.get().output) @@ -171,23 +186,36 @@ java { tasks { processResources { - val props = mutableMapOf( - "id" to findProperty("modId"), - "group" to project.group, - "name" to findProperty("modName"), - "description" to findProperty("modDescription"), - "version" to project.version, - "github" to findProperty("githubProject"), - "mc" to mcDep - ) - optionalProp("fmj.yaclDep") { - props["yacl"] = it + val props = buildMap { + put("id", findProperty("modId")) + put("group", project.group) + put("name", findProperty("modName")) + put("description", findProperty("modDescription")) + put("version", project.version) + put("github", findProperty("githubProject")) + + if (isFabric) { + put("mc", findProperty("fmj.mcDep")) + } + + if (isForgeLike) { + put("mc", findProperty("modstoml.mcDep")) + put("loaderVersion", findProperty("modstoml.loaderVersion")) + put("forgeId", findProperty("modstoml.forgeId")) + put("forgeConstraint", findProperty("modstoml.forgeConstraint")) + } } props.forEach(inputs::property) - filesMatching("fabric.mod.json") { expand(props) } - filesMatching("META-INF/mods.toml") { expand(props) } + if (isFabric) { + filesMatching("fabric.mod.json") { expand(props) } + exclude("META-INF/mods.toml") + } + if (isForgeLike) { + filesMatching("META-INF/mods.toml") { expand(props) } + exclude("fabric.mod.json") + } } val releaseMod by registering { @@ -221,7 +249,7 @@ publishMods { displayName.set("YetAnotherConfigLib $versionWithoutMC for MC $mcVersion") file.set(tasks.remapJar.get().archiveFile) changelog.set( - rootProject.file("changelogs/${versionWithoutMC}.md") + rootProject.file("changelog.md") .takeIf { it.exists() } ?.readText() ?: "No changelog provided." diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..eabe152 --- /dev/null +++ b/changelog.md @@ -0,0 +1,43 @@ +# YetAnotherConfigLib 3.4.0 + +This build supports the following versions: +- Fabric 1.20.1 +- Fabric 1.20.4 +- Fabric 1.20.5 +- Forge 1.20.1 +- NeoForge 1.20.4 + +## For developers... + +This is the first build which uses a new build toolchain to support multiple minecraft versions in the same codebase. +With this change, the artifact of the mod has changed. + +```groovy +modImplementation "dev.isxander:yet-another-config-lib:{modversion}+{mcversion}-{loader}" +// for example... +modImplementation "dev.isxander:yet-another-config-lib:3.4.0+1.20.1-fabric" +``` + +If you are using YACL in an architectury project (one with a common subproject), you will from now on depend on +the fabric version of YACL. There is no longer any common artifact. I don't believe there to be any issues with doing it +like this. + +## Additions + +- New colour picker widget by [Superkat32](https://github.com/isXander/YetAnotherConfigLib/pull/140) + - This works with existing colour options. + +![Colour picker example](https://i.imgur.com/G6Yx6RU.png) + +- Added a custom tab API so categories can provide their own GUI, instead of YACL options. + - Mod developers can make their category class implement `CustomTabProvider`. Javadoc is available. +- Add a new Kotlin DSL for creating your YACL UIs. This is a wrapper on top of the java builder interface providing extra functionality for Kotlin users. + - YACL does not provide any kotlin libraries, nor does it depend on them. If you would like to use this DSL, make sure your own mod depends on your loader's Kotlin mod. + - This is included in the main artifact. You don't need additional dependencies. + - An example usage can be found [in the testmod](https://github.com/isXander/YetAnotherConfigLib/blob/multiversion/dev/src/testmod/kotlin/dev/isxander/yacl3/test/DslTest.kt) +- Improved the backend of dropdown controllers by [Crendgrim](https://github.com/isXander/YetAnotherConfigLib/pull/162) + +## Bug Fixes + +- Fix GIFs not being preloaded in the resource reloader + diff --git a/common/src/main/java/dev/isxander/yacl3/platform/YACLConfig.java b/common/src/main/java/dev/isxander/yacl3/platform/YACLConfig.java deleted file mode 100644 index 0d14b41..0000000 --- a/common/src/main/java/dev/isxander/yacl3/platform/YACLConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.isxander.yacl3.platform; - -import dev.isxander.yacl3.config.v2.api.ConfigClassHandler; -import dev.isxander.yacl3.config.v2.api.SerialEntry; -import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; - -public class YACLConfig { - public static final ConfigClassHandler<YACLConfig> HANDLER = ConfigClassHandler.createBuilder(YACLConfig.class) - .id(YACLPlatform.rl("config")) - .serializer(config -> GsonConfigSerializerBuilder.create(config) - .setPath(YACLPlatform.getConfigDir().resolve("yacl.json5")) - .setJson5(true) - .build()) - .build(); - - @SerialEntry - public boolean showColorPickerIndicator = true; -} diff --git a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png b/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png Binary files differdeleted file mode 100644 index 1d11f72..0000000 --- a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png +++ /dev/null diff --git a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png.mcmeta b/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png.mcmeta deleted file mode 100644 index 20d1be9..0000000 --- a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/colorpicker.png.mcmeta +++ /dev/null @@ -1,10 +0,0 @@ -{ - "gui": { - "scaling": { - "type": "nine_slice", - "width": 236, - "height": 34, - "border": 3 - } - } -} diff --git a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png b/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png Binary files differdeleted file mode 100644 index 0a803ef..0000000 --- a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png +++ /dev/null diff --git a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png.mcmeta b/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png.mcmeta deleted file mode 100644 index 9d21305..0000000 --- a/common/src/main/resources/assets/yet_another_config_lib/textures/gui/sprites/controller/transparent.png.mcmeta +++ /dev/null @@ -1,10 +0,0 @@ -{ - "gui": { - "scaling": { - "type": "tile", - "width": 7, - "height": 7, - "border": 3 - } - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 0baa945..184e591 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,7 +28,7 @@ extensions.configure<StonecutterSettings> { mc("1.20.4", loaders = listOf("fabric", "neoforge")) mc("1.20.1", loaders = listOf("fabric", "forge")) - mc("1.20.5-beta.2", name = "1.20.5-pre2", loaders = listOf("fabric")) + mc("1.20.5", loaders = listOf("fabric")) } create(rootProject) } diff --git a/src/main/java/dev/isxander/yacl3/config/GsonConfigInstance.java b/src/main/java/dev/isxander/yacl3/config/GsonConfigInstance.java index c47afe2..83a0b1c 100644 --- a/src/main/java/dev/isxander/yacl3/config/GsonConfigInstance.java +++ b/src/main/java/dev/isxander/yacl3/config/GsonConfigInstance.java @@ -68,11 +68,11 @@ public class GsonConfigInstance<T> extends ConfigInstance<T> { this.path = path; this.gson = builder .setExclusionStrategies(new ConfigExclusionStrategy()) - /*? if >1.20.4 { *//* + /*? if >1.20.4 { */ .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter(RegistryAccess.EMPTY)) - *//*? } elif =1.20.4 {*/ + /*? } elif =1.20.4 {*//* .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter()) - /*? } else {*//* + *//*? } else {*//* .registerTypeHierarchyAdapter(Component.class, new Component.Serializer()) *//*?}*/ .registerTypeHierarchyAdapter(Style.class, /*? if >=1.20.4 {*/new GsonConfigSerializer.StyleTypeAdapter()/*?} else {*//*new Style.Serializer()*//*?}*/) @@ -169,11 +169,11 @@ public class GsonConfigInstance<T> extends ConfigInstance<T> { private UnaryOperator<GsonBuilder> gsonBuilder = builder -> builder .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .serializeNulls() - /*? if >1.20.4 { *//* + /*? if >1.20.4 { */ .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter(RegistryAccess.EMPTY)) - *//*? } elif =1.20.4 {*/ + /*? } elif =1.20.4 {*//* .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter()) - /*? } else {*//* + *//*? } else {*//* .registerTypeHierarchyAdapter(Component.class, new Component.Serializer()) *//*?}*/ .registerTypeHierarchyAdapter(Style.class, /*? if >=1.20.4 {*/new GsonConfigSerializer.StyleTypeAdapter()/*?} else {*//*new Style.Serializer()*//*?}*/) diff --git a/src/main/java/dev/isxander/yacl3/config/v2/impl/serializer/GsonConfigSerializer.java b/src/main/java/dev/isxander/yacl3/config/v2/impl/serializer/GsonConfigSerializer.java index 9f6d8c8..3492c55 100644 --- a/src/main/java/dev/isxander/yacl3/config/v2/impl/serializer/GsonConfigSerializer.java +++ b/src/main/java/dev/isxander/yacl3/config/v2/impl/serializer/GsonConfigSerializer.java @@ -221,11 +221,11 @@ public class GsonConfigSerializer<T> extends ConfigSerializer<T> { private UnaryOperator<GsonBuilder> gsonBuilder = builder -> builder .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .serializeNulls() - /*? if >1.20.4 { *//* + /*? if >1.20.4 { */ .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter(RegistryAccess.EMPTY)) - *//*? } elif =1.20.4 {*/ + /*? } elif =1.20.4 {*//* .registerTypeHierarchyAdapter(Component.class, new Component.SerializerAdapter()) - /*? } else {*//* + *//*? } else {*//* .registerTypeHierarchyAdapter(Component.class, new Component.Serializer()) *//*?}*/ .registerTypeHierarchyAdapter(Style.class, /*? if >=1.20.4 {*/new StyleTypeAdapter()/*?} else {*//*new Style.Serializer()*//*?}*/) diff --git a/src/main/java/dev/isxander/yacl3/gui/ElementListWidgetExt.java b/src/main/java/dev/isxander/yacl3/gui/ElementListWidgetExt.java index 742125b..b183dc8 100644 --- a/src/main/java/dev/isxander/yacl3/gui/ElementListWidgetExt.java +++ b/src/main/java/dev/isxander/yacl3/gui/ElementListWidgetExt.java @@ -169,11 +169,25 @@ public class ElementListWidgetExt<E extends ElementListWidgetExt.Entry<E>> exten } @Override - /*? if >1.20.4 {*//* + protected void ensureVisible(E entry) { + int i = this.getRowTop(this.children().indexOf(entry)); + int j = i - this.getY() - 4 - entry.getItemHeight(); + if (j < 0) { + this.setScrollAmount(this.getScrollAmount() + j); + } + + int k = this.getBottom() - i - entry.getItemHeight() * 2; + if (k < 0) { + this.setScrollAmount(this.getScrollAmount() - k); + } + } + + @Override + /*? if >1.20.4 {*/ protected void renderListItems(GuiGraphics graphics, int mouseX, int mouseY, float delta) - *//*? } else {*/ + /*? } else {*//* protected void renderList(GuiGraphics graphics, int mouseX, int mouseY, float delta) - /*?}*/ + *//*?}*/ { int left = this.getRowLeft(); int right = this.getRowWidth(); diff --git a/src/main/java/dev/isxander/yacl3/gui/OptionListWidget.java b/src/main/java/dev/isxander/yacl3/gui/OptionListWidget.java index f699f0c..9827aab 100644 --- a/src/main/java/dev/isxander/yacl3/gui/OptionListWidget.java +++ b/src/main/java/dev/isxander/yacl3/gui/OptionListWidget.java @@ -244,11 +244,11 @@ public class OptionListWidget extends ElementListWidgetExt<OptionListWidget.Entr } } - /*? if >1.20.4 {*//* + /*? if >1.20.4 {*/ @Override protected void renderListBackground(GuiGraphics guiGraphics) { } - *//*?}*/ + /*?}*/ public abstract class Entry extends ElementListWidgetExt.Entry<Entry> { public boolean isViewable() { diff --git a/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java b/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java index 2eeb7d5..59f16ff 100644 --- a/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java +++ b/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java @@ -121,13 +121,13 @@ public class YACLScreen extends Screen { currentPopupController = null; } - /*? if <=1.20.4 {*/ + /*? if <=1.20.4 {*//* @Override public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { renderDirtBackground(graphics); super.render(graphics, mouseX, mouseY, delta); } - /*?}*/ + *//*?}*/ @Override public void renderBackground(GuiGraphics guiGraphics/*? if >1.20.1 {*/, int mouseX, int mouseY, float partialTick/*?}*/) { @@ -286,9 +286,9 @@ public class YACLScreen extends Screen { } public static class CategoryTab implements TabExt { - /*? if >1.20.4 {*//* + /*? if >1.20.4 {*/ private static final ResourceLocation DARKER_BG = new ResourceLocation("textures/gui/menu_list_background.png"); - *//*?}*/ + /*?}*/ private final YACLScreen screen; private final ConfigCategory category; @@ -379,7 +379,7 @@ public class YACLScreen extends Screen { consumer.accept(descriptionWidget); } - /*? if >1.20.4 {*//* + /*? if >1.20.4 {*/ @Override public void renderBackground(GuiGraphics graphics) { RenderSystem.enableBlend(); @@ -401,7 +401,7 @@ public class YACLScreen extends Screen { RenderSystem.disableBlend(); } - *//*?}*/ + /*?}*/ @Override public void doLayout(ScreenRectangle screenRectangle) { diff --git a/src/main/java/dev/isxander/yacl3/gui/YACLTooltip.java b/src/main/java/dev/isxander/yacl3/gui/YACLTooltip.java index 94b91a9..33028d7 100644 --- a/src/main/java/dev/isxander/yacl3/gui/YACLTooltip.java +++ b/src/main/java/dev/isxander/yacl3/gui/YACLTooltip.java @@ -13,11 +13,11 @@ public class YACLTooltip extends Tooltip { this.widget = widget; } - /*? if >1.20.4 {*//* // stonecutter cannot handle AND expressions - *//*? } elif >1.20.1 {*/ + /*? if >1.20.4 {*/ // stonecutter cannot handle AND expressions + /*? } elif >1.20.1 {*//* @Override protected ClientTooltipPositioner createTooltipPositioner(boolean bl, boolean bl2, ScreenRectangle screenRectangle) { return new YACLTooltipPositioner(widget); } - /*?}*/ + *//*?}*/ } diff --git a/src/main/java/dev/isxander/yacl3/gui/controllers/dropdown/DropdownWidget.java b/src/main/java/dev/isxander/yacl3/gui/controllers/dropdown/DropdownWidget.java index f16a1dd..6252291 100644 --- a/src/main/java/dev/isxander/yacl3/gui/controllers/dropdown/DropdownWidget.java +++ b/src/main/java/dev/isxander/yacl3/gui/controllers/dropdown/DropdownWidget.java @@ -61,11 +61,11 @@ public class DropdownWidget<T> extends ControllerPopupWidget<AbstractDropdownCon // Background graphics.setColor(0.25f, 0.25f, 0.25f, 1.0f); graphics.blit( - /*? if >1.20.4 {*//* + /*? if >1.20.4 {*/ Screen.MENU_BACKGROUND, - *//*?} else {*/ + /*?} else {*//* Screen.BACKGROUND_LOCATION, - /*?}*/ + *//*?}*/ dropdownDim.x(), dropdownDim.y(), 0, 0.0f, 0.0f, dropdownDim.width(), dropdownDim.height(), diff --git a/src/main/java/dev/isxander/yacl3/mixin/TabNavigationBarAccessor.java b/src/main/java/dev/isxander/yacl3/mixin/TabNavigationBarAccessor.java index 8850390..e0fe06c 100644 --- a/src/main/java/dev/isxander/yacl3/mixin/TabNavigationBarAccessor.java +++ b/src/main/java/dev/isxander/yacl3/mixin/TabNavigationBarAccessor.java @@ -10,13 +10,13 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(TabNavigationBar.class) public interface TabNavigationBarAccessor { - /*? if >1.20.4 {*//* + /*? if >1.20.4 {*/ @Accessor("layout") net.minecraft.client.gui.layouts.LinearLayout yacl$getLayout(); - *//*? } else {*/ + /*? } else {*//* @Accessor("layout") net.minecraft.client.gui.layouts.GridLayout yacl$getLayout(); - /*?}*/ + *//*?}*/ @Accessor("width") int yacl$getWidth(); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index b130a4e..3954b6f 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[1,)" +loaderVersion = "${loaderVersion}" #issueTrackerURL = "" license = "LGPL-3.0-or-later" @@ -17,15 +17,15 @@ logoFile = "yacl-128x.png" config = "yacl.mixins.json" [["dependencies.${id}"]] -modId = "neoforge" +modId = "${forgeId}" mandatory = true -versionRange = "[20,)" +versionRange = "${forgeConstraint}" ordering = "NONE" side = "BOTH" [["dependencies.${id}"]] modId = "minecraft" mandatory = true -versionRange = "[1.20.3,)" +versionRange = "${mc}" ordering = "NONE" side = "BOTH" diff --git a/src/testmod/resources/META-INF/mods.toml b/src/testmod/resources/META-INF/mods.toml index 74e4078..2af31d4 100644 --- a/src/testmod/resources/META-INF/mods.toml +++ b/src/testmod/resources/META-INF/mods.toml @@ -15,11 +15,3 @@ authors = "isXander" [[mixins]] config = "yacl-test.mixins.json" -[[dependencies.yacl_test]] -modId = "neoforge" -mandatory = true - -[[dependencies.yacl_test]] -modId = "minecraft" -mandatory = true - diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index a38066e..38c2fec 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,7 +1,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "1.20.4-fabric" /* [SC] DO NOT EDIT */ +stonecutter active "1.20.5-fabric" /* [SC] DO NOT EDIT */ stonecutter registerChiseled tasks.register("chiseledBuild", stonecutter.chiseled) { group = "mod" diff --git a/versions/1.20.1-forge/gradle.properties b/versions/1.20.1-forge/gradle.properties index a4c8daf..64b9e33 100644 --- a/versions/1.20.1-forge/gradle.properties +++ b/versions/1.20.1-forge/gradle.properties @@ -4,4 +4,8 @@ java.version=17 deps.quiltMappings=23 deps.forge=1.20.1-47.2.23 -fmj.mcDep=1.20.1 + +modstoml.mcDep=[1.20,1.20.1] +modstoml.loaderVersion=[46,) +modstoml.forgeId=forge +modstoml.forgeConstraint=[46,) diff --git a/versions/1.20.4-neoforge/gradle.properties b/versions/1.20.4-neoforge/gradle.properties index e5ff9c7..6274b1a 100644 --- a/versions/1.20.4-neoforge/gradle.properties +++ b/versions/1.20.4-neoforge/gradle.properties @@ -4,4 +4,8 @@ java.version=17 deps.quiltMappings=3 deps.neoforge=20.4.130-beta -fmj.mcDep=1.20.3,1.20.4 + +modstoml.mcDep=[1.20.4] +modstoml.loaderVersion=[1,) +modstoml.forgeId=neoforge +modstoml.forgeConstraint=[20,) diff --git a/versions/1.20.5-pre2-fabric/gradle.properties b/versions/1.20.5-fabric/gradle.properties index 37a43a6..5eb352c 100644 --- a/versions/1.20.5-pre2-fabric/gradle.properties +++ b/versions/1.20.5-fabric/gradle.properties @@ -4,4 +4,4 @@ java.version=21 deps.quiltMappings= deps.fabricApi=0.97.1+1.20.5 -fmj.mcDep=~1.20.5- +fmj.mcDep=~1.20.5 |