From 4be141a90311d40f26af3a60f860c0c25b78eca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 2 Aug 2015 21:16:30 +0200 Subject: [PATCH] Properly handle arbitrary number types in signals and return values. Closes #1345. --- src/main/scala/li/cil/oc/server/driver/Registry.scala | 1 + src/main/scala/li/cil/oc/server/machine/Machine.scala | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/scala/li/cil/oc/server/driver/Registry.scala b/src/main/scala/li/cil/oc/server/driver/Registry.scala index 7a5df84bb..07d9a4097 100644 --- a/src/main/scala/li/cil/oc/server/driver/Registry.scala +++ b/src/main/scala/li/cil/oc/server/driver/Registry.scala @@ -122,6 +122,7 @@ private[oc] object Registry extends api.detail.DriverAPI { case arg: java.lang.Long => arg case arg: java.lang.Float => arg case arg: java.lang.Double => arg + case arg: java.lang.Number => Double.box(arg.doubleValue()) case arg: java.lang.String => arg case arg: Array[Boolean] => arg 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 459b7eb60..30edcd439 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -303,13 +303,9 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach signals.enqueue(new Machine.Signal(name, args.map { case null | Unit | None => null case arg: java.lang.Boolean => arg - case arg: java.lang.Byte => Double.box(arg.doubleValue) case arg: java.lang.Character => Double.box(arg.toDouble) - case arg: java.lang.Short => Double.box(arg.doubleValue) - case arg: java.lang.Integer => Double.box(arg.doubleValue) - case arg: java.lang.Long => Double.box(arg.doubleValue) - case arg: java.lang.Float => Double.box(arg.doubleValue) - case arg: java.lang.Double => arg + case arg: java.lang.Long => arg + case arg: java.lang.Number => Double.box(arg.doubleValue) case arg: java.lang.String => arg case arg: Array[Byte] => arg case arg: Map[_, _] if arg.isEmpty || arg.head._1.isInstanceOf[String] && arg.head._2.isInstanceOf[String] => arg @@ -697,6 +693,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach (0 until argsLength).map("arg" + _).map(argsNbt.getTag).map { case tag: NBTTagByte if tag.func_150290_f == -1 => null case tag: NBTTagByte => Boolean.box(tag.func_150290_f == 1) + case tag: NBTTagLong => Long.box(tag.func_150291_c) case tag: NBTTagDouble => Double.box(tag.func_150286_g) case tag: NBTTagString => tag.func_150285_a_ case tag: NBTTagByteArray => tag.func_150292_c @@ -770,6 +767,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach s.args.zipWithIndex.foreach { case (null, i) => args.setByte("arg" + i, -1) case (arg: java.lang.Boolean, i) => args.setByte("arg" + i, if (arg) 1 else 0) + case (arg: java.lang.Long, i) => args.setLong("arg" + i, arg) case (arg: java.lang.Double, i) => args.setDouble("arg" + i, arg) case (arg: String, i) => args.setString("arg" + i, arg) case (arg: Array[Byte], i) => args.setByteArray("arg" + i, arg)