Some more cleanup.

This commit is contained in:
Florian Nücke 2014-10-13 16:51:58 +02:00
parent 8e6c97efcb
commit cb2bec3227
3 changed files with 22 additions and 41 deletions

View File

@ -1,36 +1,40 @@
package li.cil.oc.integration.computercraft
import dan200.computercraft.api.filesystem.IMount
import dan200.computercraft.api.filesystem.IWritableMount
import dan200.computercraft.api.media.IMedia
import li.cil.oc
import li.cil.oc.Settings
import li.cil.oc.api.driver.EnvironmentHost
import li.cil.oc.api.fs.Label
import li.cil.oc.common.Slot
import li.cil.oc.integration.Mods
import li.cil.oc.integration.opencomputers.Item
import li.cil.oc.integration.util.ComputerCraft
import li.cil.oc.server.fs.ComputerCraftFileSystem
import li.cil.oc.server.fs.ComputerCraftWritableFileSystem
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound
object DriverComputerCraftMedia extends Item {
override def worksWith(stack: ItemStack) =
Mods.ComputerCraft.isAvailable && ComputerCraft.isDisk(stack)
override def worksWith(stack: ItemStack) = stack.getItem.isInstanceOf[IMedia]
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
if (Mods.ComputerCraft.isAvailable && ComputerCraft.isDisk(stack) && host != null) {
val address = addressFromTag(dataTag(stack))
val mount = ComputerCraft.createDiskMount(stack, host.world)
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), host, Settings.resourceDomain + ":floppy_access")) match {
case Some(environment) =>
environment.node.asInstanceOf[oc.server.network.Node].address = address
environment
case _ => null
}
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = {
val address = addressFromTag(dataTag(stack))
val mount = oc.api.FileSystem.fromComputerCraft(stack.getItem.asInstanceOf[IMedia].createDataMount(stack, host.world))
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), host, Settings.resourceDomain + ":floppy_access")) match {
case Some(environment) =>
environment.node.asInstanceOf[oc.server.network.Node].address = address
environment
case _ => null
}
else null
}
override def slot(stack: ItemStack) = Slot.Floppy
def createFileSystem(mount: AnyRef) = Option(mount) collect {
case rw: IWritableMount => new ComputerCraftWritableFileSystem(rw)
case ro: IMount => new ComputerCraftFileSystem(ro)
}
private def addressFromTag(tag: NBTTagCompound) =
if (tag.hasKey("node") && tag.getCompoundTag("node").hasKey("address")) {
tag.getCompoundTag("node").getString("address")

View File

@ -1,22 +0,0 @@
package li.cil.oc.integration.util
import dan200.computercraft.api.filesystem.IMount
import dan200.computercraft.api.filesystem.IWritableMount
import dan200.computercraft.api.media.IMedia
import li.cil.oc
import li.cil.oc.server.fs.ComputerCraftFileSystem
import li.cil.oc.server.fs.ComputerCraftWritableFileSystem
import net.minecraft.item.ItemStack
import net.minecraft.world.World
object ComputerCraft {
def isDisk(stack: ItemStack) = stack.getItem.isInstanceOf[IMedia]
def createDiskMount(stack: ItemStack, world: World) =
if (isDisk(stack)) oc.api.FileSystem.fromComputerCraft(stack.getItem.asInstanceOf[IMedia].createDataMount(stack, world)) else null
def createFileSystem(mount: AnyRef) = Option(mount) collect {
case rw: IWritableMount => new ComputerCraftWritableFileSystem(rw)
case ro: IMount => new ComputerCraftFileSystem(ro)
}
}

View File

@ -11,7 +11,7 @@ import li.cil.oc.api.driver.EnvironmentHost
import li.cil.oc.api.fs.Label
import li.cil.oc.api.fs.Mode
import li.cil.oc.integration.Mods
import li.cil.oc.integration.util.ComputerCraft
import li.cil.oc.integration.computercraft.DriverComputerCraftMedia
import li.cil.oc.server.component
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound
@ -98,12 +98,11 @@ object FileSystem extends api.detail.FileSystemAPI {
def fromMemory(capacity: Long): api.fs.FileSystem = new RamFileSystem(capacity)
def fromComputerCraft(mount: AnyRef): api.fs.FileSystem = {
def fromComputerCraft(mount: AnyRef): api.fs.FileSystem =
if (Mods.ComputerCraft.isAvailable) {
ComputerCraft.createFileSystem(mount).orNull
DriverComputerCraftMedia.createFileSystem(mount).orNull
}
else null
}
def asManagedEnvironment(fileSystem: api.fs.FileSystem, label: Label, host: EnvironmentHost, sound: String) =
Option(fileSystem).flatMap(fs => Some(new component.FileSystem(fs, label, Option(host), Option(sound)))).orNull