blob: a011be5dcdc358165d92b9b9f55ca4a77e302290 [file] [log] [blame] [raw]
package li.cil.oc.common.tileentity
import cpw.mods.fml.relauncher.Side
import cpw.mods.fml.relauncher.SideOnly
import li.cil.oc.api
import li.cil.oc.api.Driver
import li.cil.oc.api.network.Analyzable
import li.cil.oc.api.network.Node
import li.cil.oc.api.network.Visibility
import li.cil.oc.common.Slot
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.util.ExtendedNBT._
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagByte
import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.Constants.NBT
class Raid extends traits.Environment with traits.Inventory with traits.Rotatable with Analyzable {
val node = api.Network.newNode(this, Visibility.None).create()
var filesystem: Option[Node] = None
// Used on client side to check whether to render disk activity indicators.
var lastAccess = 0L
// For client side rendering.
val presence = Array.fill(getSizeInventory)(false)
// ----------------------------------------------------------------------- //
override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = Array(filesystem.orNull)
override def canUpdate = false
// ----------------------------------------------------------------------- //
override def getSizeInventory = 3
override def getInventoryStackLimit = 1
override def isItemValidForSlot(slot: Int, stack: ItemStack) = Option(Driver.driverFor(stack, getClass)) match {
case Some(driver) => driver.slot(stack) == Slot.HDD
case _ => false
}
override protected def onItemAdded(slot: Int, stack: ItemStack) {
super.onItemAdded(slot, stack)
if (isServer) {
ServerPacketSender.sendRaidChange(this)
}
}
override protected def onItemRemoved(slot: Int, stack: ItemStack) {
super.onItemRemoved(slot, stack)
if (isServer) {
ServerPacketSender.sendRaidChange(this)
}
}
// ----------------------------------------------------------------------- //
@SideOnly(Side.CLIENT) override
def readFromNBTForClient(nbt: NBTTagCompound) {
super.readFromNBTForClient(nbt)
nbt.setNewTagList("presence", items.map(_.isDefined))
}
override def writeToNBTForClient(nbt: NBTTagCompound) {
super.writeToNBTForClient(nbt)
nbt.getTagList("presence", NBT.TAG_BYTE).
map((tag: NBTTagByte) => tag.func_150290_f() != 0).
copyToArray(presence)
}
}