diff --git a/src/main/scala/li/cil/oc/common/SaveHandler.scala b/src/main/scala/li/cil/oc/common/SaveHandler.scala index 464671897..a50d8f493 100644 --- a/src/main/scala/li/cil/oc/common/SaveHandler.scala +++ b/src/main/scala/li/cil/oc/common/SaveHandler.scala @@ -52,6 +52,10 @@ object SaveHandler { 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) = { val tmpNbt = new NBTTagCompound() save(tmpNbt) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala index da0437f23..dfc74778a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -2,6 +2,7 @@ package li.cil.oc.common.tileentity import cpw.mods.fml.relauncher.{Side, SideOnly} import li.cil.oc.api.network._ +import li.cil.oc.common.SaveHandler import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.{Settings, api} 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) { tier = nbt.getByte(Settings.namespace + "tier") max 0 min 1 super.readFromNBT(nbt) - nbt.getIntArray(Settings.namespace + "volume").copyToArray(volume) - nbt.getIntArray(Settings.namespace + "colors").map(convertColor).copyToArray(colors) + if (nbt.hasKey(Settings.namespace + "volume") && nbt.hasKey(Settings.namespace + "colors")) { + nbt.getIntArray(Settings.namespace + "volume").copyToArray(volume) + 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") } override def writeToNBT(nbt: NBTTagCompound) = this.synchronized { nbt.setByte(Settings.namespace + "tier", tier.toByte) super.writeToNBT(nbt) - nbt.setIntArray(Settings.namespace + "volume", volume) - nbt.setIntArray(Settings.namespace + "colors", colors.map(convertColor)) + SaveHandler.scheduleSave(world, x, z, nbt, node.address + "_data", tag => { + tag.setIntArray("volume", volume) + tag.setIntArray("colors", colors.map(convertColor)) + }) nbt.setDouble(Settings.namespace + "scale", scale) }