From c4346a4c0005738bf3360362bed78c3fbf984b00 Mon Sep 17 00:00:00 2001 From: ElysianCat <78264512+CatsSomeCat@users.noreply.github.com> Date: Tue, 23 Sep 2025 23:43:03 +0330 Subject: [PATCH] Refactor CarryOn functionality to improve slot selection logic. Ensure that inventory slot changes are only allowed when not carrying an item. --- .../tschipp/carryon/CarryOnCommonClient.java | 14 ++++---- .../tschipp/carryon/mixin/MinecraftMixin.java | 33 +++++++++++++++---- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/Common/src/main/java/tschipp/carryon/CarryOnCommonClient.java b/Common/src/main/java/tschipp/carryon/CarryOnCommonClient.java index 2cd4463..5d34744 100644 --- a/Common/src/main/java/tschipp/carryon/CarryOnCommonClient.java +++ b/Common/src/main/java/tschipp/carryon/CarryOnCommonClient.java @@ -52,14 +52,16 @@ public class CarryOnCommonClient return (CarryOnKeybinds.carryKey.matchesMouse(0) && mc.mouseHandler.isLeftPressed()) || (CarryOnKeybinds.carryKey.matchesMouse(1) && mc.mouseHandler.isRightPressed()) || (CarryOnKeybinds.carryKey.matchesMouse(3) && mc.mouseHandler.isMiddlePressed()); } - public static void onCarryClientTick() - { + public static void onCarryClientTick() { Player player = Minecraft.getInstance().player; - if(player != null) { + if (player != null) { CarryOnData carry = CarryOnDataManager.getCarryData(player); - if(carry.isCarrying()) - { - player.getInventory().setSelectedSlot(carry.getSelected()); + if (carry.isCarrying()) { + int wantedSlot = carry.getSelected(); + if (player.getInventory().getSelectedSlot() != wantedSlot) { + // System.out.println("[CarryOn] Forcing slot " + wantedSlot); + player.getInventory().setSelectedSlot(wantedSlot); + } } } } diff --git a/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java b/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java index bbe8a51..dc3bebd 100644 --- a/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java +++ b/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java @@ -29,11 +29,30 @@ import org.spongepowered.asm.mixin.injection.Redirect; import tschipp.carryon.common.carry.CarryOnDataManager; @Mixin(Minecraft.class) -public class MinecraftMixin -{ - @WrapWithCondition(method = "handleKeybinds()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Inventory;setSelectedSlot(I)V", ordinal = 0)) - private boolean allowSlotSelection(Inventory inv,int slot) - { - return !CarryOnDataManager.getCarryData(inv.player).isCarrying(); - } +public class MinecraftMixin { + + @WrapWithCondition( + method = "handleKeybinds()V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/player/Inventory;setSelectedSlot(I)V", + ordinal = 0 + ) + ) + private boolean allowSlotSelection(Inventory inv, int slot) { + boolean carrying = CarryOnDataManager.getCarryData(inv.player).isCarrying(); + + // Allow if not carrying + if (!carrying) return true; + + // Block only if trying to switch away + boolean allow = inv.getSelectedSlot() == slot; + + if (!allow) { + // System.out.println("[CarryOn] Blocked hotbar change while carrying. Tried " + slot + ", staying on " + inv.getSelectedSlot()); + } + + return allow; + } } +