Re-add the buttons configuration saving feature

This commit is contained in:
Username404-59 2021-05-15 18:58:39 +02:00
parent 3d08c24c17
commit 592bb31eee
Signed by: Username404-59
GPG Key ID: 7AB361FBB257A5D1
4 changed files with 36 additions and 25 deletions

View File

@ -1,6 +1,7 @@
package fr.username404.snowygui.mixins;
import fr.username404.snowygui.ClickGui;
import fr.username404.snowygui.gui.feature.ButtonImpl;
import net.minecraft.client.gui.screens.TitleScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -10,5 +11,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(TitleScreen.class)
public class TitleScreenMixin {
@Inject(method = "createNormalMenuOptions", at = @At("RETURN"))
public void createNormalMenuOptions(int i, int j, CallbackInfo ci) { ClickGui.INSTANCE.tick(); }
public void createNormalMenuOptions(int i, int j, CallbackInfo ci) {
ClickGui.INSTANCE.tick();
if (!ButtonImpl.Companion.getDone()) ButtonImpl.Companion.initialize();
}
}

View File

@ -2,7 +2,6 @@ package fr.username404.snowygui
import fr.username404.snowygui.EventSnowy.Companion.useKey
import fr.username404.snowygui.config.Configuration.obtained
import fr.username404.snowygui.gui.feature.ButtonInfo
import fr.username404.snowygui.misc.AddKeyMaps
import io.github.config4k.getValue
import org.apache.logging.log4j.LogManager
@ -28,15 +27,6 @@ abstract class Snowy {
}
fun atInit() {
if (displayInitMessage) logs.info("Init point of SnowyGUI hit.")
reflections.getTypesAnnotatedWith(ButtonInfo::class.java).forEach { // Initializes every button
logs.info(
try {
it.getConstructor().newInstance()
} catch (e: NoSuchMethodException) {
it.kotlin.objectInstance
}
)
}
eventsInit()
}
}

View File

@ -5,7 +5,9 @@ import com.typesafe.config.ConfigException
import com.typesafe.config.ConfigFactory.*
import com.typesafe.config.ConfigRenderOptions
import com.typesafe.config.ConfigValueFactory
import fr.username404.snowygui.ClickGui
import fr.username404.snowygui.Snowy
import fr.username404.snowygui.gui.feature.ButtonImpl
import io.github.config4k.extract
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
@ -69,15 +71,15 @@ object Configuration {
Runtime.getRuntime().addShutdownHook(
Thread {
runBlocking {
/**
ClickGui.boxContext {
enabledFeatures.putAll(
this.buttons.map {
(it::class.java.getDeclaredField("name").get(this) as String) to (it::class.java.getDeclaredMethod("getToggled").invoke(it)) as Boolean // TODO Fix button configuration
buttons.map {
(it as ButtonImpl).run {
title.toString() to toggled
}
}
)
}
**/
writeConfig(obtained.withValue("enabledFeatures", ConfigValueFactory.fromMap(enabledFeatures))).join() // TODO Fix formatting of enabledFeatures
}
}

View File

@ -3,6 +3,7 @@ package fr.username404.snowygui.gui.feature
import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.PoseStack
import fr.username404.snowygui.ClickGui
import fr.username404.snowygui.Snowy
import fr.username404.snowygui.config.Configuration
import fr.username404.snowygui.gui.ColoredElement
import fr.username404.snowygui.gui.FontUtil
@ -12,6 +13,30 @@ import fr.username404.snowygui.gui.feature.ButtonInfo.Companion.Type
import kotlin.reflect.full.findAnnotation
abstract class ButtonImpl: ColoredElement(0.0, 0.0, 73, 8, opacity = 0.60F) {
companion object {
var done: Boolean = false; private set
fun initialize() {
done = true
Snowy.reflections.getTypesAnnotatedWith(ButtonInfo::class.java).forEach { // Initializes every button
(try {
it.getConstructor().newInstance()
} catch (e: NoSuchMethodException) {
it.kotlin.objectInstance
} as ButtonImpl).let { impl ->
with(impl) {
if (info.kind == ButtonInfo.Companion.Type.TOGGLE) {
Configuration.enabledFeatures[title]?.let { bool ->
toggled = bool
}
}
}
ClickGui.components.filterIsInstance<ClickBox>().find { box ->
box.name!!.key == impl.info.parent.translationKey
}?.buttons!!.add(impl)
}
}
}
}
private val info = this::class.findAnnotation<ButtonInfo>() ?: throw Exception("Missing @Button annotaton")
override var color = info.parent.categoryColor
val title = this@ButtonImpl::class.simpleName
@ -50,14 +75,4 @@ abstract class ButtonImpl: ColoredElement(0.0, 0.0, 73, 8, opacity = 0.60F) {
FontUtil.drawScaled(poseStack, title, x + 1, y + 1, 0.75F)
}
}
init {
if (info.kind == Type.TOGGLE) {
Configuration.enabledFeatures[title]?.let {
toggled = it
}
}
ClickGui.components.filterIsInstance<ClickBox>().find {
it.name!!.key == info.parent.translationKey
}?.buttons!!.add(this)
}
}