private void OnUpdateItem(TSPlayer player, BinaryReader reader) { var itemIndex = reader.ReadInt16(); reader.ReadVector2(); reader.ReadVector2(); var stackSize = reader.ReadInt16(); var prefixId = reader.ReadByte(); reader.ReadByte(); var itemId = reader.ReadInt16(); if (itemIndex == Main.maxItems) { // Ignore hay created by the sickle, up to a certain stack size. if (player.SelectedItem.type == ItemID.Sickle && itemId == ItemID.Hay && stackSize <= 4) { return; } var balanceSheet = player.GetOrCreateBalanceSheet(); balanceSheet.AddTransaction(Transaction.WorldSlot, itemId, -stackSize, prefixId); } else { var item = Main.item[itemIndex]; var balanceSheet = player.GetOrCreateBalanceSheet(); var netItem = new NetItem(item.type, item.stack - stackSize, item.prefix); var lastNetItem = player.GetLastUpdatedItem(); // We need to specially detect if the client is stacking items, and adjust appropriately. if (netItem.NetId == lastNetItem.NetId && netItem.Stack == -lastNetItem.Stack && netItem.Stack > 0 && netItem.PrefixId == lastNetItem.PrefixId) { Debug.WriteLine($"DEBUG: Stack update at {itemIndex}"); balanceSheet.AddTransaction(Transaction.StackUpdateSlot, item.type, item.stack - stackSize, item.prefix); } else { balanceSheet.AddTransaction(Transaction.WorldSlot, item.type, item.stack - stackSize, item.prefix); } player.SetLastUpdatedItem(netItem); } }