diff --git a/build.gradle b/build.gradle index bf07eb8..e671b88 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,6 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - } processResources { diff --git a/src/client/java/me/advait/PriorityKeysClient.java b/src/client/java/me/advait/PriorityKeysClient.java index d3d99ee..8548159 100644 --- a/src/client/java/me/advait/PriorityKeysClient.java +++ b/src/client/java/me/advait/PriorityKeysClient.java @@ -7,12 +7,12 @@ import net.minecraft.text.Text; import net.minecraft.client.util.InputUtil; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import org.lwjgl.glfw.GLFW; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import java.util.*; public class PriorityKeysClient implements ClientModInitializer { - private static final Set keysPressedThisTick = new HashSet<>(); private static KeyBinding cyclePresetKey; @Override @@ -42,24 +42,7 @@ public class PriorityKeysClient implements ClientModInitializer { PriorityConfig.save(); client.player.sendMessage(Text.of("§aSwitched to priority preset: §f" + next), true); } - - KeyBinding[] currentHotbarKeys = client.options.hotbarKeys; - keysPressedThisTick.clear(); - - for (int i = 0; i < currentHotbarKeys.length; i++) { - if (currentHotbarKeys[i].isPressed()) { - keysPressedThisTick.add(i); - } - } - - if (keysPressedThisTick.size() > 1) { - for (int slot : PriorityConfig.priorityOrder) { - if (keysPressedThisTick.contains(slot)) { - client.player.getInventory().setSelectedSlot(slot); - break; - } - } - } }); } + } diff --git a/src/client/java/me/advait/mixin/client/MinecraftClientMixin.java b/src/client/java/me/advait/mixin/client/MinecraftClientMixin.java new file mode 100644 index 0000000..1119f73 --- /dev/null +++ b/src/client/java/me/advait/mixin/client/MinecraftClientMixin.java @@ -0,0 +1,45 @@ +package me.advait.mixin.client; + +import me.advait.PriorityConfig; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.option.KeyBinding; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.ArrayList; +import java.util.List; + +@Mixin(MinecraftClient.class) +public class MinecraftClientMixin { + + @Inject(method = "handleInputEvents", at = @At("HEAD")) + private void onHandleInputEvents(CallbackInfo ci) { + MinecraftClient client = MinecraftClient.getInstance(); + if (client.player == null || client.options == null) return; + + if (client.player.isSpectator()) return; + + KeyBinding[] hotbarKeys = client.options.hotbarKeys; + + List pressedSlots = new ArrayList<>(); + for (int i = 0; i < hotbarKeys.length; i++) { + if (hotbarKeys[i].wasPressed()) { + pressedSlots.add(i); + } + } + + if (pressedSlots.size() > 1) { + for (int slot : PriorityConfig.priorityOrder) { + if (pressedSlots.contains(slot)) { + client.player.getInventory().setSelectedSlot(slot); + break; + } + } + } else if (pressedSlots.size() == 1) { + client.player.getInventory().setSelectedSlot(pressedSlots.get(0)); + } + } +} + diff --git a/src/client/resources/prioritykeys.client.mixins.json b/src/client/resources/prioritykeys.client.mixins.json index 00ebc87..765c3f4 100644 --- a/src/client/resources/prioritykeys.client.mixins.json +++ b/src/client/resources/prioritykeys.client.mixins.json @@ -1,12 +1,13 @@ { - "required": true, - "package": "me.advait.mixin.client", - "compatibilityLevel": "JAVA_21", - "client": [ - "ControlsOptionsScreenMixin", - "GameOptionsScreenAccessor" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "package": "me.advait.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + "ControlsOptionsScreenMixin", + "GameOptionsScreenAccessor", + "MinecraftClientMixin" + ], + "injectors": { + "defaultRequire": 1 } } \ No newline at end of file