Fix quickmove

This commit is contained in:
KäseToatz
2025-08-25 13:49:15 +02:00
parent fa265afe7b
commit 952b2b6ff4
3 changed files with 27 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ minecraft_version=1.21.8
yarn_mappings=1.21.8+build.1 yarn_mappings=1.21.8+build.1
loader_version=0.17.2 loader_version=0.17.2
# Mod Properties # Mod Properties
mod_version=1.3 mod_version=1.4
maven_group=com.kasetoatz maven_group=com.kasetoatz
archives_base_name=biggerhotbar archives_base_name=biggerhotbar
# Dependencies # Dependencies

View File

@@ -1,20 +1,35 @@
package com.kasetoatz.biggerhotbar; package com.kasetoatz.biggerhotbar;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.screen.slot.SlotActionType; import net.minecraft.screen.slot.SlotActionType;
import java.util.ArrayList;
import java.util.Iterator;
import static com.kasetoatz.biggerhotbar.state.StateManager.*; import static com.kasetoatz.biggerhotbar.state.StateManager.*;
public class Biggerhotbar implements ClientModInitializer public class Biggerhotbar implements ClientModInitializer
{ {
public static ArrayList<Runnable> tickers = new ArrayList<>();
@Override @Override
public void onInitializeClient() public void onInitializeClient()
{ {
load(); load();
ClientTickEvents.END_CLIENT_TICK.register(client -> {
Iterator<Runnable> iterator = tickers.iterator();
while (iterator.hasNext())
{
Runnable runnable = iterator.next();
runnable.run();
iterator.remove();
}
});
} }
public static void flipItems() public static void flipItems()

View File

@@ -1,36 +1,38 @@
package com.kasetoatz.biggerhotbar.mixin; package com.kasetoatz.biggerhotbar.mixin;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.GenericContainerScreenHandler;
import net.minecraft.screen.slot.SlotActionType; import net.minecraft.screen.slot.SlotActionType;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; 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 java.util.OptionalInt;
import static com.kasetoatz.biggerhotbar.Biggerhotbar.tickers;
import static com.kasetoatz.biggerhotbar.state.StateManager.isFlipped; import static com.kasetoatz.biggerhotbar.state.StateManager.isFlipped;
@Mixin(GenericContainerScreenHandler.class) @Mixin(GenericContainerScreenHandler.class)
public class GenericContainerScreenHandlerMixin 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) @Inject(method="quickMove", at=@At(value="INVOKE", target="Lnet/minecraft/screen/slot/Slot;setStack(Lnet/minecraft/item/ItemStack;)V"))
public ItemStack quickMove(ItemStack stack) public void quickMove(PlayerEntity player, int s, CallbackInfoReturnable<ItemStack> cir, @Local(ordinal = 0) ItemStack stack)
{ {
ClientPlayerEntity player = MinecraftClient.getInstance().player;
ClientPlayerInteractionManager manager = MinecraftClient.getInstance().interactionManager; 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); int slot = player.getInventory().getMatchingSlot(Registries.ITEM.getEntry(stack.getItem()), stack);
if (slot < 0 || slot > 8) if (slot < 0 || slot > 8)
{ {
return stack; return;
} }
for (int i = 35; i > 26; i--) for (int i = 35; i > 26; i--)
{ {
@@ -39,9 +41,8 @@ public class GenericContainerScreenHandlerMixin
{ {
continue; 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; break;
} }
return stack;
} }
} }