From 930e97c884a34cacac6c2604e5dfabb120a86b94 Mon Sep 17 00:00:00 2001 From: Nico Date: Sat, 5 Apr 2014 18:54:10 +0200 Subject: [PATCH] added block placer upgrade, still does not work properly in all cases --- .../opencomputers/recipes/default.recipes | 5 ++++ src/main/scala/li/cil/oc/Items.scala | 2 ++ src/main/scala/li/cil/oc/common/Proxy.scala | 1 + .../common/item/UpgradeBlockPlacerAir.scala | 25 +++++++++++++++++++ .../component/UpgradeBlockPlacerAir.scala | 17 +++++++++++++ .../cil/oc/server/component/robot/Robot.scala | 5 ++-- .../driver/item/UpgradeBlockPlacerAir.scala | 20 +++++++++++++++ 7 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/main/scala/li/cil/oc/common/item/UpgradeBlockPlacerAir.scala create mode 100644 src/main/scala/li/cil/oc/server/component/UpgradeBlockPlacerAir.scala create mode 100644 src/main/scala/li/cil/oc/server/driver/item/UpgradeBlockPlacerAir.scala diff --git a/src/main/resources/assets/opencomputers/recipes/default.recipes b/src/main/resources/assets/opencomputers/recipes/default.recipes index 9d0a4aa61..7a46f6e24 100644 --- a/src/main/resources/assets/opencomputers/recipes/default.recipes +++ b/src/main/resources/assets/opencomputers/recipes/default.recipes @@ -118,6 +118,11 @@ navigationUpgrade { ["oc:circuitTier3", {item=map, subID=any}, "oc:circuitTier3"] [ingotGold, potion, ingotGold]] } +blockPlacerAirUpgrade { + input: [[ingotIron, enderPearl, ingotIron] + ["oc:circuitTier1", pistonStickyBase, "oc:circuitTier1"] + [ingotIron, enderPearl, ingotIron]] +} signUpgrade { input: [[ingotIron, dyePowder, ingotIron] ["oc:circuitTier1", stickWood, "oc:circuitTier1"] diff --git a/src/main/scala/li/cil/oc/Items.scala b/src/main/scala/li/cil/oc/Items.scala index 16a2e5a79..8a9af5e79 100644 --- a/src/main/scala/li/cil/oc/Items.scala +++ b/src/main/scala/li/cil/oc/Items.scala @@ -45,6 +45,7 @@ object Items { var upgradeNavigation: item.UpgradeNavigation = _ var upgradeSign: item.UpgradeSign = _ var upgradeSolarGenerator: item.UpgradeSolarGenerator = _ + var upgradeBlockPlacerAir: item.UpgradeBlockPlacerAir = _ // ----------------------------------------------------------------------- // // Crafting @@ -95,6 +96,7 @@ object Items { upgradeCrafting = Recipes.addItemDelegate(new item.UpgradeCrafting(multi), "craftingUpgrade") upgradeGenerator = Recipes.addItemDelegate(new item.UpgradeGenerator(multi), "generatorUpgrade") + upgradeBlockPlacerAir = Recipes.addItemDelegate(new item.UpgradeBlockPlacerAir(multi), "blockPlacerAirUpgrade") ironNugget = new item.IronNugget(multi) diff --git a/src/main/scala/li/cil/oc/common/Proxy.scala b/src/main/scala/li/cil/oc/common/Proxy.scala index b20539508..8a88e1949 100644 --- a/src/main/scala/li/cil/oc/common/Proxy.scala +++ b/src/main/scala/li/cil/oc/common/Proxy.scala @@ -63,6 +63,7 @@ class Proxy { api.Driver.add(driver.item.UpgradeNavigation) api.Driver.add(driver.item.UpgradeSign) api.Driver.add(driver.item.UpgradeSolarGenerator) + api.Driver.add(driver.item.UpgradeBlockPlacerAir) api.Driver.add(driver.item.WirelessNetworkCard) if (Mods.ComputerCraft15.isAvailable) { diff --git a/src/main/scala/li/cil/oc/common/item/UpgradeBlockPlacerAir.scala b/src/main/scala/li/cil/oc/common/item/UpgradeBlockPlacerAir.scala new file mode 100644 index 000000000..928b2290b --- /dev/null +++ b/src/main/scala/li/cil/oc/common/item/UpgradeBlockPlacerAir.scala @@ -0,0 +1,25 @@ +package li.cil.oc.common.item + +import java.util +import net.minecraft.item.{ItemStack, EnumRarity} +import net.minecraft.entity.player.EntityPlayer +import li.cil.oc.Settings +import li.cil.oc.util.Tooltip +import net.minecraft.client.renderer.texture.IconRegister + +class UpgradeBlockPlacerAir(val parent: Delegator) extends Delegate { + val unlocalizedName = "UpgradeBlockPlacerAir" + + 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_block_placer_air") + } +} diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeBlockPlacerAir.scala b/src/main/scala/li/cil/oc/server/component/UpgradeBlockPlacerAir.scala new file mode 100644 index 000000000..b52567240 --- /dev/null +++ b/src/main/scala/li/cil/oc/server/component/UpgradeBlockPlacerAir.scala @@ -0,0 +1,17 @@ +package li.cil.oc.server.component + + +import net.minecraft.tileentity.TileEntity +import li.cil.oc.api.Network +import li.cil.oc.api.network.Visibility + +class UpgradeBlockPlacerAir(val owner: TileEntity) extends ManagedComponent { + val node = Network.newNode(this, Visibility.Network). + withComponent("airplacer"). + create() + + // ----------------------------------------------------------------------- // + + override val canUpdate = false + +} diff --git a/src/main/scala/li/cil/oc/server/component/robot/Robot.scala b/src/main/scala/li/cil/oc/server/component/robot/Robot.scala index 9077296e0..29d4c41ce 100644 --- a/src/main/scala/li/cil/oc/server/component/robot/Robot.scala +++ b/src/main/scala/li/cil/oc/server/component/robot/Robot.scala @@ -1,12 +1,11 @@ package li.cil.oc.server.component.robot -import li.cil.oc.api +import li.cil.oc.{Items, api, OpenComputers, Settings} import li.cil.oc.api.network._ import li.cil.oc.common.tileentity import li.cil.oc.server.component.ManagedComponent import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedNBT._ -import li.cil.oc.{OpenComputers, Settings} import net.minecraft.block.{BlockFluid, Block} import net.minecraft.entity.item.{EntityMinecart, EntityMinecartContainer, EntityItem} import net.minecraft.entity.{EntityLivingBase, Entity} @@ -245,7 +244,7 @@ class Robot(val robot: tileentity.Robot) extends ManagedComponent { case Some(hit) if hit.typeOfHit == EnumMovingObjectType.TILE => val (bx, by, bz, hx, hy, hz) = clickParamsFromHit(hit) player.placeBlock(robot.selectedSlot, bx, by, bz, hit.sideHit, hx, hy, hz) - case None if Settings.get.canPlaceInAir && player.closestEntity[Entity]().isEmpty => + case None if (Items.multi.subItem(robot.getStackInSlot(3)) == Items.upgradeBlockPlacerAir) && player.closestEntity[Entity]().isEmpty => val (bx, by, bz, hx, hy, hz) = clickParamsFromFacing(facing, side) player.placeBlock(robot.selectedSlot, bx, by, bz, side.getOpposite.ordinal, hx, hy, hz) case _ => false diff --git a/src/main/scala/li/cil/oc/server/driver/item/UpgradeBlockPlacerAir.scala b/src/main/scala/li/cil/oc/server/driver/item/UpgradeBlockPlacerAir.scala new file mode 100644 index 000000000..6b92c132b --- /dev/null +++ b/src/main/scala/li/cil/oc/server/driver/item/UpgradeBlockPlacerAir.scala @@ -0,0 +1,20 @@ +package li.cil.oc.server.driver.item + +import li.cil.oc.Items +import li.cil.oc.api.driver.Slot +import li.cil.oc.api.machine.Robot +import li.cil.oc.server.component +import net.minecraft.item.ItemStack +import net.minecraft.tileentity.TileEntity + +object UpgradeBlockPlacerAir extends Item { + override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeBlockPlacerAir) + + override def createEnvironment(stack: ItemStack, container: TileEntity) = + container match { + case robot: Robot => new component.UpgradeBlockPlacerAir(robot) + case _ => null + } + + override def slot(stack: ItemStack) = Slot.Upgrade +}