mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-13 01:10:19 -04:00
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:
parent
a7a264b950
commit
b0a4e8f857
BIN
assets/items.psd
BIN
assets/items.psd
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -166,6 +166,7 @@ oc:container.DiskDrive=Дисковод
|
||||
oc:container.Server=Сервер
|
||||
oc:container.ServerRack=Серверная стойка
|
||||
oc:container.Switch=Коммутатор
|
||||
oc:container.TabletWrapper=Планшет
|
||||
|
||||
# Keybinds
|
||||
key.materialCosts=Показать стоимость материала
|
||||
|
@ -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=显示材料需求
|
||||
|
@ -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=顯示材料成本
|
||||
|
@ -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]
|
||||
|
Before Width: | Height: | Size: 400 B After Width: | Height: | Size: 400 B |
Binary file not shown.
After Width: | Height: | Size: 389 B |
Binary file not shown.
After Width: | Height: | Size: 389 B |
@ -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) {
|
||||
|
26
src/main/scala/li/cil/oc/client/gui/Tablet.scala
Normal file
26
src/main/scala/li/cil/oc/client/gui/Tablet.scala
Normal 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
|
||||
}
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
13
src/main/scala/li/cil/oc/common/container/Tablet.scala
Normal file
13
src/main/scala/li/cil/oc/common/container/Tablet.scala
Normal 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
|
||||
}
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user