public void LoadInventoryData() { //This assumes items can't be added to the inventory while the inventory is open. It's probably possible that a mod could add items while //the inventory is open. If it turns out to be an issue, this code can be updated to retrieve the entire list every frame, but that seems //overkill for now - this should probably work for most realistic cases. if (this.InventoryList.Count <= 0) { GameObject playerCurrentBody = XRLCore.Core?.Game?.Player?.Body; Inventory inventory = playerCurrentBody?.GetPart("Inventory") as Inventory; if (inventory == null) { return; } List <GameObject> objects = inventory.GetObjectsDirect(); for (int i = 0; i < objects.Count; i++) { GameObject item = objects[i]; if (!item.HasTag("HiddenInInventory")) { //removed filter string handling, because if the player removes the filter after we do this, we won't have all the items saved in our List<GameObject> //if (InventoryScreen.filterString == string.Empty || ConsoleLib.Console.ColorUtility.StripFormatting(item.DisplayName).ToLower().Contains(InventoryScreen.filterString.ToLower())) //{ this.InventoryList.Add(item); //} } } this.InventoryList.Sort(InventoryScreen.displayNameSorter); foreach (GameObject item in this.InventoryList) { string strippedConstrainedName = item.GetCachedDisplayNameStripped().Substring(0, Math.Min(item.GetCachedDisplayNameStripped().Length, 60)).PadRight(60); if (!this.CachedValuePerLbStrings.ContainsKey(strippedConstrainedName)) { this.CachedValuePerLbStrings.Add(strippedConstrainedName, this.GetItemValueString(item)); } } } }