Use kotlinx-serialization-json instead of gson and move the macros to the main configuration file
This commit is contained in:
parent
c74456c000
commit
d8bbab0ff7
|
@ -11,6 +11,7 @@ buildscript {
|
|||
|
||||
plugins {
|
||||
kotlin("jvm") version "1.5.20-M1"
|
||||
kotlin("plugin.serialization") version "1.5.20-M1"
|
||||
id("com.github.johnrengelman.shadow") version "7.0.0" apply false
|
||||
id("architectury-plugin") version "[3.0.100, 3.3["
|
||||
id("dev.architectury.loom") version "0.7.2.110" apply false
|
||||
|
@ -31,6 +32,7 @@ val javaVer: String = "8"
|
|||
val sourceJavaVer: String = "16"
|
||||
val kotlinVer: String by rootProject
|
||||
val kotlinBaseVer = kotlinVer.substring(0..2)
|
||||
val serializationVer: String by rootProject
|
||||
val mcBase: String = rootProject.architectury.minecraft.substring(0..3)
|
||||
val kotlinX: String = "org.jetbrains.kotlinx"
|
||||
|
||||
|
@ -38,6 +40,7 @@ subprojects {
|
|||
group = rootProject.group.toString()
|
||||
lateinit var mappingsDep: Dependency
|
||||
apply(plugin = "dev.architectury.loom")
|
||||
apply(plugin = "org.jetbrains.kotlin.plugin.serialization")
|
||||
extensions.configure<net.fabricmc.loom.LoomGradleExtension>("loom") {
|
||||
mappingsDep = officialMojangMappings()
|
||||
silentMojangMappingsLicense()
|
||||
|
@ -49,6 +52,8 @@ subprojects {
|
|||
repositories { maven(url = "https://jitpack.io"); mavenCentral() }
|
||||
dependencies {
|
||||
implementation("$kotlinX:kotlinx-coroutines-core:$kotlinBaseVer.0-RC")
|
||||
implementation("$kotlinX:kotlinx-serialization-core:$serializationVer")
|
||||
implementation("$kotlinX:kotlinx-serialization-json:$serializationVer")
|
||||
listOf(
|
||||
"$kotlinX:kotlinx-datetime:0.2.1",
|
||||
"com.typesafe:config:1.4.1",
|
||||
|
@ -102,6 +107,11 @@ subprojects {
|
|||
adaptclassstrings()
|
||||
"$group.**".also { dontnote(it); dontwarn(it) }
|
||||
|
||||
// kotlinx-serialization related configuration:
|
||||
keep(mapOf("includedescriptorclasses" to true), "class $group.snowygui.**$\$serializer { * ; }")
|
||||
keepclassmembers("class $group.snowygui.** { *** Companion; }")
|
||||
keepclasseswithmembers("class $group.snowygui.** { kotlinx.serialization.KSerializer serializer(...); }")
|
||||
|
||||
// Required for discord-rpc
|
||||
keepclassmembers("class $group.drpc.** { public * ; }")
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package fr.username404.snowygui
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import fr.username404.snowygui.EventSnowy.Companion.useKey
|
||||
import fr.username404.snowygui.config.Configuration.obtained
|
||||
import fr.username404.snowygui.gui.feature.ButtonImpl
|
||||
|
@ -16,7 +14,6 @@ abstract class Snowy {
|
|||
protected fun Class<*>.isValidForButtonCollection(): Boolean = (!((Modifier.isAbstract(javaClass.modifiers)) || javaClass.isAnnotationPresent(Ignored::class.java)))
|
||||
private val displayInitMessage: Boolean by obtained
|
||||
companion object {
|
||||
val Gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
|
||||
@JvmStatic
|
||||
protected val FeaturePackage: String = "fr.username404.snowygui.gui.feature"
|
||||
lateinit var annotatedButtons: Set<Class<out ButtonImpl>>
|
||||
|
|
|
@ -12,22 +12,26 @@ import io.github.config4k.extract
|
|||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import net.minecraft.client.Minecraft
|
||||
import java.io.File
|
||||
import java.nio.charset.Charset
|
||||
import java.util.function.Supplier
|
||||
|
||||
object Configuration {
|
||||
val ModifiableValues = mutableMapOf<String, Supplier<ConfigValue>>(
|
||||
"enabledFeatures" to Supplier { ConfigValueFactory.fromMap(enabledFeatures) },
|
||||
"riskyCheats" to Supplier { ConfigValueFactory.fromAnyRef(riskyCheatsEnabled) }
|
||||
"riskyCheats" to Supplier { ConfigValueFactory.fromAnyRef(riskyCheatsEnabled) },
|
||||
"macros" to Supplier { ConfigValueFactory.fromIterable((ClickGui.components.find { it is ClickBox && it.isCategory(Category.MACROS) } as ClickBox).buttons.map {
|
||||
Json.encodeToString(it as Macro)
|
||||
}) }
|
||||
); inline fun setConfigValue(s: String, crossinline value: () -> Any) = ModifiableValues.put(s, Supplier { ConfigValueFactory.fromAnyRef(value.invoke()) })
|
||||
private fun Config.withFullModifiableValues() = ModifiableValues.entries.fold(this) { previous, entry ->
|
||||
previous.withValue(entry.key, entry.value.get())
|
||||
}
|
||||
private val configDirectory: String = (Minecraft.getInstance().gameDirectory.absolutePath + File.separator + "config").also { File(it).mkdir() }
|
||||
private val file: File = File(configDirectory + File.separator + "snowy.conf")
|
||||
private val macroFile: File = File(configDirectory + File.separator + "snowy-macros.json")
|
||||
private suspend fun writeConfig(c: Config) = coroutineScope {
|
||||
launch {
|
||||
file.writeText(
|
||||
|
@ -64,6 +68,7 @@ object Configuration {
|
|||
"""
|
||||
|Snowy {
|
||||
| displayInitMessage = false
|
||||
| macros = []
|
||||
| riskyCheats = false
|
||||
|}
|
||||
""".trimMargin()
|
||||
|
@ -80,9 +85,8 @@ object Configuration {
|
|||
}
|
||||
}
|
||||
val foundMacros: Set<Macro> = run {
|
||||
if (!macroFile.exists()) macroFile.createNewFile()
|
||||
macroFile.readLines(Charset.forName("UTF-8")).filterNot { it.isBlank() }.map {
|
||||
Snowy.Gson.fromJson(it, Macro::class.java).copy()
|
||||
obtained.getStringList("macros").map {
|
||||
Json.decodeFromString<Macro>(it)
|
||||
}.toSet()
|
||||
}
|
||||
init {
|
||||
|
@ -98,12 +102,6 @@ object Configuration {
|
|||
}
|
||||
)
|
||||
}
|
||||
with(macroFile) {
|
||||
writeText("")
|
||||
(ClickGui.components.find { it is ClickBox && it.isCategory(Category.MACROS) } as ClickBox).buttons.map { Snowy.Gson.toJson(it as Macro) }.forEach { s ->
|
||||
appendText("$s\n")
|
||||
}
|
||||
}
|
||||
writeConfig(obtained.withFullModifiableValues()).join()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package fr.username404.snowygui.gui.feature
|
||||
|
||||
import com.google.gson.annotations.Expose
|
||||
import net.minecraft.client.Minecraft
|
||||
import fr.username404.snowygui.gui.feature.ButtonInfo.Companion.Type
|
||||
import kotlinx.serialization.Serializable
|
||||
import net.minecraft.client.Minecraft
|
||||
|
||||
@Ignored
|
||||
@Serializable
|
||||
@ButtonInfo(Category.MACROS, kind = Type.CLICK)
|
||||
data class Macro(
|
||||
@Expose @JvmField var command: String,
|
||||
@Expose override var title: String = command
|
||||
@JvmField var command: String,
|
||||
override var title: String = command
|
||||
): ButtonImpl() {
|
||||
override fun execAction() = Minecraft.getInstance().player!!.chat("/$command")
|
||||
}
|
Loading…
Reference in New Issue