blob: 6ec312e2b36742ae8836eb123c01dc13238a0d16 [file] [log] [blame] [raw]
package li.cil.oc.server.component
import codechicken.lib.vec.Vector3
import codechicken.wirelessredstone.core.{WirelessReceivingDevice, WirelessTransmittingDevice}
import cpw.mods.fml.common.Optional
import li.cil.oc.api.network._
import li.cil.oc.common.EventHandler
import li.cil.oc.common.tileentity.traits.RedstoneAware
import li.cil.oc.util.mods
import net.minecraft.nbt.NBTTagCompound
@Optional.InterfaceList(Array(
new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessReceivingDevice", modid = "WR-CBE|Core"),
new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessTransmittingDevice", modid = "WR-CBE|Core")
))
trait RedstoneWireless extends Redstone[RedstoneAware] with WirelessReceivingDevice with WirelessTransmittingDevice {
var wirelessFrequency = 0
var wirelessInput = false
var wirelessOutput = false
// ----------------------------------------------------------------------- //
@Callback(doc = """function():number -- Get the wireless redstone input.""")
def getWirelessInput(context: Context, args: Arguments): Array[AnyRef] = {
wirelessInput = mods.WirelessRedstone.getInput(this)
result(wirelessInput)
}
@Callback(direct = true, doc = """function():boolean -- Get the wireless redstone output.""")
def getWirelessOutput(context: Context, args: Arguments): Array[AnyRef] = result(wirelessOutput)
@Callback(doc = """function(value:boolean):boolean -- Set the wireless redstone output.""")
def setWirelessOutput(context: Context, args: Arguments): Array[AnyRef] = {
val oldValue = wirelessOutput
wirelessOutput = args.checkBoolean(0)
mods.WirelessRedstone.updateOutput(this)
context.pause(0.1)
result(oldValue)
}
@Callback(direct = true, doc = """function():number -- Get the currently set wireless redstone frequency.""")
def getWirelessFrequency(context: Context, args: Arguments): Array[AnyRef] = result(wirelessFrequency)
@Callback(doc = """function(frequency:number):number -- Set the wireless redstone frequency to use.""")
def setWirelessFrequency(context: Context, args: Arguments): Array[AnyRef] = {
val oldValue = wirelessFrequency
val newValue = args.checkInteger(0)
mods.WirelessRedstone.removeReceiver(this)
mods.WirelessRedstone.removeTransmitter(this)
wirelessFrequency = newValue
wirelessInput = false
wirelessOutput = false
mods.WirelessRedstone.addReceiver(this)
context.pause(0.5)
result(oldValue)
}
// ----------------------------------------------------------------------- //
@Optional.Method(modid = "WR-CBE|Core")
override def updateDevice(frequency: Int, on: Boolean) {
if (frequency == wirelessFrequency && on != wirelessInput) {
wirelessInput = on
// TODO signal to computer
}
}
@Optional.Method(modid = "WR-CBE|Core")
override def getPosition = Vector3.fromTileEntityCenter(owner)
@Optional.Method(modid = "WR-CBE|Core")
override def getDimension = owner.world.provider.dimensionId
@Optional.Method(modid = "WR-CBE|Core")
override def getFreq = wirelessFrequency
@Optional.Method(modid = "WR-CBE|Core")
override def getAttachedEntity = null
// ----------------------------------------------------------------------- //
override def onConnect(node: Node) {
super.onConnect(node)
if (node == this.node) {
EventHandler.scheduleWirelessRedstone(this)
}
}
override def onDisconnect(node: Node) {
super.onDisconnect(node)
if (node == this.node) {
mods.WirelessRedstone.removeReceiver(this)
mods.WirelessRedstone.removeTransmitter(this)
}
}
// ----------------------------------------------------------------------- //
override def load(nbt: NBTTagCompound) {
super.load(nbt)
wirelessFrequency = nbt.getInteger("wirelessFrequency")
wirelessInput = nbt.getBoolean("wirelessInput")
wirelessOutput = nbt.getBoolean("wirelessOutput")
}
override def save(nbt: NBTTagCompound) {
super.save(nbt)
nbt.setInteger("wirelessFrequency", wirelessFrequency)
nbt.setBoolean("wirelessInput", wirelessInput)
nbt.setBoolean("wirelessOutput", wirelessOutput)
}
}