From c0eb625a9b937bcb9256e98afb80d32443daa795 Mon Sep 17 00:00:00 2001 From: inglettronald Date: Fri, 9 Jun 2023 16:55:24 -0500 Subject: 1.20 refactor --- .../kotlin/com/dulkirfabric/config/DulkirConfig.kt | 60 +++++++++++----------- .../kotlin/com/dulkirfabric/config/ListHelper.kt | 4 -- .../config/serializations/KeySerializer.kt | 22 ++++++++ 3 files changed, 51 insertions(+), 35 deletions(-) create mode 100644 src/main/kotlin/com/dulkirfabric/config/serializations/KeySerializer.kt (limited to 'src/main/kotlin/com/dulkirfabric/config') diff --git a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt index 9aeb190..a34016d 100644 --- a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt +++ b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt @@ -10,25 +10,27 @@ * * You may add additional accurate notices of copyright ownership. */ - +@file:UseSerializers(com.dulkirfabric.config.serializations.KeySerializer::class) package com.dulkirfabric.config import com.dulkirfabric.DulkirModFabric.mc import com.dulkirfabric.config.ListHelper.mkKeyField import com.dulkirfabric.config.ListHelper.mkStringField -import com.google.gson.Gson import kotlinx.serialization.Serializable -import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.annotation.SerializedName +import kotlinx.serialization.UseSerializers +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import me.shedaniel.clothconfig2.api.ConfigBuilder import net.minecraft.client.gui.screen.Screen import net.minecraft.client.util.InputUtil +import net.minecraft.client.util.InputUtil.UNKNOWN_KEY import net.minecraft.text.LiteralTextContent import net.minecraft.text.MutableText import net.minecraft.text.Text import net.minecraft.util.Formatting import net.minecraft.util.Identifier import java.io.File -import java.util.* class DulkirConfig { @@ -46,15 +48,15 @@ class DulkirConfig { val entryBuilder = builder.entryBuilder() val general = builder.getOrCreateCategory(Text.literal("General")) general.addEntry( - entryBuilder.startBooleanToggle(Text.literal("Custom Inventory Scale Toggle"), invScaleBool) + entryBuilder.startBooleanToggle(Text.literal("Custom Inventory Scale Toggle"), configOptions.invScaleBool) .setTooltip(Text.literal("WAHOO!")) - .setSaveConsumer { newValue -> invScaleBool = newValue } + .setSaveConsumer { newValue -> configOptions.invScaleBool = newValue } .build() ) general.addEntry( - entryBuilder.startIntSlider(Text.literal("Inventory Scale"), inventoryScale, 1, 5) + entryBuilder.startIntSlider(Text.literal("Inventory Scale"), configOptions.inventoryScale, 1, 5) .setTooltip(Text.literal("Size of GUI whenever you're in an inventory screen")) - .setSaveConsumer { newValue -> inventoryScale = newValue } + .setSaveConsumer { newValue -> configOptions.inventoryScale = newValue } .build() ) @@ -62,8 +64,8 @@ class DulkirConfig { shortcuts.addEntry( ListHelper.mkConfigList( Text.literal("Macros"), - ListHelper.Holder::macros, - { Macro(InputUtil.UNKNOWN_KEY, "") }, + configOptions::macrosList, + { Macro(UNKNOWN_KEY, "") }, Text.literal("Macro"), { value -> listOf( @@ -79,11 +81,9 @@ class DulkirConfig { } data class ConfigOptions( - @SerializedName("testOption") - val invScaleBool: Boolean, - - @SerializedName("inventoryScale") - val inventoryScale: Int + var invScaleBool: Boolean = true, + var inventoryScale: Int = 1, + var macrosList: List = listOf(Macro(UNKNOWN_KEY, "")) ) @Serializable @@ -96,38 +96,36 @@ class DulkirConfig { * Object for storing all the actual config values that will be used in doing useful stuff with the config */ companion object ConfigVars { - var invScaleBool: Boolean = true - var inventoryScale: Int = 1 - var value: List> = listOf(Pair(1, 2), Pair(3, 4)) - + var configOptions = ConfigOptions() private fun saveConfig() { - val gson = Gson() - val configOptions = ConfigOptions( - invScaleBool, - inventoryScale) - val json = gson.toJson(configOptions) + val json = Json { + prettyPrint = true + ignoreUnknownKeys = true + encodeDefaults = true + } val configDirectory = File(mc.runDirectory, "config") if (!configDirectory.exists()) { configDirectory.mkdir() } val configFile = File(configDirectory, "dulkirConfig.json") - configFile.writeText(json) + configFile.writeText(json.encodeToString(configOptions)) } fun loadConfig() { - val gson = Gson() val configDir = File(mc.runDirectory, "config") if (!configDir.exists()) return val configFile = File(configDir, "dulkirConfig.json") if (configFile.exists()) { - val json = configFile.readText() - val configOptions = gson.fromJson(json, ConfigOptions::class.java) - - invScaleBool = configOptions.invScaleBool - inventoryScale = configOptions.inventoryScale + val json = Json { + prettyPrint = true + ignoreUnknownKeys = true + encodeDefaults = true + } + configOptions = json.decodeFromString(configFile.readText()) } + } } diff --git a/src/main/kotlin/com/dulkirfabric/config/ListHelper.kt b/src/main/kotlin/com/dulkirfabric/config/ListHelper.kt index 3476bcc..8f50943 100644 --- a/src/main/kotlin/com/dulkirfabric/config/ListHelper.kt +++ b/src/main/kotlin/com/dulkirfabric/config/ListHelper.kt @@ -35,10 +35,6 @@ object ListHelper { ) } - object Holder { - var macros = listOf(DulkirConfig.Macro(InputUtil.UNKNOWN_KEY, "Hello World")) - } - fun ConfigEntryBuilder.mkStringField(text: Text, prop: KMutableProperty0) = startStrField(text, prop.get()) .setSaveConsumer { prop.set(it) } .setDefaultValue("") diff --git a/src/main/kotlin/com/dulkirfabric/config/serializations/KeySerializer.kt b/src/main/kotlin/com/dulkirfabric/config/serializations/KeySerializer.kt new file mode 100644 index 0000000..a737bf0 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/config/serializations/KeySerializer.kt @@ -0,0 +1,22 @@ +package com.dulkirfabric.config.serializations + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import net.minecraft.client.util.InputUtil +import org.lwjgl.glfw.GLFW + +object KeySerializer: KSerializer { + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("InputUtil.Key", PrimitiveKind.INT) + + override fun deserialize(decoder: Decoder): InputUtil.Key { + return InputUtil.fromKeyCode(GLFW.GLFW_KEY_UNKNOWN, decoder.decodeInt()) + } + + override fun serialize(encoder: Encoder, value: InputUtil.Key) { + encoder.encodeInt(value.code) + } +} \ No newline at end of file -- cgit