diff --git a/assets/items.psd b/assets/items.psd index 0709d3979..9a6d7b44d 100644 Binary files a/assets/items.psd and b/assets/items.psd differ diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 6515dbe6e..993ca42e4 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -57,6 +57,7 @@ item.oc.Disk.name=Disk Platter item.oc.Drone.name=Drone item.oc.DroneCase0.name=Drone Case (Tier 1) item.oc.DroneCase1.name=Drone Case (Tier 2) +item.oc.DroneCase3.name=Drone Case (Creative) item.oc.eeprom.name=EEPROM item.oc.FloppyDisk.name=Floppy Disk item.oc.GraphicsCard0.name=Graphics Card (Tier 1) @@ -80,6 +81,7 @@ item.oc.Microchip1.name=Microchip (Tier 2) item.oc.Microchip2.name=Microchip (Tier 3) item.oc.MicrocontrollerCase0.name=Microcontroller Case (Tier 1) item.oc.MicrocontrollerCase1.name=Microcontroller Case (Tier 2) +item.oc.MicrocontrollerCase3.name=Microcontroller Case (Creative) item.oc.NetworkCard.name=Network Card item.oc.NumPad.name=Numeric Keypad item.oc.Present.name=A little something... diff --git a/src/main/resources/assets/opencomputers/textures/items/DroneCase3.png b/src/main/resources/assets/opencomputers/textures/items/DroneCase3.png new file mode 100644 index 000000000..9ce2fe4bb Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/DroneCase3.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png b/src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png new file mode 100644 index 000000000..8e95b9291 Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png differ diff --git a/src/main/scala/li/cil/oc/common/block/Case.scala b/src/main/scala/li/cil/oc/common/block/Case.scala index f3979cee4..03c3fce69 100644 --- a/src/main/scala/li/cil/oc/common/block/Case.scala +++ b/src/main/scala/li/cil/oc/common/block/Case.scala @@ -11,10 +11,10 @@ import li.cil.oc.common.tileentity import li.cil.oc.integration.util.Wrench import li.cil.oc.util.BlockPosition import li.cil.oc.util.Color +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.world.IBlockAccess @@ -56,7 +56,7 @@ class Case(val tier: Int) extends RedstoneAware with traits.PowerAcceptor with t // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.epic).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { tooltip.addAll(Tooltip.get(getClass.getSimpleName, slots)) diff --git a/src/main/scala/li/cil/oc/common/block/Hologram.scala b/src/main/scala/li/cil/oc/common/block/Hologram.scala index 488e2e595..9708d2817 100644 --- a/src/main/scala/li/cil/oc/common/block/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/block/Hologram.scala @@ -5,9 +5,9 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.common.tileentity +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.world.IBlockAccess import net.minecraft.world.World @@ -37,7 +37,7 @@ class Hologram(val tier: Int) extends SimpleBlock with traits.SpecialBlock { // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.uncommon, EnumRarity.rare).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { tooltip.addAll(Tooltip.get(getClass.getSimpleName + tier)) diff --git a/src/main/scala/li/cil/oc/common/block/Item.scala b/src/main/scala/li/cil/oc/common/block/Item.scala index c5e1a481e..a83ba8417 100644 --- a/src/main/scala/li/cil/oc/common/block/Item.scala +++ b/src/main/scala/li/cil/oc/common/block/Item.scala @@ -42,7 +42,7 @@ class Item(value: Block) extends ItemBlock(value) { } override def getRarity(stack: ItemStack) = block match { - case simple: SimpleBlock => simple.rarity + case simple: SimpleBlock => simple.rarity(stack) case _ => EnumRarity.common } diff --git a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala index 4f6e8d742..5228067f9 100644 --- a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala @@ -10,6 +10,7 @@ import li.cil.oc.integration.util.NEI import li.cil.oc.integration.util.Wrench import li.cil.oc.util.BlockPosition import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -55,6 +56,11 @@ class Microcontroller extends RedstoneAware with traits.PowerAcceptor with trait } } + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.MicrocontrollerData(stack) + Rarity.byTier(data.tier) + } + // ----------------------------------------------------------------------- // override def energyThroughput = Settings.get.caseRate(Tier.One) diff --git a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala index b542552a8..20a1b3bdd 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala @@ -8,9 +8,11 @@ import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.common.tileentity import li.cil.oc.integration.util.NEI +import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity +import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.util.MovingObjectPosition import net.minecraft.world.IBlockAccess @@ -47,7 +49,10 @@ class RobotAfterimage extends SimpleBlock with traits.SpecialBlock { // ----------------------------------------------------------------------- // - override def rarity = EnumRarity.epic + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.RobotData(stack) + Rarity.byTier(data.tier) + } // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala index cf64ceb0e..80c7ad3e3 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala @@ -14,12 +14,12 @@ import li.cil.oc.integration.util.NEI import li.cil.oc.server.PacketSender import li.cil.oc.server.component.robot import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.AxisAlignedBB import net.minecraft.util.IIcon @@ -65,7 +65,10 @@ class RobotProxy extends RedstoneAware with traits.SpecialBlock with traits.Stat // ----------------------------------------------------------------------- // - override def rarity = EnumRarity.epic + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.RobotData(stack) + Rarity.byTier(data.tier) + } override protected def tooltipHead(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { super.tooltipHead(metadata, stack, player, tooltip, advanced) diff --git a/src/main/scala/li/cil/oc/common/block/Screen.scala b/src/main/scala/li/cil/oc/common/block/Screen.scala index 64df6f24b..130951915 100644 --- a/src/main/scala/li/cil/oc/common/block/Screen.scala +++ b/src/main/scala/li/cil/oc/common/block/Screen.scala @@ -9,16 +9,12 @@ import li.cil.oc.Settings import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity import li.cil.oc.integration.util.Wrench -import li.cil.oc.util.BlockPosition -import li.cil.oc.util.Color -import li.cil.oc.util.PackedColor -import li.cil.oc.util.Tooltip +import li.cil.oc.util._ import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.projectile.EntityArrow -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.world.IBlockAccess @@ -33,7 +29,7 @@ class Screen(val tier: Int) extends RedstoneAware { // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { val (w, h) = Settings.screenResolutionsByTier(tier) diff --git a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala index cbd71ad41..47fc3ff79 100644 --- a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala +++ b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala @@ -97,7 +97,7 @@ class SimpleBlock(material: Material = Material.iron) extends Block(material) { // ItemBlock // ----------------------------------------------------------------------- // - def rarity = EnumRarity.common + def rarity(stack: ItemStack) = EnumRarity.common @SideOnly(Side.CLIENT) def addInformation(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: java.util.List[String], advanced: Boolean) { diff --git a/src/main/scala/li/cil/oc/common/init/Items.scala b/src/main/scala/li/cil/oc/common/init/Items.scala index 3a574c8a8..6639c13b9 100644 --- a/src/main/scala/li/cil/oc/common/init/Items.scala +++ b/src/main/scala/li/cil/oc/common/init/Items.scala @@ -15,6 +15,7 @@ import li.cil.oc.common.item.UpgradeLeash import li.cil.oc.common.recipe.Recipes import li.cil.oc.integration.Mods import li.cil.oc.util.Color +import li.cil.oc.util.ItemUtils import net.minecraft.block.Block import net.minecraft.creativetab.CreativeTabs import net.minecraft.entity.player.EntityPlayer @@ -139,6 +140,98 @@ object Items extends ItemAPI { stack } + def createConfiguredDrone() = { + val data = new ItemUtils.MicrocontrollerData() + + data.tier = Tier.Four + data.storedEnergy = Settings.get.bufferDrone.toInt + data.components = Array( + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryControllerUpgrade").createItemStack(1), + get("tankUpgrade").createItemStack(1), + get("tankControllerUpgrade").createItemStack(1), + + get("wlanCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1) + ) + + val stack = get("drone").createItemStack(1) + data.save(stack) + + stack + } + + def createConfiguredMicrocontroller() = { + val data = new ItemUtils.MicrocontrollerData() + + data.tier = Tier.Four + data.storedEnergy = Settings.get.bufferMicrocontroller.toInt + data.components = Array( + get("signUpgrade").createItemStack(1), + get("pistonUpgrade").createItemStack(1), + + get("redstoneCard2").createItemStack(1), + get("wlanCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1) + ) + + val stack = get("microcontroller").createItemStack(1) + data.save(stack) + + stack + } + + def createConfiguredRobot() = { + val data = new ItemUtils.RobotData() + + data.name = "Creatix" + data.tier = Tier.Four + data.robotEnergy = Settings.get.bufferRobot.toInt + data.totalEnergy = data.robotEnergy + data.components = Array( + get("screen1").createItemStack(1), + get("keyboard").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryControllerUpgrade").createItemStack(1), + get("tankUpgrade").createItemStack(1), + get("tankControllerUpgrade").createItemStack(1), + get("craftingUpgrade").createItemStack(1), + + get("graphicsCard3").createItemStack(1), + get("redstoneCard2").createItemStack(1), + get("wlanCard").createItemStack(1), + get("internetCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1), + + createLuaBios(), + createOpenOS(), + get("hdd3").createItemStack(1) + ) + data.containers = Array( + get("cardContainer3").createItemStack(1), + get("upgradeContainer3").createItemStack(1), + get("upgradeContainer3").createItemStack(1) + ) + + val stack = get("robot").createItemStack(1) + data.save(stack) + + stack + } + // ----------------------------------------------------------------------- // var multi: item.Delegator = _ @@ -149,13 +242,20 @@ object Items extends ItemAPI { def init() { multi = new item.Delegator() { + lazy val configuredItems = Array( + createOpenOS(), + createLuaBios(), + createConfiguredDrone(), + createConfiguredMicrocontroller(), + createConfiguredRobot() + ) + override def getSubItems(item: Item, tab: CreativeTabs, list: java.util.List[_]) { // Workaround for MC's untyped lists... def add[T](list: java.util.List[T], value: Any) = list.add(value.asInstanceOf[T]) super.getSubItems(item, tab, list) Loot.worldDisks.values.foreach(entry => add(list, entry._1)) - add(list, createOpenOS()) - add(list, createLuaBios()) + configuredItems.foreach(add(list, _)) } } @@ -323,5 +423,9 @@ object Items extends ItemAPI { if (Mods.Galacticraft.isAvailable) { Recipes.addMultiItem(worldSensorCard, "worldSensorCard", "oc:worldSensorCard") } + + // 1.4.4 + registerItem(new item.MicrocontrollerCase(multi, Tier.Four), "microcontrollerCaseCreative") + registerItem(new item.DroneCase(multi, Tier.Four), "droneCaseCreative") } } diff --git a/src/main/scala/li/cil/oc/common/item/Delegate.scala b/src/main/scala/li/cil/oc/common/item/Delegate.scala index 50158123b..e71de888f 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegate.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegate.scala @@ -60,15 +60,13 @@ trait Delegate { // ----------------------------------------------------------------------- // - def rarity = Rarity.byTier(tierFromDriver) + def rarity(stack: ItemStack) = Rarity.byTier(tierFromDriver(stack)) - protected def tierFromDriver = { - val stack = createItemStack() + protected def tierFromDriver(stack: ItemStack) = api.Driver.driverFor(stack) match { case driver: api.driver.Item => driver.tier(stack) case _ => 0 } - } def color(stack: ItemStack, pass: Int) = 0xFFFFFF diff --git a/src/main/scala/li/cil/oc/common/item/Delegator.scala b/src/main/scala/li/cil/oc/common/item/Delegator.scala index e67c7ef08..dfbc11795 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegator.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegator.scala @@ -83,7 +83,7 @@ class Delegator extends Item { override def isBookEnchantable(itemA: ItemStack, itemB: ItemStack): Boolean = false override def getRarity(stack: ItemStack) = subItem(stack) match { - case Some(subItem) => subItem.rarity + case Some(subItem) => subItem.rarity(stack) case _ => EnumRarity.common } diff --git a/src/main/scala/li/cil/oc/common/item/Drone.scala b/src/main/scala/li/cil/oc/common/item/Drone.scala index 18862635c..04001d32d 100644 --- a/src/main/scala/li/cil/oc/common/item/Drone.scala +++ b/src/main/scala/li/cil/oc/common/item/Drone.scala @@ -9,6 +9,7 @@ import li.cil.oc.common.entity import li.cil.oc.integration.util.NEI import li.cil.oc.util.BlockPosition import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -24,6 +25,11 @@ class Drone(val parent: Delegator) extends Delegate { } } + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.MicrocontrollerData(stack) + Rarity.byTier(data.tier) + } + override def onItemUse(stack: ItemStack, player: EntityPlayer, position: BlockPosition, side: Int, hitX: Float, hitY: Float, hitZ: Float) = { val world = position.world.get if (!world.isRemote) { diff --git a/src/main/scala/li/cil/oc/common/item/DroneCase.scala b/src/main/scala/li/cil/oc/common/item/DroneCase.scala index 5f62cde92..9a90eb3d2 100644 --- a/src/main/scala/li/cil/oc/common/item/DroneCase.scala +++ b/src/main/scala/li/cil/oc/common/item/DroneCase.scala @@ -1,9 +1,11 @@ package li.cil.oc.common.item +import net.minecraft.item.ItemStack + class DroneCase(val parent: Delegator, val tier: Int) extends Delegate with ItemTier { override val unlocalizedName = super.unlocalizedName + tier - override protected def tierFromDriver = tier + override protected def tierFromDriver(stack: ItemStack) = tier override protected def tooltipName = Option(super.unlocalizedName) } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/item/ItemTier.scala b/src/main/scala/li/cil/oc/common/item/ItemTier.scala index aa6eb4f86..c6be84ae4 100644 --- a/src/main/scala/li/cil/oc/common/item/ItemTier.scala +++ b/src/main/scala/li/cil/oc/common/item/ItemTier.scala @@ -14,7 +14,7 @@ trait ItemTier extends Delegate { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { super.tooltipLines(stack, player, tooltip, advanced) if (advanced) { - tooltip.add(Localization.Tooltip.Tier(tierFromDriver + 1)) + tooltip.add(Localization.Tooltip.Tier(tierFromDriver(stack) + 1)) } } } diff --git a/src/main/scala/li/cil/oc/common/item/Microchip.scala b/src/main/scala/li/cil/oc/common/item/Microchip.scala index 7e18e4967..3b753f5a3 100644 --- a/src/main/scala/li/cil/oc/common/item/Microchip.scala +++ b/src/main/scala/li/cil/oc/common/item/Microchip.scala @@ -1,11 +1,12 @@ package li.cil.oc.common.item import li.cil.oc.util.Rarity +import net.minecraft.item.ItemStack class Microchip(val parent: Delegator, val tier: Int) extends Delegate { override val unlocalizedName = super.unlocalizedName + tier override protected def tooltipName = Option(super.unlocalizedName) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) } diff --git a/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala b/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala index bf8c9fd05..de0340e22 100644 --- a/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala +++ b/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala @@ -1,9 +1,11 @@ package li.cil.oc.common.item +import net.minecraft.item.ItemStack + class MicrocontrollerCase(val parent: Delegator, val tier: Int) extends Delegate with ItemTier { override val unlocalizedName = super.unlocalizedName + tier - override protected def tierFromDriver = tier + override protected def tierFromDriver(stack: ItemStack) = tier override protected def tooltipName = Option(super.unlocalizedName) } diff --git a/src/main/scala/li/cil/oc/common/item/Server.scala b/src/main/scala/li/cil/oc/common/item/Server.scala index 4b469af56..1cec10b36 100644 --- a/src/main/scala/li/cil/oc/common/item/Server.scala +++ b/src/main/scala/li/cil/oc/common/item/Server.scala @@ -23,7 +23,7 @@ class Server(val parent: Delegator, val tier: Int) extends Delegate { override protected def tooltipData = Seq(Settings.get.terminalsPerTier(math.min(Tier.Three, tier))) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override def maxStackSize = 1 diff --git a/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala index 6633d8578..c63dc54fe 100644 --- a/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala @@ -15,7 +15,7 @@ class UpgradeDatabase(val parent: Delegator, val tier: Int) extends Delegate wit override protected def tooltipData = Seq(Settings.get.databaseEntriesPerTier(tier)) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = { if (!player.isSneaking) { diff --git a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala index 0f8c0c1a0..64c9b9ef3 100644 --- a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala @@ -23,6 +23,8 @@ object DroneTemplate extends Template { def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get("droneCase2") + def selectTierCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get("droneCaseCreative") + def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) def assemble(inventory: IInventory) = { @@ -42,7 +44,9 @@ object DroneTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.MicrocontrollerData(stack) - Array(api.Items.get("droneCase" + (info.tier + 1)).createItemStack(1)) ++ info.components + val itemName = ItemUtils.caseNameWithTierSuffix("droneCase", info.tier) + + Array(api.Items.get(itemName).createItemStack(1)) ++ info.components } def register() { @@ -101,6 +105,40 @@ object DroneTemplate extends Template { FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) } + // Creative + { + val nbt = new NBTTagCompound() + nbt.setString("name", "Drone (Creative)") + nbt.setString("select", "li.cil.oc.common.template.DroneTemplate.selectTierCreative") + nbt.setString("validate", "li.cil.oc.common.template.DroneTemplate.validate") + nbt.setString("assemble", "li.cil.oc.common.template.DroneTemplate.assemble") + nbt.setString("hostClass", "li.cil.oc.api.internal.Drone") + + val upgradeSlots = new NBTTagList() + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + nbt.setTag("upgradeSlots", upgradeSlots) + + val componentSlots = new NBTTagList() + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any)) + nbt.setTag("componentSlots", componentSlots) + + FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) + } + // Disassembler { val nbt = new NBTTagCompound() @@ -112,7 +150,10 @@ object DroneTemplate extends Template { } } - override protected def maxComplexity(inventory: IInventory) = if (caseTier(inventory) == Tier.Two) 8 else 5 + override protected def maxComplexity(inventory: IInventory) = + if (caseTier(inventory) == Tier.Two) 8 + else if (caseTier(inventory) == Tier.Four) 9001 // Creative + else 5 override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0)) } diff --git a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala index d528ca100..ed8a7c6f2 100644 --- a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala @@ -23,6 +23,8 @@ object MicrocontrollerTemplate extends Template { def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get("microcontrollerCase2") + def selectTierCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get("microcontrollerCaseCreative") + def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) def assemble(inventory: IInventory) = { @@ -42,7 +44,9 @@ object MicrocontrollerTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.MicrocontrollerData(stack) - Array(api.Items.get("microcontrollerCase" + (info.tier + 1)).createItemStack(1)) ++ info.components + val itemName = ItemUtils.caseNameWithTierSuffix("microcontrollerCase", info.tier) + + Array(api.Items.get(itemName).createItemStack(1)) ++ info.components } def register() { @@ -98,6 +102,40 @@ object MicrocontrollerTemplate extends Template { FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) } + // Creative + { + val nbt = new NBTTagCompound() + nbt.setString("name", "Microcontroller (Creative)") + nbt.setString("select", "li.cil.oc.common.template.MicrocontrollerTemplate.selectTierCreative") + nbt.setString("validate", "li.cil.oc.common.template.MicrocontrollerTemplate.validate") + nbt.setString("assemble", "li.cil.oc.common.template.MicrocontrollerTemplate.assemble") + nbt.setString("hostClass", "li.cil.oc.api.internal.Microcontroller") + + val upgradeSlots = new NBTTagList() + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + nbt.setTag("upgradeSlots", upgradeSlots) + + val componentSlots = new NBTTagList() + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any)) + nbt.setTag("componentSlots", componentSlots) + + FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) + } + // Disassembler { val nbt = new NBTTagCompound() @@ -109,7 +147,10 @@ object MicrocontrollerTemplate extends Template { } } - override protected def maxComplexity(inventory: IInventory) = if (caseTier(inventory) == Tier.Two) 5 else 4 + override protected def maxComplexity(inventory: IInventory) = + if (caseTier(inventory) == Tier.Two) 5 + else if (caseTier(inventory) == Tier.Four) 9001 // Creative + else 4 override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0)) } diff --git a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala index 44ea2cde9..54257ce6c 100644 --- a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala @@ -46,9 +46,8 @@ object RobotTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.RobotData(stack) - val itemName = - if (info.tier == Tier.Four) "caseCreative" - else "case" + (info.tier + 1) + val itemName = ItemUtils.caseNameWithTierSuffix("case", info.tier) + Array(api.Items.get(itemName).createItemStack(1)) ++ info.containers ++ info.components } diff --git a/src/main/scala/li/cil/oc/util/ItemUtils.scala b/src/main/scala/li/cil/oc/util/ItemUtils.scala index 81e6f8d30..b7589040e 100644 --- a/src/main/scala/li/cil/oc/util/ItemUtils.scala +++ b/src/main/scala/li/cil/oc/util/ItemUtils.scala @@ -39,14 +39,19 @@ object ItemUtils { else if (descriptor == api.Items.get("caseCreative")) Tier.Four else if (descriptor == api.Items.get("microcontrollerCase1")) Tier.One else if (descriptor == api.Items.get("microcontrollerCase2")) Tier.Two + else if (descriptor == api.Items.get("microcontrollerCaseCreative")) Tier.Four else if (descriptor == api.Items.get("droneCase1")) Tier.One else if (descriptor == api.Items.get("droneCase2")) Tier.Two + else if (descriptor == api.Items.get("droneCaseCreative")) Tier.Four else if (descriptor == api.Items.get("server1")) Tier.One else if (descriptor == api.Items.get("server2")) Tier.Two else if (descriptor == api.Items.get("server3")) Tier.Three + else if (descriptor == api.Items.get("serverCreative")) Tier.Four else Tier.None } + def caseNameWithTierSuffix(name: String, tier: Int) = name + (if (tier == Tier.Four) "Creative" else (tier + 1).toString) + def loadStack(nbt: NBTTagCompound) = DelegatorConverter.convert(ItemStack.loadItemStackFromNBT(nbt)) def getIngredients(stack: ItemStack): Array[ItemStack] = try { @@ -253,7 +258,7 @@ object ItemUtils { } override def save(nbt: NBTTagCompound) { - if (name != null) { + if (!Strings.isNullOrEmpty(name)) { if (!nbt.hasKey("display")) { nbt.setTag("display", new NBTTagCompound()) }