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 theMachine
will forward that information as
+ * its own (since MachineHost
s 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