| 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) |
| } |
| } |