diff --git a/li/cil/oc/Items.scala b/li/cil/oc/Items.scala index c6f83e706..7c6388e4f 100644 --- a/li/cil/oc/Items.scala +++ b/li/cil/oc/Items.scala @@ -32,6 +32,7 @@ object Items { var crafting: item.Crafting = null var generator: item.Generator = null var solarGenerator: item.SolarGenerator = null + var reader:item.Reader = null // ----------------------------------------------------------------------- // // Crafting @@ -106,6 +107,7 @@ object Items { //new for next release solarGenerator = new item.SolarGenerator(multi) + reader = new item.Reader(multi) OreDictionary.registerOre("nuggetIron", ironNugget.createItemStack()) } diff --git a/li/cil/oc/common/Proxy.scala b/li/cil/oc/common/Proxy.scala index f94794853..aa70a216c 100644 --- a/li/cil/oc/common/Proxy.scala +++ b/li/cil/oc/common/Proxy.scala @@ -34,6 +34,7 @@ class Proxy { api.Driver.add(driver.item.GraphicsCard) api.Driver.add(driver.item.Memory) api.Driver.add(driver.item.NetworkCard) + api.Driver.add(driver.item.Reader) api.Driver.add(driver.item.RedstoneCard) api.Driver.add(driver.item.WirelessNetworkCard) diff --git a/li/cil/oc/common/item/Reader.scala b/li/cil/oc/common/item/Reader.scala new file mode 100644 index 000000000..1676ca459 --- /dev/null +++ b/li/cil/oc/common/item/Reader.scala @@ -0,0 +1,25 @@ +package li.cil.oc.common.item + +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.{EnumRarity, ItemStack} + +class Reader(val parent: Delegator) extends Delegate { + val unlocalizedName = "Reader" + + override def rarity = EnumRarity.epic + + 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 + ":upgrade_reader") + } +} diff --git a/li/cil/oc/server/component/Reader.scala b/li/cil/oc/server/component/Reader.scala new file mode 100644 index 000000000..edc283fc5 --- /dev/null +++ b/li/cil/oc/server/component/Reader.scala @@ -0,0 +1,78 @@ +package li.cil.oc.server.component + +import li.cil.oc.api.network._ +import li.cil.oc.util.ExtendedNBT._ +import li.cil.oc.{Settings, api} +import net.minecraft.entity.item.EntityItem +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraft.tileentity.{TileEntity => MCTileEntity, TileEntitySign, TileEntityFurnace} +import scala.Some +import li.cil.oc.common.tileentity.Rotatable + +class Reader(val owner: MCTileEntity) extends ManagedComponent { + val node = api.Network.newNode(this, Visibility.Network). + withComponent("reader", Visibility.Neighbors). + withConnector(). + create() + + + // ----------------------------------------------------------------------- // + + @LuaCallback("read") + def read(context: RobotContext, args: Arguments): Array[AnyRef] = { + owner match { + case rotatable: Rotatable => { + val te = rotatable.getWorldObj.getBlockTileEntity(rotatable.xCoord+rotatable.facing.offsetX,rotatable.yCoord+rotatable.facing.offsetY,rotatable.zCoord+rotatable.facing.offsetZ) + te match{ + case sign:TileEntitySign=>{ + val text = sign.signText.mkString("\n") + + return result(text) + } + case _=> + } + } + case _ => + } + result(Unit, "no sign") + } + + @LuaCallback("write") + def write(context: Context, args: Arguments): Array[AnyRef] = { + owner match { + case rotatable: Rotatable => { + val te = rotatable.getWorldObj.getBlockTileEntity(rotatable.xCoord+rotatable.facing.offsetX,rotatable.yCoord+rotatable.facing.offsetY,rotatable.zCoord+rotatable.facing.offsetZ) + te match{ + case sign:TileEntitySign=>{ + val text = args.checkString(0).split("\n") + val number = Math.min(4,text.size) + for(i <-0 to number-1){ + var line = text(i) + if(line.size>15){ + line = line.substring(0,15) + } + sign.signText(i)= line + } + + sign.worldObj.markBlockForUpdate(rotatable.xCoord+rotatable.facing.offsetX,rotatable.yCoord+rotatable.facing.offsetY,rotatable.zCoord+rotatable.facing.offsetZ) + return result(true) + } + case _=> + } + } + case _ => + } + result(Unit, "no sign") + } + + + // ----------------------------------------------------------------------- // + + override val canUpdate = false + + + // ----------------------------------------------------------------------- // + + +} diff --git a/li/cil/oc/server/driver/item/Reader.scala b/li/cil/oc/server/driver/item/Reader.scala new file mode 100644 index 000000000..0ce51ed30 --- /dev/null +++ b/li/cil/oc/server/driver/item/Reader.scala @@ -0,0 +1,15 @@ +package li.cil.oc.server.driver.item + +import li.cil.oc.Items +import li.cil.oc.api.driver.Slot +import li.cil.oc.server.component +import net.minecraft.item.ItemStack +import net.minecraft.tileentity.{TileEntity => MCTileEntity} + +object Reader extends Item { + override def worksWith(stack: ItemStack) = isOneOf(stack, Items.reader) + + override def createEnvironment(stack: ItemStack, container: MCTileEntity) = new component.Reader(container) + + override def slot(stack: ItemStack) = Slot.Upgrade +}