missed a file
parent
8cd16f5d92
commit
90e354d4dc
@ -0,0 +1,49 @@
|
||||
package net.brokenmoon.redcontrol.api
|
||||
|
||||
import com.simon816.j65el02.device.ByteDiskDriver
|
||||
import com.simon816.j65el02.device.DiskDriver
|
||||
import com.simon816.j65el02.device.FileDiskDriver
|
||||
import net.brokenmoon.redcontrol.RedControl
|
||||
import net.fabricmc.loader.api.FabricLoader
|
||||
import net.minecraft.data.client.BlockStateVariantMap.TriFunction
|
||||
import java.net.URI
|
||||
import kotlin.io.path.absolute
|
||||
import kotlin.io.path.createDirectories
|
||||
import kotlin.io.path.exists
|
||||
|
||||
object DriveFactory {
|
||||
private val gamedir = FabricLoader.getInstance().gameDir.resolve("redbin").absolute()
|
||||
val extendedDrivers = HashMap<String,TriFunction<URI,String,String,DiskDriver?>>()
|
||||
fun createDriver(uri: URI, name: String, serial: String): DiskDriver? {
|
||||
if (!gamedir.exists()) {gamedir.createDirectories()}
|
||||
return when (uri.scheme) {
|
||||
"img" -> {
|
||||
val bytes = RedControl.images[uri.host+uri.path]?: return null
|
||||
ByteDiskDriver(bytes,name,serial)
|
||||
}
|
||||
"save" -> {
|
||||
val path = gamedir.resolve(uri.host+uri.path).absolute()
|
||||
if (path.startsWith(gamedir)) {
|
||||
return FileDiskDriver(path,name,serial,false)
|
||||
} else { return null }
|
||||
}
|
||||
"rosave" -> {
|
||||
val path = gamedir.resolve(uri.host+uri.path).absolute()
|
||||
if (path.startsWith(gamedir)) {
|
||||
return FileDiskDriver(path,name,serial,false)
|
||||
} else { return null }
|
||||
}
|
||||
"http", "https" -> {return null}
|
||||
else -> {
|
||||
if (extendedDrivers.containsKey(uri.scheme)) {
|
||||
return extendedDrivers[uri.scheme]!!.apply(uri,name,serial)
|
||||
} else {return null}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface PentaFunction<A1,A2,A3,A4,R> {
|
||||
fun execute(a1: A1,a2: A2,a3: A3,a4: A4): R
|
||||
}
|
Loading…
Reference in New Issue