mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-16 10:51:55 -04:00
Made disk drive expose a component, allows checking for disk presence and programmatic ejection of disks. Closes #1144.
This commit is contained in:
parent
bf7bb9b204
commit
b0d0fa09a7
@ -4,6 +4,9 @@ import cpw.mods.fml.relauncher.Side
|
|||||||
import cpw.mods.fml.relauncher.SideOnly
|
import cpw.mods.fml.relauncher.SideOnly
|
||||||
import li.cil.oc.api
|
import li.cil.oc.api
|
||||||
import li.cil.oc.api.Driver
|
import li.cil.oc.api.Driver
|
||||||
|
import li.cil.oc.api.machine.Arguments
|
||||||
|
import li.cil.oc.api.machine.Callback
|
||||||
|
import li.cil.oc.api.machine.Context
|
||||||
import li.cil.oc.api.network.Analyzable
|
import li.cil.oc.api.network.Analyzable
|
||||||
import li.cil.oc.api.network.Component
|
import li.cil.oc.api.network.Component
|
||||||
import li.cil.oc.api.network.Node
|
import li.cil.oc.api.network.Node
|
||||||
@ -12,12 +15,15 @@ import li.cil.oc.common.Slot
|
|||||||
import li.cil.oc.common.Sound
|
import li.cil.oc.common.Sound
|
||||||
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
|
import li.cil.oc.util.InventoryUtils
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
|
|
||||||
class DiskDrive extends traits.Environment with traits.ComponentInventory with traits.Rotatable with Analyzable {
|
class DiskDrive extends traits.Environment with traits.ComponentInventory with traits.Rotatable with Analyzable {
|
||||||
val node = api.Network.newNode(this, Visibility.None).create()
|
val node = api.Network.newNode(this, Visibility.Network).
|
||||||
|
withComponent("disk_drive").
|
||||||
|
create()
|
||||||
|
|
||||||
// Used on client side to check whether to render disk activity indicators.
|
// Used on client side to check whether to render disk activity indicators.
|
||||||
var lastAccess = 0L
|
var lastAccess = 0L
|
||||||
@ -29,6 +35,30 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
@Callback(doc = """function():boolean -- Checks whether some medium is currently in the drive.""")
|
||||||
|
def isEmpty(context: Context, args: Arguments): Array[AnyRef] = {
|
||||||
|
result(filesystemNode.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Callback(doc = """function([velocity:number]):boolean -- Eject the currently present medium from the drive.""")
|
||||||
|
def eject(context: Context, args: Arguments): Array[AnyRef] = {
|
||||||
|
val velocity = args.optDouble(0, 0) max 0 min 1
|
||||||
|
val ejected = decrStackSize(0, 1)
|
||||||
|
if (ejected != null && ejected.stackSize > 0) {
|
||||||
|
val entity = InventoryUtils.spawnStackInWorld(position, ejected, Option(facing))
|
||||||
|
if (entity != null) {
|
||||||
|
val vx = facing.offsetX * velocity
|
||||||
|
val vy = facing.offsetY * velocity
|
||||||
|
val vz = facing.offsetZ * velocity
|
||||||
|
entity.addVelocity(vx, vy, vz)
|
||||||
|
}
|
||||||
|
result(true)
|
||||||
|
}
|
||||||
|
else result(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = filesystemNode.fold(null: Array[Node])(Array(_))
|
override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = filesystemNode.fold(null: Array[Node])(Array(_))
|
||||||
|
|
||||||
override def canUpdate = false
|
override def canUpdate = false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user