private void UpdateInventorySlots(ItemSlot itemSlot, ItemSlotNetworkedData networkedItemSlot)
    {
        if (networkedItemSlot != null)
        {
            if (itemSlot is EquipmentSlot)
            {
                if (itemSlot.Item != null)
                {
                    (itemSlot.Item as EquippableItem).Unequip(_stats);
                }

                SetItemFromDatabase(itemSlot, networkedItemSlot);
                (itemSlot.Item as EquippableItem).Equip(_stats);
            }
            else
            {
                SetItemFromDatabase(itemSlot, networkedItemSlot);
            }
        }
        else
        {
            if (itemSlot is EquipmentSlot)
            {
                if (itemSlot.Item != null)
                {
                    (itemSlot.Item as EquippableItem).Unequip(_stats);
                }
            }

            itemSlot.Item = null;
        }
        _statsPanel.UpdateStatValues();
        UpdateInventoryMaxSlots();
    }
    public void Init(PlayerStats stats, PlayerInputGrabber input)
    {
        _stats = stats;
        _input = input;
        // Create static class to handle custom class serialization and call methods from him
        ItemSlotNetworkedData.RegisterSerialization();

        _statsPanel.SetStats(_stats.Strength, _stats.Armour, _stats.FreezeResistance, _stats.HeatResistance);
        _statsPanel.UpdateStatValues();
        Subscribe();
        _inventory.Init();
        _equipment.Init();
        UpdateInventoryMaxSlots();

        _networkedInventoryData.OnListChanged += changeEvent => OnNetworkedListChange(changeEvent.index, changeEvent.value, _inventory.itemSlots);
        _networkedEquipmentData.OnListChanged += changeEvent => OnNetworkedListChange(changeEvent.index, changeEvent.value, _equipment.equipmentSlots);
    }
 private void SetItemFromDatabase(ItemSlot itemSlot, ItemSlotNetworkedData networkedItemSlot)
 {
     //Debug.Log("Setting item from database");
     itemSlot.Item   = _itemDatabase.GetItemCopy(networkedItemSlot.itemId);
     itemSlot.Amount = networkedItemSlot.itemAmount;
 }
    private void OnNetworkedListChange(int index, ItemSlotNetworkedData networkedItemSlot, IList <ItemSlot> list)
    {
        ItemSlot itemSlot = list[index];

        UpdateInventorySlots(itemSlot, networkedItemSlot);
    }