mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 19:25:20 -04:00
parent
5313e98ce3
commit
2e314998c9
@ -309,6 +309,21 @@ class Machine(val host: MachineHost) extends AbstractManagedEnvironment with mac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def convertArg(param: Any): AnyRef = {
|
||||||
|
param match {
|
||||||
|
case arg: java.lang.Boolean => arg
|
||||||
|
case arg: java.lang.Character => Double.box(arg.toDouble)
|
||||||
|
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: NBTTagCompound => arg
|
||||||
|
case arg =>
|
||||||
|
OpenComputers.log.warn("Trying to push signal with an unsupported argument of type " + arg.getClass.getName)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override def signal(name: String, args: AnyRef*): Boolean = {
|
override def signal(name: String, args: AnyRef*): Boolean = {
|
||||||
state.synchronized(state.top match {
|
state.synchronized(state.top match {
|
||||||
case Machine.State.Stopped | Machine.State.Stopping => return false
|
case Machine.State.Stopped | Machine.State.Stopping => return false
|
||||||
@ -320,19 +335,22 @@ class Machine(val host: MachineHost) extends AbstractManagedEnvironment with mac
|
|||||||
else {
|
else {
|
||||||
signals.enqueue(new Machine.Signal(name, args.map {
|
signals.enqueue(new Machine.Signal(name, args.map {
|
||||||
case null | Unit | None => null
|
case null | Unit | None => null
|
||||||
case arg: java.lang.Boolean => arg
|
|
||||||
case arg: java.lang.Character => Double.box(arg.toDouble)
|
|
||||||
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
|
case arg: Map[_, _] if arg.isEmpty || arg.head._1.isInstanceOf[String] && arg.head._2.isInstanceOf[String] => arg
|
||||||
case arg: mutable.Map[_, _] if arg.isEmpty || arg.head._1.isInstanceOf[String] && arg.head._2.isInstanceOf[String] => arg.toMap
|
case arg: mutable.Map[_, _] if arg.isEmpty || arg.head._1.isInstanceOf[String] && arg.head._2.isInstanceOf[String] => arg.toMap
|
||||||
case arg: java.util.Map[_, _] if arg.isEmpty || arg.head._1.isInstanceOf[String] && arg.head._2.isInstanceOf[String] => arg.toMap
|
case arg: java.util.Map[_, _] => {
|
||||||
case arg: NBTTagCompound => arg
|
val convertedMap = new mutable.HashMap[AnyRef, AnyRef]
|
||||||
case arg =>
|
for ((key, value) <- arg) {
|
||||||
OpenComputers.log.warn("Trying to push signal with an unsupported argument of type " + arg.getClass.getName)
|
val convertedKey = convertArg(key)
|
||||||
null
|
if (convertedKey != null) {
|
||||||
|
val convertedValue = convertArg(value)
|
||||||
|
if (convertedValue != null) {
|
||||||
|
convertedMap += convertedKey -> convertedValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
convertedMap
|
||||||
|
}
|
||||||
|
case arg => convertArg(arg)
|
||||||
}.toArray[AnyRef]))
|
}.toArray[AnyRef]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user