Search in sources :

Example 1 with AbstractClothingRarityComparator

use of com.lilithsthrone.utils.AbstractClothingRarityComparator in project liliths-throne-public by Innoxia.

the class CharacterInventory method isAbleToUnequip.

private boolean isAbleToUnequip(AbstractClothing clothing, boolean unequipIfAble, boolean automaticClothingManagement, GameCharacter characterClothingOwner, GameCharacter characterRemovingClothing, boolean continuingIsAbleToEquip) {
    if (!continuingIsAbleToEquip) {
        clothingToRemove.clear();
        equipTextSB.setLength(0);
    }
    if (clothing.isSealed()) {
        equipTextSB.append("Your " + clothing.getName() + " can't be removed because " + (clothing.getClothingType().isPlural() ? "they are" : "it is") + " <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b>!");
        blockingClothing = clothing;
        return false;
    } else if (!continuingIsAbleToEquip) {
        clothingToRemove.put(clothing, DisplacementType.REMOVE_OR_EQUIP);
    }
    // Check for access needed: TODO check this works
    for (BlockedParts bp : clothing.getClothingType().getBlockedPartsList()) {
        // Keep iterating through until until we find the BlockedParts that corresponds to equipping (if not found, carry on, as this clothing doesn't need any access in order to be equipped):
        if (bp.displacementType == DisplacementType.REMOVE_OR_EQUIP)
            if (bp.clothingAccessRequired == null) {
                // This clothing doesn't need any access in order to be equipped, so just carry on.
                break;
            } else {
                // This clothing has access requirements in order to be equipped. Check each piece of equipped clothing to see if it's blocking the access required:
                for (AbstractClothing equippedClothing : clothingCurrentlyEquipped) {
                    if (equippedClothing != clothing)
                        for (BlockedParts bpEquipped : equippedClothing.getClothingType().getBlockedPartsList()) {
                            for (ClothingAccess caBlocked : bpEquipped.clothingAccessBlocked) {
                                if (bp.clothingAccessRequired.contains(caBlocked) && !equippedClothing.getDisplacedList().contains(bpEquipped.displacementType) && !isDisplacementAvailableFromElsewhere(equippedClothing, caBlocked)) {
                                    if (bpEquipped.displacementType != DisplacementType.REMOVE_OR_EQUIP) {
                                        // If clothingToRemove already contains this clothing, it's just going to be easier to remove the clothing fully than perform multiple displacements:
                                        if (!clothingToRemove.containsKey(equippedClothing))
                                            if (!equippedClothing.getDisplacedList().contains(bpEquipped.displacementType)) {
                                                // Not already displaced:
                                                if (automaticClothingManagement)
                                                    clothingToRemove.put(equippedClothing, bpEquipped.displacementType);
                                                else {
                                                    equipTextSB.append("Your <b style='color:" + Colour.GENERIC_BAD.toWebHexString() + ";'>" + equippedClothing.getName() + "</b> " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " preventing you from being able to unequip your " + clothing.getName() + "!");
                                                    blockingClothing = equippedClothing;
                                                    return false;
                                                }
                                            }
                                    } else {
                                        if (isAbleToUnequip(equippedClothing, false, automaticClothingManagement, characterClothingOwner, characterRemovingClothing, true)) {
                                            // Can  be removed:
                                            clothingToRemove.put(equippedClothing, DisplacementType.REMOVE_OR_EQUIP);
                                        } else {
                                            equipTextSB.append("</br>Your " + clothing.getName() + " can't be unequipped because your " + equippedClothing.getName() + " " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " in the way.");
                                            blockingClothing = equippedClothing;
                                            return false;
                                        }
                                    }
                                }
                            }
                        }
                }
            }
    }
    if (continuingIsAbleToEquip)
        return true;
    if (!automaticClothingManagement && clothingToRemove.size() != 1) {
        equipTextSB.append("Before your " + clothing.getName() + " " + (clothing.getClothingType().isPlural() ? "are" : "is") + " able to be removed, " + Util.clothesToStringList(clothingToRemove.keySet()) + " need" + (clothingToRemove.size() > 1 ? "" : "s") + " to be removed.");
        for (AbstractClothing c : clothingToRemove.keySet()) if (c != clothing) {
            blockingClothing = c;
            break;
        }
        return false;
    }
    // If you want to unequip this clothing now:
    if (unequipIfAble) {
        // Sort clothing to remove in zLayer order(so you take off your
        // shirt before removing bra etc.):
        List<AbstractClothing> tempClothingList = new ArrayList<>();
        tempClothingList.addAll(clothingToRemove.keySet());
        tempClothingList.sort(new ClothingZLayerComparator());
        // Description of each clothing item that is removed/displaced:
        for (AbstractClothing c : tempClothingList) {
            equipTextSB.append((equipTextSB.length() == 0 ? "" : "</br>") + (clothingToRemove.get(c) == DisplacementType.REMOVE_OR_EQUIP ? (// (Main.game.isInSex()?Sex.isSubResisting():false))
            c == clothing ? // (Main.game.isInSex()?Sex.isSubResisting():false))
            c.onUnequipApplyEffects(characterClothingOwner, characterRemovingClothing, false) : // (Main.game.isInSex()?Sex.isSubResisting():false)))
            c.onUnequipText(characterClothingOwner, characterRemovingClothing, false)) : // (Main.game.isInSex()?Sex.isSubResisting():false))));
            c.getClothingType().displaceText(characterClothingOwner, characterRemovingClothing, clothingToRemove.get(c), false)));
        // if(c==clothing)
        // unequipTextSB.append("</br>"+(isInventoryFull()?characterClothingOwner.droppedItemText(clothing):characterClothingOwner.addedItemToInventoryText(clothing)));
        }
        // Actually unequip the clothing:
        clothingCurrentlyEquipped.remove(clothing);
        // If it was displaced, clear it's displacements:
        clothing.getDisplacedList().clear();
        List<AbstractClothing> clothingToBeReplaced = new ArrayList<>();
        clothingToBeReplaced.addAll(clothingToRemove.keySet());
        clothingToBeReplaced.remove(clothing);
        clothingToBeReplaced.sort(new ReverseClothingZLayerComparator());
        if (!clothingToBeReplaced.isEmpty() && !continuingIsAbleToEquip) {
            equipTextSB.append("</br>You replace " + (characterClothingOwner.isPlayer() ? "your" : characterClothingOwner.getName() + "'s") + " " + Util.clothesToStringList(clothingToBeReplaced) + ".");
        }
        // Check for clothing sets:
        if (clothing.getClothingType().getClothingSet() != null) {
            clothingSetCount.put(clothing.getClothingType().getClothingSet(), clothingSetCount.get(clothing.getClothingType().getClothingSet()) - 1);
        }
        clothingCurrentlyEquipped.sort(new AbstractClothingRarityComparator());
    }
    return true;
}
Also used : ReverseClothingZLayerComparator(com.lilithsthrone.utils.ReverseClothingZLayerComparator) BlockedParts(com.lilithsthrone.game.inventory.clothing.BlockedParts) ReverseClothingZLayerComparator(com.lilithsthrone.utils.ReverseClothingZLayerComparator) ClothingZLayerComparator(com.lilithsthrone.utils.ClothingZLayerComparator) AbstractClothing(com.lilithsthrone.game.inventory.clothing.AbstractClothing) ArrayList(java.util.ArrayList) AbstractClothingRarityComparator(com.lilithsthrone.utils.AbstractClothingRarityComparator) ClothingAccess(com.lilithsthrone.game.inventory.clothing.ClothingAccess)

Example 2 with AbstractClothingRarityComparator

use of com.lilithsthrone.utils.AbstractClothingRarityComparator in project liliths-throne-public by Innoxia.

the class CharacterInventory method isAbleToEquip.

/**
 * Calculates if the character is able to remove or displace all blocking clothing in order to equip the supplied clothing.
 */
public boolean isAbleToEquip(AbstractClothing newClothing, boolean equipIfAble, boolean automaticClothingManagement, GameCharacter characterClothingOwner, GameCharacter characterClothingEquipper) {
    clothingToRemove.clear();
    equipTextSB.setLength(0);
    // Check to see if any of the character's body parts are blocking equipping this item:
    if (newClothing.getClothingType().getSlot().slotBlockedByRace(characterClothingOwner) != null) {
        equipTextSB.append("<span style='color:" + Colour.GENERIC_BAD.toWebHexString() + ";'>" + newClothing.getClothingType().getSlot().getCannotBeWornDescription(characterClothingOwner) + "</span>");
        return false;
    }
    if (!newClothing.getClothingType().isCanBeEquipped(characterClothingOwner)) {
        equipTextSB.append("<span style='color:" + Colour.GENERIC_BAD.toWebHexString() + ";'>" + newClothing.getClothingType().getCannotBeEquippedText(characterClothingOwner) + "</span>");
        return false;
    }
    // Can't equip if InventorySlot is taken by a sealed piece of clothing:
    if (getClothingInSlot(newClothing.getClothingType().getSlot()) != null) {
        if (getClothingInSlot(newClothing.getClothingType().getSlot()).isSealed()) {
            if (characterClothingOwner.isPlayer()) {
                equipTextSB.append("You can't equip the " + newClothing.getName() + ", as your <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b> " + getClothingInSlot(newClothing.getClothingType().getSlot()).getName() + " can't be removed!");
            } else {
                equipTextSB.append(UtilText.parse(characterClothingOwner, "[npc.Name] can't equip the " + newClothing.getName() + ", as [npc.her] <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b> " + getClothingInSlot(newClothing.getClothingType().getSlot()).getName() + " can't be removed!"));
            }
            return false;
        }
    }
    // Can't equip piercings if that body part isn't pierced:
    if (!characterClothingOwner.isPiercedEar() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_EAR) {
        equipTextSB.append("Your ears need to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedNose() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_NOSE) {
        equipTextSB.append("Your nose needs to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedLip() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_LIP) {
        equipTextSB.append("Your lip needs to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedTongue() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_TONGUE) {
        equipTextSB.append("Your tongue needs to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedNavel() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_STOMACH) {
        equipTextSB.append("Your navel needs to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedNipple() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_NIPPLE) {
        equipTextSB.append("Your nipples need to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedVagina() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_VAGINA) {
        equipTextSB.append("Your clit needs to be pierced before you can wear this!");
        return false;
    }
    if (!characterClothingOwner.isPiercedPenis() && newClothing.getClothingType().getSlot() == InventorySlot.PIERCING_PENIS) {
        equipTextSB.append("Your cock needs to be pierced before you can wear this!");
        return false;
    }
    // Check to see if any equipped clothing is incompatible with newClothing:
    incompatibleUnequippableClothing.clear();
    incompatibleRemovableClothing.clear();
    for (InventorySlot slot : newClothing.getClothingType().getIncompatibleSlots()) {
        if (getClothingInSlot(slot) != null) {
            if (!isAbleToUnequip(getClothingInSlot(slot), false, automaticClothingManagement, characterClothingOwner, characterClothingEquipper, true))
                incompatibleUnequippableClothing.add(getClothingInSlot(slot));
            else {
                clothingToRemove.put(getClothingInSlot(slot), DisplacementType.REMOVE_OR_EQUIP);
                incompatibleRemovableClothing.add(getClothingInSlot(slot));
            }
        }
    }
    // Check to see if newClothing is incompatible with any equipped clothing:
    for (AbstractClothing clothing : clothingCurrentlyEquipped) {
        if (clothing.getClothingType().getIncompatibleSlots().contains(newClothing.getClothingType().getSlot())) {
            if (!isAbleToUnequip(clothing, false, automaticClothingManagement, characterClothingOwner, characterClothingEquipper, true)) {
                incompatibleUnequippableClothing.add(clothing);
            } else {
                clothingToRemove.put(clothing, DisplacementType.REMOVE_OR_EQUIP);
                incompatibleRemovableClothing.add(clothing);
            }
        }
    }
    // There is at least one piece of clothing that is incompatible with newClothing, and that clothing cannot be removed.
    if (!incompatibleUnequippableClothing.isEmpty()) {
        for (AbstractClothing c : incompatibleUnequippableClothing) {
            if (c.isSealed())
                equipTextSB.append("You can't equip the " + newClothing.getName() + " because your <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b> " + c.getName() + " " + (c.getClothingType().isPlural() ? "are" : "is") + " in the way.");
        }
        return false;
    }
    // Check for access needed:
    for (BlockedParts bp : newClothing.getClothingType().getBlockedPartsList()) {
        if (bp.displacementType == DisplacementType.REMOVE_OR_EQUIP) {
            // Check for all blocking types that affect REMOVE_OR_EQUIP. (As we are trying to equip this item of clothing.)
            if (bp.clothingAccessRequired == null) {
                // This clothing doesn't need any access in order to be equipped, so just carry on.
                break;
            } else {
                // This clothing has access requirements in order to be equipped. Check each piece of equipped clothing to see if it's blocking the access required:
                for (AbstractClothing equippedClothing : clothingCurrentlyEquipped) {
                    for (BlockedParts bpEquipped : equippedClothing.getClothingType().getBlockedPartsList()) {
                        for (ClothingAccess caBlocked : bpEquipped.clothingAccessBlocked) {
                            if (bp.clothingAccessRequired.contains(caBlocked) && !equippedClothing.getDisplacedList().contains(bpEquipped.displacementType) && !isDisplacementAvailableFromElsewhere(equippedClothing, caBlocked)) {
                                if (!clothingToRemove.containsKey(equippedClothing)) {
                                    // This clothing has not already been marked for removal:
                                    if (automaticClothingManagement && isAbleToBeDisplaced(equippedClothing, bpEquipped.displacementType, false, automaticClothingManagement, characterClothingOwner, characterClothingEquipper, true)) {
                                        clothingToRemove.put(equippedClothing, bpEquipped.displacementType);
                                    } else {
                                        equipTextSB.append("Your <b style='color:" + Colour.GENERIC_BAD.toWebHexString() + ";'>" + equippedClothing.getName() + "</b> " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " preventing you from being able to equip the " + newClothing.getName() + "!");
                                        blockingClothing = equippedClothing;
                                        return false;
                                    }
                                } else {
                                    if (isAbleToUnequip(equippedClothing, false, automaticClothingManagement, characterClothingOwner, characterClothingEquipper, true)) {
                                        // Can be removed:
                                        clothingToRemove.put(equippedClothing, DisplacementType.REMOVE_OR_EQUIP);
                                    } else {
                                        if (equippedClothing.isSealed()) {
                                            equipTextSB.append("You can't equip the " + newClothing.getName() + " because your <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b> " + equippedClothing.getName() + " " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " in the way.");
                                        } else {
                                            equipTextSB.append("You can't equip the " + newClothing.getName() + " because your " + equippedClothing.getName() + " " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " in the way.");
                                        }
                                        blockingClothing = equippedClothing;
                                        return false;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    // If you want to equip this clothing now:
    if (equipIfAble) {
        equipTextSB = new StringBuilder();
        if (automaticClothingManagement || (clothingToRemove.size() == incompatibleRemovableClothing.size() + 1)) {
            if (getClothingInSlot(newClothing.getClothingType().getSlot()) != null) {
                AbstractClothing equippedClothing = getClothingInSlot(newClothing.getClothingType().getSlot());
                if (isAbleToUnequip(equippedClothing, false, automaticClothingManagement, characterClothingOwner, characterClothingEquipper, true)) {
                    // Can be removed:
                    clothingToRemove.put(equippedClothing, DisplacementType.REMOVE_OR_EQUIP);
                } else {
                    if (equippedClothing.isSealed()) {
                        equipTextSB.append("You can't equip the " + newClothing.getName() + " because your <b style='color:" + Colour.SEALED.toWebHexString() + ";'>sealed</b> " + equippedClothing.getName() + " " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " in the way.");
                    } else {
                        equipTextSB.append("You can't equip the " + newClothing.getName() + " because your " + equippedClothing.getName() + " " + (equippedClothing.getClothingType().isPlural() ? "are" : "is") + " in the way.");
                    }
                    blockingClothing = equippedClothing;
                    return false;
                }
            }
            // Sort clothing to remove in zLayer order(so you take off your
            // shirt before removing bra etc.):
            List<AbstractClothing> tempClothingList = new ArrayList<>();
            for (AbstractClothing cl : clothingToRemove.keySet()) if (!tempClothingList.contains(cl))
                tempClothingList.add(cl);
            for (AbstractClothing cl : incompatibleRemovableClothing) if (!tempClothingList.contains(cl))
                tempClothingList.add(cl);
            // tempClothingList.addAll(clothingToRemove.keySet());
            // tempClothingList.addAll(incompatibleRemovableClothing);
            // if (getClothingInSlot(newClothing.getClothingType().getSlot()) != null && !tempClothingList.contains(getClothingInSlot(newClothing.getClothingType().getSlot())))
            // tempClothingList.add(getClothingInSlot(newClothing.getClothingType().getSlot()));
            tempClothingList.sort(new ClothingZLayerComparator());
            List<AbstractClothing> clothingToBeReplaced = new ArrayList<>();
            // Description of each clothing item that is removed/displaced:
            for (AbstractClothing c : tempClothingList) {
                if (!incompatibleRemovableClothing.contains(c) && c != getClothingInSlot(newClothing.getClothingType().getSlot())) {
                    clothingToBeReplaced.add(c);
                }
                equipTextSB.append((equipTextSB.length() == 0 ? "" : "</br>") + (clothingToRemove.get(c) == DisplacementType.REMOVE_OR_EQUIP ? // (Main.game.isInSex()?Sex.isSubResisting():false))
                c.onUnequipText(characterClothingOwner, characterClothingEquipper, false) : "You " + clothingToRemove.get(c).getDescription() + " your " + c.getName() + "."));
            }
            // Remove all clothing that is incompatible with newClothing using the owner's accessor method.
            for (AbstractClothing c : incompatibleRemovableClothing) {
                if (!characterClothingOwner.isInventoryFull() || characterClothingOwner.hasClothing(c))
                    equipTextSB.append("</br>" + characterClothingOwner.addedItemToInventoryText(c));
                else
                    equipTextSB.append("</br>" + characterClothingOwner.droppedItemText(c));
                // this is a hack to fix the string builder being overwritten
                String oldEquipText = equipTextSB.toString();
                if (Main.game.isInNewWorld()) {
                    characterClothingOwner.unequipClothingIntoInventory(c, true, characterClothingEquipper);
                } else {
                    characterClothingOwner.unequipClothingOntoFloor(c, true, characterClothingEquipper);
                }
                equipTextSB.setLength(0);
                equipTextSB.append(oldEquipText);
            }
            // Clear the new clothing's displacement list as a precaution:
            newClothing.getDisplacedList().clear();
            // Remove the old clothing in this slot using the owner's accessor method:
            if (getClothingInSlot(newClothing.getClothingType().getSlot()) != null) {
                if (getClothingInSlot(newClothing.getClothingType().getSlot()).getClothingType().isDiscardedOnUnequip()) {
                    // this is a hack to fix the string builder being overwritten
                    String oldEquipText = equipTextSB.toString();
                    characterClothingOwner.unequipClothingIntoVoid(getClothingInSlot(newClothing.getClothingType().getSlot()), true, characterClothingEquipper);
                    equipTextSB.setLength(0);
                    equipTextSB.append(oldEquipText);
                } else {
                    if ((!characterClothingOwner.isInventoryFull() || characterClothingOwner.hasClothing(getClothingInSlot(newClothing.getClothingType().getSlot()))) && Main.game.isInNewWorld()) {
                        equipTextSB.append("</br>" + characterClothingOwner.addedItemToInventoryText(getClothingInSlot(newClothing.getClothingType().getSlot())));
                    } else {
                        equipTextSB.append("</br>" + characterClothingOwner.droppedItemText(getClothingInSlot(newClothing.getClothingType().getSlot())));
                    }
                    // this is a hack to fix the string builder being overwritten
                    String oldEquipText = equipTextSB.toString();
                    if (Main.game.isInNewWorld()) {
                        characterClothingOwner.unequipClothingIntoInventory(getClothingInSlot(newClothing.getClothingType().getSlot()), true, characterClothingEquipper);
                    } else {
                        characterClothingOwner.unequipClothingOntoFloor(getClothingInSlot(newClothing.getClothingType().getSlot()), true, characterClothingEquipper);
                    }
                    equipTextSB.setLength(0);
                    equipTextSB.append(oldEquipText);
                }
            }
            // Actually equip the newClothing:
            clothingCurrentlyEquipped.add(newClothing);
            // newClothing.getClothingType().setColourShade(newClothing.getColourShade());
            // (Main.game.isInSex()?Sex.isSubResisting():false)));
            equipTextSB.append((equipTextSB.length() == 0 ? "" : "</br>") + newClothing.onEquipApplyEffects(characterClothingOwner, characterClothingEquipper, false));
            clothingToBeReplaced.sort(new ReverseClothingZLayerComparator());
            if (!clothingToBeReplaced.isEmpty()) {
                // clothingCountToBeReplaced-incompatibleUnequippableClothing.size()>0)
                equipTextSB.append("</br>You replace " + (characterClothingOwner.isPlayer() ? "your" : characterClothingOwner.getName("the") + "'s") + " " + Util.clothesToStringList(clothingToBeReplaced) + ".");
            }
            // Check for clothing sets:
            if (newClothing.getClothingType().getClothingSet() != null) {
                if (clothingSetCount.get(newClothing.getClothingType().getClothingSet()) == null) {
                    clothingSetCount.put(newClothing.getClothingType().getClothingSet(), 1);
                } else {
                    clothingSetCount.put(newClothing.getClothingType().getClothingSet(), clothingSetCount.get(newClothing.getClothingType().getClothingSet()) + 1);
                }
            }
        }
        clothingCurrentlyEquipped.sort(new AbstractClothingRarityComparator());
    } else {
        if (clothingToRemove.isEmpty()) {
            equipTextSB.append(Util.capitaliseSentence(newClothing.getName(true)) + " " + (newClothing.getClothingType().isPlural() ? "are" : "is") + " able to be equipped.");
        } else {
            equipTextSB.append(Util.capitaliseSentence("Before" + newClothing.getClothingType().getDeterminer()) + " " + newClothing.getName() + " is able to be equipped, " + Util.clothesToStringList(clothingToRemove.keySet()) + " need" + (clothingToRemove.size() > 1 ? "" : "s") + " to be removed.");
        }
    }
    return true;
}
Also used : ReverseClothingZLayerComparator(com.lilithsthrone.utils.ReverseClothingZLayerComparator) BlockedParts(com.lilithsthrone.game.inventory.clothing.BlockedParts) ReverseClothingZLayerComparator(com.lilithsthrone.utils.ReverseClothingZLayerComparator) ClothingZLayerComparator(com.lilithsthrone.utils.ClothingZLayerComparator) AbstractClothing(com.lilithsthrone.game.inventory.clothing.AbstractClothing) ArrayList(java.util.ArrayList) AbstractClothingRarityComparator(com.lilithsthrone.utils.AbstractClothingRarityComparator) ClothingAccess(com.lilithsthrone.game.inventory.clothing.ClothingAccess)

Aggregations

AbstractClothing (com.lilithsthrone.game.inventory.clothing.AbstractClothing)2 BlockedParts (com.lilithsthrone.game.inventory.clothing.BlockedParts)2 ClothingAccess (com.lilithsthrone.game.inventory.clothing.ClothingAccess)2 AbstractClothingRarityComparator (com.lilithsthrone.utils.AbstractClothingRarityComparator)2 ClothingZLayerComparator (com.lilithsthrone.utils.ClothingZLayerComparator)2 ReverseClothingZLayerComparator (com.lilithsthrone.utils.ReverseClothingZLayerComparator)2 ArrayList (java.util.ArrayList)2