Search in sources :

Example 36 with PartData

use of net.silentchaos512.gear.gear.part.PartData in project Silent-Gear by SilentChaos512.

the class CompoundPartSalvagingRecipe method getPossibleResults.

@Override
public List<ItemStack> getPossibleResults(Container inv) {
    ItemStack input = inv.getItem(0);
    List<ItemStack> ret = new ArrayList<>();
    PartData part = PartData.from(input);
    if (part != null) {
        ret.addAll(salvage(part));
    }
    return ret;
}
Also used : ArrayList(java.util.ArrayList) PartData(net.silentchaos512.gear.gear.part.PartData) ItemStack(net.minecraft.world.item.ItemStack)

Example 37 with PartData

use of net.silentchaos512.gear.gear.part.PartData in project Silent-Gear by SilentChaos512.

the class SalvagingRecipe method salvage.

/**
 * Salvages parts into their respective material items, or fragments if appropriate. This does
 * not necessarily give back the original item used for the material, but an item that matches
 * it.
 *
 * @param part The part
 * @return The list of items to return
 */
public static List<ItemStack> salvage(PartData part) {
    if (part.get() instanceof CompoundPart && part.getItem().getItem() instanceof CompoundPartItem) {
        int craftedCount = ((CompoundPartItem) part.getItem().getItem()).getCraftedCount(part.getItem());
        if (craftedCount < 1) {
            SilentGear.LOGGER.warn("Compound part's crafted count is less than 1? {}", part.getItem());
            return Collections.singletonList(part.getItem());
        }
        List<IMaterialInstance> materials = part.getMaterials();
        Map<IMaterialInstance, Integer> fragments = new LinkedHashMap<>();
        for (IMaterialInstance material : materials) {
            int fragmentCount = 8 / craftedCount;
            fragments.merge(material.onSalvage(), fragmentCount, Integer::sum);
        }
        List<ItemStack> ret = new ArrayList<>();
        for (Map.Entry<IMaterialInstance, Integer> entry : fragments.entrySet()) {
            IMaterialInstance material = entry.getKey();
            int count = entry.getValue();
            int fulls = count / 8;
            int frags = count % 8;
            if (fulls > 0) {
                ret.add(material.getItem());
            }
            if (frags > 0) {
                ret.add(ModItems.FRAGMENT.get().create(material, frags));
            }
        }
        return ret;
    }
    return Collections.singletonList(part.getItem());
}
Also used : CompoundPartItem(net.silentchaos512.gear.item.CompoundPartItem) CompoundPart(net.silentchaos512.gear.gear.part.CompoundPart) IMaterialInstance(net.silentchaos512.gear.api.material.IMaterialInstance) ItemStack(net.minecraft.world.item.ItemStack)

Example 38 with PartData

use of net.silentchaos512.gear.gear.part.PartData in project Silent-Gear by SilentChaos512.

the class GearData method addOrReplacePart.

public static Optional<PartData> addOrReplacePart(ItemStack gear, PartData part) {
    PartType partType = part.getType();
    PartDataList parts = getConstructionParts(gear);
    List<PartData> partsOfType = parts.getPartsOfType(partType);
    PartData removedPart = null;
    if (!partsOfType.isEmpty() && partsOfType.size() >= partType.getMaxPerItem(GearHelper.getType(gear))) {
        removedPart = partsOfType.get(0);
        parts.remove(removedPart);
        removedPart.onRemoveFromGear(gear);
    }
    parts.add(part);
    writeConstructionParts(gear, parts);
    return Optional.ofNullable(removedPart);
}
Also used : PartType(net.silentchaos512.gear.api.part.PartType) PartDataList(net.silentchaos512.gear.api.part.PartDataList) PartData(net.silentchaos512.gear.gear.part.PartData) IPartData(net.silentchaos512.gear.api.part.IPartData)

Example 39 with PartData

use of net.silentchaos512.gear.gear.part.PartData in project Silent-Gear by SilentChaos512.

the class GearData method removeFirstPartOfType.

public static boolean removeFirstPartOfType(ItemStack gear, PartType type) {
    PartDataList parts = getConstructionParts(gear);
    List<PartData> partsOfType = new ArrayList<>(parts.getPartsOfType(type));
    if (!partsOfType.isEmpty()) {
        PartData removed = partsOfType.remove(0);
        parts.remove(removed);
        writeConstructionParts(gear, parts);
        removed.onRemoveFromGear(gear);
        return true;
    }
    return false;
}
Also used : PartDataList(net.silentchaos512.gear.api.part.PartDataList) PartData(net.silentchaos512.gear.gear.part.PartData) IPartData(net.silentchaos512.gear.api.part.IPartData)

Example 40 with PartData

use of net.silentchaos512.gear.gear.part.PartData in project Silent-Gear by SilentChaos512.

the class GearData method getConstructionParts.

public static PartDataList getConstructionParts(ItemStack stack) {
    if (!GearHelper.isGear(stack))
        return PartDataList.empty();
    CompoundTag tags = getData(stack, NBT_ROOT_CONSTRUCTION);
    ListTag tagList = tags.getList(NBT_CONSTRUCTION_PARTS, Tag.TAG_COMPOUND);
    PartDataList list = PartDataList.of();
    for (Tag nbt : tagList) {
        if (nbt instanceof CompoundTag) {
            CompoundTag partCompound = (CompoundTag) nbt;
            PartData part = PartData.read(partCompound);
            if (part != null) {
                list.add(part);
            }
        }
    }
    return list;
}
Also used : PartDataList(net.silentchaos512.gear.api.part.PartDataList) PartData(net.silentchaos512.gear.gear.part.PartData) IPartData(net.silentchaos512.gear.api.part.IPartData) Tag(net.minecraft.nbt.Tag) CompoundTag(net.minecraft.nbt.CompoundTag) ListTag(net.minecraft.nbt.ListTag) ListTag(net.minecraft.nbt.ListTag) CompoundTag(net.minecraft.nbt.CompoundTag)

Aggregations

PartData (net.silentchaos512.gear.gear.part.PartData)36 ItemStack (net.minecraft.world.item.ItemStack)16 IPartData (net.silentchaos512.gear.api.part.IPartData)14 PartDataList (net.silentchaos512.gear.api.part.PartDataList)13 ICoreItem (net.silentchaos512.gear.api.item.ICoreItem)12 PartType (net.silentchaos512.gear.api.part.PartType)9 GearType (net.silentchaos512.gear.api.item.GearType)8 MaterialInstance (net.silentchaos512.gear.gear.material.MaterialInstance)8 IMaterialInstance (net.silentchaos512.gear.api.material.IMaterialInstance)6 MaterialLayer (net.silentchaos512.gear.api.material.MaterialLayer)6 ArrayList (java.util.ArrayList)5 Component (net.minecraft.network.chat.Component)5 TranslatableComponent (net.minecraft.network.chat.TranslatableComponent)5 TextComponent (net.minecraft.network.chat.TextComponent)4 ItemStat (net.silentchaos512.gear.api.stats.ItemStat)4 StatInstance (net.silentchaos512.gear.api.stats.StatInstance)4 TraitInstance (net.silentchaos512.gear.api.traits.TraitInstance)4 Nullable (javax.annotation.Nullable)3 CompoundTag (net.minecraft.nbt.CompoundTag)3 MutableComponent (net.minecraft.network.chat.MutableComponent)3