| package li.cil.oc.common.template |
| |
| import cpw.mods.fml.common.event.FMLInterModComms |
| import li.cil.oc.{Settings, api} |
| import li.cil.oc.common.{Slot, Tier} |
| import li.cil.oc.server.driver.item |
| import li.cil.oc.util.ExtendedNBT._ |
| import li.cil.oc.util.ItemUtils |
| import net.minecraft.inventory.IInventory |
| import net.minecraft.item.ItemStack |
| import net.minecraft.nbt.{NBTTagCompound, NBTTagList} |
| |
| import scala.collection.mutable |
| |
| object TabletTemplate extends Template { |
| override protected val suggestedComponents = Array( |
| "GraphicsCard" -> ((inventory: IInventory) => Array("graphicsCard1", "graphicsCard2", "graphicsCard3").exists(name => hasComponent(name)(inventory))), |
| "OS" -> hasFileSystem _) |
| |
| def select(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase") |
| |
| def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) |
| |
| def validateUpgrade(inventory: IInventory, slot: Int, tier: Int, stack: ItemStack): Boolean = Option(api.Driver.driverFor(stack)) match { |
| case Some(driver) if Slot(driver, stack) == Slot.Upgrade => |
| driver != item.Screen && |
| Slot(driver, stack) == Slot.Upgrade && driver.tier(stack) <= tier |
| case _ => false |
| } |
| |
| def assemble(inventory: IInventory): Array[AnyRef] = { |
| val items = mutable.ArrayBuffer( |
| Option(api.Items.get("screen1").createItemStack(1)) |
| ) ++ (1 until inventory.getSizeInventory).map(slot => Option(inventory.getStackInSlot(slot))) |
| val data = new ItemUtils.TabletData() |
| data.items = items.filter(_.isDefined).toArray |
| data.energy = Settings.get.bufferTablet |
| data.maxEnergy = data.energy |
| val stack = api.Items.get("tablet").createItemStack(1) |
| data.save(stack) |
| val energy = Settings.get.tabletBaseCost + complexity(inventory) * Settings.get.tabletComplexityCost |
| |
| Array(stack, double2Double(energy)) |
| } |
| |
| def register() { |
| val nbt = new NBTTagCompound() |
| nbt.setString("select", "li.cil.oc.common.template.TabletTemplate.select") |
| nbt.setString("validate", "li.cil.oc.common.template.TabletTemplate.validate") |
| nbt.setString("assemble", "li.cil.oc.common.template.TabletTemplate.assemble") |
| |
| val upgradeSlots = new NBTTagList() |
| upgradeSlots.appendTag(Map("tier" -> Tier.Three, "validate" -> "li.cil.oc.common.template.TabletTemplate.validateUpgrade")) |
| upgradeSlots.appendTag(Map("tier" -> Tier.Two, "validate" -> "li.cil.oc.common.template.TabletTemplate.validateUpgrade")) |
| upgradeSlots.appendTag(Map("tier" -> Tier.One, "validate" -> "li.cil.oc.common.template.TabletTemplate.validateUpgrade")) |
| nbt.setTag("upgradeSlots", upgradeSlots) |
| |
| val componentSlots = new NBTTagList() |
| componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Two)) |
| componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Two)) |
| componentSlots.appendTag(new NBTTagCompound()) |
| componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Two)) |
| componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Two)) |
| componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Two)) |
| componentSlots.appendTag(Map("type" -> Slot.HDD, "tier" -> Tier.Two)) |
| nbt.setTag("componentSlots", componentSlots) |
| |
| FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) |
| } |
| |
| override protected def maxComplexity(inventory: IInventory) = super.maxComplexity(inventory) - 10 |
| |
| override protected def caseTier(inventory: IInventory) = if (select(inventory.getStackInSlot(0))) Tier.Two else Tier.None |
| } |