diff --git a/gradle.properties b/gradle.properties index cae7193..c8a6c03 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.19.2+build.9 loader_version=0.14.9 # Mod Properties -mod_version = 1.7.0 +mod_version = 1.7.1 maven_group = eu.midnightdust archives_base_name = midnightcontrols modrinth_id=bXX9h73M diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index 7bb4d91..40915ff 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -15,6 +15,7 @@ import eu.midnightdust.midnightcontrols.MidnightControls; import eu.midnightdust.midnightcontrols.MidnightControlsConstants; import eu.midnightdust.midnightcontrols.MidnightControlsFeature; import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat; +import eu.midnightdust.midnightcontrols.client.compat.VoxelMapCompat; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import eu.midnightdust.midnightcontrols.client.controller.ButtonCategory; import eu.midnightdust.midnightcontrols.client.controller.Controller; @@ -22,6 +23,7 @@ import eu.midnightdust.midnightcontrols.client.controller.InputManager; import eu.midnightdust.midnightcontrols.client.gui.MidnightControlsHud; import eu.midnightdust.midnightcontrols.client.gui.RingScreen; import eu.midnightdust.midnightcontrols.client.gui.TouchscreenOverlay; +import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingIDAccessor; import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingRegistryImplAccessor; import eu.midnightdust.midnightcontrols.client.ring.ButtonBindingRingAction; import eu.midnightdust.midnightcontrols.client.ring.MidnightRing; @@ -57,6 +59,7 @@ import java.util.TimerTask; */ public class MidnightControlsClient extends MidnightControls implements ClientModInitializer { public static boolean lateInitDone = false; + public static boolean voxelmapInitDone = false; private static MidnightControlsClient INSTANCE; public static final KeyBinding BINDING_LOOK_UP = InputManager.makeKeyBinding(new Identifier(MidnightControlsConstants.NAMESPACE, "look_up"), InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_KP_8, "key.categories.movement"); @@ -163,6 +166,12 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo * This method is called to initialize keybindings */ public void initKeybindings() { + if (!voxelmapInitDone && FabricLoader.getInstance().isModLoaded("voxelmap") && KeyBindingIDAccessor.getKEYS_BY_ID().containsKey("key.minimap.toggleingamewaypoints")) { + this.log("Adding VoxelMap compatibility..."); + new VoxelMapCompat().handle(this); + InputManager.loadButtonBindings(); + voxelmapInitDone = true; + } if (lateInitDone) return; if (KeyBindingRegistryImplAccessor.getModdedKeyBindings() == null || KeyBindingRegistryImplAccessor.getModdedKeyBindings().isEmpty()) return; for (int i = 0; i < KeyBindingRegistryImplAccessor.getModdedKeyBindings().size(); ++i) { diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index 5048d75..7f09b3c 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -18,6 +18,7 @@ import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import eu.midnightdust.midnightcontrols.client.controller.Controller; import eu.midnightdust.midnightcontrols.client.controller.InputManager; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ChatScreen; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -68,9 +69,11 @@ public class MidnightControlsConfig extends MidnightConfig { @Entry(name = "midnightcontrols.menu.controller_type") public static ControllerType controllerType = ControllerType.DEFAULT; @Entry(name = "Mouse screens") public static List mouseScreens = Lists.newArrayList("me.jellysquid.mods.sodium.client.gui", "net.coderbot.iris.gui", "net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", - "net.minecraft.class_457", "net.minecraft.class_408", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", + "net.minecraft.class_457", "net.minecraft.class_408", "net.minecraft.class_3872", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", "hardcorequesting.client.interfaces.GuiQuestBook", "hardcorequesting.client.interfaces.GuiReward", "hardcorequesting.client.interfaces.EditTrackerScreen", - "me.shedaniel.clothconfig2.gui.ClothConfigScreen"); + "me.shedaniel.clothconfig2.gui.ClothConfigScreen", "com.mamiyaotaru.voxelmap.gui.GuiWaypoints", "com.mamiyaotaru.voxelmap.gui.GuiPersistentMap"); + @Entry(name = "Arrow screens") public static List arrowScreens = Lists.newArrayList(ChatScreen.class.getCanonicalName()); + @Entry(name = "WASD screens") public static List wasdScreens = Lists.newArrayList("com.ultreon.devices.core.Laptop"); @Entry(name = "Keybindings") public static Map BINDING = new HashMap<>(); private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?"); @@ -325,7 +328,7 @@ public class MidnightControlsConfig extends MidnightConfig { controllerID = 0; secondControllerID = -1; controllerType = ControllerType.DEFAULT; - mouseScreens = Lists.newArrayList("me.jellysquid.mods.sodium.client.gui", "net.coderbot.iris.gui", "net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", "net.minecraft.class_457", "net.minecraft.class_408", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", "me.shedaniel.clothconfig2.gui.ClothConfigScreen"); + mouseScreens = Lists.newArrayList("me.jellysquid.mods.sodium.client.gui", "net.coderbot.iris.gui", "net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", "net.minecraft.class_457", "net.minecraft.class_408", "net.minecraft.class_3872", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", "me.shedaniel.clothconfig2.gui.ClothConfigScreen", "com.mamiyaotaru.voxelmap.gui.GuiWaypoints", "com.mamiyaotaru.voxelmap.gui.GuiPersistentMap"); BINDING = new HashMap<>(); maxAnalogValues = new double[]{1, 1, 1, 1}; triggerFix = true; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java index 32bdb74..30c98c2 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -49,6 +49,8 @@ import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.gui.screen.world.WorldListWidget; import net.minecraft.client.gui.widget.*; +import net.minecraft.client.input.Input; +import net.minecraft.client.util.InputUtil; import net.minecraft.screen.slot.Slot; import net.minecraft.text.TranslatableTextContent; import net.minecraft.util.math.MathHelper; @@ -74,6 +76,7 @@ public class MidnightInput { // Cooldowns public int actionGuiCooldown = 0; public boolean ignoreNextARelease = false; + public boolean ignoreNextXRelease = false; private double targetYaw = 0.0; private double targetPitch = 0.0; private float prevXAxis = 0.f; @@ -317,12 +320,33 @@ public class MidnightInput { return; } - if (action == 0 || action == 2) { + if (client.currentScreen != null && (action == 0 || action == 2) && button == GLFW_GAMEPAD_BUTTON_Y && + MidnightControlsConfig.arrowScreens.contains(client.currentScreen.getClass().getCanonicalName())) { + pressKeyboardKey(client, GLFW.GLFW_KEY_ENTER); + this.screenCloseCooldown = 5; + } + else if (action == 0 || action == 2) { if (client.currentScreen != null && (button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP || button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN || button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_LEFT || button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_RIGHT)) { if (this.actionGuiCooldown == 0) { - if (button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP) { + if (MidnightControlsConfig.arrowScreens.contains(client.currentScreen.getClass().getCanonicalName())) { + switch (button) { + case GLFW_GAMEPAD_BUTTON_DPAD_UP -> pressKeyboardKey(client, GLFW.GLFW_KEY_UP); + case GLFW_GAMEPAD_BUTTON_DPAD_DOWN -> pressKeyboardKey(client, GLFW.GLFW_KEY_DOWN); + case GLFW_GAMEPAD_BUTTON_DPAD_LEFT -> pressKeyboardKey(client, GLFW.GLFW_KEY_LEFT); + case GLFW_GAMEPAD_BUTTON_DPAD_RIGHT -> pressKeyboardKey(client, GLFW.GLFW_KEY_RIGHT); + } + } + else if (MidnightControlsConfig.wasdScreens.contains(client.currentScreen.getClass().getCanonicalName())) { + switch (button) { + case GLFW_GAMEPAD_BUTTON_DPAD_UP -> pressKeyboardKey(client, GLFW.GLFW_KEY_W); + case GLFW_GAMEPAD_BUTTON_DPAD_DOWN -> pressKeyboardKey(client, GLFW.GLFW_KEY_S); + case GLFW_GAMEPAD_BUTTON_DPAD_LEFT -> pressKeyboardKey(client, GLFW.GLFW_KEY_A); + case GLFW_GAMEPAD_BUTTON_DPAD_RIGHT -> pressKeyboardKey(client, GLFW.GLFW_KEY_D); + } + } + else if (button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP) { this.changeFocus(client.currentScreen, NavigationDirection.UP); } else if (button == GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN) { this.changeFocus(client.currentScreen, NavigationDirection.DOWN); @@ -356,17 +380,54 @@ public class MidnightInput { double mouseX = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(); double mouseY = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight(); if (action == 0) { - Screen.wrapScreenError(() -> client.currentScreen.mouseClicked(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_1), + Screen.wrapScreenError(() -> { + ((MouseAccessor) client.mouse).setLeftButtonClicked(false); + client.currentScreen.mouseClicked(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_1); + }, "mouseClicked event handler", client.currentScreen.getClass().getCanonicalName()); } else if (action == 1) { - Screen.wrapScreenError(() -> client.currentScreen.mouseReleased(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_1), + Screen.wrapScreenError(() -> { + ((MouseAccessor) client.mouse).setLeftButtonClicked(false); + client.currentScreen.mouseReleased(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_1); + }, "mouseReleased event handler", client.currentScreen.getClass().getCanonicalName()); + } else if (action == 2) { + Screen.wrapScreenError(() -> { + client.currentScreen.setDragging(true); + ((MouseAccessor) client.mouse).setLeftButtonClicked(true); + ((MouseAccessor) client.mouse).midnightcontrols$onCursorPos(client.getWindow().getHandle(), client.mouse.getX(), client.mouse.getY()); + client.currentScreen.setDragging(false); + }, + "mouseClicked event handler", client.currentScreen.getClass().getCanonicalName()); } this.screenCloseCooldown = 5; } else { this.ignoreNextARelease = false; } } + else if (button == GLFW.GLFW_GAMEPAD_BUTTON_X && client.currentScreen != null && !isScreenInteractive(client.currentScreen) + && this.actionGuiCooldown == 0) { + if (client.currentScreen instanceof HandledScreen handledScreen && ((HandledScreenAccessor) handledScreen).midnightcontrols$getSlotAt( + client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(), + client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight()) != null) return; + if (!this.ignoreNextXRelease) { + double mouseX = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(); + double mouseY = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight(); + if (action == 0) { + Screen.wrapScreenError(() -> client.currentScreen.mouseClicked(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_2), + "mouseClicked event handler", client.currentScreen.getClass().getCanonicalName()); + } else if (action == 1) { + Screen.wrapScreenError(() -> client.currentScreen.mouseReleased(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_2), + "mouseReleased event handler", client.currentScreen.getClass().getCanonicalName()); + } + this.screenCloseCooldown = 5; + } else { + this.ignoreNextXRelease = false; + } + } + } + public void pressKeyboardKey(MinecraftClient client, int key) { + client.keyboard.onKey(client.getWindow().getHandle(), key, 0, 1, 0); } /** diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/VoxelMapCompat.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/VoxelMapCompat.java new file mode 100644 index 0000000..9c425e7 --- /dev/null +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/VoxelMapCompat.java @@ -0,0 +1,95 @@ +/* + * Copyright © 2022 Motschen + * + * This file is part of MidnightControls. + * + * Licensed under the MIT license. For more information, + * see the LICENSE file. + */ + +package eu.midnightdust.midnightcontrols.client.compat; + +import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; +import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; +import eu.midnightdust.midnightcontrols.client.controller.ButtonCategory; +import eu.midnightdust.midnightcontrols.client.controller.InputManager; +import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingIDAccessor; +import net.minecraft.client.option.KeyBinding; +import org.aperlambda.lambdacommon.Identifier; +import org.jetbrains.annotations.NotNull; +import org.lwjgl.glfw.GLFW; + +/** + * Represents a compatibility handler for VoxelMap. + * + * @author Motschen + * @version 1.8.0 + * @since 1.8.0 + */ +public class VoxelMapCompat implements CompatHandler { + + private final KeyBinding voxelMapZoomKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.zoom", null); + private final KeyBinding voxelmapFullscreenKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.togglefullscreen", null); + private final KeyBinding voxelmapMenuKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.voxelmapmenu", null);; + private final KeyBinding voxelmapWaypointMenuKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.waypointmenu", null);; + private final KeyBinding voxelmapWaypointKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.waypointhotkey", null); + private final KeyBinding voxelmapMobToggleKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.togglemobs", null); + private final KeyBinding voxelmapWaypointToggleKey = KeyBindingIDAccessor.getKEYS_BY_ID().getOrDefault("key.minimap.toggleingamewaypoints", null); + private static final ButtonCategory VOXELMAP_CATEGORY = InputManager.registerCategory(new Identifier("minecraft","controls.minimap.title")); + + + @Override + public void handle(@NotNull MidnightControlsClient mod) { + if (MidnightControlsConfig.debug && KeyBindingIDAccessor.getKEYS_BY_ID() != null) KeyBindingIDAccessor.getKEYS_BY_ID().forEach((a, b) -> System.out.println(a + " - " + b)); + new ButtonBinding.Builder("key.minimap.zoom") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_X) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelMapZoomKey) + .register(); + new ButtonBinding.Builder("key.minimap.togglefullscreen") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_Y) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapFullscreenKey) + .register(); + new ButtonBinding.Builder("key.minimap.voxelmapmenu") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_START) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapMenuKey) + .register(); + new ButtonBinding.Builder("key.minimap.waypointmenu") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_GUIDE) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapWaypointMenuKey) + .register(); + new ButtonBinding.Builder("key.minimap.waypointhotkey") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_BACK) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapWaypointKey) + .register(); + new ButtonBinding.Builder("key.minimap.togglemobs") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_A) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapMobToggleKey) + .register(); + new ButtonBinding.Builder("key.minimap.toggleingamewaypoints") + .buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_DOWN, GLFW.GLFW_GAMEPAD_BUTTON_B) + .onlyInGame() + .cooldown(true) + .category(VOXELMAP_CATEGORY) + .linkKeybind(voxelmapWaypointToggleKey) + .register(); + } +} diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java index 4c830c6..b8522b3 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java @@ -24,15 +24,19 @@ import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor; import eu.midnightdust.midnightcontrols.client.util.MouseAccessor; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.hud.SpectatorHud; +import net.minecraft.client.gui.hud.spectator.SpectatorMenu; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; import net.minecraft.client.gui.screen.ingame.*; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.widget.PressableWidget; +import net.minecraft.client.input.Input; import net.minecraft.client.util.ScreenshotRecorder; import net.minecraft.item.ItemGroup; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.util.math.MathHelper; import org.aperlambda.lambdacommon.utils.Pair; import org.jetbrains.annotations.NotNull; import org.lwjgl.glfw.GLFW; @@ -61,12 +65,22 @@ public class InputHandlers { if (action == ButtonState.RELEASE) return false; - // When ingame + // When in-game if (client.currentScreen == null && client.player != null) { - if (next) - client.player.getInventory().scrollInHotbar(-1.0); - else - client.player.getInventory().scrollInHotbar(1.0); + if (!client.player.isSpectator()) { + if (next) + client.player.getInventory().scrollInHotbar(-1.0); + else + client.player.getInventory().scrollInHotbar(1.0); + } + else { + if (client.inGameHud.getSpectatorHud().isOpen()) { + client.inGameHud.getSpectatorHud().cycleSlot(next ? -1 : 1); + } else { + float g = MathHelper.clamp(client.player.getAbilities().getFlySpeed() + (next ? 1 : -1) * 0.005F, 0.0F, 0.2F); + client.player.getAbilities().setFlySpeed(g); + } + } return true; } else if (client.currentScreen instanceof RingScreen) { MidnightControlsClient.get().ring.cyclePage(next); @@ -102,7 +116,7 @@ public class InputHandlers { recipeBookAccessor.midnightcontrols$refreshResults(true); return true; } else if (client.currentScreen instanceof AdvancementsScreenAccessor screen) { - var tabs = screen.getTabs().values().stream().distinct().collect(Collectors.toList()); + var tabs = screen.getTabs().values().stream().distinct().toList(); var tab = screen.getSelectedTab(); if (tab == null) return false; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyBindingIDAccessor.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyBindingIDAccessor.java new file mode 100644 index 0000000..315acb7 --- /dev/null +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyBindingIDAccessor.java @@ -0,0 +1,14 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.client.option.KeyBinding; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(KeyBinding.class) +public interface KeyBindingIDAccessor { + @Accessor @Final + static Map getKEYS_BY_ID() {return null;}; +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7c2aca5..2499da3 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -11,15 +11,20 @@ "contributors": [ "akemin-dayo", "DioEgizio", - "Ivanoks", - "KiskaUWU", - "RaptaG", - "Madis0", - "FlashyReese", - "Hambaka", - "joaoh1", + "dogtopus", + "egeesin", "EnnuiL", - "egeesin" + "FlashyReese", + "gyular", + "Hambaka", + "Ivanoks", + "joaoh1", + "KiskaUWU", + "Madis0", + "RaptaG", + "ronniedude", + "spudpiggy", + "TrueHorse" ], "contact": { "homepage": "https://modrinth.com/mod/midnightcontrols", diff --git a/src/main/resources/midnightcontrols.mixins.json b/src/main/resources/midnightcontrols.mixins.json index 6e78115..5691852 100644 --- a/src/main/resources/midnightcontrols.mixins.json +++ b/src/main/resources/midnightcontrols.mixins.json @@ -18,6 +18,7 @@ "RecipeBookWidgetAccessor", "WorldRendererMixin", "KeyBindingRegistryImplAccessor", + "KeyBindingIDAccessor", "ScreenAccessor" ], "injectors": {