// Decompiled with JetBrains decompiler // Type: Terraria.UI.ItemSorting // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using System; using System.Collections.Generic; using System.Linq; using Terraria.ID; namespace Terraria.UI { public class ItemSorting { private static List _layerList = new List(); private static Dictionary> _layerWhiteLists = new Dictionary>(); public static void SetupWhiteLists() { ItemSorting._layerWhiteLists.Clear(); List itemSortingLayerList = new List(); List objList = new List(); List intList1 = new List(); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsMelee); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsRanged); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsMagic); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsMinions); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsAssorted); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.WeaponsAmmo); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsPicksaws); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsHamaxes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsPickaxes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsAxes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsHammers); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsTerraforming); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ToolsAmmoLeftovers); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ArmorCombat); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ArmorVanity); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.ArmorAccessories); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.EquipGrapple); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.EquipMount); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.EquipCart); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.EquipLightPet); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.EquipVanityPet); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsDyes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsHairDyes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsLife); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsMana); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsElixirs); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.PotionsBuffs); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscValuables); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscPainting); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscWiring); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscMaterials); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscRopes); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.MiscExtractinator); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.LastMaterials); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.LastTilesImportant); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.LastTilesCommon); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.LastNotTrash); itemSortingLayerList.Add(ItemSorting.ItemSortingLayers.LastTrash); for (int type = -48; type < 5045; ++type) { Item obj = new Item(); obj.netDefaults(type); objList.Add(obj); intList1.Add(type + 48); } Item[] array = objList.ToArray(); foreach (ItemSorting.ItemSortingLayer itemSortingLayer in itemSortingLayerList) { List intList2 = itemSortingLayer.SortingMethod(itemSortingLayer, array, intList1); List intList3 = new List(); for (int index = 0; index < intList2.Count; ++index) intList3.Add(array[intList2[index]].netID); ItemSorting._layerWhiteLists.Add(itemSortingLayer.Name, intList3); } } private static void SetupSortingPriorities() { Player player = Main.player[Main.myPlayer]; ItemSorting._layerList.Clear(); List floatList = new List() { player.meleeDamage, player.rangedDamage, player.magicDamage, player.minionDamage }; floatList.Sort((Comparison) ((x, y) => y.CompareTo(x))); for (int index = 0; index < 5; ++index) { if (!ItemSorting._layerList.Contains(ItemSorting.ItemSortingLayers.WeaponsMelee) && (double) player.meleeDamage == (double) floatList[0]) { floatList.RemoveAt(0); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsMelee); } if (!ItemSorting._layerList.Contains(ItemSorting.ItemSortingLayers.WeaponsRanged) && (double) player.rangedDamage == (double) floatList[0]) { floatList.RemoveAt(0); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsRanged); } if (!ItemSorting._layerList.Contains(ItemSorting.ItemSortingLayers.WeaponsMagic) && (double) player.magicDamage == (double) floatList[0]) { floatList.RemoveAt(0); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsMagic); } if (!ItemSorting._layerList.Contains(ItemSorting.ItemSortingLayers.WeaponsMinions) && (double) player.minionDamage == (double) floatList[0]) { floatList.RemoveAt(0); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsMinions); } } ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsAssorted); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.WeaponsAmmo); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsPicksaws); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsHamaxes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsPickaxes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsAxes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsHammers); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsTerraforming); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ToolsAmmoLeftovers); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ArmorCombat); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ArmorVanity); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.ArmorAccessories); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.EquipGrapple); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.EquipMount); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.EquipCart); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.EquipLightPet); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.EquipVanityPet); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsDyes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsHairDyes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsLife); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsMana); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsElixirs); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.PotionsBuffs); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscValuables); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscPainting); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscWiring); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscMaterials); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscRopes); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.MiscExtractinator); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.LastMaterials); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.LastTilesImportant); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.LastTilesCommon); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.LastNotTrash); ItemSorting._layerList.Add(ItemSorting.ItemSortingLayers.LastTrash); } private static void Sort(Item[] inv, params int[] ignoreSlots) { ItemSorting.SetupSortingPriorities(); List intList1 = new List(); for (int index = 0; index < inv.Length; ++index) { if (!((IEnumerable) ignoreSlots).Contains(index)) { Item obj = inv[index]; if (obj != null && obj.stack != 0 && obj.type != 0 && !obj.favorited) intList1.Add(index); } } for (int index1 = 0; index1 < intList1.Count; ++index1) { Item obj1 = inv[intList1[index1]]; if (obj1.stack < obj1.maxStack) { int num1 = obj1.maxStack - obj1.stack; for (int index2 = index1; index2 < intList1.Count; ++index2) { if (index1 != index2) { Item obj2 = inv[intList1[index2]]; if (obj1.type == obj2.type && obj2.stack != obj2.maxStack) { int num2 = obj2.stack; if (num1 < num2) num2 = num1; obj1.stack += num2; obj2.stack -= num2; num1 -= num2; if (obj2.stack == 0) { inv[intList1[index2]] = new Item(); intList1.Remove(intList1[index2]); --index1; int num3 = index2 - 1; break; } if (num1 == 0) break; } } } } } List intList2 = new List((IEnumerable) intList1); for (int index = 0; index < inv.Length; ++index) { if (!((IEnumerable) ignoreSlots).Contains(index) && !intList2.Contains(index)) { Item obj = inv[index]; if (obj == null || obj.stack == 0 || obj.type == 0) intList2.Add(index); } } intList2.Sort(); List intList3 = new List(); List intList4 = new List(); foreach (ItemSorting.ItemSortingLayer layer in ItemSorting._layerList) { List intList5 = layer.SortingMethod(layer, inv, intList1); if (intList5.Count > 0) intList4.Add(intList5.Count); intList3.AddRange((IEnumerable) intList5); } intList3.AddRange((IEnumerable) intList1); List objList = new List(); foreach (int index in intList3) { objList.Add(inv[index]); inv[index] = new Item(); } float num = 1f / (float) intList4.Count; float hue = num / 2f; for (int index3 = 0; index3 < objList.Count; ++index3) { int index4 = intList2[0]; ItemSlot.SetGlow(index4, hue, Main.player[Main.myPlayer].chest != -1); --intList4[0]; if (intList4[0] == 0) { intList4.RemoveAt(0); hue += num; } inv[index4] = objList[index3]; intList2.Remove(index4); } } public static void SortInventory() { if (!Main.LocalPlayer.HasItem(905)) ItemSorting.SortCoins(); ItemSorting.SortAmmo(); ItemSorting.Sort(Main.player[Main.myPlayer].inventory, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 50, 51, 52, 53, 54, 55, 56, 57, 58); } public static void SortChest() { int chest = Main.player[Main.myPlayer].chest; if (chest == -1) return; Item[] inv = Main.player[Main.myPlayer].bank.item; if (chest == -3) inv = Main.player[Main.myPlayer].bank2.item; if (chest == -4) inv = Main.player[Main.myPlayer].bank3.item; if (chest == -5) inv = Main.player[Main.myPlayer].bank4.item; if (chest > -1) inv = Main.chest[chest].item; Tuple[] tupleArray1 = new Tuple[40]; for (int index = 0; index < 40; ++index) tupleArray1[index] = Tuple.Create(inv[index].netID, inv[index].stack, (int) inv[index].prefix); ItemSorting.Sort(inv); Tuple[] tupleArray2 = new Tuple[40]; for (int index = 0; index < 40; ++index) tupleArray2[index] = Tuple.Create(inv[index].netID, inv[index].stack, (int) inv[index].prefix); if (Main.netMode != 1 || Main.player[Main.myPlayer].chest <= -1) return; for (int index = 0; index < 40; ++index) { if (tupleArray2[index] != tupleArray1[index]) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index)); } } public static void SortAmmo() { ItemSorting.ClearAmmoSlotSpaces(); ItemSorting.FillAmmoFromInventory(); } public static void FillAmmoFromInventory() { List intList1 = new List(); List intList2 = new List(); Item[] inventory = Main.player[Main.myPlayer].inventory; for (int index = 54; index < 58; ++index) { ItemSlot.SetGlow(index, 0.31f, false); Item obj = inventory[index]; if (obj.IsAir) intList2.Add(index); else if (obj.ammo != AmmoID.None) { if (!intList1.Contains(obj.type)) intList1.Add(obj.type); ItemSorting.RefillItemStack(inventory, inventory[index], 0, 50); } } if (intList2.Count < 1) return; for (int index1 = 0; index1 < 50; ++index1) { Item obj = inventory[index1]; if (obj.stack >= 1 && obj.CanFillEmptyAmmoSlot() && intList1.Contains(obj.type)) { int index2 = intList2[0]; intList2.Remove(index2); Utils.Swap(ref inventory[index1], ref inventory[index2]); ItemSorting.RefillItemStack(inventory, inventory[index2], 0, 50); if (intList2.Count == 0) break; } } if (intList2.Count < 1) return; for (int index3 = 0; index3 < 50; ++index3) { Item obj = inventory[index3]; if (obj.stack >= 1 && obj.CanFillEmptyAmmoSlot() && obj.FitsAmmoSlot()) { int index4 = intList2[0]; intList2.Remove(index4); Utils.Swap(ref inventory[index3], ref inventory[index4]); ItemSorting.RefillItemStack(inventory, inventory[index4], 0, 50); if (intList2.Count == 0) break; } } } public static void ClearAmmoSlotSpaces() { Item[] inventory = Main.player[Main.myPlayer].inventory; for (int index = 54; index < 58; ++index) { Item itemToRefill = inventory[index]; if (!itemToRefill.IsAir && itemToRefill.ammo != AmmoID.None && itemToRefill.stack < itemToRefill.maxStack) ItemSorting.RefillItemStack(inventory, itemToRefill, index + 1, 58); } for (int slot = 54; slot < 58; ++slot) { if (inventory[slot].type > 0) ItemSorting.TrySlidingUp(inventory, slot, 54); } } private static void SortCoins() { Item[] inventory = Main.LocalPlayer.inventory; bool overFlowing; long count = Utils.CoinsCount(out overFlowing, inventory, 58); if (overFlowing) return; int[] numArray = Utils.CoinsSplit(count); int num1 = 0; for (int index = 0; index < 3; ++index) { int num2 = numArray[index]; while (num2 > 0) { num2 -= 99; ++num1; } } int num3 = numArray[3]; while (num3 > 999) { num3 -= 999; ++num1; } int num4 = 0; for (int index = 0; index < 58; ++index) { if (inventory[index].type >= 71 && inventory[index].type <= 74 && inventory[index].stack > 0) ++num4; } if (num4 < num1) return; for (int index = 0; index < 58; ++index) { if (inventory[index].type >= 71 && inventory[index].type <= 74 && inventory[index].stack > 0) inventory[index].TurnToAir(); } label_23: int index1; int num5; bool flag; do { index1 = -1; for (int index2 = 3; index2 >= 0; --index2) { if (numArray[index2] > 0) { index1 = index2; break; } } if (index1 != -1) { num5 = numArray[index1]; if (index1 == 3 && num5 > 999) num5 = 999; flag = false; if (!flag) { for (int index3 = 50; index3 < 54; ++index3) { if (inventory[index3].IsAir) { inventory[index3].SetDefaults(71 + index1); inventory[index3].stack = num5; numArray[index1] -= num5; flag = true; break; } } } } else goto label_17; } while (flag); goto label_38; label_17: return; label_38: for (int index4 = 0; index4 < 50; ++index4) { if (inventory[index4].IsAir) { inventory[index4].SetDefaults(71 + index1); inventory[index4].stack = num5; numArray[index1] -= num5; break; } } goto label_23; } private static void RefillItemStack( Item[] inv, Item itemToRefill, int loopStartIndex, int loopEndIndex) { int num1 = itemToRefill.maxStack - itemToRefill.stack; if (num1 <= 0) return; for (int index = loopStartIndex; index < loopEndIndex; ++index) { Item obj = inv[index]; if (obj.stack >= 1 && obj.type == itemToRefill.type) { int num2 = obj.stack; if (num2 > num1) num2 = num1; num1 -= num2; itemToRefill.stack += num2; obj.stack -= num2; if (obj.stack <= 0) obj.TurnToAir(); if (num1 <= 0) break; } } } private static void TrySlidingUp(Item[] inv, int slot, int minimumIndex) { for (int index = slot; index > minimumIndex; --index) { if (inv[index - 1].IsAir) Utils.Swap(ref inv[index], ref inv[index - 1]); } } private class ItemSortingLayer { public readonly string Name; public readonly Func, List> SortingMethod; public ItemSortingLayer( string name, Func, List> method) { this.Name = name; this.SortingMethod = method; } public void Validate(ref List indexesSortable, Item[] inv) { List list; if (!ItemSorting._layerWhiteLists.TryGetValue(this.Name, out list)) return; indexesSortable = indexesSortable.Where((Func) (i => list.Contains(inv[i].netID))).ToList(); } public override string ToString() => this.Name; } private class ItemSortingLayers { public static ItemSorting.ItemSortingLayer WeaponsMelee = new ItemSorting.ItemSortingLayer("Weapons - Melee", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].melee && inv[i].pick < 1 && inv[i].hammer < 1 && inv[i].axe < 1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer WeaponsRanged = new ItemSorting.ItemSortingLayer("Weapons - Ranged", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].ranged)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer WeaponsMagic = new ItemSorting.ItemSortingLayer("Weapons - Magic", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].magic)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer WeaponsMinions = new ItemSorting.ItemSortingLayer("Weapons - Minions", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].summon)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer WeaponsAssorted = new ItemSorting.ItemSortingLayer("Weapons - Assorted", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].pick == 0 && inv[i].axe == 0 && inv[i].hammer == 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer WeaponsAmmo = new ItemSorting.ItemSortingLayer("Weapons - Ammo", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].ammo > 0 && inv[i].damage > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer ToolsPicksaws = new ItemSorting.ItemSortingLayer("Tools - Picksaws", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].pick > 0 && inv[i].axe > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => inv[x].pick.CompareTo(inv[y].pick))); return list; })); public static ItemSorting.ItemSortingLayer ToolsHamaxes = new ItemSorting.ItemSortingLayer("Tools - Hamaxes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].hammer > 0 && inv[i].axe > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => inv[x].axe.CompareTo(inv[y].axe))); return list; })); public static ItemSorting.ItemSortingLayer ToolsPickaxes = new ItemSorting.ItemSortingLayer("Tools - Pickaxes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].pick > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => inv[x].pick.CompareTo(inv[y].pick))); return list; })); public static ItemSorting.ItemSortingLayer ToolsAxes = new ItemSorting.ItemSortingLayer("Tools - Axes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].pick > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => inv[x].axe.CompareTo(inv[y].axe))); return list; })); public static ItemSorting.ItemSortingLayer ToolsHammers = new ItemSorting.ItemSortingLayer("Tools - Hammers", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].hammer > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => inv[x].hammer.CompareTo(inv[y].hammer))); return list; })); public static ItemSorting.ItemSortingLayer ToolsTerraforming = new ItemSorting.ItemSortingLayer("Tools - Terraforming", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityTerraforming[inv[i].netID] > -1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityTerraforming[inv[x].netID].CompareTo(ItemID.Sets.SortingPriorityTerraforming[inv[y].netID]); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer ToolsAmmoLeftovers = new ItemSorting.ItemSortingLayer("Weapons - Ammo Leftovers", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].ammo > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer ArmorCombat = new ItemSorting.ItemSortingLayer("Armor - Combat", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => (inv[i].bodySlot >= 0 || inv[i].headSlot >= 0 || inv[i].legSlot >= 0) && !inv[i].vanity)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDefense.CompareTo(inv[x].OriginalDefense); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); return num; })); return list; })); public static ItemSorting.ItemSortingLayer ArmorVanity = new ItemSorting.ItemSortingLayer("Armor - Vanity", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => (inv[i].bodySlot >= 0 || inv[i].headSlot >= 0 || inv[i].legSlot >= 0) && inv[i].vanity)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); return num; })); return list; })); public static ItemSorting.ItemSortingLayer ArmorAccessories = new ItemSorting.ItemSortingLayer("Armor - Accessories", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].accessory)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[x].vanity.CompareTo(inv[y].vanity); if (num == 0) num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].OriginalDefense.CompareTo(inv[x].OriginalDefense); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); return num; })); return list; })); public static ItemSorting.ItemSortingLayer EquipGrapple = new ItemSorting.ItemSortingLayer("Equip - Grapple", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => Main.projHook[inv[i].shoot])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer EquipMount = new ItemSorting.ItemSortingLayer("Equip - Mount", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].mountType != -1 && !MountID.Sets.Cart[inv[i].mountType])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer EquipCart = new ItemSorting.ItemSortingLayer("Equip - Cart", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].mountType != -1 && MountID.Sets.Cart[inv[i].mountType])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer EquipLightPet = new ItemSorting.ItemSortingLayer("Equip - Light Pet", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].buffType > 0 && Main.lightPet[inv[i].buffType])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer EquipVanityPet = new ItemSorting.ItemSortingLayer("Equip - Vanity Pet", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].buffType > 0 && Main.vanityPet[inv[i].buffType])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsLife = new ItemSorting.ItemSortingLayer("Potions - Life", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].consumable && inv[i].healLife > 0 && inv[i].healMana < 1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].healLife.CompareTo(inv[x].healLife); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsMana = new ItemSorting.ItemSortingLayer("Potions - Mana", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].consumable && inv[i].healLife < 1 && inv[i].healMana > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].healMana.CompareTo(inv[x].healMana); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsElixirs = new ItemSorting.ItemSortingLayer("Potions - Elixirs", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].consumable && inv[i].healLife > 0 && inv[i].healMana > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].healLife.CompareTo(inv[x].healLife); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsBuffs = new ItemSorting.ItemSortingLayer("Potions - Buffs", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].consumable && inv[i].buffType > 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[x].netID.CompareTo(inv[y].netID); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsDyes = new ItemSorting.ItemSortingLayer("Potions - Dyes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].dye > (byte) 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].dye.CompareTo(inv[x].dye); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer PotionsHairDyes = new ItemSorting.ItemSortingLayer("Potions - Hair Dyes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].hairDye >= (short) 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].hairDye.CompareTo(inv[x].hairDye); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscValuables = new ItemSorting.ItemSortingLayer("Misc - Importants", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityBossSpawns[inv[i].netID] > -1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityBossSpawns[inv[x].netID].CompareTo(ItemID.Sets.SortingPriorityBossSpawns[inv[y].netID]); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscWiring = new ItemSorting.ItemSortingLayer("Misc - Wiring", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityWiring[inv[i].netID] > -1 || inv[i].mech)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityWiring[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityWiring[inv[x].netID]); if (num == 0) num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].netID.CompareTo(inv[x].netID); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscMaterials = new ItemSorting.ItemSortingLayer("Misc - Materials", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityMaterials[inv[i].netID] > -1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityMaterials[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityMaterials[inv[x].netID]); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscExtractinator = new ItemSorting.ItemSortingLayer("Misc - Extractinator", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityExtractibles[inv[i].netID] > -1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityExtractibles[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityExtractibles[inv[x].netID]); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscPainting = new ItemSorting.ItemSortingLayer("Misc - Painting", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityPainting[inv[i].netID] > -1 || inv[i].paint > (byte) 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityPainting[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityPainting[inv[x].netID]); if (num == 0) num = inv[x].paint.CompareTo(inv[y].paint); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer MiscRopes = new ItemSorting.ItemSortingLayer("Misc - Ropes", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].netID > 0 && ItemID.Sets.SortingPriorityRopes[inv[i].netID] > -1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = ItemID.Sets.SortingPriorityRopes[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityRopes[inv[x].netID]); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer LastMaterials = new ItemSorting.ItemSortingLayer("Last - Materials", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].createTile < 0 && inv[i].createWall < 1)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = inv[y].value.CompareTo(inv[x].value); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer LastTilesImportant = new ItemSorting.ItemSortingLayer("Last - Tiles (Frame Important)", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].createTile >= 0 && Main.tileFrameImportant[inv[i].createTile])).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer LastTilesCommon = new ItemSorting.ItemSortingLayer("Last - Tiles (Common), Walls", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].createWall > 0 || inv[i].createTile >= 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer LastNotTrash = new ItemSorting.ItemSortingLayer("Last - Not Trash", (Func, List>) ((layer, inv, itemsToSort) => { List list = itemsToSort.Where((Func) (i => inv[i].OriginalRarity >= 0)).ToList(); layer.Validate(ref list, inv); foreach (int num in list) itemsToSort.Remove(num); list.Sort((Comparison) ((x, y) => { int num = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity); if (num == 0) num = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return list; })); public static ItemSorting.ItemSortingLayer LastTrash = new ItemSorting.ItemSortingLayer("Last - Trash", (Func, List>) ((layer, inv, itemsToSort) => { List indexesSortable = new List((IEnumerable) itemsToSort); layer.Validate(ref indexesSortable, inv); foreach (int num in indexesSortable) itemsToSort.Remove(num); indexesSortable.Sort((Comparison) ((x, y) => { int num = inv[y].value.CompareTo(inv[x].value); if (num == 0) num = inv[y].stack.CompareTo(inv[x].stack); if (num == 0) num = x.CompareTo(y); return num; })); return indexesSortable; })); } } }