From 48116b81fdf21a55e360c3f1b2f28c1e4362422e Mon Sep 17 00:00:00 2001 From: Username404-59 Date: Thu, 8 Apr 2021 20:01:03 +0200 Subject: [PATCH] Add keybinds and use fabric's mixins for the :common gradle project. --- common/build.gradle.kts | 12 +----- .../snowygui/mixins/KeyMappings.java | 41 +++++++++++++++++++ .../snowygui/mixins/keysAccessor.java | 13 ++++++ .../username404/snowygui/config/AddKeyMaps.kt | 22 ++++++++++ .../src/main/resources/snowygui-mixins.json | 5 ++- 5 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/fr/username404/snowygui/mixins/KeyMappings.java create mode 100644 common/src/main/java/fr/username404/snowygui/mixins/keysAccessor.java create mode 100644 common/src/main/kotlin/fr/username404/snowygui/config/AddKeyMaps.kt diff --git a/common/build.gradle.kts b/common/build.gradle.kts index ac2ab16..5dae15a 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,13 +1,5 @@ -architectury { - common() -} -repositories { - maven { - name = "SpongePowered" - url = uri("https://repo.spongepowered.org/repository/maven-public/") - } -} +architectury { common() } dependencies { - compileOnly("org.spongepowered:mixin:0.8-SNAPSHOT") + modImplementation("net.fabricmc:fabric-loader:${rootProject.property("fabric_loader_version")}") } diff --git a/common/src/main/java/fr/username404/snowygui/mixins/KeyMappings.java b/common/src/main/java/fr/username404/snowygui/mixins/KeyMappings.java new file mode 100644 index 0000000..9cb4a2b --- /dev/null +++ b/common/src/main/java/fr/username404/snowygui/mixins/KeyMappings.java @@ -0,0 +1,41 @@ +package fr.username404.snowygui.mixins; + +import com.google.common.collect.Lists; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import fr.username404.snowygui.config.AddKeyMaps; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@Mixin(Options.class) +class KeyMappings { + private static final List keysToAdd = AddKeyMaps.INSTANCE.getList(); + + @Mutable @Shadow @Final public KeyMapping[] keyMappings; + + @Inject(method = "*", at = @At("RETURN")) + private void onSettingsConstructed(Minecraft minecraft, File file, CallbackInfo ci) { + Map categoryMap = keysAccessor.getSortedCategoryMap(); + List newKeys = Lists.newArrayList(keyMappings); + for (KeyMapping key : keysToAdd) { + if (!categoryMap.containsKey(key.getCategory())) { + Optional biggest = categoryMap.values().stream().max(Integer::compareTo); int biggestInt = biggest.orElse(0); + categoryMap.put(key.getCategory(), biggestInt + 1); + } + newKeys.remove(key); + newKeys.add(key); + } + keyMappings = newKeys.toArray(new KeyMapping[0]); + } +} \ No newline at end of file diff --git a/common/src/main/java/fr/username404/snowygui/mixins/keysAccessor.java b/common/src/main/java/fr/username404/snowygui/mixins/keysAccessor.java new file mode 100644 index 0000000..4d91356 --- /dev/null +++ b/common/src/main/java/fr/username404/snowygui/mixins/keysAccessor.java @@ -0,0 +1,13 @@ +package fr.username404.snowygui.mixins; + +import net.minecraft.client.KeyMapping; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(KeyMapping.class) +public class keysAccessor { + @Accessor("CATEGORY_SORT_ORDER") + static Map getSortedCategoryMap() { throw new AssertionError(); } +} diff --git a/common/src/main/kotlin/fr/username404/snowygui/config/AddKeyMaps.kt b/common/src/main/kotlin/fr/username404/snowygui/config/AddKeyMaps.kt new file mode 100644 index 0000000..aeceff2 --- /dev/null +++ b/common/src/main/kotlin/fr/username404/snowygui/config/AddKeyMaps.kt @@ -0,0 +1,22 @@ +package fr.username404.snowygui.config + +import com.mojang.blaze3d.platform.InputConstants +import net.minecraft.client.KeyMapping +import org.lwjgl.glfw.GLFW.GLFW_KEY_U +import org.lwjgl.glfw.GLFW.GLFW_KEY_Y + +object AddKeyMaps { + private const val prefix = "snowy" + private fun mkMap(translationSuffix: String, key: Int, category: String = "keycategory"): KeyMapping { + return KeyMapping( + "$prefix.$translationSuffix", InputConstants.Type.KEYSYM, + key, category + ) + } + fun getList(): List { + return listOf( + mkMap("opengui", GLFW_KEY_Y), + mkMap("configkey", GLFW_KEY_U) + ) + } +} \ No newline at end of file diff --git a/common/src/main/resources/snowygui-mixins.json b/common/src/main/resources/snowygui-mixins.json index 6a4df93..c41898f 100644 --- a/common/src/main/resources/snowygui-mixins.json +++ b/common/src/main/resources/snowygui-mixins.json @@ -2,7 +2,10 @@ "required": true, "package": "fr.username404.snowygui.mixins", "compatibilityLevel": "JAVA_8", - "client": [], + "client": [ + "keysAccessor", + "KeyMappings" + ], "injectors": { "defaultRequire": 1 },