private ItemData Unequip(EquipmentSlotCombination slotCombination)
    {
        foreach (var slotType in slotCombination.SlotsTaken)
        {
            if (slotType != slotCombination.PrimarySlot)
            {
                GetEquipmentSlot(slotType).Unequip();
            }
        }
        ItemData result = GetEquipmentSlot(slotCombination.PrimarySlot).UnequipAndReturn();

        Main.MessageBus.Publish(new ItemEquipMessage(ItemEquipMessage.EventType.Unequip, result, slotCombination.PrimarySlot));
        return(result);
    }
    public CanEquipResult CanEquip(EquipmentSlotCombination slotCombination)
    {
        var  result = new CanEquipResult();
        bool primaryConflictDetected   = false;
        bool secondaryConflictDetected = false;

        foreach (var slotType in slotCombination.SlotsTaken)
        {
            EquipmentSlotData slotData = GetEquipmentSlot(slotType);
            if (slotData == null)
            {
                result.Status = CanEquipStatus.No_Impossible;
                return(result);
            }
            if (!slotData.Empty)
            {
                result.AddConflictingItem(slotData.Item);
                if (slotType == slotCombination.PrimarySlot)
                {
                    primaryConflictDetected = true;
                }
                else
                {
                    secondaryConflictDetected = true;
                }
            }
        }
        if (primaryConflictDetected && !secondaryConflictDetected)
        {
            result.Status = CanEquipStatus.No_PrimaryConflict;
        }
        else if (secondaryConflictDetected)
        {
            result.Status = CanEquipStatus.No_SecondaryConflict;
        }
        else
        {
            result.Status = CanEquipStatus.Yes;
        }

        return(result);
    }