use of mekanism.common.content.qio.IQIODriveItem.DriveMetadata in project Mekanism by mekanism.
the class RecipeUpgradeData method getUpgradeData.
/**
* Make sure to validate with getSupportedTypes before calling this
*/
@Nullable
static RecipeUpgradeData<?> getUpgradeData(@Nonnull RecipeUpgradeType type, @Nonnull ItemStack stack) {
Item item = stack.getItem();
switch(type) {
case ENERGY:
return new EnergyRecipeData(ItemDataUtils.getList(stack, NBTConstants.ENERGY_CONTAINERS));
case FLUID:
return new FluidRecipeData(ItemDataUtils.getList(stack, NBTConstants.FLUID_TANKS));
case GAS:
return new GasRecipeData(ItemDataUtils.getList(stack, NBTConstants.GAS_TANKS));
case INFUSION:
return new InfusionRecipeData(ItemDataUtils.getList(stack, NBTConstants.INFUSION_TANKS));
case PIGMENT:
return new PigmentRecipeData(ItemDataUtils.getList(stack, NBTConstants.PIGMENT_TANKS));
case SLURRY:
return new SlurryRecipeData(ItemDataUtils.getList(stack, NBTConstants.SLURRY_TANKS));
case ITEM:
return new ItemRecipeData(((ISustainedInventory) item).getInventory(stack));
case SECURITY:
ISecurityItem securityItem = (ISecurityItem) item;
UUID ownerUUID = securityItem.getOwnerUUID(stack);
return ownerUUID == null ? null : new SecurityRecipeData(ownerUUID, securityItem.getSecurity(stack));
case UPGRADE:
CompoundNBT componentUpgrade = ItemDataUtils.getCompound(stack, NBTConstants.COMPONENT_UPGRADE);
return componentUpgrade.isEmpty() ? null : new UpgradesRecipeData(Upgrade.buildMap(componentUpgrade));
case QIO_DRIVE:
DriveMetadata data = DriveMetadata.load(stack);
if (data.getCount() > 0 && ((IQIODriveItem) item).hasStoredItemMap(stack)) {
// If we don't have any stored items don't actually grab any recipe data
return new QIORecipeData(data, ItemDataUtils.getList(stack, NBTConstants.QIO_ITEM_MAP));
}
break;
}
return null;
}
use of mekanism.common.content.qio.IQIODriveItem.DriveMetadata in project Mekanism by mekanism.
the class QIORecipeData method applyToStack.
@Override
public boolean applyToStack(ItemStack stack) {
IQIODriveItem driveItem = (IQIODriveItem) stack.getItem();
if (itemCount > driveItem.getCountCapacity(stack) || itemMap.size() > driveItem.getTypeCapacity(stack)) {
// then return that we are not able to actually apply them to the stack
return false;
}
ListNBT list = new ListNBT();
for (Entry<HashedItem> entry : itemMap.object2LongEntrySet()) {
CompoundNBT tag = new CompoundNBT();
tag.put(NBTConstants.ITEM, entry.getKey().getStack().save(new CompoundNBT()));
tag.putLong(NBTConstants.AMOUNT, entry.getLongValue());
list.add(tag);
}
ItemDataUtils.setList(stack, NBTConstants.QIO_ITEM_MAP, list);
DriveMetadata meta = new DriveMetadata(itemCount, itemMap.size());
meta.write(stack);
return true;
}
Aggregations