From 4e6523f8a04db46b6912b1146ff74826ee269b7f Mon Sep 17 00:00:00 2001 From: Zeffuro Date: Fri, 9 Jan 2026 22:02:52 +0100 Subject: [PATCH] Finish BiS bucket stuff --- .../Categories/CategoryBucketManager.cs | 27 ++++++++++++------- .../Inventory/State/InventoryStateBase.cs | 23 ++++++++++++++-- .../CategoryGeneralConfigurationNode.cs | 5 ++-- KamiToolKit | 2 +- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/AetherBags/Inventory/Categories/CategoryBucketManager.cs b/AetherBags/Inventory/Categories/CategoryBucketManager.cs index 5a7c1e8..b24db77 100644 --- a/AetherBags/Inventory/Categories/CategoryBucketManager.cs +++ b/AetherBags/Inventory/Categories/CategoryBucketManager.cs @@ -246,7 +246,7 @@ public static class CategoryBucketManager if (!System.IPC.BisBuddy.IsReady) return; var bisItems = System.IPC.BisBuddy.ItemLookup; - if (bisItems. Count == 0) return; + if (bisItems.Count == 0) return; uint bucketKey = MakeBisBuddyKey(); @@ -265,7 +265,7 @@ public static class CategoryBucketManager FilteredItems = new List(capacity: 16), Used = true, }; - bucketsByKey. Add(bucketKey, bucket); + bucketsByKey.Add(bucketKey, bucket); } else { @@ -282,7 +282,7 @@ public static class CategoryBucketManager if (bisItems.ContainsKey(item.Item.ItemId)) { - bucket.Items. Add(item); + bucket.Items.Add(item); claimedKeys.Add(itemKey); } } @@ -352,20 +352,27 @@ public static class CategoryBucketManager if (!bucket.Used) continue; + // TODO: Make configurable bucket.Items.Sort(ItemCountDescComparer.Instance); sortedCategoryKeys.Add(bucket.Key); } + // TODO: Make sortable by user sortedCategoryKeys.Sort((left, right) => { - bool leftUser = IsUserCategoryKey(left); - bool rightUser = IsUserCategoryKey(right); - bool leftAllagan = IsAllaganFilterKey(left); - bool rightAllagan = IsAllaganFilterKey(right); - if (leftUser != rightUser) return leftUser ? -1 : 1; - if (leftAllagan != rightAllagan) return leftAllagan ? -1 : 1; + int GetPriority(uint key) + { + if (IsUserCategoryKey(key)) return 1; + if (IsBisBuddyKey(key)) return 2; + if (IsAllaganFilterKey(key)) return 3; + if (key == 0) return 99; + return 10; + } - return left.CompareTo(right); + int leftPrio = GetPriority(left); + int rightPrio = GetPriority(right); + + return leftPrio != rightPrio ? leftPrio.CompareTo(rightPrio) : left.CompareTo(right); }); } diff --git a/AetherBags/Inventory/State/InventoryStateBase.cs b/AetherBags/Inventory/State/InventoryStateBase.cs index 34c058b..a3309c3 100644 --- a/AetherBags/Inventory/State/InventoryStateBase.cs +++ b/AetherBags/Inventory/State/InventoryStateBase.cs @@ -97,8 +97,8 @@ public abstract class InventoryStateBase { if (config.Categories.BisBuddyMode == PluginFilterMode.Categorize) { - CategoryBucketManager.BucketByAllaganFilters(ItemInfoByKey, BucketsByKey, ClaimedKeys, true); - HighlightState.ClearFilter(HighlightSource.AllaganTools); + CategoryBucketManager.BucketByBisBuddyItems(ItemInfoByKey, BucketsByKey, ClaimedKeys, true); + HighlightState.ClearFilter(HighlightSource.BiSBuddy); } else { @@ -141,6 +141,25 @@ public abstract class InventoryStateBase } } + private void UpdateBisBuddyHighlight(string? filterKey) + { + if (string.IsNullOrEmpty(filterKey) || !System.IPC.BisBuddy.IsReady) + { + HighlightState.ClearFilter(HighlightSource.BiSBuddy); + return; + } + + var filterItems = System.IPC.AllaganTools.GetFilterItems(filterKey); + if (filterItems != null) + { + HighlightState.SetFilter(HighlightSource.BiSBuddy, filterItems.Keys); + } + else + { + HighlightState.ClearFilter(HighlightSource.BiSBuddy); + } + } + public IReadOnlyList GetCategories(string filter = "", bool invert = false) => InventoryFilter.FilterCategories(AllCategories, BucketsByKey, FilteredCategories, filter, invert); diff --git a/AetherBags/Nodes/Configuration/Category/CategoryGeneralConfigurationNode.cs b/AetherBags/Nodes/Configuration/Category/CategoryGeneralConfigurationNode.cs index f202acb..39038de 100644 --- a/AetherBags/Nodes/Configuration/Category/CategoryGeneralConfigurationNode.cs +++ b/AetherBags/Nodes/Configuration/Category/CategoryGeneralConfigurationNode.cs @@ -117,7 +117,7 @@ public sealed class CategoryGeneralConfigurationNode : TabbedVerticalListNode } }; AddNode(bisBuddyEnabled); - AddNode(bbModeDropdown); + AddNode(1, bbModeDropdown); bool allaganReady = System.IPC.AllaganTools?.IsReady ?? false; @@ -162,8 +162,7 @@ public sealed class CategoryGeneralConfigurationNode : TabbedVerticalListNode }; AddNode(_allaganToolsCheckbox); - AddTab(1); - AddNode(atModeDropdown); + AddNode(1, atModeDropdown); SubtractTab(1); } diff --git a/KamiToolKit b/KamiToolKit index 1d838e8..5886600 160000 --- a/KamiToolKit +++ b/KamiToolKit @@ -1 +1 @@ -Subproject commit 1d838e8bfa973a88389318c88e0a24e136976253 +Subproject commit 5886600a043640588a7e89eba35d6385b923db6c