From ed23adcd17f1d37d9f679860c050d4fcfe8b1a62 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 5 Dec 2021 20:53:13 +0100 Subject: [PATCH] dump moshi, add jackson --- pom.xml | 6 ++-- .../kotlin/de/bixilon/pixlyzer/PixLyzer.kt | 23 ++++----------- .../de/bixilon/pixlyzer/util/PrettyPrinter.kt | 29 +++++++++++++++++++ .../kotlin/de/bixilon/pixlyzer/util/Util.kt | 21 ++++++++------ wrapper/PixLyzer.py | 18 +++++++----- 5 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 src/main/kotlin/de/bixilon/pixlyzer/util/PrettyPrinter.kt diff --git a/pom.xml b/pom.xml index 3031e60..b1415d3 100644 --- a/pom.xml +++ b/pom.xml @@ -95,9 +95,9 @@ 3.12.0 - com.squareup.moshi - moshi-kotlin - 1.12.0 + com.fasterxml.jackson.core + jackson-databind + 2.13.0 diff --git a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt index 871f5fe..ba2bd5e 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt @@ -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) } diff --git a/src/main/kotlin/de/bixilon/pixlyzer/util/PrettyPrinter.kt b/src/main/kotlin/de/bixilon/pixlyzer/util/PrettyPrinter.kt new file mode 100644 index 0000000..7295d78 --- /dev/null +++ b/src/main/kotlin/de/bixilon/pixlyzer/util/PrettyPrinter.kt @@ -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) + } +} diff --git a/src/main/kotlin/de/bixilon/pixlyzer/util/Util.kt b/src/main/kotlin/de/bixilon/pixlyzer/util/Util.kt index 978477e..fe06074 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/util/Util.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/util/Util.kt @@ -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> = MOSHI.adapter(Types.newParameterizedType(MutableMap::class.java, String::class.java, Any::class.java)) fun forceClassInit(clazz: Class) { try { @@ -23,11 +26,11 @@ object Util { } fun readJsonResource(path: String): MutableMap { - 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 { - 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 { 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 Any.nullCast(): T? { diff --git a/wrapper/PixLyzer.py b/wrapper/PixLyzer.py index a180ab1..1cce3f3 100755 --- a/wrapper/PixLyzer.py +++ b/wrapper/PixLyzer.py @@ -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")