diff --git a/AetherBags/Inventory/InventoryLocation.cs b/AetherBags/Inventory/InventoryLocation.cs index 35ab722..640eec8 100644 --- a/AetherBags/Inventory/InventoryLocation.cs +++ b/AetherBags/Inventory/InventoryLocation.cs @@ -4,9 +4,13 @@ namespace AetherBags.Inventory; public readonly record struct InventoryLocation(InventoryType Container, ushort Slot) { - public static readonly InventoryLocation Invalid = new(0, 0); + public static readonly InventoryLocation Invalid = new((InventoryType)uint.MaxValue, ushort.MaxValue); - public bool IsValid => Container != 0; + public bool IsValid => Container.IsMainInventory || + Container.IsSaddleBag || + Container.IsArmory || + Container.IsRetainer || + Container == InventoryType.EquippedItems; public override string ToString() => $"{Container}@{Slot}"; } diff --git a/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs b/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs index c2b3292..0d4c8d7 100644 --- a/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs +++ b/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs @@ -260,10 +260,14 @@ public class InventoryCategoryNode : SimpleComponentNode AgentInventoryContext.Instance()->DiscardItem(item.Item.GetLinkedItem(), item.Item.Container, item.Item.Slot, addonId); } - private void OnPayloadAccepted(DragDropNode _, DragDropPayload payload, ItemInfo targetItemInfo) + private void OnPayloadAccepted(DragDropNode node, DragDropPayload payload, ItemInfo targetItemInfo) { + InventoryItem item = targetItemInfo.Item; if (!payload.IsValidInventoryPayload) + { + Services.Logger.Warning($"[OnPayload] Invalid payload type: {payload.Type}"); return; + } InventoryLocation sourceLocation = payload.InventoryLocation; @@ -274,15 +278,25 @@ public class InventoryCategoryNode : SimpleComponentNode } InventoryLocation targetLocation = new InventoryLocation( - targetItemInfo.Item.Container, - (ushort)targetItemInfo.Item.Slot + item.Container, + (ushort)item.Slot ); + if (sourceLocation.Container.IsSameContainerGroup(targetLocation.Container)) + { + Services.Logger.Debug($"[OnPayload] Source and target are in the same container group; no move performed"); + node.Payload = payload; + node.IconId = item.IconId; + System.AddonInventoryWindow.ManualInventoryRefresh(); + return; + }; + Services.Logger.Debug($"[OnPayload] Moving {sourceLocation} -> {targetLocation}"); InventoryMoveHelper.MoveItem( sourceLocation.Container, sourceLocation.Slot, targetLocation.Container, targetLocation.Slot ); + System.AddonInventoryWindow.ManualInventoryRefresh(); } } \ No newline at end of file