diff --git a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java index 0a1c9ae1b..7b12d21fa 100644 --- a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java +++ b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java @@ -7,6 +7,11 @@ import java.util.Map; * expose some (typically static) information about the device represented by * that environment to a {@link li.cil.oc.api.Machine} connected to it. *

+ * You may also implement this on a {@link li.cil.oc.api.machine.MachineHost} + * in which case the Machine will forward that information as + * its own (since MachineHosts usually use the machine's node as + * their own, this avoids a dummy environment used solely for device info). + *

* This is intended to permit programs to reflect on the hardware they are * running on, typically for purely informational purposes, but possibly to * toggle certain hardware specific features. 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 184df2d5f..305f70ce5 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -41,7 +41,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Holographic projector", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("VirtualViewer H1-" + tier.toString), + DeviceAttribute.Product -> ("VirtualViewer H1-" + (tier + 1).toString), DeviceAttribute.Capacity -> (width * width * height).toString, DeviceAttribute.Width -> colors.length.toString ) diff --git a/src/main/scala/li/cil/oc/server/component/APU.scala b/src/main/scala/li/cil/oc/server/component/APU.scala index 296f1f1ec..cb3e3a948 100644 --- a/src/main/scala/li/cil/oc/server/component/APU.scala +++ b/src/main/scala/li/cil/oc/server/component/APU.scala @@ -14,7 +14,7 @@ class APU(tier: Int) extends GraphicsCard(tier) { DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "APU", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor (Builtin Graphics)"), + DeviceAttribute.Product -> ("FlexiArch " + (tier + 1).toString + " Processor (Builtin Graphics)"), DeviceAttribute.Capacity -> capacityInfo, DeviceAttribute.Width -> widthInfo, DeviceAttribute.Clock -> ((Settings.get.callBudgets(tier) * 1000).toInt.toString + "+" + clockInfo) diff --git a/src/main/scala/li/cil/oc/server/component/CPU.scala b/src/main/scala/li/cil/oc/server/component/CPU.scala index 107d4afe3..185d95e5b 100644 --- a/src/main/scala/li/cil/oc/server/component/CPU.scala +++ b/src/main/scala/li/cil/oc/server/component/CPU.scala @@ -14,14 +14,14 @@ import li.cil.oc.api.prefab import scala.collection.convert.WrapAsJava._ class CPU(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { - override val node = Network.newNode(this, Visibility.Network). + override val node = Network.newNode(this, Visibility.Neighbors). create() private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "CPU", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor"), + DeviceAttribute.Product -> ("FlexiArch " + (tier + 1).toString + " Processor"), DeviceAttribute.Clock -> (Settings.get.callBudgets(tier) * 1000).toInt.toString ) diff --git a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala index dd499c302..0fe212ccf 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -65,7 +65,7 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment with DeviceI DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Graphics controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("MPG" + (tier * 1000).toString + " GTZ"), + DeviceAttribute.Product -> ("MPG" + ((tier + 1) * 1000).toString + " GTZ"), DeviceAttribute.Capacity -> capacityInfo, DeviceAttribute.Width -> widthInfo, DeviceAttribute.Clock -> clockInfo diff --git a/src/main/scala/li/cil/oc/server/component/Memory.scala b/src/main/scala/li/cil/oc/server/component/Memory.scala index 10ded3517..64b63d5a0 100644 --- a/src/main/scala/li/cil/oc/server/component/Memory.scala +++ b/src/main/scala/li/cil/oc/server/component/Memory.scala @@ -14,7 +14,7 @@ import li.cil.oc.api.prefab import scala.collection.convert.WrapAsJava._ class Memory(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { - override val node = Network.newNode(this, Visibility.Network). + override val node = Network.newNode(this, Visibility.Neighbors). create() private final lazy val deviceInfo = Map( diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 27041ebbe..0a04b298e 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -1,5 +1,6 @@ package li.cil.oc.server.machine +import java.util import java.util.concurrent.TimeUnit import li.cil.oc.OpenComputers @@ -47,7 +48,7 @@ import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with machine.Machine with Runnable { +class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with machine.Machine with Runnable with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("computer", Visibility.Neighbors). withConnector(Settings.get.bufferComputer). @@ -178,6 +179,13 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach // ----------------------------------------------------------------------- // + override def getDeviceInfo: util.Map[String, String] = host match { + case deviceInfo: DeviceInfo => deviceInfo.getDeviceInfo + case _ => null + } + + // ----------------------------------------------------------------------- // + override def canInteract(player: String) = !Settings.get.canComputersBeOwned || _users.synchronized(_users.isEmpty || _users.contains(player)) || MinecraftServer.getServer.isSinglePlayer || { @@ -426,7 +434,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach context.pause(1) // Iterating all nodes is potentially expensive, and I see no practical reason for having to call this frequently. Array[AnyRef](node.network.nodes.map(n => (n, n.host)).collect { case (n: Component, deviceInfo: DeviceInfo) => - if (n.canBeSeenFrom(node)) { + if (n.canBeSeenFrom(node) || n == node) { Option(deviceInfo.getDeviceInfo) match { case Some(info) => Option(n.address -> info) case _ => None