blob: 3c783e47c99ef52eed06c64c9b33fa32f4ab6748 [file] [log] [blame] [raw]
package li.cil.oc.common.recipe
import li.cil.oc.Settings
import li.cil.oc.common.Loot
import li.cil.oc.integration.util.Wrench
import net.minecraft.inventory.InventoryCrafting
import net.minecraft.item.ItemStack
import net.minecraft.item.crafting.IRecipe
import net.minecraft.world.World
class LootDiskCyclingRecipe extends IRecipe {
override def matches(crafting: InventoryCrafting, world: World): Boolean = {
val stacks = collectStacks(crafting).toArray
stacks.length == 2 && stacks.exists(Loot.isLootDisk) && stacks.exists(Wrench.isWrench)
}
override def getCraftingResult(crafting: InventoryCrafting): ItemStack = {
val lootDiskStacks = Loot.worldDisks.map(_._1)
collectStacks(crafting).find(Loot.isLootDisk) match {
case Some(lootDisk) if lootDiskStacks.nonEmpty =>
val lootFactoryName = getLootFactoryName(lootDisk)
val oldIndex = lootDiskStacks.indexWhere(s => getLootFactoryName(s) == lootFactoryName)
val newIndex = (oldIndex + 1) % lootDiskStacks.length
lootDiskStacks(newIndex).copy()
case _ => null
}
}
def getLootFactoryName(stack: ItemStack) = stack.getTagCompound.getString(Settings.namespace + "lootFactory")
def collectStacks(crafting: InventoryCrafting) = (0 until crafting.getSizeInventory).flatMap(i => Option(crafting.getStackInSlot(i)))
override def getRecipeSize: Int = 2
override def getRecipeOutput: ItemStack = null
}