Added tier two and creative tablet cases.

Tier two and creative case also have space for a single container. When shift-rightclicking them, in addition to be powered off a GUI will open, giving access to the container slot, so you can, for example, insert and remove floppies on the go.
Also, tablet icons should be updated to reflect the tablet's run state more promptly now.
This commit is contained in:
Florian Nücke 2015-01-30 21:11:35 +01:00
parent a7a264b950
commit b0a4e8f857
26 changed files with 256 additions and 33 deletions

Binary file not shown.

View File

@ -81,7 +81,9 @@ item.oc.Server1.name=Server (Stufe 2)
item.oc.Server2.name=Server (Stufe 3)
item.oc.Server3.name=Server (Kreativ)
item.oc.Tablet.name=Tablet
item.oc.TabletCase.name=Tablet-Gehäuse
item.oc.TabletCase0.name=Tablet-Gehäuse (Stufe 1)
item.oc.TabletCase1.name=Tablet-Gehäuse (Stufe 2)
item.oc.TabletCase3.name=Tablet-Gehäuse (Kreativ)
item.oc.Terminal.name=Fernbedienung
item.oc.Transistor.name=Transistor
item.oc.UpgradeAngel.name=Schwebe-Upgrade
@ -175,6 +177,7 @@ oc:container.DiskDrive=Diskettenlaufwerk
oc:container.Server=Server
oc:container.ServerRack=Serverschrank
oc:container.Switch=Switch
oc:container.TabletWrapper=Tablet
# Keybinds
key.materialCosts=Materialkosten anzeigen

View File

@ -94,7 +94,9 @@ item.oc.Server1.name=Server (Tier 2)
item.oc.Server2.name=Server (Tier 3)
item.oc.Server3.name=Server (Creative)
item.oc.Tablet.name=Tablet
item.oc.TabletCase.name=Tablet Case
item.oc.TabletCase0.name=Tablet Case (Tier 1)
item.oc.TabletCase1.name=Tablet Case (Tier 2)
item.oc.TabletCase3.name=Tablet Case (Creative)
item.oc.Terminal.name=Remote Terminal
item.oc.Transistor.name=Transistor
item.oc.UpgradeAngel.name=Angel Upgrade
@ -199,6 +201,7 @@ oc:container.Raid=Raid
oc:container.Server=Server
oc:container.ServerRack=Server Rack
oc:container.Switch=Switch
oc:container.TabletWrapper=Tablet
# Keybinds
key.materialCosts=Show Material Costs

View File

@ -87,7 +87,9 @@ item.oc.Server1.name=Serveur (Niveau 2)
item.oc.Server2.name=Serveur (Niveau 3)
item.oc.Server3.name=Serveur (Créatif)
item.oc.Tablet.name=Tablette
item.oc.TabletCase.name=Boitier de tablette
item.oc.TabletCase.name=Boitier de tablette (Niveau 1)
item.oc.TabletCase.name=Boitier de tablette (Niveau 2)
item.oc.TabletCase.name=Boitier de tablette (Créatif)
item.oc.Terminal.name=Terminal à distance
item.oc.Transistor.name=Transistor
item.oc.UpgradeAngel.name=Amélioration ange
@ -187,6 +189,7 @@ oc:container.Raid=Raid
oc:container.Server=Serveur
oc:container.ServerRack=Support de serveur
oc:container.Switch=Routeur
oc:container.TabletWrapper=Tablette
# Keybinds
key.materialCosts=Montrer les coût en matériaux

View File

@ -79,7 +79,9 @@ item.oc.Server1.name=Server (Livello 2)
item.oc.Server2.name=Server (Livello 3)
item.oc.Server3.name=Server (Creativo)
item.oc.Tablet.name=Tablet
item.oc.TabletCase.name=Custodia Tablet
item.oc.TabletCase0.name=Custodia Tablet (Livello 1)
item.oc.TabletCase1.name=Custodia Tablet (Livello 2)
item.oc.TabletCase3.name=Custodia Tablet (Creativo)
item.oc.Terminal.name=Terminale Remoto
item.oc.Transistor.name=Transistor
item.oc.UpgradeAngel.name=Upgrade Angel
@ -173,6 +175,7 @@ oc:container.DiskDrive=Unità Disco
oc:container.Server=Server
oc:container.ServerRack=Server Rack
oc:container.Switch=Switch
oc:container.TabletWrapper=Tablet
# Keybinds
key.materialCosts=Mostra Costi Materiali

View File

@ -166,6 +166,7 @@ oc:container.DiskDrive=Дисковод
oc:container.Server=Сервер
oc:container.ServerRack=Серверная стойка
oc:container.Switch=Коммутатор
oc:container.TabletWrapper=Планшет
# Keybinds
key.materialCosts=Показать стоимость материала

View File

@ -81,7 +81,9 @@ item.oc.Server1.name=高级服务器
item.oc.Server2.name=超级服务器
item.oc.Server3.name=创造模式服务器
item.oc.Tablet.name=平板电脑
item.oc.TabletCase.name=平板电脑保护套
item.oc.TabletCase0.name=平板电脑保护套
item.oc.TabletCase1.name=平板电脑保护套
item.oc.TabletCase3.name=平板电脑保护套
item.oc.Terminal.name=远程终端
item.oc.Transistor.name=晶体管
item.oc.UpgradeAngel.name=天使方块升级
@ -175,6 +177,7 @@ oc:container.DiskDrive=磁盘驱动器
oc:container.Server=服务器
oc:container.ServerRack=服务器机架
oc:container.Switch=交换机
oc:container.TabletWrapper=平板电脑
# Keybinds
key.materialCosts=显示材料需求

View File

@ -81,7 +81,9 @@ item.oc.Server1.name=伺服器 (2級)
item.oc.Server2.name=伺服器 (3級)
item.oc.Server3.name=伺服器 (創造模式)
item.oc.Tablet.name=平板電腦
item.oc.TabletCase.name=平板電腦保護套
item.oc.TabletCase0.name=平板電腦保護套 (1級)
item.oc.TabletCase1.name=平板電腦保護套 (2級)
item.oc.TabletCase3.name=平板電腦保護套 (創造模式)
item.oc.Terminal.name=遠端終端機
item.oc.Transistor.name=電晶體
item.oc.UpgradeAngel.name=天使升級
@ -174,6 +176,7 @@ oc:container.DiskDrive=硬碟
oc:container.Server=伺服器
oc:container.ServerRack=伺服器機架
oc:container.Switch=路由器
oc:container.TabletWrapper=平板電腦
# Keybinds
key.materialCosts=顯示材料成本

View File

@ -31,11 +31,16 @@ terminal {
["oc:circuitChip3", "oc:screen2", "oc:wlanCard"]
[nuggetIron, "oc:keyboard", nuggetIron]]
}
tabletCase {
tabletCase1 {
input: [[ingotGold, button, ingotGold]
["oc:componentBus1", "oc:screen2", "oc:circuitChip3"]
[ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]]
}
tabletCase2 {
input: [["oc:circuitChip2", button, ingotGold]
["oc:componentBus3", "oc:screen2", "oc:circuitChip3"]
["oc:circuitChip2", "oc:materialCircuitBoardPrinted", ingotGold]]
}
server1 {
input: [[obsidian, "oc:ram4", obsidian]

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

View File

@ -9,7 +9,6 @@ import li.cil.oc.common.init.Items
import li.cil.oc.common.inventory.DatabaseInventory
import li.cil.oc.common.inventory.ServerInventory
import li.cil.oc.common.item
import li.cil.oc.common.item.Tablet
import li.cil.oc.common.tileentity
import li.cil.oc.common.{GuiHandler => CommonGuiHandler}
import net.minecraft.client.Minecraft
@ -72,14 +71,20 @@ object GuiHandler extends CommonGuiHandler {
case Some(tablet: item.Tablet) if id == GuiType.Tablet.id =>
val stack = player.getCurrentEquippedItem
if (stack.hasTagCompound) {
Tablet.get(stack, player).components.collect {
item.Tablet.get(stack, player).components.collect {
case Some(buffer: TextBuffer) => buffer
}.headOption match {
case Some(buffer: TextBuffer) => return new gui.Screen(buffer, true, () => true, () => true)
case _ =>
case Some(buffer: TextBuffer) => new gui.Screen(buffer, true, () => true, () => true)
case _ => null
}
}
null
else null
case Some(tablet: item.Tablet) if id == GuiType.TabletInner.id =>
val stack = player.getCurrentEquippedItem
if (stack.hasTagCompound) {
new gui.Tablet(player.inventory, item.Tablet.get(stack, player))
}
else null
case Some(terminal: item.Terminal) if id == GuiType.Terminal.id =>
val stack = player.getCurrentEquippedItem
if (stack.hasTagCompound) {

View File

@ -0,0 +1,26 @@
package li.cil.oc.client.gui
import li.cil.oc.Localization
import li.cil.oc.common.container
import li.cil.oc.common.item.TabletWrapper
import net.minecraft.entity.player.InventoryPlayer
import net.minecraft.inventory.Slot
class Tablet(playerInventory: InventoryPlayer, val tablet: TabletWrapper) extends DynamicGuiContainer(new container.Tablet(playerInventory, tablet)) {
override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) = {
super.drawSecondaryForegroundLayer(mouseX, mouseY)
fontRendererObj.drawString(
Localization.localizeImmediately(tablet.getInventoryName),
8, 6, 0x404040)
}
override def doesGuiPauseGame = false
protected override def handleMouseClick(slot: Slot, slotNumber: Int, button: Int, shift: Int) {
if (slot == null || slot.getStack != tablet.stack) {
super.handleMouseClick(slot, slotNumber, button, shift)
}
}
protected override def checkHotbarKeys(slot: Int) = false
}

View File

@ -58,6 +58,12 @@ abstract class GuiHandler extends IGuiHandler {
override def isUseableByPlayer(player: EntityPlayer) = player == player
})
case Some(tablet: item.Tablet) if id == GuiType.TabletInner.id =>
val stack = player.getCurrentEquippedItem
if (stack.hasTagCompound)
new container.Tablet(player.inventory, item.Tablet.get(stack, player))
else
null
case _ => null
}
case _ => null

View File

@ -28,6 +28,7 @@ object GuiType extends ScalaEnum {
val Server = new EnumVal { def name = "Server"; def subType = GuiType.Category.Item }
val Switch = new EnumVal { def name = "Switch"; def subType = GuiType.Category.Block }
val Tablet = new EnumVal { def name = "Tablet"; def subType = GuiType.Category.Item }
val TabletInner = new EnumVal { def name = "TabletInner"; def subType = GuiType.Category.Item }
val Terminal = new EnumVal { def name = "Terminal"; def subType = GuiType.Category.Item }
object Category extends ScalaEnum {

View File

@ -114,7 +114,8 @@ class Proxy {
OpenComputers.ID + ":rack" -> "serverRack",
OpenComputers.ID + ":appengTunnel" -> "", // Avoid breaking worlds for people that used the dev builds.
OpenComputers.ID + ":microcontrollerCase" -> "microcontrollerCase1",
OpenComputers.ID + ":droneCase" -> "droneCase1"
OpenComputers.ID + ":droneCase" -> "droneCase1",
OpenComputers.ID + ":tabletCase" -> "tabletCase1"
)
def missingMappings(e: FMLMissingMappingsEvent) {

View File

@ -0,0 +1,13 @@
package li.cil.oc.common.container
import li.cil.oc.common.item.TabletWrapper
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.entity.player.InventoryPlayer
class Tablet(playerInventory: InventoryPlayer, tablet: TabletWrapper) extends Player(playerInventory, tablet) {
addSlotToContainer(new StaticComponentSlot(this, otherInventory, otherInventory.getSizeInventory - 1, 80, 35, tablet.containerSlotType, tablet.containerSlotTier))
addPlayerInventorySlots(8, 84)
override def canInteractWith(player: EntityPlayer) = player == playerInventory.player
}

View File

@ -238,6 +238,7 @@ object Items extends ItemAPI {
def createConfiguredTablet() = {
val data = new TabletData()
data.tier = Tier.Four
data.energy = Settings.get.bufferTablet
data.maxEnergy = data.energy
data.items = Array(
@ -428,7 +429,7 @@ object Items extends ItemAPI {
registerItem(new item.DebugCard(multi), "debugCard")
// 1.3.5
Recipes.addMultiItem(new item.TabletCase(multi), "tabletCase", "oc:tabletCase")
Recipes.addMultiItem(new item.TabletCase(multi, Tier.One), "tabletCase1", "oc:tabletCase1")
Recipes.addMultiItem(new item.UpgradePiston(multi), "pistonUpgrade", "oc:pistonUpgrade")
Recipes.addMultiItem(new item.UpgradeTank(multi), "tankUpgrade", "oc:tankUpgrade")
Recipes.addMultiItem(new item.UpgradeTankController(multi), "tankControllerUpgrade", "oc:tankControllerUpgrade")
@ -462,5 +463,9 @@ object Items extends ItemAPI {
// 1.4.4
registerItem(new item.MicrocontrollerCase(multi, Tier.Four), "microcontrollerCaseCreative")
registerItem(new item.DroneCase(multi, Tier.Four), "droneCaseCreative")
// 1.4.7
Recipes.addMultiItem(new item.TabletCase(multi, Tier.Two), "tabletCase2", "oc:tabletCase2")
registerItem(new item.TabletCase(multi, Tier.Four), "tabletCaseCreative")
}
}

View File

@ -105,7 +105,7 @@ object Present {
add("cpu2", 6)
add("microcontrollerCase2", 6)
add("componentBus2", 6)
add("tabletCase", 5)
add("tabletCase1", 5)
add("upgradeContainer2", 5)
add("cardContainer2", 5)
add("graphicsCard2", 4)
@ -121,6 +121,7 @@ object Present {
add("ram5", 2)
add("upgradeContainer3", 2)
add("cardContainer3", 2)
add("tabletCase2", 1)
add("hdd3", 1)
add("chunkloaderUpgrade", 1)
add("cpu3", 1)

View File

@ -19,6 +19,7 @@ import li.cil.oc.Settings
import li.cil.oc.api
import li.cil.oc.api.Driver
import li.cil.oc.api.Machine
import li.cil.oc.api.driver.item.Container
import li.cil.oc.api.driver.item.Processor
import li.cil.oc.api.internal
import li.cil.oc.api.machine.Architecture
@ -28,10 +29,14 @@ import li.cil.oc.api.network.Node
import li.cil.oc.client.KeyBindings
import li.cil.oc.common.GuiType
import li.cil.oc.common.Slot
import li.cil.oc.common.Tier
import li.cil.oc.common.inventory.ComponentInventory
import li.cil.oc.common.item.data.TabletData
import li.cil.oc.integration.opencomputers.DriverKeyboard
import li.cil.oc.integration.opencomputers.DriverScreen
import li.cil.oc.server.component
import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.util.Rarity
import li.cil.oc.util.RotationHelper
import li.cil.oc.util.Tooltip
import net.minecraft.entity.Entity
@ -85,6 +90,11 @@ class Tablet(val parent: Delegator) extends Delegate {
}
}
override def rarity(stack: ItemStack) = {
val data = new TabletData(stack)
Rarity.byTier(data.tier)
}
override def isDamageable = true
override def damage(stack: ItemStack) = {
@ -129,7 +139,13 @@ class Tablet(val parent: Delegator) extends Delegate {
}
}
}
else if (!world.isRemote) Tablet.Server.get(stack, player).machine.stop()
else if (!world.isRemote) {
val tablet = Tablet.Server.get(stack, player)
tablet.machine.stop()
if (tablet.data.tier > Tier.One) {
player.openGui(OpenComputers, GuiType.TabletInner.id, world, 0, 0, 0)
}
}
player.swingItem()
stack
}
@ -149,6 +165,8 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp
private var isInitialized = !world.isRemote
private var lastRunning = false
def items = data.items
override def facing = RotationHelper.fromYaw(player.rotationYaw)
@ -237,11 +255,22 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp
override def getSizeInventory = items.length
override def isItemValidForSlot(slot: Int, stack: ItemStack) = true
override def isItemValidForSlot(slot: Int, stack: ItemStack) = slot == getSizeInventory - 1 && (Option(Driver.driverFor(stack, getClass)) match {
case Some(driver) =>
// Same special cases, similar as in robot, but allow keyboards,
// because clip-on keyboards kinda seem to make sense, I guess.
driver != DriverScreen &&
driver.slot(stack) == containerSlotType &&
driver.tier(stack) <= containerSlotTier
case _ => false
})
override def isUseableByPlayer(player: EntityPlayer) = machine.canInteract(player.getCommandSenderName)
override def markDirty() {}
override def markDirty(): Unit = {
data.save(stack)
player.inventory.markDirty()
}
// ----------------------------------------------------------------------- //
@ -255,6 +284,18 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp
// ----------------------------------------------------------------------- //
def containerSlotType = data.container.fold(Slot.None)(stack =>
Option(Driver.driverFor(stack, getClass)) match {
case Some(driver: Container) => driver.providedSlot(stack)
case _ => Slot.None
})
def containerSlotTier = data.container.fold(Tier.None)(stack =>
Option(Driver.driverFor(stack, getClass)) match {
case Some(driver: Container) => driver.providedTier(stack)
case _ => Tier.None
})
override def cpuArchitecture: Class[_ <: Architecture] = {
for (i <- 0 until getSizeInventory if isComponentSlot(i)) Option(getStackInSlot(i)) match {
case Some(s) => Option(Driver.driverFor(s, getClass)) match {
@ -319,6 +360,11 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp
data.isRunning = machine.isRunning
data.energy = tablet.node.globalBuffer()
data.maxEnergy = tablet.node.globalBufferSize()
if (lastRunning != machine.isRunning) {
lastRunning = machine.isRunning
markDirty()
}
}
}

View File

@ -1,3 +1,11 @@
package li.cil.oc.common.item
class TabletCase(val parent: Delegator) extends Delegate
import net.minecraft.item.ItemStack
class TabletCase(val parent: Delegator, val tier: Int) extends Delegate with ItemTier {
override val unlocalizedName = super.unlocalizedName + tier
override protected def tierFromDriver(stack: ItemStack) = tier
override protected def tooltipName = Option(super.unlocalizedName)
}

View File

@ -1,6 +1,7 @@
package li.cil.oc.common.item.data
import li.cil.oc.Settings
import li.cil.oc.common.Tier
import li.cil.oc.common.init.Items
import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.util.ItemUtils
@ -18,6 +19,8 @@ class TabletData extends ItemData {
var isRunning = false
var energy = 0.0
var maxEnergy = 0.0
var tier = Tier.One
var container: Option[ItemStack] = None
override def load(nbt: NBTTagCompound) {
nbt.getTagList(Settings.namespace + "items", NBT.TAG_COMPOUND).foreach((slotNbt: NBTTagCompound) => {
@ -29,6 +32,10 @@ class TabletData extends ItemData {
isRunning = nbt.getBoolean(Settings.namespace + "isRunning")
energy = nbt.getDouble(Settings.namespace + "energy")
maxEnergy = nbt.getDouble(Settings.namespace + "maxEnergy")
tier = nbt.getInteger(Settings.namespace + "tier")
if (nbt.hasKey(Settings.namespace + "container")) {
container = Option(ItemUtils.loadStack(nbt.getCompoundTag(Settings.namespace + "container")))
}
// Code for migrating from 1.4.1 -> 1.4.2, add EEPROM.
// TODO Remove in 1.5
@ -51,6 +58,8 @@ class TabletData extends ItemData {
nbt.setBoolean(Settings.namespace + "isRunning", isRunning)
nbt.setDouble(Settings.namespace + "energy", energy)
nbt.setDouble(Settings.namespace + "maxEnergy", maxEnergy)
nbt.setInteger(Settings.namespace + "tier", tier)
container.foreach(stack => nbt.setNewCompoundTag(Settings.namespace + "container", stack.writeToNBT))
// TODO Remove in 1.5
nbt.setBoolean(Settings.namespace + "biosFlag", true)

View File

@ -28,14 +28,14 @@ object RobotTemplate extends Template {
def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory)
def assemble(inventory: IInventory) = {
val items = (0 until inventory.getSizeInventory).map(inventory.getStackInSlot)
val items = (1 until inventory.getSizeInventory).map(inventory.getStackInSlot)
val data = new RobotData()
data.tier = ItemUtils.caseTier(inventory.getStackInSlot(0))
data.name = RobotData.randomName
data.robotEnergy = Settings.get.bufferRobot.toInt
data.totalEnergy = data.robotEnergy
data.containers = items.slice(1, 4).filter(_ != null).toArray
data.components = items.drop(4).filter(_ != null).toArray
data.containers = items.take(3).filter(_ != null).toArray
data.components = items.drop(3).filter(_ != null).toArray
val stack = api.Items.get("robot").createItemStack(1)
data.save(stack)
val energy = Settings.get.robotBaseCost + complexity(inventory) * Settings.get.robotComplexityCost

View File

@ -8,13 +8,12 @@ import li.cil.oc.common.Slot
import li.cil.oc.common.Tier
import li.cil.oc.common.item.data.TabletData
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
import net.minecraft.nbt.NBTTagList
import scala.collection.mutable
object TabletTemplate extends Template {
override protected val suggestedComponents = Array(
"BIOS" -> hasComponent("eeprom") _,
@ -24,16 +23,20 @@ object TabletTemplate extends Template {
override protected def hostClass = classOf[internal.Tablet]
def select(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase")
def selectTier1(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase1")
def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase2")
def selectCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCaseCreative")
def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory)
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 items = (1 until inventory.getSizeInventory).map(slot => Option(inventory.getStackInSlot(slot)))
val data = new TabletData()
data.items = items.filter(_.isDefined).toArray
data.tier = ItemUtils.caseTier(inventory.getStackInSlot(0))
data.container = items.headOption.getOrElse(None)
data.items = Array(Option(api.Items.get("screen1").createItemStack(1))) ++ items.drop(if (data.tier == Tier.One) 0 else 1).filter(_.isDefined)
data.energy = Settings.get.bufferTablet
data.maxEnergy = data.energy
val stack = api.Items.get("tablet").createItemStack(1)
@ -56,8 +59,8 @@ object TabletTemplate extends Template {
// Tier 1
{
val nbt = new NBTTagCompound()
nbt.setString("name", "Tablet")
nbt.setString("select", "li.cil.oc.common.template.TabletTemplate.select")
nbt.setString("name", "Tablet (Tier 1)")
nbt.setString("select", "li.cil.oc.common.template.TabletTemplate.selectTier1")
nbt.setString("validate", "li.cil.oc.common.template.TabletTemplate.validate")
nbt.setString("assemble", "li.cil.oc.common.template.TabletTemplate.assemble")
nbt.setString("hostClass", "li.cil.oc.api.internal.Tablet")
@ -82,6 +85,78 @@ object TabletTemplate extends Template {
FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt)
}
// Tier 2
{
val nbt = new NBTTagCompound()
nbt.setString("name", "Tablet (Tier 2)")
nbt.setString("select", "li.cil.oc.common.template.TabletTemplate.selectTier2")
nbt.setString("validate", "li.cil.oc.common.template.TabletTemplate.validate")
nbt.setString("assemble", "li.cil.oc.common.template.TabletTemplate.assemble")
nbt.setString("hostClass", "li.cil.oc.api.internal.Tablet")
val containerSlots = new NBTTagList()
containerSlots.appendTag(Map("tier" -> Tier.Two))
nbt.setTag("containerSlots", containerSlots)
val upgradeSlots = new NBTTagList()
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Two))
upgradeSlots.appendTag(Map("tier" -> Tier.Two))
nbt.setTag("upgradeSlots", upgradeSlots)
val componentSlots = new NBTTagList()
componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Two))
componentSlots.appendTag(new NBTTagCompound())
componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Two))
componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Two))
componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any))
componentSlots.appendTag(Map("type" -> Slot.HDD, "tier" -> Tier.Two))
nbt.setTag("componentSlots", componentSlots)
FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt)
}
// Creative
{
val nbt = new NBTTagCompound()
nbt.setString("name", "Tablet (Creative)")
nbt.setString("select", "li.cil.oc.common.template.TabletTemplate.selectCreative")
nbt.setString("validate", "li.cil.oc.common.template.TabletTemplate.validate")
nbt.setString("assemble", "li.cil.oc.common.template.TabletTemplate.assemble")
nbt.setString("hostClass", "li.cil.oc.api.internal.Tablet")
val containerSlots = new NBTTagList()
containerSlots.appendTag(Map("tier" -> Tier.Three))
nbt.setTag("containerSlots", containerSlots)
val upgradeSlots = new NBTTagList()
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
upgradeSlots.appendTag(Map("tier" -> Tier.Three))
nbt.setTag("upgradeSlots", upgradeSlots)
val componentSlots = new NBTTagList()
componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three))
componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any))
componentSlots.appendTag(Map("type" -> Slot.HDD, "tier" -> Tier.Three))
nbt.setTag("componentSlots", componentSlots)
FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt)
}
// Disassembler
{
val nbt = new NBTTagCompound()
@ -93,7 +168,7 @@ object TabletTemplate extends Template {
}
}
override protected def maxComplexity(inventory: IInventory) = super.maxComplexity(inventory) - 10
override protected def maxComplexity(inventory: IInventory) = super.maxComplexity(inventory) / 2 + 5
override protected def caseTier(inventory: IInventory) = if (select(inventory.getStackInSlot(0))) Tier.Two else Tier.None
override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0))
}

View File

@ -36,6 +36,9 @@ object ItemUtils {
else if (descriptor == api.Items.get("server2")) Tier.Two
else if (descriptor == api.Items.get("server3")) Tier.Three
else if (descriptor == api.Items.get("serverCreative")) Tier.Four
else if (descriptor == api.Items.get("tabletCase1")) Tier.One
else if (descriptor == api.Items.get("tabletCase2")) Tier.Two
else if (descriptor == api.Items.get("tabletCaseCreative")) Tier.Four
else Tier.None
}