mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
Allow pushing NBTTagCompounds as signals and added converter for NBTTagCompound.
This commit is contained in:
parent
8092fae0a1
commit
0fdbd38643
@ -153,6 +153,7 @@ public interface Context {
|
|||||||
* <li>Strings.</li>
|
* <li>Strings.</li>
|
||||||
* <li>Byte arrays (which appear as strings on the Lua side, e.g.).</li>
|
* <li>Byte arrays (which appear as strings on the Lua side, e.g.).</li>
|
||||||
* <li>Maps if and only if both keys and values are strings.</li>
|
* <li>Maps if and only if both keys and values are strings.</li>
|
||||||
|
* <li>NBTTagCompounds.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* If an unsupported type is specified the method will enqueue nothing
|
* If an unsupported type is specified the method will enqueue nothing
|
||||||
* instead, resulting in a <tt>nil</tt> on the Lua side, e.g., and log a
|
* instead, resulting in a <tt>nil</tt> on the Lua side, e.g., and log a
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package li.cil.oc.integration.vanilla
|
||||||
|
|
||||||
|
import java.util
|
||||||
|
|
||||||
|
import li.cil.oc.api
|
||||||
|
import net.minecraft.nbt._
|
||||||
|
|
||||||
|
import scala.collection.convert.WrapAsScala._
|
||||||
|
|
||||||
|
object ConverterNBT extends api.driver.Converter {
|
||||||
|
override def convert(value: AnyRef, output: util.Map[AnyRef, AnyRef]) =
|
||||||
|
value match {
|
||||||
|
case nbt: NBTTagCompound => output += "oc:flatten" -> convert(nbt)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
|
||||||
|
private def convert(nbt: NBTBase): AnyRef = nbt match {
|
||||||
|
case tag: NBTTagByte => byte2Byte(tag.func_150290_f())
|
||||||
|
case tag: NBTTagShort => short2Short(tag.func_150289_e())
|
||||||
|
case tag: NBTTagInt => int2Integer(tag.func_150287_d())
|
||||||
|
case tag: NBTTagLong => long2Long(tag.func_150291_c())
|
||||||
|
case tag: NBTTagFloat => float2Float(tag.func_150288_h())
|
||||||
|
case tag: NBTTagDouble => double2Double(tag.func_150286_g())
|
||||||
|
case tag: NBTTagByteArray => tag.func_150292_c()
|
||||||
|
case tag: NBTTagString => tag.func_150285_a_()
|
||||||
|
case tag: NBTTagList =>
|
||||||
|
val copy = tag.copy().asInstanceOf[NBTTagList]
|
||||||
|
(0 until copy.tagCount).map(_ => convert(copy.removeTag(0))).toArray
|
||||||
|
case tag: NBTTagCompound =>
|
||||||
|
tag.func_150296_c().collect {
|
||||||
|
case key: String => key -> convert(tag.getTag(key))
|
||||||
|
}.toMap
|
||||||
|
case tag: NBTTagIntArray => tag.func_150302_c()
|
||||||
|
}
|
||||||
|
}
|
@ -31,5 +31,6 @@ object ModVanilla extends ModProxy {
|
|||||||
Driver.add(ConverterFluidStack)
|
Driver.add(ConverterFluidStack)
|
||||||
Driver.add(ConverterFluidTankInfo)
|
Driver.add(ConverterFluidTankInfo)
|
||||||
Driver.add(ConverterItemStack)
|
Driver.add(ConverterItemStack)
|
||||||
|
Driver.add(ConverterNBT)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,6 +238,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
|
|||||||
case arg: java.lang.String => arg
|
case arg: java.lang.String => arg
|
||||||
case arg: Array[Byte] => 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: NBTTagCompound => arg
|
||||||
case arg =>
|
case arg =>
|
||||||
OpenComputers.log.warn("Trying to push signal with an unsupported argument of type " + arg.getClass.getName)
|
OpenComputers.log.warn("Trying to push signal with an unsupported argument of type " + arg.getClass.getName)
|
||||||
null
|
null
|
||||||
@ -247,7 +248,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
override def popSignal(): Machine.Signal = signals.synchronized(if (signals.isEmpty) null else signals.dequeue())
|
override def popSignal(): Machine.Signal = signals.synchronized(if (signals.isEmpty) null else signals.dequeue().convert())
|
||||||
|
|
||||||
override def methods(value: scala.AnyRef) = Callbacks(value).map(entry => {
|
override def methods(value: scala.AnyRef) = Callbacks(value).map(entry => {
|
||||||
val (name, callback) = entry
|
val (name, callback) = entry
|
||||||
@ -628,6 +629,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
|
|||||||
data += tag.getStringTagAt(i) -> tag.getStringTagAt(i + 1)
|
data += tag.getStringTagAt(i) -> tag.getStringTagAt(i + 1)
|
||||||
}
|
}
|
||||||
data
|
data
|
||||||
|
case tag: NBTTagCompound => tag
|
||||||
case _ => null
|
case _ => null
|
||||||
}.toArray[AnyRef])
|
}.toArray[AnyRef])
|
||||||
})
|
})
|
||||||
@ -705,6 +707,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
|
|||||||
list.append(value.toString)
|
list.append(value.toString)
|
||||||
}
|
}
|
||||||
args.setTag("arg" + i, list)
|
args.setTag("arg" + i, list)
|
||||||
|
case (arg: NBTTagCompound, i) => args.setTag("arg" + i, arg)
|
||||||
case (_, i) => args.setByte("arg" + i, -1)
|
case (_, i) => args.setByte("arg" + i, -1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -936,7 +939,9 @@ object Machine extends MachineAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Signals are messages sent to the Lua state from Java asynchronously. */
|
/** Signals are messages sent to the Lua state from Java asynchronously. */
|
||||||
private[machine] class Signal(val name: String, val args: Array[AnyRef]) extends machine.Signal
|
private[machine] class Signal(val name: String, val args: Array[AnyRef]) extends machine.Signal {
|
||||||
|
def convert() = new Signal(name, Registry.convert(args))
|
||||||
|
}
|
||||||
|
|
||||||
private val threadPool = ThreadPoolFactory.create("Computer", Settings.get.threads)
|
private val threadPool = ThreadPoolFactory.create("Computer", Settings.get.threads)
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user