Prevent potential NPE in Microcontroller if TE description packet is requested before the first TE update. Closes #1192.

Synchronize sound updates, may prevent potential CMEs.
This commit is contained in:
Florian Nücke 2015-05-31 14:15:05 +02:00
parent dc80da8d39
commit a64fd8c4ba
3 changed files with 35 additions and 22 deletions

View File

@ -36,9 +36,7 @@ private[oc] class Proxy extends CommonProxy {
api.API.manual = client.Manual api.API.manual = client.Manual
MinecraftForge.EVENT_BUS.register(Sound)
MinecraftForge.EVENT_BUS.register(gui.Icons) MinecraftForge.EVENT_BUS.register(gui.Icons)
MinecraftForge.EVENT_BUS.register(HighlightRenderer)
} }
override def init(e: FMLInitializationEvent) { override def init(e: FMLInitializationEvent) {
@ -76,8 +74,10 @@ private[oc] class Proxy extends CommonProxy {
ClientRegistry.registerKeyBinding(KeyBindings.materialCosts) ClientRegistry.registerKeyBinding(KeyBindings.materialCosts)
ClientRegistry.registerKeyBinding(KeyBindings.clipboardPaste) ClientRegistry.registerKeyBinding(KeyBindings.clipboardPaste)
MinecraftForge.EVENT_BUS.register(HighlightRenderer)
MinecraftForge.EVENT_BUS.register(PetRenderer) MinecraftForge.EVENT_BUS.register(PetRenderer)
MinecraftForge.EVENT_BUS.register(ServerRack) MinecraftForge.EVENT_BUS.register(ServerRack)
MinecraftForge.EVENT_BUS.register(Sound)
MinecraftForge.EVENT_BUS.register(TextBuffer) MinecraftForge.EVENT_BUS.register(TextBuffer)
MinecraftForge.EVENT_BUS.register(WirelessNetworkDebugRenderer) MinecraftForge.EVENT_BUS.register(WirelessNetworkDebugRenderer)
@ -86,6 +86,7 @@ private[oc] class Proxy extends CommonProxy {
FMLCommonHandler.instance.bus.register(Audio) FMLCommonHandler.instance.bus.register(Audio)
FMLCommonHandler.instance.bus.register(HologramRenderer) FMLCommonHandler.instance.bus.register(HologramRenderer)
FMLCommonHandler.instance.bus.register(PetRenderer) FMLCommonHandler.instance.bus.register(PetRenderer)
FMLCommonHandler.instance.bus.register(Sound)
FMLCommonHandler.instance.bus.register(TextBufferRenderCache) FMLCommonHandler.instance.bus.register(TextBufferRenderCache)
} }
} }

View File

@ -40,12 +40,16 @@ object Sound {
if (Settings.get.soundVolume > 0) { if (Settings.get.soundVolume > 0) {
updateTimer.scheduleAtFixedRate(new TimerTask { updateTimer.scheduleAtFixedRate(new TimerTask {
override def run() { override def run() {
sources.synchronized(updateCallable = Some(() => {
updateVolume() updateVolume()
processQueue() processQueue()
}))
} }
}, 500, 50) }, 500, 50)
} }
private var updateCallable = None: Option[() => Unit]
// Set in init event. // Set in init event.
var manager: SoundManager = _ var manager: SoundManager = _
@ -115,7 +119,8 @@ object Sound {
@SubscribeEvent @SubscribeEvent
def onTick(e: ClientTickEvent) { def onTick(e: ClientTickEvent) {
if (!hasPreloaded && soundSystem != null) { if (soundSystem != null) {
if (!hasPreloaded) {
hasPreloaded = true hasPreloaded = true
new Thread(new Runnable() { new Thread(new Runnable() {
override def run(): Unit = { override def run(): Unit = {
@ -136,6 +141,12 @@ object Sound {
} }
}) })
} }
sources.synchronized {
updateCallable.foreach(_())
updateCallable = None
}
}
} }
@SubscribeEvent @SubscribeEvent

View File

@ -134,6 +134,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C
override protected def connectItemNode(node: Node) { override protected def connectItemNode(node: Node) {
if (machine.node != null && node != null) { if (machine.node != null && node != null) {
api.Network.joinNewNetwork(machine.node)
machine.node.connect(node) machine.node.connect(node)
} }
} }