blob: 20c500362a5916c62c56bbdf2f0e337afe006a1b [file] [log] [blame] [raw]
package li.cil.oc.common.container
import li.cil.oc.api.component.RackMountable
import li.cil.oc.common.Slot
import li.cil.oc.common.tileentity
import li.cil.oc.util.ExtendedNBT._
import net.minecraft.entity.player.InventoryPlayer
import net.minecraft.nbt.NBTTagCompound
import net.minecraft.nbt.NBTTagIntArray
import net.minecraftforge.common.util.Constants.NBT
import net.minecraftforge.common.util.ForgeDirection
class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends Player(playerInventory, rack) {
addSlotToContainer(20, 23, Slot.RackMountable)
addSlotToContainer(20, 43, Slot.RackMountable)
addSlotToContainer(20, 63, Slot.RackMountable)
addSlotToContainer(20, 83, Slot.RackMountable)
addPlayerInventorySlots(8, 128)
final val MaxConnections = 4
val nodePresence = Array.fill(4)(Array.fill(4)(false))
override def updateCustomData(nbt: NBTTagCompound): Unit = {
super.updateCustomData(nbt)
nbt.getTagList("nodeMapping", NBT.TAG_INT_ARRAY).map((sides: NBTTagIntArray) => {
sides.func_150302_c().map(side => if (side >= 0) Option(ForgeDirection.getOrientation(side)) else None)
}).copyToArray(rack.nodeMapping)
nbt.getBooleanArray("nodePresence").grouped(MaxConnections).copyToArray(nodePresence)
rack.isRelayEnabled = nbt.getBoolean("isRelayEnabled")
}
override protected def detectCustomDataChanges(nbt: NBTTagCompound): Unit = {
super.detectCustomDataChanges(nbt)
nbt.setNewTagList("nodeMapping", rack.nodeMapping.map(sides => toNbt(sides.map {
case Some(side) => side.ordinal()
case _ => -1
})))
nbt.setBooleanArray("nodePresence", (0 until rack.getSizeInventory).flatMap(slot => rack.getMountable(slot) match {
case mountable: RackMountable => (Seq(true) ++ (0 until math.min(MaxConnections - 1, mountable.getConnectableCount)).map(index => mountable.getConnectableAt(index) != null)).padTo(MaxConnections, false)
case _ => Array.fill(MaxConnections)(false)
}).toArray)
nbt.setBoolean("isRelayEnabled", rack.isRelayEnabled)
}
}