//Spiced up version of Chest adapter inject private void InjectToRange(int player, SlotKind targetKind, Item item, bool stackable = true, int from = 0, int length = -1) { Item[] inventory = GetInventoryFromKind(player, targetKind); if (length == -1) { length = inventory.Length - from; } if (item.maxStack > 1 && stackable) { for (int i = from; i < length + from; i++) { Item invItem = inventory[i]; if (item.IsTheSameAs(invItem) && invItem.stack < invItem.maxStack) { int spaceLeft = invItem.maxStack - invItem.stack; if (spaceLeft >= item.stack) { invItem.stack += item.stack; item.stack = 0; HandleSlotChange(player, targetKind, i); return; } else { item.stack -= spaceLeft; invItem.stack = invItem.maxStack; HandleSlotChange(player, targetKind, i); } } } } for (int i = from; i < length + from; i++) { if (inventory[i].IsAir) { inventory[i] = item.Clone(); if (stackable) { item.stack = 0; HandleSlotChange(player, targetKind, i); return; } else { inventory[i].stack = 1; item.stack--; HandleSlotChange(player, targetKind, i); if (item.stack < 1) { return; } } } } }
public Slot(SlotDirection direction, SlotKind kind, string name = null, SlotFlags flags = SlotFlags.None, string type = null, string value = null) : this() { Direction = direction; Kind = kind; Name = name; Flags = flags; Type = type; Value = value; }
protected SlotDefinition(SlotDirection direction, SlotKind kind, string name, string type, string value, SlotFlags flags) { Direction = direction; Kind = kind; Name = name; Type = type; Value = value; Flags = flags; }
public void HandlePacket(BinaryReader reader, int WhoAmI) { int owner = reader.ReadInt32(); SlotKind kind = (SlotKind)reader.ReadByte(); int slot = reader.ReadInt32(); Item[] targetInventory = GetInventoryFromKind(owner, kind); ItemIO.Receive(targetInventory[slot], reader, true, true); }
private void InjectToSpecificSlot(int player, SlotKind targetKind, int slot, Item item) { Item[] targetInventory = GetInventoryFromKind(player, targetKind); if (targetInventory[slot].IsAir) { targetInventory[slot] = item.Clone(); targetInventory[slot].stack = 1; item.stack--; HandleSlotChange(player, targetKind, slot); } }
protected Slot FindSlot(SlotDirection direction, SlotKind kind, SlotFlags flags) { foreach (var slot in Slots) { if (slot.Direction == direction && slot.Kind == kind && (slot.Flags & flags) == flags) { return(slot); } } return(null); }
protected Slot FindSlot(SlotDirection direction, SlotKind kind, string name) { foreach (var slot in Slots) { if (slot.Direction == direction && slot.Kind == kind && slot.Name == name) { return(slot); } } return(null); }
private void HandleSlotChange(int owner, SlotKind kind, int slot) { if (Main.netMode == 2) { ModPacket packet = NetRouter.GetPacketTo(this, mod); packet.Write(owner); packet.Write((byte)kind); packet.Write(slot); Item[] targetInventory = GetInventoryFromKind(owner, kind); ItemIO.Send(targetInventory[slot], packet, true, true); packet.Send(); } else if (Main.netMode == 0) { Recipe.FindRecipes(); } }
private Item[] GetInventoryFromKind(int player, SlotKind kind) { Player p = Main.player[player]; switch (kind) { case SlotKind.Inventory: return(p.inventory); case SlotKind.Armor: return(p.armor); case SlotKind.Dye: return(p.dye); case SlotKind.MiscEquip: return(p.miscEquips); case SlotKind.MiscDye: return(p.miscDyes); default: return(null); } }
private IEnumerable <Tuple <Item, object> > EnumerateRange(int player, SlotKind kind, int from = 0, int length = -1) { Item[] items = GetInventoryFromKind(player, kind); if (length == -1) { length = items.Length - from; } for (int i = from; i < length + from; i++) { if (!items[i].favorited) { yield return(new Tuple <Item, object>(items[i], new PlayerSlot() { kind = kind, owner = player, slot = i })); } } }