Initial commit: AetherBags + KamiToolKit for FC Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
using System.Linq;
|
||||
using Dalamud.Hooking;
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
using KamiToolKit.Classes;
|
||||
|
||||
namespace KamiToolKit;
|
||||
|
||||
public abstract unsafe partial class NativeAddon {
|
||||
|
||||
private static Hook<AtkUnitBase.Delegates.FireCallback>? fireCallbackHook;
|
||||
|
||||
private static void InitializeCloseCallback() {
|
||||
fireCallbackHook ??= DalamudInterface.Instance.GameInteropProvider
|
||||
.HookFromAddress<AtkUnitBase.Delegates.FireCallback>(AtkUnitBase.Addresses.FireCallback.Value, OnFireCallback);
|
||||
fireCallbackHook.Enable();
|
||||
}
|
||||
|
||||
private static bool OnFireCallback(AtkUnitBase* thisPtr, uint valueCount, AtkValue* values, bool close) {
|
||||
Log.Excessive($"[{thisPtr->NameString}] OnFireCallback");
|
||||
|
||||
foreach (var addon in CreatedAddons) {
|
||||
if (addon == thisPtr && close && addon is { RespectCloseAll: true, IsOverlayAddon: false }) {
|
||||
addon.Close();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return fireCallbackHook!.Original(thisPtr, valueCount, values, close);
|
||||
}
|
||||
|
||||
private static void DisposeCloseCallback() {
|
||||
if (CreatedAddons.Count is 0 || CreatedAddons.All(addon => addon.IsOverlayAddon)) {
|
||||
fireCallbackHook?.Dispose();
|
||||
fireCallbackHook = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user