diff --git a/src/main/scala/li/cil/oc/common/entity/Drone.scala b/src/main/scala/li/cil/oc/common/entity/Drone.scala index 85e540b2b..33139b18b 100644 --- a/src/main/scala/li/cil/oc/common/entity/Drone.scala +++ b/src/main/scala/li/cil/oc/common/entity/Drone.scala @@ -164,7 +164,13 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern override def isPaused = machine.isPaused - override def start() = machine.start() + override def start(): Boolean = { + if (world.isRemote || machine.isRunning) { + return false + } + preparePowerUp() + machine.start() + } override def pause(seconds: Double) = machine.pause(seconds) @@ -474,7 +480,6 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern } } else if (!world.isRemote && !machine.isRunning) { - preparePowerUp() start() } } diff --git a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala index 55ab6f743..cc1c16b1c 100644 --- a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala @@ -176,16 +176,18 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w } // Accept wake-up messages regardless of port because we close all ports // when our computer shuts down. - packet.data match { - case Array(message: Array[Byte]) if wakeMessage.contains(new String(message, Charsets.UTF_8)) => - node.sendToNeighbors("computer.start") - case Array(message: String) if wakeMessage.contains(message) => - node.sendToNeighbors("computer.start") - case Array(message: Array[Byte], _*) if wakeMessageFuzzy && wakeMessage.contains(new String(message, Charsets.UTF_8)) => - node.sendToNeighbors("computer.start") - case Array(message: String, _*) if wakeMessageFuzzy && wakeMessage.contains(message) => - node.sendToNeighbors("computer.start") - case _ => + val wakeup: Boolean = packet.data match { + case Array(message: Array[Byte]) if wakeMessage.contains(new String(message, Charsets.UTF_8)) => true + case Array(message: String) if wakeMessage.contains(message) => true + case Array(message: Array[Byte], _*) if wakeMessageFuzzy && wakeMessage.contains(new String(message, Charsets.UTF_8)) => true + case Array(message: String, _*) if wakeMessageFuzzy && wakeMessage.contains(message) => true + case _ => false + } + if (wakeup) { + host match { + case ctx: Context => ctx.start() + case _ => node.sendToNeighbors("computer.start") + } } } }