From 149ade42ff15755c0c70aa6fe1c77cb957f78f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 11 Jun 2014 17:43:35 +0200 Subject: [PATCH] Fixed remote terminals potentially breaking when relogging into a single player world. --- src/main/scala/li/cil/oc/client/GuiHandler.scala | 2 +- src/main/scala/li/cil/oc/client/Proxy.scala | 2 ++ .../scala/li/cil/oc/common/tileentity/Rack.scala | 13 +++++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/GuiHandler.scala b/src/main/scala/li/cil/oc/client/GuiHandler.scala index 144837d87..aac4a0331 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 8bb84b30b..feb62da0a 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.{TextBufferRenderCache, 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.minecraft.client.Minecraft import net.minecraft.client.resources.ReloadableResourceManager @@ -65,6 +66,7 @@ private[oc] class Proxy extends CommonProxy { TickRegistry.registerTickHandler(HologramRenderer, Side.CLIENT) TickRegistry.registerTickHandler(TextBufferRenderCache, Side.CLIENT) 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 eb1165994..dae89a632 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala @@ -18,6 +18,8 @@ import net.minecraft.util.ChatMessageComponent import net.minecraftforge.common.ForgeDirection import stargatetech2.api.bus.IBusDevice import scala.collection.mutable +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.event.ForgeSubscribe // See AbstractBusAware as to why we have to define the IBusDevice here. @Optional.Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2") @@ -230,7 +232,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] + + @ForgeSubscribe + def onWorldUnload(e: WorldEvent.Unload) { + if (e.world.isRemote) { + list.clear() + } + } } \ No newline at end of file