From 357e5f55ca0e66afdb612152fe92a384ea6d21bd Mon Sep 17 00:00:00 2001 From: AnsonYeung Date: Sun, 7 Jun 2026 17:39:30 +0800 Subject: [PATCH] Fix gather problem --- .../early/minecraft/GuiContainerMixin.java | 17 +++++++++++++++++ .../modularui/widgets/slot/SlotGroup.java | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/src/main/java/com/cleanroommc/modularui/core/mixins/early/minecraft/GuiContainerMixin.java b/src/main/java/com/cleanroommc/modularui/core/mixins/early/minecraft/GuiContainerMixin.java index 2be25a431..ca3977e61 100644 --- a/src/main/java/com/cleanroommc/modularui/core/mixins/early/minecraft/GuiContainerMixin.java +++ b/src/main/java/com/cleanroommc/modularui/core/mixins/early/minecraft/GuiContainerMixin.java @@ -2,8 +2,11 @@ import com.cleanroommc.modularui.api.IMuiScreen; import com.cleanroommc.modularui.screen.IClickableGuiContainer; +import com.cleanroommc.modularui.widgets.slot.ModularSlot; +import com.cleanroommc.modularui.widgets.slot.SlotGroup; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import org.spongepowered.asm.lib.Opcodes; @@ -13,6 +16,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(GuiContainer.class) @@ -59,4 +63,17 @@ public void getSlot(int x, int y, CallbackInfoReturnable cir) { protected boolean mouseClickedOnSlot(boolean flag1) { return false; } + + @Redirect( + method = "mouseMovedOrUp", + at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/inventory/Slot;inventory:Lnet/minecraft/inventory/IInventory;") + ) + private IInventory checkSlotGroup(Slot slot) { + if (slot instanceof ModularSlot ms) { + SlotGroup slotGroup = ms.getSlotGroup(); + if (slotGroup == null) return null; + return slotGroup.getDummyInventoryForComparison(); + } + return slot.inventory; + } } diff --git a/src/main/java/com/cleanroommc/modularui/widgets/slot/SlotGroup.java b/src/main/java/com/cleanroommc/modularui/widgets/slot/SlotGroup.java index a70eac567..39a027427 100644 --- a/src/main/java/com/cleanroommc/modularui/widgets/slot/SlotGroup.java +++ b/src/main/java/com/cleanroommc/modularui/widgets/slot/SlotGroup.java @@ -1,5 +1,7 @@ package com.cleanroommc.modularui.widgets.slot; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryBasic; import net.minecraft.inventory.Slot; import org.jetbrains.annotations.ApiStatus; @@ -27,6 +29,7 @@ public class SlotGroup { private final boolean allowShiftTransfer; private boolean allowSorting = true; private final boolean singleton; + private final IInventory dummyInventory = new InventoryBasic("[Null]", true, 0); /** * Creates a slot group that is only a single slot. Singleton groups don't need to be registered. @@ -117,4 +120,9 @@ public SlotGroup setAllowSorting(boolean allowSorting) { this.allowSorting = allowSorting; return this; } + + @ApiStatus.Internal + public IInventory getDummyInventoryForComparison() { + return dummyInventory; + } }