From e75b25c06e8357f153952ab538231ecac84c9413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 17 Sep 2014 18:53:12 +0200 Subject: [PATCH] Made tractor beam upgrade work in tablets and added pfx. --- .../scala/li/cil/oc/common/item/Tablet.scala | 17 ++++++++++------- .../server/component/UpgradeTractorBeam.scala | 12 +++++++----- .../server/driver/item/UpgradeTractorBeam.scala | 4 +++- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/item/Tablet.scala b/src/main/scala/li/cil/oc/common/item/Tablet.scala index c11c8220d..2cd6d0597 100644 --- a/src/main/scala/li/cil/oc/common/item/Tablet.scala +++ b/src/main/scala/li/cil/oc/common/item/Tablet.scala @@ -47,8 +47,11 @@ class Tablet(val parent: Delegator) extends Delegate { iconOff = Option(iconRegister.registerIcon(Settings.resourceDomain + ":TabletOff")) } - override def update(stack: ItemStack, world: World, player: Entity, slot: Int, selected: Boolean) = - Tablet.get(stack, player).update(world, player, slot, selected) + override def update(stack: ItemStack, world: World, entity: Entity, slot: Int, selected: Boolean) = + entity match { + case player: EntityPlayer => Tablet.get(stack, player).update(world, player, slot, selected) + case _ => + } override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = { if (!player.isSneaking) { @@ -68,7 +71,7 @@ class Tablet(val parent: Delegator) extends Delegate { } } -class TabletWrapper(var stack: ItemStack, var holder: Entity) extends ComponentInventory with Container with Owner with Rotatable { +class TabletWrapper(var stack: ItemStack, var holder: EntityPlayer) extends ComponentInventory with Container with Owner with Rotatable { lazy val computer = if (holder.worldObj.isRemote) null else Machine.create(this) val data = new TabletData() @@ -232,7 +235,7 @@ class TabletWrapper(var stack: ItemStack, var holder: Entity) extends ComponentI // ----------------------------------------------------------------------- // - def update(world: World, player: Entity, slot: Int, selected: Boolean) { + def update(world: World, player: EntityPlayer, slot: Int, selected: Boolean) { holder = player if (!world.isRemote) { computer.node.asInstanceOf[Connector].changeBuffer(500) @@ -254,7 +257,7 @@ class TabletWrapper(var stack: ItemStack, var holder: Entity) extends ComponentI } object Tablet extends ITickHandler { - def get(stack: ItemStack, holder: Entity) = { + def get(stack: ItemStack, holder: EntityPlayer) = { if (holder.worldObj.isRemote) Client.get(stack, holder) else Server.get(stack, holder) } @@ -291,9 +294,9 @@ object Tablet extends ITickHandler { // To allow access in cache entry init. private var currentStack: ItemStack = _ - private var currentHolder: Entity = _ + private var currentHolder: EntityPlayer = _ - def get(stack: ItemStack, holder: Entity) = { + def get(stack: ItemStack, holder: EntityPlayer) = { if (!stack.hasTagCompound) { stack.setTagCompound(new NBTTagCompound()) } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala index 4122d6dff..92e907d8e 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala @@ -2,22 +2,23 @@ package li.cil.oc.server.component import li.cil.oc.Settings import li.cil.oc.api.Network -import li.cil.oc.api.machine.Robot +import li.cil.oc.api.driver.Container import li.cil.oc.api.network.{Arguments, Callback, Context, Visibility} import li.cil.oc.common.component import net.minecraft.entity.item.EntityItem +import net.minecraft.entity.player.EntityPlayer import net.minecraft.util.AxisAlignedBB import scala.collection.convert.WrapAsScala._ -class UpgradeTractorBeam(owner: Robot) extends component.ManagedComponent { +class UpgradeTractorBeam(owner: Container, player: () => EntityPlayer) extends component.ManagedComponent { val node = Network.newNode(this, Visibility.Network). withComponent("tractor_beam"). create() private val pickupRadius = 3 - private def world = owner.player.getEntityWorld + private def world = owner.world @Callback(doc = """function():boolean -- Tries to pick up a random item in the robots' vicinity.""") def suck(context: Context, args: Arguments): Array[AnyRef] = { @@ -28,9 +29,10 @@ class UpgradeTractorBeam(owner: Robot) extends component.ManagedComponent { val item = items(world.rand.nextInt(items.size)) val stack = item.getEntityItem val size = stack.stackSize - item.onCollideWithPlayer(owner.player) + item.onCollideWithPlayer(player()) if (stack.stackSize < size || item.isDead) { context.pause(Settings.get.suckDelay) + world.playAuxSFX(2003, math.floor(item.posX).toInt, math.floor(item.posY).toInt, math.floor(item.posZ).toInt, 0) return result(true) } } @@ -38,7 +40,7 @@ class UpgradeTractorBeam(owner: Robot) extends component.ManagedComponent { } private def pickupBounds = { - val player = owner.player + val player = this.player() val x = player.posX val y = player.posY val z = player.posZ diff --git a/src/main/scala/li/cil/oc/server/driver/item/UpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/server/driver/item/UpgradeTractorBeam.scala index 08b3ff5cc..5605506f7 100644 --- a/src/main/scala/li/cil/oc/server/driver/item/UpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/server/driver/item/UpgradeTractorBeam.scala @@ -4,6 +4,7 @@ import li.cil.oc.api import li.cil.oc.api.driver.{Container, Slot} import li.cil.oc.api.machine.Robot import li.cil.oc.common.Tier +import li.cil.oc.common.item.TabletWrapper import li.cil.oc.server.component import net.minecraft.item.ItemStack @@ -11,7 +12,8 @@ object UpgradeTractorBeam extends Item { override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("tractorBeamUpgrade")) override def createEnvironment(stack: ItemStack, container: Container) = container match { - case robot: Robot => new component.UpgradeTractorBeam(robot) + case robot: Robot => new component.UpgradeTractorBeam(container, robot.player) + case tablet: TabletWrapper => new component.UpgradeTractorBeam(container, () => tablet.holder) case _ => null }