dump moshi, add jackson

This commit is contained in:
Bixilon 2021-12-05 20:53:13 +01:00
parent f122b5883b
commit ed23adcd17
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 59 additions and 38 deletions

View File

@ -95,9 +95,9 @@
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi-kotlin</artifactId>
<version>1.12.0</version>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>

View File

@ -1,6 +1,5 @@
package de.bixilon.pixlyzer
import com.squareup.moshi.JsonWriter
import de.bixilon.mbf.MBFBinaryWriter
import de.bixilon.mbf.MBFCompressionTypes
import de.bixilon.mbf.MBFData
@ -12,7 +11,6 @@ import de.bixilon.pixlyzer.util.ReflectionUtil.getGetter
import de.bixilon.pixlyzer.util.Util
import net.minecraft.Bootstrap
import net.minecraft.util.registry.Registry
import okio.Buffer
import java.io.*
import java.util.*
import java.util.zip.GZIPOutputStream
@ -135,27 +133,18 @@ object PixLyzer {
}
fun Any.toJsonString(): String {
Buffer().let {
val jsonWriter: JsonWriter = JsonWriter.of(it)
ANY_MOSHI_ADAPTER.toJson(jsonWriter, this)
return it.readUtf8()
}
return Util.MAPPER.writeValueAsString(this)
}
private fun writData(path: String, data: Any) {
Buffer().let {
val jsonWriter: JsonWriter = JsonWriter.of(it)
jsonWriter.indent = " "
ANY_MOSHI_ADAPTER.toJson(jsonWriter, data)
run {
val fileWriter = FileWriter("$path.json")
fileWriter.write(it.readUtf8())
fileWriter.write(Util.MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(data))
fileWriter.close()
}
Buffer().let {
val jsonWriter: JsonWriter = JsonWriter.of(it)
ANY_MOSHI_ADAPTER.toJson(jsonWriter, data)
run {
val fileWriter = FileWriter("$path.min.json")
fileWriter.write(it.readUtf8())
fileWriter.write(Util.MAPPER.writeValueAsString(data))
fileWriter.close()
}
@ -169,6 +158,4 @@ object PixLyzer {
private val initializeGameVersionMethod = getGetter(getClass("net.minecraft.SharedConstants"), "createGameVersion", "method_36208")
private val ANY_MOSHI_ADAPTER = Util.MOSHI.adapter(Any::class.java)
}

View File

@ -0,0 +1,29 @@
package de.bixilon.pixlyzer.util
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.util.DefaultIndenter
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
class PrettyPrinter : DefaultPrettyPrinter {
constructor() {
_arrayIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE
_objectIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE
}
constructor(base: DefaultPrettyPrinter) : super(base)
override fun writeObjectFieldValueSeparator(generator: JsonGenerator) {
generator.writeRaw(": ")
}
override fun createInstance(): PrettyPrinter {
check(javaClass == PrettyPrinter::class.java) {
("Failed `createInstance()`: " + javaClass.name
+ " does not override method; it has to")
}
return PrettyPrinter(this)
}
}

View File

@ -1,18 +1,21 @@
package de.bixilon.pixlyzer.util
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.type.MapType
import net.minecraft.client.MinecraftClient
import java.io.*
import java.security.MessageDigest
object Util {
val MOSHI = Moshi.Builder()
.build()
val MAPPER = ObjectMapper()
init {
MAPPER.setDefaultPrettyPrinter(PrettyPrinter())
}
val JSON_MAP_TYPE: MapType = MAPPER.typeFactory.constructMapType(HashMap::class.java, Any::class.java, Any::class.java)
val MAP_ADAPTER: JsonAdapter<MutableMap<String, Any>> = MOSHI.adapter(Types.newParameterizedType(MutableMap::class.java, String::class.java, Any::class.java))
fun <T> forceClassInit(clazz: Class<T>) {
try {
@ -23,11 +26,11 @@ object Util {
}
fun readJsonResource(path: String): MutableMap<String, Any> {
return MAP_ADAPTER.fromJson(readReader(BufferedReader(InputStreamReader(Util::class.java.getResourceAsStream("/$path")!!))))!!
return MAPPER.readValue(readReader(BufferedReader(InputStreamReader(Util::class.java.getResourceAsStream("/$path")!!))), JSON_MAP_TYPE)!!
}
fun readJsonFile(path: String): MutableMap<String, Any> {
return MAP_ADAPTER.fromJson(readReader(BufferedReader(InputStreamReader(FileInputStream(path)))))!!
return MAPPER.readValue(readReader(BufferedReader(InputStreamReader(FileInputStream(path)))), JSON_MAP_TYPE)!!
}
fun byteArrayToHexString(byteArray: ByteArray): String {
@ -53,7 +56,7 @@ object Util {
fun readJsonMinecraftResource(path: String): MutableMap<String, Any> {
val inputStream = MinecraftClient::class.java.getResourceAsStream("/$path") ?: throw FileNotFoundException("Can not find minecraft resource: $path")
return MAP_ADAPTER.fromJson(readReader(BufferedReader(InputStreamReader(inputStream))))!!
return MAPPER.readValue(readReader(BufferedReader(InputStreamReader(inputStream))), JSON_MAP_TYPE)!!
}
inline fun <reified T> Any.nullCast(): T? {

View File

@ -35,11 +35,12 @@ OBJENSIS_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/org/objenesis/objenesis
KOTLIN_STD_LIB_PATH = DATA_FOLDER + "kotlin-stdlib-1.5.31.jar"
KOTLIN_STD_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.31/kotlin-stdlib-1.5.31.jar"
MOSHI_LIB_PATH = DATA_FOLDER + "moshi-1.12.0.jar"
MOSHI_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/squareup/moshi/moshi/1.12.0/moshi-1.12.0.jar"
OKIO_LIB_PATH = DATA_FOLDER + "okio-2.10.0.jar"
OKIO_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.10.0/okio-2.10.0.jar"
JACKSON_CORE_LIB_PATH = DATA_FOLDER + "jackson-core-1.13.0.jar"
JACKSON_CORE_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.13.0/jackson-core-2.13.0.jar"
JACKSON_DATABIND_LIB_PATH = DATA_FOLDER + "jackson-databind-1.13.0.jar"
JACKSON_DATABIND_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.13.0/jackson-databind-2.13.0.jar"
JACKSON_ANNOTATIONS_LIB_PATH = DATA_FOLDER + "jackson-annotations-1.13.0.jar"
JACKSON_ANNOTATIONS_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.13.0/jackson-annotations-2.13.0.jar"
ZSTD_LIB_PATH = DATA_FOLDER + "zstd-jni-1.5.0-2.jar"
ZSDT_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/github/luben/zstd-jni/1.5.0-2/zstd-jni-1.5.0-2.jar"
@ -47,7 +48,7 @@ ZSDT_LIB_DOWNLOAD_PATH = "https://repo1.maven.org/maven2/com/github/luben/zstd-j
MBF_KOTLIN_LIB_PATH = DATA_FOLDER + "mbf-kotlin-cc331b8c.jar"
MBF_KOTLIN_LIB_DOWNLOAD_PATH = "https://jitpack.io/com/gitlab/Bixilon/mbf-kotlin/cc331b8c/mbf-kotlin-cc331b8c.jar"
ADDITIONAL_CLASSPATH = KOTLIN_STD_LIB_PATH + ":" + OBJENSIS_PATH + ":" + MOSHI_LIB_PATH + ":" + OKIO_LIB_PATH + ":" + ZSTD_LIB_PATH + ":" + MBF_KOTLIN_LIB_PATH
ADDITIONAL_CLASSPATH = KOTLIN_STD_LIB_PATH + ":" + OBJENSIS_PATH + ":" + JACKSON_CORE_LIB_PATH + ":" + JACKSON_DATABIND_LIB_PATH + ":" + JACKSON_ANNOTATIONS_LIB_PATH + ":" + ZSTD_LIB_PATH + ":" + MBF_KOTLIN_LIB_PATH
VERSION_MANIFEST_URL = "https://launchermeta.mojang.com/mc/game/version_manifest.json"
YARN_MANIFEST_URL = "https://maven.fabricmc.net/net/fabricmc/yarn/versions.json"
@ -252,8 +253,9 @@ print("Checking libraries...")
checkFile(filename=TINY_REMAPPER_PATH, url=TINY_REMAPPER_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=OBJENSIS_PATH, url=OBJENSIS_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=KOTLIN_STD_LIB_PATH, url=KOTLIN_STD_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=MOSHI_LIB_PATH, url=MOSHI_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=OKIO_LIB_PATH, url=OKIO_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=JACKSON_CORE_LIB_PATH, url=JACKSON_CORE_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=JACKSON_DATABIND_LIB_PATH, url=JACKSON_DATABIND_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=JACKSON_ANNOTATIONS_LIB_PATH, url=JACKSON_ANNOTATIONS_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=ZSTD_LIB_PATH, url=ZSDT_LIB_DOWNLOAD_PATH, versionId="libraries")
checkFile(filename=MBF_KOTLIN_LIB_PATH, url=MBF_KOTLIN_LIB_DOWNLOAD_PATH, versionId="libraries")