Merge branch 'master' into dev/pie-lover

This commit is contained in:
Shawrkie Williams
2025-12-29 17:23:23 -05:00
3 changed files with 31 additions and 5 deletions
@@ -8,6 +8,8 @@ using AetherBags.Nodes.Inventory;
using AetherBags.Nodes.Layout; using AetherBags.Nodes.Layout;
using Dalamud.Game.Addon.Lifecycle; using Dalamud.Game.Addon.Lifecycle;
using Dalamud.Game.Addon.Lifecycle.AddonArgTypes; using Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Component.GUI; using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit; using KamiToolKit;
using KamiToolKit.Nodes; using KamiToolKit.Nodes;
@@ -325,6 +327,12 @@ public class AddonInventoryWindow : NativeAddon
protected override unsafe void OnFinalize(AtkUnitBase* addon) protected override unsafe void OnFinalize(AtkUnitBase* addon)
{ {
ref var blockingAddonId = ref AgentInventoryContext.Instance()->BlockingAddonId;
if (blockingAddonId != 0)
{
RaptureAtkModule.Instance()->CloseAddon(blockingAddonId);
}
Services.AddonLifecycle.UnregisterListener(OnInventoryUpdate); Services.AddonLifecycle.UnregisterListener(OnInventoryUpdate);
addon->UnsubscribeAtkArrayData(1, (int)NumberArrayType.Inventory); addon->UnsubscribeAtkArrayData(1, (int)NumberArrayType.Inventory);
+6 -2
View File
@@ -4,9 +4,13 @@ namespace AetherBags.Inventory;
public readonly record struct InventoryLocation(InventoryType Container, ushort Slot) 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}"; public override string ToString() => $"{Container}@{Slot}";
} }
@@ -260,10 +260,14 @@ public class InventoryCategoryNode : SimpleComponentNode
AgentInventoryContext.Instance()->DiscardItem(item.Item.GetLinkedItem(), item.Item.Container, item.Item.Slot, addonId); 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) if (!payload.IsValidInventoryPayload)
{
Services.Logger.Warning($"[OnPayload] Invalid payload type: {payload.Type}");
return; return;
}
InventoryLocation sourceLocation = payload.InventoryLocation; InventoryLocation sourceLocation = payload.InventoryLocation;
@@ -274,15 +278,25 @@ public class InventoryCategoryNode : SimpleComponentNode
} }
InventoryLocation targetLocation = new InventoryLocation( InventoryLocation targetLocation = new InventoryLocation(
targetItemInfo.Item.Container, item.Container,
(ushort)targetItemInfo.Item.Slot (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}"); Services.Logger.Debug($"[OnPayload] Moving {sourceLocation} -> {targetLocation}");
InventoryMoveHelper.MoveItem( InventoryMoveHelper.MoveItem(
sourceLocation.Container, sourceLocation.Slot, sourceLocation.Container, sourceLocation.Slot,
targetLocation.Container, targetLocation.Slot targetLocation.Container, targetLocation.Slot
); );
System.AddonInventoryWindow.ManualInventoryRefresh();
} }
} }