diff --git a/src/main/java/li/cil/oc/api/driver/UpgradeSlot.java b/src/main/java/li/cil/oc/api/driver/UpgradeContainer.java similarity index 95% rename from src/main/java/li/cil/oc/api/driver/UpgradeSlot.java rename to src/main/java/li/cil/oc/api/driver/UpgradeContainer.java index 279785e1a..307ff76b5 100644 --- a/src/main/java/li/cil/oc/api/driver/UpgradeSlot.java +++ b/src/main/java/li/cil/oc/api/driver/UpgradeContainer.java @@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack; * These drivers will not be queried for environments. The reported tier is the * maximum tier supported in the dynamic slot they provide. */ -public interface UpgradeSlot extends Item { +public interface UpgradeContainer extends Item { /** * The type of slot provided as the dynamic slot. This will usually be * for other upgrades, but may be for any type of item component. diff --git a/src/main/resources/assets/opencomputers/recipes/default.recipes b/src/main/resources/assets/opencomputers/recipes/default.recipes index a483e7a71..d116ee5e5 100644 --- a/src/main/resources/assets/opencomputers/recipes/default.recipes +++ b/src/main/resources/assets/opencomputers/recipes/default.recipes @@ -124,15 +124,20 @@ craftingUpgrade { [ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]] } experienceUpgrade { - input: [[ingotIron, "", ingotIron] - ["oc:circuitChip1", expBottle, "oc:circuitChip1"] - [ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]] + input: [[ingotGold, "", ingotGold] + ["oc:circuitChip2", emerald, "oc:circuitChip2"] + [ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]] } generatorUpgrade { input: [[ingotIron, "", ingotIron] ["oc:circuitChip1", craftingPiston, "oc:circuitChip1"] [ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]] } +inventoryUpgrade { + input: [[plankWood, hopper, plankWood] + [dispenser, chest, craftingPiston] + [plankWood, "oc:circuitChip1", plankWood]] +} navigationUpgrade { input: [[ingotGold, compass, ingotGold] ["oc:circuitChip3", {item=map, subID=any}, "oc:circuitChip3"] @@ -147,6 +152,36 @@ solarGeneratorUpgrade { input: [[glass, glass, glass] ["oc:circuitChip3", "oc:generatorUpgrade", "oc:circuitChip3"]] } +cardContainer1 { + input: [[ingotIron, "oc:materialTransistor", ingotIron] + [craftingPiston, chest, ""] + [ingotIron, "oc:materialCard", ingotIron]] +} +cardContainer2 { + input: [[ingotIron, "oc:circuitChip2", ingotIron] + [craftingPiston, chest, ""] + [ingotIron, "oc:materialCard", ingotIron]] +} +cardContainer3 { + input: [[ingotGold, "oc:circuitChip2", ingotGold] + [craftingPiston, chest, ""] + [ingotGold, "oc:materialCard", ingotGold]] +} +upgradeContainer1 { + input: [[ingotIron, "oc:circuitChip1", ingotIron] + [craftingPiston, chest, ""] + [ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]] +} +upgradeContainer2 { + input: [[ingotIron, "oc:circuitChip2", ingotIron] + [craftingPiston, chest, ""] + [ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]] +} +upgradeContainer3 { + input: [[ingotGold, "oc:circuitChip2", ingotGold] + [craftingPiston, chest, ""] + [ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]] +} # Note: iron ingot and nugget recipes are *only* registered if no other mod # already provides the same functionality. diff --git a/src/main/resources/assets/opencomputers/textures/items/container_card0.png b/src/main/resources/assets/opencomputers/textures/items/container_card0.png new file mode 100644 index 000000000..6baf2671f Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_card0.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/container_card1.png b/src/main/resources/assets/opencomputers/textures/items/container_card1.png new file mode 100644 index 000000000..0fe78e13e Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_card1.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/container_card2.png b/src/main/resources/assets/opencomputers/textures/items/container_card2.png new file mode 100644 index 000000000..efabcdf6b Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_card2.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/container_upgrade0.png b/src/main/resources/assets/opencomputers/textures/items/container_upgrade0.png new file mode 100644 index 000000000..aef2d3904 Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_upgrade0.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/container_upgrade1.png b/src/main/resources/assets/opencomputers/textures/items/container_upgrade1.png new file mode 100644 index 000000000..aa226d39e Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_upgrade1.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/container_upgrade2.png b/src/main/resources/assets/opencomputers/textures/items/container_upgrade2.png new file mode 100644 index 000000000..b62fd986a Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/container_upgrade2.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/icon_upgrade.png b/src/main/resources/assets/opencomputers/textures/items/icon_upgrade.png index 885ab17b1..7d27810c1 100644 Binary files a/src/main/resources/assets/opencomputers/textures/items/icon_upgrade.png and b/src/main/resources/assets/opencomputers/textures/items/icon_upgrade.png differ diff --git a/src/main/resources/assets/opencomputers/textures/items/icon_upgrade_dynamic.png b/src/main/resources/assets/opencomputers/textures/items/icon_upgrade_dynamic.png new file mode 100644 index 000000000..885ab17b1 Binary files /dev/null and b/src/main/resources/assets/opencomputers/textures/items/icon_upgrade_dynamic.png differ diff --git a/src/main/scala/li/cil/oc/Items.scala b/src/main/scala/li/cil/oc/Items.scala index afb0cc289..414c9e9f0 100644 --- a/src/main/scala/li/cil/oc/Items.scala +++ b/src/main/scala/li/cil/oc/Items.scala @@ -173,5 +173,12 @@ object Items extends ItemAPI { // v1.3.0 Recipes.addItemDelegate(new item.LinkedCard(multi), "linkedCard", "oc:linkedCard") Recipes.addItemDelegate(new item.UpgradeExperience(multi), "experienceUpgrade", "oc:experienceUpgrade") + Recipes.addItemDelegate(new item.UpgradeInventory(multi), "inventoryUpgrade", "oc:inventoryUpgrade") + Recipes.addItemDelegate(new item.UpgradeContainerUpgrade(multi, 0), "upgradeContainer1", "oc:upgradeContainer1") + Recipes.addItemDelegate(new item.UpgradeContainerUpgrade(multi, 1), "upgradeContainer2", "oc:upgradeContainer2") + Recipes.addItemDelegate(new item.UpgradeContainerUpgrade(multi, 2), "upgradeContainer3", "oc:upgradeContainer3") + Recipes.addItemDelegate(new item.UpgradeContainerCard(multi, 0), "cardContainer1", "oc:cardContainer1") + Recipes.addItemDelegate(new item.UpgradeContainerCard(multi, 1), "cardContainer2", "oc:cardContainer2") + Recipes.addItemDelegate(new item.UpgradeContainerCard(multi, 2), "cardContainer3", "oc:cardContainer3") } } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/client/gui/Icons.scala b/src/main/scala/li/cil/oc/client/gui/Icons.scala index 1545312db..d4b94eea7 100644 --- a/src/main/scala/li/cil/oc/client/gui/Icons.scala +++ b/src/main/scala/li/cil/oc/client/gui/Icons.scala @@ -23,6 +23,7 @@ object Icons { bySlotType += Slot.Processor -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_cpu") bySlotType += Slot.Tool -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_tool") bySlotType += Slot.Upgrade -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_upgrade") + bySlotType += Slot.UpgradeContainer -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_upgrade_dynamic") byTier += 0 -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_tier0") byTier += 1 -> iconRegister.registerIcon(Settings.resourceDomain + ":icon_tier1") diff --git a/src/main/scala/li/cil/oc/common/InventorySlots.scala b/src/main/scala/li/cil/oc/common/InventorySlots.scala index a387fa4fd..971fe713c 100644 --- a/src/main/scala/li/cil/oc/common/InventorySlots.scala +++ b/src/main/scala/li/cil/oc/common/InventorySlots.scala @@ -51,15 +51,15 @@ object InventorySlots { val assembler = Array( Array( InventorySlot(Slot.None, Tier.None), // Reserved for computer case. - InventorySlot(Slot.Upgrade, Tier.Two), - InventorySlot(Slot.Upgrade, Tier.Two), - InventorySlot(Slot.Upgrade, Tier.Two), InventorySlot(Slot.Upgrade, Tier.One), InventorySlot(Slot.Upgrade, Tier.One), InventorySlot(Slot.Upgrade, Tier.One), InventorySlot(Slot.None, Tier.None), InventorySlot(Slot.None, Tier.None), InventorySlot(Slot.None, Tier.None), + InventorySlot(Slot.None, Tier.None), + InventorySlot(Slot.None, Tier.None), + InventorySlot(Slot.None, Tier.None), InventorySlot(Slot.UpgradeContainer, Tier.Two), InventorySlot(Slot.UpgradeContainer, Tier.One), InventorySlot(Slot.UpgradeContainer, Tier.One), diff --git a/src/main/scala/li/cil/oc/common/Proxy.scala b/src/main/scala/li/cil/oc/common/Proxy.scala index ba52c623c..d88457319 100644 --- a/src/main/scala/li/cil/oc/common/Proxy.scala +++ b/src/main/scala/li/cil/oc/common/Proxy.scala @@ -77,6 +77,9 @@ class Proxy { api.Driver.add(driver.item.Processor) api.Driver.add(driver.item.RedstoneCard) api.Driver.add(driver.item.Screen) + api.Driver.add(driver.item.UpgradeContainerCard) + api.Driver.add(driver.item.UpgradeContainerFloppy) + api.Driver.add(driver.item.UpgradeContainerUpgrade) api.Driver.add(driver.item.UpgradeCrafting) api.Driver.add(driver.item.UpgradeExperience) api.Driver.add(driver.item.UpgradeGenerator) diff --git a/src/main/scala/li/cil/oc/common/item/UpgradeContainerCard.scala b/src/main/scala/li/cil/oc/common/item/UpgradeContainerCard.scala new file mode 100644 index 000000000..d9d3371a8 --- /dev/null +++ b/src/main/scala/li/cil/oc/common/item/UpgradeContainerCard.scala @@ -0,0 +1,26 @@ +package li.cil.oc.common.item + +import java.util +import li.cil.oc.{Settings, server} +import li.cil.oc.util.{Tooltip, Rarity} +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.ItemStack +import net.minecraft.client.renderer.texture.IconRegister + +class UpgradeContainerCard(val parent: Delegator, val tier: Int) extends Delegate { + val baseName = "UpgradeContainerCard" + val unlocalizedName = baseName + tier + + override def rarity = Rarity.byTier(server.driver.item.UpgradeContainerCard.tier(createItemStack())) + + 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 + ":container_card" + tier) + } +} diff --git a/src/main/scala/li/cil/oc/common/item/UpgradeContainerUpgrade.scala b/src/main/scala/li/cil/oc/common/item/UpgradeContainerUpgrade.scala new file mode 100644 index 000000000..268d48f51 --- /dev/null +++ b/src/main/scala/li/cil/oc/common/item/UpgradeContainerUpgrade.scala @@ -0,0 +1,26 @@ +package li.cil.oc.common.item + +import java.util +import li.cil.oc.{Settings, server} +import li.cil.oc.util.{Tooltip, Rarity} +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.ItemStack +import net.minecraft.client.renderer.texture.IconRegister + +class UpgradeContainerUpgrade(val parent: Delegator, val tier: Int) extends Delegate { + val baseName = "UpgradeContainerUpgrade" + val unlocalizedName = baseName + tier + + override def rarity = Rarity.byTier(server.driver.item.UpgradeContainerUpgrade.tier(createItemStack())) + + 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 + ":container_upgrade" + tier) + } +} diff --git a/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala b/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala index a0ec72a38..331c757a6 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/RobotAssembler.scala @@ -7,6 +7,7 @@ import li.cil.oc.api.Driver import li.cil.oc.common.InventorySlots.Tier import li.cil.oc.common.InventorySlots import li.cil.oc.util.ItemUtils +import li.cil.oc.api.driver.UpgradeContainer class RobotAssembler extends traits.Environment with traits.Inventory with traits.Rotatable { val node = api.Network.newNode(this, Visibility.None). @@ -16,6 +17,7 @@ class RobotAssembler extends traits.Environment with traits.Inventory with trait var isAssembling = false def complexity = items.drop(1).foldLeft(0)((acc, stack) => acc + (Option(api.Driver.driverFor(stack.orNull)) match { + case Some(driver: UpgradeContainer) => (1 + driver.tier(stack.get)) * 2 case Some(driver) => 1 + driver.tier(stack.get) case _ => 0 })) diff --git a/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerCard.scala b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerCard.scala new file mode 100644 index 000000000..854f985e9 --- /dev/null +++ b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerCard.scala @@ -0,0 +1,23 @@ +package li.cil.oc.server.driver.item + +import li.cil.oc.{Items, api} +import li.cil.oc.api.driver.{UpgradeContainer, Slot} +import li.cil.oc.server.component +import net.minecraft.item.ItemStack +import li.cil.oc.common.item + +object UpgradeContainerCard extends Item with UpgradeContainer { + override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("cardContainer1"), api.Items.get("cardContainer2"), api.Items.get("cardContainer3")) + + override def createEnvironment(stack: ItemStack, container: component.Container) = null + + override def slot(stack: ItemStack) = Slot.UpgradeContainer + + override def providedSlot(stack: ItemStack) = Slot.Card + + override def tier(stack: ItemStack) = + Items.multi.subItem(stack) match { + case Some(container: item.UpgradeContainerCard) => container.tier + case _ => 0 + } +} diff --git a/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerFloppy.scala b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerFloppy.scala new file mode 100644 index 000000000..e91790095 --- /dev/null +++ b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerFloppy.scala @@ -0,0 +1,16 @@ +package li.cil.oc.server.driver.item + +import li.cil.oc.api +import li.cil.oc.api.driver.{UpgradeContainer, Slot} +import li.cil.oc.server.component +import net.minecraft.item.ItemStack + +object UpgradeContainerFloppy extends Item with UpgradeContainer { + override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("diskDrive")) + + override def createEnvironment(stack: ItemStack, container: component.Container) = null + + override def slot(stack: ItemStack) = Slot.UpgradeContainer + + override def providedSlot(stack: ItemStack) = Slot.Disk +} diff --git a/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerUpgrade.scala b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerUpgrade.scala new file mode 100644 index 000000000..ea5e0e1da --- /dev/null +++ b/src/main/scala/li/cil/oc/server/driver/item/UpgradeContainerUpgrade.scala @@ -0,0 +1,23 @@ +package li.cil.oc.server.driver.item + +import li.cil.oc.{Items, api} +import li.cil.oc.api.driver.{UpgradeContainer, Slot} +import li.cil.oc.server.component +import net.minecraft.item.ItemStack +import li.cil.oc.common.item + +object UpgradeContainerUpgrade extends Item with UpgradeContainer { + override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("upgradeContainer1"), api.Items.get("upgradeContainer2"), api.Items.get("upgradeContainer3")) + + override def createEnvironment(stack: ItemStack, container: component.Container) = null + + override def slot(stack: ItemStack) = Slot.UpgradeContainer + + override def providedSlot(stack: ItemStack) = Slot.Upgrade + + override def tier(stack: ItemStack) = + Items.multi.subItem(stack) match { + case Some(container: item.UpgradeContainerUpgrade) => container.tier + case _ => 0 + } +}