Externalized saved data for holograms.

This commit is contained in:
Florian Nücke 2014-08-23 23:26:38 +02:00
parent 08e203a36f
commit 7e67db13b1
2 changed files with 18 additions and 4 deletions

View File

@ -52,6 +52,10 @@ object SaveHandler {
scheduleSave(dimension, chunk, name, data) scheduleSave(dimension, chunk, name, data)
} }
def scheduleSave(world: World, x: Int, z: Int, nbt: NBTTagCompound, name: String, save: NBTTagCompound => Unit) {
scheduleSave(world, x, z, nbt, name, writeNBT(save))
}
private def writeNBT(save: NBTTagCompound => Unit) = { private def writeNBT(save: NBTTagCompound => Unit) = {
val tmpNbt = new NBTTagCompound() val tmpNbt = new NBTTagCompound()
save(tmpNbt) save(tmpNbt)

View File

@ -2,6 +2,7 @@ package li.cil.oc.common.tileentity
import cpw.mods.fml.relauncher.{Side, SideOnly} import cpw.mods.fml.relauncher.{Side, SideOnly}
import li.cil.oc.api.network._ import li.cil.oc.api.network._
import li.cil.oc.common.SaveHandler
import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.{Settings, api} import li.cil.oc.{Settings, api}
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
@ -308,16 +309,25 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w
override def readFromNBT(nbt: NBTTagCompound) { override def readFromNBT(nbt: NBTTagCompound) {
tier = nbt.getByte(Settings.namespace + "tier") max 0 min 1 tier = nbt.getByte(Settings.namespace + "tier") max 0 min 1
super.readFromNBT(nbt) super.readFromNBT(nbt)
if (nbt.hasKey(Settings.namespace + "volume") && nbt.hasKey(Settings.namespace + "colors")) {
nbt.getIntArray(Settings.namespace + "volume").copyToArray(volume) nbt.getIntArray(Settings.namespace + "volume").copyToArray(volume)
nbt.getIntArray(Settings.namespace + "colors").map(convertColor).copyToArray(colors) nbt.getIntArray(Settings.namespace + "colors").map(convertColor).copyToArray(colors)
}
else {
val tag = SaveHandler.loadNBT(nbt, node.address + "_data")
tag.getIntArray("volume").copyToArray(volume)
tag.getIntArray("colors").map(convertColor).copyToArray(colors)
}
scale = nbt.getDouble(Settings.namespace + "scale") scale = nbt.getDouble(Settings.namespace + "scale")
} }
override def writeToNBT(nbt: NBTTagCompound) = this.synchronized { override def writeToNBT(nbt: NBTTagCompound) = this.synchronized {
nbt.setByte(Settings.namespace + "tier", tier.toByte) nbt.setByte(Settings.namespace + "tier", tier.toByte)
super.writeToNBT(nbt) super.writeToNBT(nbt)
nbt.setIntArray(Settings.namespace + "volume", volume) SaveHandler.scheduleSave(world, x, z, nbt, node.address + "_data", tag => {
nbt.setIntArray(Settings.namespace + "colors", colors.map(convertColor)) tag.setIntArray("volume", volume)
tag.setIntArray("colors", colors.map(convertColor))
})
nbt.setDouble(Settings.namespace + "scale", scale) nbt.setDouble(Settings.namespace + "scale", scale)
} }