blob: 8cf83785e25bcf0121e24ad97cc79f962f63b827 [file] [log] [blame] [raw]
package li.cil.oc.common.tileentity
import cpw.mods.fml.relauncher.{Side, SideOnly}
import li.cil.oc.api.network.Node
import li.cil.oc.client.gui
import li.cil.oc.common.component
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.util.{PackedColor, Persistable}
import net.minecraft.nbt.NBTTagCompound
trait Buffer extends Environment with Persistable {
protected val buffer_ = new component.Buffer(this)
protected var bufferIsDirty_ = false
protected var currentGui_ = None: Option[gui.Buffer]
def buffer = buffer_
def bufferIsDirty = bufferIsDirty_
def bufferIsDirty_=(value: Boolean) = bufferIsDirty_ = value
def currentGui = currentGui_
def currentGui_=(value: Option[gui.Buffer]) = currentGui_ = value
def node: Node = buffer.node
def tier: Int
// ----------------------------------------------------------------------- //
override def load(nbt: NBTTagCompound) = {
super.load(nbt)
buffer.load(nbt)
}
override def save(nbt: NBTTagCompound) = {
super.save(nbt)
buffer.save(nbt)
}
// ----------------------------------------------------------------------- //
def onScreenColorChange(foreground: Int, background: Int) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenColorChange(this, foreground, background)
}
}
def onScreenCopy(col: Int, row: Int, w: Int, h: Int, tx: Int, ty: Int) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenCopy(this, col, row, w, h, tx, ty)
}
else markForRenderUpdate()
}
def onScreenDepthChange(depth: PackedColor.Depth.Value) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenDepthChange(this, depth)
}
else markForRenderUpdate()
}
def onScreenFill(col: Int, row: Int, w: Int, h: Int, c: Char) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenFill(this, col, row, w, h, c)
}
else markForRenderUpdate()
}
def onScreenResolutionChange(w: Int, h: Int) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenResolutionChange(this, w, h)
}
else markForRenderUpdate()
}
def onScreenSet(col: Int, row: Int, s: String) {
if (isServer) {
world.markTileEntityChunkModified(x, y, z, this.asInstanceOf[net.minecraft.tileentity.TileEntity])
ServerPacketSender.sendScreenSet(this, col, row, s)
}
else markForRenderUpdate()
}
@SideOnly(Side.CLIENT)
protected def markForRenderUpdate() {
bufferIsDirty = true
}
}