diff --git a/li/cil/oc/Items.scala b/li/cil/oc/Items.scala index c25d198e7..69c18adf8 100644 --- a/li/cil/oc/Items.scala +++ b/li/cil/oc/Items.scala @@ -6,57 +6,58 @@ import net.minecraft.item.ItemStack import net.minecraftforge.oredict.OreDictionary object Items { - var multi: item.Delegator = null + var multi: item.Delegator = _ // ----------------------------------------------------------------------- // // Tools - var analyzer: item.Analyzer = null + var analyzer: item.Analyzer = _ // ----------------------------------------------------------------------- // // Memory - var ram1, ram2, ram3: item.Memory = null + var ram1, ram2, ram3: item.Memory = _ // ----------------------------------------------------------------------- // // Storage - var floppyDisk: item.FloppyDisk = null - var hdd1, hdd2, hdd3: item.HardDiskDrive = null + var floppyDisk: item.FloppyDisk = _ + var hdd1, hdd2, hdd3: item.HardDiskDrive = _ // ----------------------------------------------------------------------- // // Cards - var gpu1, gpu2, gpu3: item.GraphicsCard = null - var lan: item.NetworkCard = null - var rs: item.RedstoneCard = null - var wlan: item.WirelessNetworkCard = null + var abstractBus: item.AbstractBusCard = _ + var gpu1, gpu2, gpu3: item.GraphicsCard = _ + var lan: item.NetworkCard = _ + var rs: item.RedstoneCard = _ + var wlan: item.WirelessNetworkCard = _ // ----------------------------------------------------------------------- // // Upgrades - var upgradeCrafting: item.UpgradeCrafting = null - var upgradeGenerator: item.UpgradeGenerator = null - var upgradeNavigation: item.UpgradeNavigation = null - var upgradeSign: item.UpgradeSign = null - var upgradeSolarGenerator: item.UpgradeSolarGenerator = null + var upgradeCrafting: item.UpgradeCrafting = _ + var upgradeGenerator: item.UpgradeGenerator = _ + var upgradeNavigation: item.UpgradeNavigation = _ + var upgradeSign: item.UpgradeSign = _ + var upgradeSolarGenerator: item.UpgradeSolarGenerator = _ // ----------------------------------------------------------------------- // // Crafting - var ironNugget: item.IronNugget = null - var cuttingWire: item.CuttingWire = null - var acid: item.Acid = null - var disk: item.Disk = null + var ironNugget: item.IronNugget = _ + var cuttingWire: item.CuttingWire = _ + var acid: item.Acid = _ + var disk: item.Disk = _ - var buttonGroup: item.ButtonGroup = null - var arrowKeys: item.ArrowKeys = null - var numPad: item.NumPad = null + var buttonGroup: item.ButtonGroup = _ + var arrowKeys: item.ArrowKeys = _ + var numPad: item.NumPad = _ - var transistor: item.Transistor = null - var chip1, chip2, chip3: item.Microchip = null - var alu: item.ALU = null - var cpu: item.CPU = null - var cu: item.ControlUnit = null + var transistor: item.Transistor = _ + var chip1, chip2, chip3: item.Microchip = _ + var alu: item.ALU = _ + var cpu: item.CPU = _ + var cu: item.ControlUnit = _ - var rawCircuitBoard: item.RawCircuitBoard = null - var circuitBoard: item.CircuitBoard = null - var pcb: item.PrintedCircuitBoard = null - var card: item.CardBase = null + var rawCircuitBoard: item.RawCircuitBoard = _ + var circuitBoard: item.CircuitBoard = _ + var pcb: item.PrintedCircuitBoard = _ + var card: item.CardBase = _ def init() { multi = new item.Delegator(Settings.get.itemId) @@ -111,6 +112,8 @@ object Items { upgradeSign = new item.UpgradeSign(multi) upgradeNavigation = new item.UpgradeNavigation(multi) + abstractBus = new item.AbstractBusCard(multi) + // ----------------------------------------------------------------------- // registerExclusive("nuggetIron", ironNugget.createItemStack()) diff --git a/li/cil/oc/common/Proxy.scala b/li/cil/oc/common/Proxy.scala index 01a18804f..e577fe7e5 100644 --- a/li/cil/oc/common/Proxy.scala +++ b/li/cil/oc/common/Proxy.scala @@ -27,16 +27,17 @@ class Proxy { api.Driver.add(driver.block.CommandBlock) api.Driver.add(driver.block.NoteBlock) - api.Driver.add(driver.item.UpgradeCrafting) + api.Driver.add(driver.item.AbstractBusCard) api.Driver.add(driver.item.FileSystem) - api.Driver.add(driver.item.UpgradeGenerator) - api.Driver.add(driver.item.SolarGenerator) api.Driver.add(driver.item.GraphicsCard) - api.Driver.add(driver.item.UpgradeNavigation) api.Driver.add(driver.item.Memory) api.Driver.add(driver.item.NetworkCard) - api.Driver.add(driver.item.UpgradeSign) api.Driver.add(driver.item.RedstoneCard) + api.Driver.add(driver.item.UpgradeCrafting) + api.Driver.add(driver.item.UpgradeGenerator) + api.Driver.add(driver.item.UpgradeNavigation) + api.Driver.add(driver.item.UpgradeSign) + api.Driver.add(driver.item.UpgradeSolarGenerator) api.Driver.add(driver.item.WirelessNetworkCard) Recipes.init() diff --git a/li/cil/oc/common/item/AbstractBusCard.scala b/li/cil/oc/common/item/AbstractBusCard.scala new file mode 100644 index 000000000..0ad011cee --- /dev/null +++ b/li/cil/oc/common/item/AbstractBusCard.scala @@ -0,0 +1,27 @@ +package li.cil.oc.common.item + +import cpw.mods.fml.common.Loader +import java.util +import li.cil.oc.Settings +import li.cil.oc.util.Tooltip +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.ItemStack + +class AbstractBusCard(val parent: Delegator) extends Delegate { + val unlocalizedName = "AbstractBusCard" + + // TODO change when done + override val showInItemList = true // Loader.isModLoaded("StargateTech2") + + override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { + tooltip.addAll(Tooltip.get(unlocalizedName)) + super.tooltipLines(stack, player, tooltip, advanced) + } + + override def registerIcons(iconRegister: IconRegister) = { + super.registerIcons(iconRegister) + + icon = iconRegister.registerIcon(Settings.resourceDomain + ":card_abstract_bus") + } +} diff --git a/li/cil/oc/common/tileentity/AbstractBusAware.scala b/li/cil/oc/common/tileentity/AbstractBusAware.scala index df86335b8..2d14e8490 100644 --- a/li/cil/oc/common/tileentity/AbstractBusAware.scala +++ b/li/cil/oc/common/tileentity/AbstractBusAware.scala @@ -1,12 +1,28 @@ package li.cil.oc.common.tileentity import cpw.mods.fml.common.Optional -import cpw.mods.fml.common.Optional.Interface +import net.minecraft.item.ItemStack import stargatetech2.api.bus.IBusDevice -@Optional(new Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2")) -trait AbstractBusAware extends IBusDevice { +@Optional.Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2") +trait AbstractBusAware extends TileEntity with Inventory with IBusDevice { def getInterfaces(side: Int) = if (hasAbstractBusCard) Array(null) else null + def getXCoord = x + + def getYCoord = y + + def getZCoord = z + protected def hasAbstractBusCard = false + + override protected def onItemAdded(slot: Int, stack: ItemStack) { + super.onItemAdded(slot, stack) + // TODO if card wasn't present, send device added event + } + + override protected def onItemRemoved(slot: Int, stack: ItemStack) { + super.onItemRemoved(slot, stack) + // TODO if no card is present anymore, send device removed event + } } diff --git a/li/cil/oc/server/component/AbstractBus.scala b/li/cil/oc/server/component/AbstractBus.scala index 288e14654..f9f887c83 100644 --- a/li/cil/oc/server/component/AbstractBus.scala +++ b/li/cil/oc/server/component/AbstractBus.scala @@ -62,9 +62,12 @@ class AbstractBus(val owner: tileentity.Computer) extends ManagedComponent with @LuaCallback("send") def send(context: Context, args: Arguments): Array[AnyRef] = { val target = args.checkInteger(0) & 0xFFFF - val data = ??? - val packet = new BusPacketLIP(address, target.toShort) - // TODO + val data = args.checkTable(1) + val packet = new BusPacketLIP(address.toShort, target.toShort) + for ((key, value) <- data) { + packet.set(key.toString, value.toString) + } + // TODO generate metadata sendQueue += packet result(true) } @@ -76,6 +79,7 @@ class AbstractBus(val owner: tileentity.Computer) extends ManagedComponent with busInterface.readFromNBT(nbt, "bus") isEnabled = nbt.getBoolean("enabled") address = nbt.getInteger("address") & 0xFFFF + // TODO load queue } override def save(nbt: NBTTagCompound) { @@ -83,5 +87,6 @@ class AbstractBus(val owner: tileentity.Computer) extends ManagedComponent with busInterface.writeToNBT(nbt, "bus") nbt.setBoolean("enabled", isEnabled) nbt.setInteger("address", address) + // TODO save queue } } diff --git a/li/cil/oc/server/driver/item/AbstractBusCard.scala b/li/cil/oc/server/driver/item/AbstractBusCard.scala new file mode 100644 index 000000000..bfc9cda42 --- /dev/null +++ b/li/cil/oc/server/driver/item/AbstractBusCard.scala @@ -0,0 +1,20 @@ +package li.cil.oc.server.driver.item + +import cpw.mods.fml.common.Loader +import li.cil.oc.Items +import li.cil.oc.api.driver.Slot +import li.cil.oc.common.tileentity +import li.cil.oc.server.component +import net.minecraft.item.ItemStack +import net.minecraft.tileentity.{TileEntity => MCTileEntity} + +object AbstractBusCard extends Item { + def worksWith(stack: ItemStack) = isOneOf(stack, Items.abstractBus) + + override def createEnvironment(stack: ItemStack, container: MCTileEntity) = container match { + case computer: tileentity.Computer if Loader.isModLoaded("StargateTech2") => new component.AbstractBus(computer) + case _ => null + } + + def slot(stack: ItemStack) = Slot.Card +} diff --git a/li/cil/oc/server/driver/item/SolarGenerator.scala b/li/cil/oc/server/driver/item/UpgradeSolarGenerator.scala similarity index 91% rename from li/cil/oc/server/driver/item/SolarGenerator.scala rename to li/cil/oc/server/driver/item/UpgradeSolarGenerator.scala index 0998fe1f7..b8e89b469 100644 --- a/li/cil/oc/server/driver/item/SolarGenerator.scala +++ b/li/cil/oc/server/driver/item/UpgradeSolarGenerator.scala @@ -6,7 +6,7 @@ import li.cil.oc.server.component import net.minecraft.item.ItemStack import net.minecraft.tileentity.{TileEntity => MCTileEntity} -object SolarGenerator extends Item { +object UpgradeSolarGenerator extends Item { override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeSolarGenerator) override def createEnvironment(stack: ItemStack, container: MCTileEntity) = new component.UpgradeSolarGenerator(container) diff --git a/stargatetech2/api/bus/BusPacketLIP.java b/stargatetech2/api/bus/BusPacketLIP.java index 478f00635..f1237aba1 100644 --- a/stargatetech2/api/bus/BusPacketLIP.java +++ b/stargatetech2/api/bus/BusPacketLIP.java @@ -47,7 +47,7 @@ public final class BusPacketLIP extends BusPacket { } } - protected BusPacketLIP(short sender, short target) { + public BusPacketLIP(short sender, short target) { super(sender, target, true); }