diff --git a/src/main/scala/li/cil/oc/client/GuiHandler.scala b/src/main/scala/li/cil/oc/client/GuiHandler.scala index de0f9e2ac..928d6a2f9 100644 --- a/src/main/scala/li/cil/oc/client/GuiHandler.scala +++ b/src/main/scala/li/cil/oc/client/GuiHandler.scala @@ -40,7 +40,7 @@ object GuiHandler extends CommonGuiHandler { val address = stack.getTagCompound.getString(Settings.namespace + "server") val key = stack.getTagCompound.getString(Settings.namespace + "key") if (key != null && !key.isEmpty && address != null && !address.isEmpty) { - tileentity.Rack.list. + tileentity.Rack.list.keys. flatMap(_.terminals). find(term => term.rack.isPresent(term.number) match { case Some(value) => value == address diff --git a/src/main/scala/li/cil/oc/client/Proxy.scala b/src/main/scala/li/cil/oc/client/Proxy.scala index 8c7923bda..dad460c32 100644 --- a/src/main/scala/li/cil/oc/client/Proxy.scala +++ b/src/main/scala/li/cil/oc/client/Proxy.scala @@ -11,6 +11,7 @@ import li.cil.oc.client.renderer.tileentity._ import li.cil.oc.client.renderer.WirelessNetworkDebugRenderer import li.cil.oc.common.{Proxy => CommonProxy, tileentity} import li.cil.oc.common.component.TextBuffer +import li.cil.oc.common.tileentity.Rack import li.cil.oc.{Items, OpenComputers} import net.minecraftforge.client.MinecraftForgeClient import net.minecraftforge.common.MinecraftForge @@ -60,6 +61,7 @@ private[oc] class Proxy extends CommonProxy { FMLCommonHandler.instance().bus().register(HologramRenderer) FMLCommonHandler.instance().bus().register(ScreenRenderer) MinecraftForge.EVENT_BUS.register(WirelessNetworkDebugRenderer) + MinecraftForge.EVENT_BUS.register(Rack) MinecraftForge.EVENT_BUS.register(TextBuffer) } } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala index 63ceb8fda..3d573f315 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala @@ -3,6 +3,7 @@ package li.cil.oc.common.tileentity import com.google.common.base.Strings import cpw.mods.fml.common.Optional import cpw.mods.fml.common.Optional.Method +import cpw.mods.fml.common.eventhandler.SubscribeEvent import cpw.mods.fml.relauncher.{Side, SideOnly} import li.cil.oc.api.Network import li.cil.oc.api.network.{Analyzable, Connector, Visibility, Node} @@ -20,6 +21,7 @@ import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.ForgeDirection import stargatetech2.api.bus.IBusDevice import scala.collection.mutable +import net.minecraftforge.event.world.WorldEvent // See AbstractBusAware as to why we have to define the IBusDevice here. @Optional.Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2") @@ -232,7 +234,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance override protected def initialize() { super.initialize() - Rack.list += this + Rack.list += this -> Unit } override protected def dispose() { @@ -387,5 +389,12 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance } object Rack { - val list = mutable.Set.empty[Rack] + val list = mutable.WeakHashMap.empty[Rack, Unit] + + @SubscribeEvent + def onWorldUnload(e: WorldEvent.Unload) { + if (e.world.isRemote) { + list.clear() + } + } }