From 952b2b6ff48a0f7b651026cf7ccab61949850ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A4seToatz?= Date: Mon, 25 Aug 2025 13:49:15 +0200 Subject: [PATCH] Fix quickmove --- gradle.properties | 2 +- .../kasetoatz/biggerhotbar/Biggerhotbar.java | 15 +++++++++++++ .../GenericContainerScreenHandlerMixin.java | 21 ++++++++++--------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/gradle.properties b/gradle.properties index 59e77ad..3e1d712 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.21.8 yarn_mappings=1.21.8+build.1 loader_version=0.17.2 # Mod Properties -mod_version=1.3 +mod_version=1.4 maven_group=com.kasetoatz archives_base_name=biggerhotbar # Dependencies diff --git a/src/main/java/com/kasetoatz/biggerhotbar/Biggerhotbar.java b/src/main/java/com/kasetoatz/biggerhotbar/Biggerhotbar.java index f4491c5..6b96876 100644 --- a/src/main/java/com/kasetoatz/biggerhotbar/Biggerhotbar.java +++ b/src/main/java/com/kasetoatz/biggerhotbar/Biggerhotbar.java @@ -1,20 +1,35 @@ package com.kasetoatz.biggerhotbar; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.slot.SlotActionType; +import java.util.ArrayList; +import java.util.Iterator; + import static com.kasetoatz.biggerhotbar.state.StateManager.*; public class Biggerhotbar implements ClientModInitializer { + public static ArrayList tickers = new ArrayList<>(); + @Override public void onInitializeClient() { load(); + ClientTickEvents.END_CLIENT_TICK.register(client -> { + Iterator iterator = tickers.iterator(); + while (iterator.hasNext()) + { + Runnable runnable = iterator.next(); + runnable.run(); + iterator.remove(); + } + }); } public static void flipItems() diff --git a/src/main/java/com/kasetoatz/biggerhotbar/mixin/GenericContainerScreenHandlerMixin.java b/src/main/java/com/kasetoatz/biggerhotbar/mixin/GenericContainerScreenHandlerMixin.java index 5154273..cd5941a 100644 --- a/src/main/java/com/kasetoatz/biggerhotbar/mixin/GenericContainerScreenHandlerMixin.java +++ b/src/main/java/com/kasetoatz/biggerhotbar/mixin/GenericContainerScreenHandlerMixin.java @@ -1,36 +1,38 @@ package com.kasetoatz.biggerhotbar.mixin; +import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.registry.Registries; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.slot.SlotActionType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.OptionalInt; +import static com.kasetoatz.biggerhotbar.Biggerhotbar.tickers; import static com.kasetoatz.biggerhotbar.state.StateManager.isFlipped; @Mixin(GenericContainerScreenHandler.class) public class GenericContainerScreenHandlerMixin { - @ModifyArg(method="quickMove", at=@At(value="INVOKE", target="Lnet/minecraft/screen/GenericContainerScreenHandler;insertItem(Lnet/minecraft/item/ItemStack;IIZ)Z", ordinal=0), index=0) - public ItemStack quickMove(ItemStack stack) + @Inject(method="quickMove", at=@At(value="INVOKE", target="Lnet/minecraft/screen/slot/Slot;setStack(Lnet/minecraft/item/ItemStack;)V")) + public void quickMove(PlayerEntity player, int s, CallbackInfoReturnable cir, @Local(ordinal = 0) ItemStack stack) { - ClientPlayerEntity player = MinecraftClient.getInstance().player; ClientPlayerInteractionManager manager = MinecraftClient.getInstance().interactionManager; - if (isFlipped() || player == null || manager == null || stack.isEmpty()) + if (isFlipped() || manager == null || stack.isEmpty()) { - return stack; + return; } int slot = player.getInventory().getMatchingSlot(Registries.ITEM.getEntry(stack.getItem()), stack); if (slot < 0 || slot > 8) { - return stack; + return; } for (int i = 35; i > 26; i--) { @@ -39,9 +41,8 @@ public class GenericContainerScreenHandlerMixin { continue; } - manager.clickSlot(player.currentScreenHandler.syncId, index.getAsInt(), slot, SlotActionType.SWAP, player); + tickers.add(() -> manager.clickSlot(player.currentScreenHandler.syncId, index.getAsInt(), slot, SlotActionType.SWAP, player)); break; } - return stack; } }