mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-13 01:10:19 -04:00
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:
parent
dc80da8d39
commit
a64fd8c4ba
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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() {
|
||||||
updateVolume()
|
sources.synchronized(updateCallable = Some(() => {
|
||||||
processQueue()
|
updateVolume()
|
||||||
|
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,26 +119,33 @@ object Sound {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
def onTick(e: ClientTickEvent) {
|
def onTick(e: ClientTickEvent) {
|
||||||
if (!hasPreloaded && soundSystem != null) {
|
if (soundSystem != null) {
|
||||||
hasPreloaded = true
|
if (!hasPreloaded) {
|
||||||
new Thread(new Runnable() {
|
hasPreloaded = true
|
||||||
override def run(): Unit = {
|
new Thread(new Runnable() {
|
||||||
val preloadConfigLocation = new ResourceLocation(Settings.resourceDomain, "sounds/preload.cfg")
|
override def run(): Unit = {
|
||||||
val preloadConfigResource = Minecraft.getMinecraft.getResourceManager.getResource(preloadConfigLocation)
|
val preloadConfigLocation = new ResourceLocation(Settings.resourceDomain, "sounds/preload.cfg")
|
||||||
for (location <- Source.fromInputStream(preloadConfigResource.getInputStream)(Charsets.UTF_8).getLines()) {
|
val preloadConfigResource = Minecraft.getMinecraft.getResourceManager.getResource(preloadConfigLocation)
|
||||||
val url = getClass.getClassLoader.getResource(location)
|
for (location <- Source.fromInputStream(preloadConfigResource.getInputStream)(Charsets.UTF_8).getLines()) {
|
||||||
if (url != null) try {
|
val url = getClass.getClassLoader.getResource(location)
|
||||||
val sourceName = "preload_" + location
|
if (url != null) try {
|
||||||
soundSystem.newSource(false, sourceName, url, location, true, 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 16)
|
val sourceName = "preload_" + location
|
||||||
soundSystem.activate(sourceName)
|
soundSystem.newSource(false, sourceName, url, location, true, 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 16)
|
||||||
soundSystem.removeSource(sourceName)
|
soundSystem.activate(sourceName)
|
||||||
} catch {
|
soundSystem.removeSource(sourceName)
|
||||||
case _: Throwable => // Meh.
|
} catch {
|
||||||
|
case _: Throwable => // Meh.
|
||||||
|
}
|
||||||
|
else OpenComputers.log.warn(s"Couldn't preload sound $location!")
|
||||||
}
|
}
|
||||||
else OpenComputers.log.warn(s"Couldn't preload sound $location!")
|
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
|
sources.synchronized {
|
||||||
|
updateCallable.foreach(_())
|
||||||
|
updateCallable = None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user