From b610f33726684c5cc8dd75ee221cfbe83b3c781f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 25 Sep 2014 17:02:41 +0200 Subject: [PATCH] Made tablets a separate (internal until API change) slot type, allows rendering icon background in charger GUI. Tablets cannot be placed into disk drives any longer; this functionality is now achieved by placing them into chargers, making things a little less... all over the place. --- assets/items.psd | Bin 501001 -> 514352 bytes .../textures/items/icons/tablet.png | Bin 0 -> 270 bytes src/main/scala/li/cil/oc/common/Slot.scala | 4 +++- .../li/cil/oc/common/tileentity/Charger.scala | 22 ++++++++++++++---- .../li/cil/oc/server/driver/item/Tablet.scala | 2 +- 5 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/textures/items/icons/tablet.png diff --git a/assets/items.psd b/assets/items.psd index af438d55b438094b1794d10519b212602a3683c1..7cbc4eeb7c3c04cc83c82460e73b262099aecf0e 100644 GIT binary patch delta 3719 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 diff --git a/src/main/resources/assets/opencomputers/textures/items/icons/tablet.png b/src/main/resources/assets/opencomputers/textures/items/icons/tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..f748cc4082f1eb3a3b659dfbc5d42dcd19958b26 GIT binary patch literal 270 zcmV+p0rCEcP)$*Y+0hqNGrfJG<9TCAfSC#>dQB$F_ZCkeacN9qDIA$4}rny3Vw(^Y# zbFGwu7$bP^v&>p+FvgT;z-Sk$s>(Jl%W{%HdO!%#y`p(Xb%$`C=N|vQjSm3^0IFPJ UDyQ>zU;qFB07*qoM6N<$g0`z{TL1t6 literal 0 HcmV?d00001 diff --git a/src/main/scala/li/cil/oc/common/Slot.scala b/src/main/scala/li/cil/oc/common/Slot.scala index 5c989dd11..a8c781225 100644 --- a/src/main/scala/li/cil/oc/common/Slot.scala +++ b/src/main/scala/li/cil/oc/common/Slot.scala @@ -14,10 +14,11 @@ object Slot { val Floppy = "floppy" val HDD = "hdd" val Memory = "memory" + val Tablet = "tablet" val Tool = "tool" val Upgrade = "upgrade" - val All = Array(Card, ComponentBus, Container, CPU, Floppy, HDD, Memory, Tool, Upgrade) + val All = Array(Card, ComponentBus, Container, CPU, Floppy, HDD, Memory, Tablet, Tool, Upgrade) def apply(driver: api.driver.Item, stack: ItemStack, f: Option[ItemStack => api.driver.Slot] = scala.None) = f.getOrElse(driver.slot _)(stack) match { case li.cil.oc.api.driver.Slot.Card => Card @@ -31,6 +32,7 @@ object Slot { case _ => val descriptor = api.Items.get(stack) if (descriptor == api.Items.get("componentBus1") || descriptor == api.Items.get("componentBus2") || descriptor == api.Items.get("componentBus3")) ComponentBus + else if (descriptor == api.Items.get("tablet")) Tablet else None } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index db93de689..68a13526f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -1,7 +1,9 @@ package li.cil.oc.common.tileentity import cpw.mods.fml.relauncher.{Side, SideOnly} -import li.cil.oc.api.network.{Analyzable, Node, Visibility} +import li.cil.oc.api.Driver +import li.cil.oc.api.network.{Component, Analyzable, Node, Visibility} +import li.cil.oc.common.Slot import li.cil.oc.common.item.Tablet import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.ItemUtils @@ -11,7 +13,7 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.ForgeDirection -class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.Inventory with Analyzable { +class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.ComponentInventory with Analyzable { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() @@ -137,10 +139,20 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R override def getSizeInventory = 1 - override def getInventoryStackLimit = 1 + override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack))) match { + case (0, Some(driver)) => Slot(driver, stack) == Slot.Tablet + case _ => false + } - override def isItemValidForSlot(slot: Int, stack: ItemStack) = - slot == 0 && api.Items.get(stack) == api.Items.get("tablet") + override protected def onItemAdded(slot: Int, stack: ItemStack) { + super.onItemAdded(slot, stack) + components(slot) match { + case Some(environment) => environment.node match { + case component: Component => component.setVisibility(Visibility.Network) + } + case _ => + } + } // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/server/driver/item/Tablet.scala b/src/main/scala/li/cil/oc/server/driver/item/Tablet.scala index 809e14785..dddeb3c2a 100644 --- a/src/main/scala/li/cil/oc/server/driver/item/Tablet.scala +++ b/src/main/scala/li/cil/oc/server/driver/item/Tablet.scala @@ -16,7 +16,7 @@ object Tablet extends Item { }.headOption.map(FileSystem.createEnvironment(_, container)).orNull } - override def slot(stack: ItemStack) = Slot.Disk + override def slot(stack: ItemStack) = Slot.None override def dataTag(stack: ItemStack) = { val data = new ItemUtils.TabletData(stack)