Fix ItemPostUpdateEvent receiving air item stack when shift-clicking out of gui-embedded inventory

This commit is contained in:
NichtStudioCode 2023-04-15 17:56:32 +02:00
parent 32ade215cb
commit 6a8ac9dce3
2 changed files with 20 additions and 4 deletions

@ -11,17 +11,18 @@ import org.jetbrains.annotations.Nullable;
import xyz.xenondevs.invui.animation.Animation;
import xyz.xenondevs.invui.gui.structure.Marker;
import xyz.xenondevs.invui.gui.structure.Structure;
import xyz.xenondevs.invui.inventory.Inventory;
import xyz.xenondevs.invui.inventory.event.ItemPreUpdateEvent;
import xyz.xenondevs.invui.inventory.event.PlayerUpdateReason;
import xyz.xenondevs.invui.inventory.event.UpdateReason;
import xyz.xenondevs.invui.item.Item;
import xyz.xenondevs.invui.item.ItemProvider;
import xyz.xenondevs.invui.item.ItemWrapper;
import xyz.xenondevs.invui.item.impl.controlitem.ControlItem;
import xyz.xenondevs.invui.util.ArrayUtils;
import xyz.xenondevs.invui.util.InventoryUtils;
import xyz.xenondevs.invui.util.ItemUtils;
import xyz.xenondevs.invui.util.SlotUtils;
import xyz.xenondevs.invui.inventory.Inventory;
import xyz.xenondevs.invui.inventory.event.ItemPreUpdateEvent;
import xyz.xenondevs.invui.inventory.event.PlayerUpdateReason;
import xyz.xenondevs.invui.inventory.event.UpdateReason;
import xyz.xenondevs.invui.window.*;
import java.util.*;
@ -222,6 +223,9 @@ public abstract class AbstractGui implements Gui, GuiParent {
}
clicked.setAmount(leftOverAmount);
if (ItemUtils.isEmpty(clicked))
clicked = null;
inventory.setItemSilently(slot, clicked);
inventory.callPostUpdateEvent(updateReason, slot, previousStack, clicked);

@ -18,6 +18,18 @@ public class ItemUtils {
return itemStack == null || itemStack.getType().isAir() || itemStack.getAmount() <= 0;
}
/**
* Checks whether the given {@link ItemStack} is empty and returns null if it is.
* @param itemStack The {@link ItemStack} to check.
* @return The {@link ItemStack} if it is not empty or null otherwise.
*/
public static @Nullable ItemStack takeUnlessEmpty(@Nullable ItemStack itemStack) {
if (isEmpty(itemStack))
return null;
return itemStack;
}
/**
* Creates a new array with clones of the given {@link ItemStack ItemStacks}.
*