From c542d4462dad1eda5ccf0e6defa179cbf45062f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 21 Jul 2014 23:01:29 +0200 Subject: [PATCH 1/2] Crapload of getWorldTime->getTotalWorldTime to avoid stuff breaking when doDaylightCycle false. --- src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala | 2 +- src/main/scala/li/cil/oc/common/component/TextBuffer.scala | 6 +++--- src/main/scala/li/cil/oc/common/tileentity/Case.scala | 2 +- .../scala/li/cil/oc/common/tileentity/Disassembler.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Hologram.scala | 2 +- .../scala/li/cil/oc/common/tileentity/MotionSensor.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Robot.scala | 2 +- .../scala/li/cil/oc/common/tileentity/RobotAssembler.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala | 2 +- .../li/cil/oc/common/tileentity/traits/PowerBalancer.scala | 2 +- .../li/cil/oc/common/tileentity/traits/TileEntity.scala | 2 +- .../cil/oc/common/tileentity/traits/power/BuildCraft.scala | 2 +- .../li/cil/oc/server/component/UpgradeChunkloader.scala | 2 +- .../li/cil/oc/server/component/WirelessNetworkCard.scala | 2 +- .../scala/li/cil/oc/server/component/machine/Machine.scala | 4 ++-- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala index 1beb72245..a2c8a68ba 100644 --- a/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala @@ -35,7 +35,7 @@ object PetRenderer extends ITickHandler { if (hidden.contains(name) || !entitledPlayers.contains(name)) return rendering = Some(entitledPlayers(name)) - val worldTime = e.entityPlayer.getEntityWorld.getWorldTime + val worldTime = e.entityPlayer.getEntityWorld.getTotalWorldTime val timeJitter = e.entityPlayer.hashCode ^ 0xFF val offset = timeJitter + worldTime / 20.0 val hover = (math.sin(timeJitter + (worldTime + e.partialRenderTick) / 20.0) * 0.03).toFloat diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index e3c7403be..7ffbb8c8f 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -69,7 +69,7 @@ class TextBuffer(val owner: Container) extends ManagedComponent with api.compone override def update() { super.update() - if (isDisplaying && owner.world.getWorldTime % Settings.get.tickFrequency == 0) { + if (isDisplaying && owner.world.getTotalWorldTime % Settings.get.tickFrequency == 0) { if (relativeLitArea < 0) { // The relative lit area is the number of pixels that are not blank // versus the number of pixels in the *current* resolution. This is @@ -438,7 +438,7 @@ object TextBuffer { def markDirty() { dirty = true - lastChange = owner.owner.world.getWorldTime + lastChange = owner.owner.world.getTotalWorldTime } def render() = false @@ -483,7 +483,7 @@ object TextBuffer { class ClientProxy(val owner: TextBuffer) extends Proxy { override def render() = { TextBufferRenderCache.render(owner) - lastChange == owner.owner.world.getWorldTime + lastChange == owner.owner.world.getTotalWorldTime } override def onScreenColorChange() { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Case.scala b/src/main/scala/li/cil/oc/common/tileentity/Case.scala index a52c99985..c02ac032b 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -55,7 +55,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with override def canUpdate = isServer override def updateEntity() { - if (isServer && tier == 3 && world.getWorldTime % Settings.get.tickFrequency == 0) { + if (isServer && tier == 3 && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { // Creative case, make it generate power. node.asInstanceOf[Connector].changeBuffer(Double.PositiveInfinity) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index b8191237c..811a0c04a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -52,7 +52,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra override def updateEntity() { super.updateEntity() - if (world.getWorldTime % Settings.get.tickFrequency == 0) { + if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) { if (queue.isEmpty) { disassemble(decrStackSize(0, 1)) setActive(queue.nonEmpty) 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 eef10cb1b..196e1ed4d 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -269,7 +269,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w resetDirtyFlag() } } - if (world.getWorldTime % Settings.get.tickFrequency == 0) { + if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) { if (litRatio < 0) this.synchronized { litRatio = 0 for (i <- 0 until volume.length) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala index 3f177a4bb..4a46afda9 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala @@ -28,7 +28,7 @@ class MotionSensor extends traits.Environment { override def updateEntity() { super.updateEntity() - if (world.getWorldTime % 10 == 0) { + if (world.getTotalWorldTime % 10 == 0) { // Get a list of all living entities we could possibly detect, using a rough // bounding box check, then refining it using the actual distance and an // actual visibility check. diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index ed9fc49d1..db18b6b16 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -264,7 +264,7 @@ class Robot extends traits.Computer with traits.PowerInformation with api.machin } super.updateEntity() if (isServer) { - if (world.getWorldTime % Settings.get.tickFrequency == 0) { + if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) { if (info.tier == 3) { bot.node.changeBuffer(Double.PositiveInfinity) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala b/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala index ce91b924d..b31311909 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala @@ -97,7 +97,7 @@ class RobotAssembler extends traits.Environment with traits.PowerAcceptor with t override def updateEntity() { super.updateEntity() - if (robot.isDefined && world.getWorldTime % Settings.get.tickFrequency == 0) { + if (robot.isDefined && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { val want = math.max(1, math.min(requiredEnergy, Settings.get.assemblerTickAmount * Settings.get.tickFrequency)) val success = node.tryChangeBuffer(-want) if (success) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala index 885b82053..d1d807a9e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala @@ -71,7 +71,7 @@ trait Hub extends traits.Environment with SidedEnvironment { relayCooldown = relayDelay } } - else if (world.getWorldTime % relayDelay == 0) { + else if (world.getTotalWorldTime % relayDelay == 0) { packetsPerCycleAvg += 0 } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala index a56d28f24..a2a0fcd3a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala @@ -11,7 +11,7 @@ trait PowerBalancer extends PowerInformation with SidedEnvironment { override def updateEntity() { super.updateEntity() - if (isServer && isConnected && world.getWorldTime % Settings.get.tickFrequency == 0) { + if (isServer && isConnected && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { val nodes = connectors def network(connector: Connector) = if (connector != null && connector.network != null) connector.network else this // Yeeeeah, so that just happened... it's not a beauty, but it works. This diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala index a8cd5a584..753ef1f98 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala @@ -29,7 +29,7 @@ trait TileEntity extends net.minecraft.tileentity.TileEntity { override def updateEntity() { super.updateEntity() - if (world.getWorldTime % 40 == 0 && block.getLightValue(world, x, y, z) > 0) { + if (world.getTotalWorldTime % 40 == 0 && block.getLightValue(world, x, y, z) > 0) { world.markBlockForUpdate(x, y, z) } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/power/BuildCraft.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/power/BuildCraft.scala index 5b62afa4f..73189c457 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/power/BuildCraft.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/power/BuildCraft.scala @@ -16,7 +16,7 @@ trait BuildCraft extends Common with IPowerReceptor { override def updateEntity() { super.updateEntity() - if (useBuildCraftPower && world.getWorldTime % Settings.get.tickFrequency == 0) { + if (useBuildCraftPower && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { for (side <- ForgeDirection.VALID_DIRECTIONS) { val demand = (globalBufferSize(side) - globalBuffer(side)) / Settings.ratioBuildCraft if (demand > 1) { diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index a7836d84d..7b6e30140 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -20,7 +20,7 @@ class UpgradeChunkloader(val owner: Container) extends component.ManagedComponen override def update() { super.update() - if (owner.world.getWorldTime % Settings.get.tickFrequency == 0 && ticket.isDefined) { + if (owner.world.getTotalWorldTime % Settings.get.tickFrequency == 0 && ticket.isDefined) { if (!node.tryChangeBuffer(-Settings.get.chunkloaderCost * Settings.get.tickFrequency)) { ticket.foreach(ForgeChunkManager.releaseTicket) ticket = None diff --git a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala index 129dcd97d..0ff508d2f 100644 --- a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala @@ -72,7 +72,7 @@ class WirelessNetworkCard(val owner: Container) extends NetworkCard with Wireles override def update() { super.update() - if (world.getWorldTime % 20 == 0) { + if (world.getTotalWorldTime % 20 == 0) { api.Network.updateWirelessNetwork(this) } } diff --git a/src/main/scala/li/cil/oc/server/component/machine/Machine.scala b/src/main/scala/li/cil/oc/server/component/machine/Machine.scala index 48439de1f..61a925dc8 100644 --- a/src/main/scala/li/cil/oc/server/component/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/component/machine/Machine.scala @@ -349,7 +349,7 @@ class Machine(val owner: Owner, constructor: Constructor[_ <: Architecture]) ext callCounts.synchronized(if (callCounts.size > 0) callCounts.clear()) // Make sure we have enough power. - if (worldTime % Settings.get.tickFrequency == 0) { + if (owner.world.getTotalWorldTime % Settings.get.tickFrequency == 0) { state.synchronized(state.top match { case Machine.State.Paused | Machine.State.Restarting | @@ -367,7 +367,7 @@ class Machine(val owner: Owner, constructor: Constructor[_ <: Architecture]) ext } // Avoid spamming user list across the network. - if (worldTime % 20 == 0 && usersChanged) { + if (owner.world.getTotalWorldTime % 20 == 0 && usersChanged) { val list = _users.synchronized { usersChanged = false users From 0e238fdb9fe1346681a185f08f5ee81f8b20cfe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 22 Jul 2014 03:22:03 +0200 Subject: [PATCH 2/2] Fixed unmounting. I think. Herpdiderp. --- .../loot/OpenOS/lib/filesystem.lua | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua index a26d391d1..83d528124 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua @@ -209,17 +209,13 @@ function filesystem.mounts() end local queue = {mtab} return function() - if #queue == 0 then - return nil - else - while #queue > 0 do - local node = table.remove(queue) - for _, child in pairs(node.children) do - table.insert(queue, child) - end - if node.fs then - return component.proxy(node.fs), path(node) - end + while #queue > 0 do + local node = table.remove(queue) + for _, child in pairs(node.children) do + table.insert(queue, child) + end + if node.fs then + return component.proxy(node.fs) or node.fs, path(node) end end end @@ -269,20 +265,17 @@ function filesystem.umount(fsOrPath) return true end end - local function unmount(address) - local queue = {mtab} - for proxy, path in filesystem.mounts() do - if string.sub(proxy.address, 1, address:len()) == address then - local node, rest, vnode, vrest = findNode(path) - vnode.fs = nil - removeEmptyNodes(vnode) - return true - end - end - end local address = type(fsOrPath) == "table" and fsOrPath.address or fsOrPath local result = false - while unmount(address) do result = true end + for proxy, path in filesystem.mounts() do + local addr = type(proxy) == "table" and proxy.address or proxy + if string.sub(addr, 1, address:len()) == address then + local node, rest, vnode, vrest = findNode(path) + vnode.fs = nil + removeEmptyNodes(vnode) + result = true + end + end return result end