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;
}
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());
}
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);
}
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;
}
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;
}
Aggregations