forked from SteamWar/SteamWar
Fix Schem Upload
This commit is contained in:
@@ -53,4 +53,5 @@ dependencies {
|
|||||||
implementation(libs.yamlconfig)
|
implementation(libs.yamlconfig)
|
||||||
implementation(libs.kotlinxSerializationCbor)
|
implementation(libs.kotlinxSerializationCbor)
|
||||||
implementation(libs.ktorRateLimit)
|
implementation(libs.ktorRateLimit)
|
||||||
|
implementation(libs.knbt)
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@ package de.steamwar.routes
|
|||||||
import de.steamwar.plugins.SWAuthPrincipal
|
import de.steamwar.plugins.SWAuthPrincipal
|
||||||
import de.steamwar.plugins.SWPermissionCheck
|
import de.steamwar.plugins.SWPermissionCheck
|
||||||
import de.steamwar.sql.NodeData
|
import de.steamwar.sql.NodeData
|
||||||
|
import de.steamwar.sql.NodeData.SchematicFormat
|
||||||
import de.steamwar.sql.NodeDownload
|
import de.steamwar.sql.NodeDownload
|
||||||
import de.steamwar.sql.NodeMember
|
import de.steamwar.sql.NodeMember
|
||||||
import de.steamwar.sql.SWException
|
import de.steamwar.sql.SWException
|
||||||
@@ -32,7 +33,10 @@ import io.ktor.server.auth.*
|
|||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.decodeFromByteArray
|
||||||
|
import net.benwoodworth.knbt.*
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
@@ -71,6 +75,11 @@ data class SchematicCode(val id: Int, val code: String, val expires: Long)
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class UploadSchematic(val name: String, val content: String)
|
data class UploadSchematic(val name: String, val content: String)
|
||||||
|
|
||||||
|
val nbt = Nbt {
|
||||||
|
variant = NbtVariant.Java
|
||||||
|
compression = NbtCompression.Gzip
|
||||||
|
}
|
||||||
|
|
||||||
fun Route.configureSchematic() {
|
fun Route.configureSchematic() {
|
||||||
route("/download/{code}") {
|
route("/download/{code}") {
|
||||||
get {
|
get {
|
||||||
@@ -112,14 +121,28 @@ fun Route.configureSchematic() {
|
|||||||
|
|
||||||
val user = call.principal<SWAuthPrincipal>()!!.user
|
val user = call.principal<SWAuthPrincipal>()!!.user
|
||||||
|
|
||||||
val content = Base64.getDecoder().decode(file.content)
|
|
||||||
var node = SchematicNode.getSchematicNode(user.id, schemName, 0)
|
var node = SchematicNode.getSchematicNode(user.id, schemName, 0)
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
node = SchematicNode.createSchematic(user.id, schemName, 0)
|
node = SchematicNode.createSchematic(user.id, schemName, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
val data = NodeData(node.id, NodeData.SchematicFormat.V2)
|
val content = Base64.getDecoder().decode(file.content)
|
||||||
data.saveFromStream(content.inputStream(), NodeData.SchematicFormat.V2)
|
|
||||||
|
var schem = nbt.decodeFromByteArray<NbtCompound>(content)
|
||||||
|
|
||||||
|
if (schem.size == 1) schem = schem[schem.keys.first()] as NbtCompound
|
||||||
|
|
||||||
|
val version = schem.let {
|
||||||
|
if (it.containsKey("Materials"))
|
||||||
|
return@let SchematicFormat.MCEDIT
|
||||||
|
else if (it.containsKey("Blocks"))
|
||||||
|
return@let SchematicFormat.SPONGE_V3
|
||||||
|
else
|
||||||
|
return@let SchematicFormat.SPONGE_V2
|
||||||
|
}
|
||||||
|
|
||||||
|
val data = NodeData(node.id, version)
|
||||||
|
data.saveFromStream(content.inputStream(), version)
|
||||||
|
|
||||||
call.respond(ResponseSchematic(node))
|
call.respond(ResponseSchematic(node))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ dependencyResolutionManagement {
|
|||||||
library("yamlconfig", "org.bspfsystems:yamlconfiguration:1.3.0")
|
library("yamlconfig", "org.bspfsystems:yamlconfiguration:1.3.0")
|
||||||
library("kotlinxSerializationCbor", "org.jetbrains.kotlinx:kotlinx-serialization-cbor:1.4.1")
|
library("kotlinxSerializationCbor", "org.jetbrains.kotlinx:kotlinx-serialization-cbor:1.4.1")
|
||||||
library("ktorRateLimit", "io.ktor:ktor-server-rate-limit:$ktorVersion")
|
library("ktorRateLimit", "io.ktor:ktor-server-rate-limit:$ktorVersion")
|
||||||
|
library("knbt", "net.benwoodworth.knbt:knbt:0.11.7")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user