blob: 99c8ab31149b37f6c3335644da936c3a12042c15 [file] [log] [blame] [raw]
package li.cil.oc.server.driver
import li.cil.oc
import li.cil.oc.api.driver.{Item, Slot}
import li.cil.oc.common.item.Hdd
import li.cil.oc.{Config, Items}
import net.minecraft.item.ItemStack
object FileSystem extends Item {
override def api = Option(getClass.getResourceAsStream(Config.driverPath + "filesystem.lua"))
override def worksWith(item: ItemStack) = WorksWith(Items.hdd2, Items.hdd4, Items.hdd8)(item)
override def slot(item: ItemStack) = Slot.HDD
override def node(item: ItemStack) = Items.multi.subItem(item) match {
case Some(subItem: Hdd) =>
// We have a bit of a chicken-egg problem here, because we want to use the
// node's address as the folder name... so we generate the address here,
// if necessary. No one will know, right? Right!?
val tag = nbt(item)
val address =
if (tag.hasKey("address")) tag.getString("address")
else java.util.UUID.randomUUID().toString
oc.api.FileSystem.fromSaveDir(address, subItem.megaBytes * 1024 * 1024, Config.filesBuffered).
flatMap(oc.api.FileSystem.asNode) match {
case None => None
case Some(node) =>
node.address = Some(address)
node.load(tag)
Some(node)
}
case _ => None
}
}