aboutsummaryrefslogtreecommitdiff
path: root/src/compat/moulconfig/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/compat/moulconfig/java')
-rw-r--r--src/compat/moulconfig/java/MCConfigEditorIntegration.kt241
-rw-r--r--src/compat/moulconfig/java/ProcessedCategoryFirm.kt12
-rw-r--r--src/compat/moulconfig/java/ProcessedEditableOptionFirm.kt14
-rw-r--r--src/compat/moulconfig/java/ProcessedOptionFirm.kt3
4 files changed, 159 insertions, 111 deletions
diff --git a/src/compat/moulconfig/java/MCConfigEditorIntegration.kt b/src/compat/moulconfig/java/MCConfigEditorIntegration.kt
index dec2559..6b2df21 100644
--- a/src/compat/moulconfig/java/MCConfigEditorIntegration.kt
+++ b/src/compat/moulconfig/java/MCConfigEditorIntegration.kt
@@ -1,13 +1,16 @@
package moe.nea.firmament.compat.moulconfig
import com.google.auto.service.AutoService
+import io.github.notenoughupdates.moulconfig.ChromaColour
import io.github.notenoughupdates.moulconfig.Config
import io.github.notenoughupdates.moulconfig.DescriptionRendereringBehaviour
import io.github.notenoughupdates.moulconfig.Social
import io.github.notenoughupdates.moulconfig.common.IMinecraft
import io.github.notenoughupdates.moulconfig.common.MyResourceLocation
+import io.github.notenoughupdates.moulconfig.common.text.StructuredText
import io.github.notenoughupdates.moulconfig.gui.GuiComponent
-import io.github.notenoughupdates.moulconfig.gui.GuiElementWrapper
+import io.github.notenoughupdates.moulconfig.gui.GuiContext
+import io.github.notenoughupdates.moulconfig.gui.GuiElementComponent
import io.github.notenoughupdates.moulconfig.gui.GuiOptionEditor
import io.github.notenoughupdates.moulconfig.gui.HorizontalAlign
import io.github.notenoughupdates.moulconfig.gui.MoulConfigEditor
@@ -20,9 +23,12 @@ import io.github.notenoughupdates.moulconfig.gui.editors.ComponentEditor
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorAccordion
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorBoolean
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorButton
+import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorColour
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorDropdown
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorText
import io.github.notenoughupdates.moulconfig.observer.GetSetter
+import io.github.notenoughupdates.moulconfig.platform.MoulConfigPlatform
+import io.github.notenoughupdates.moulconfig.platform.MoulConfigScreenComponent
import io.github.notenoughupdates.moulconfig.processor.ProcessedCategory
import io.github.notenoughupdates.moulconfig.processor.ProcessedOption
import java.lang.reflect.Type
@@ -30,21 +36,24 @@ import java.net.URI
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit
-import net.minecraft.client.gui.screen.Screen
-import net.minecraft.util.Identifier
-import net.minecraft.util.StringIdentifiable
-import net.minecraft.util.Util
+import net.minecraft.client.gui.screens.Screen
+import net.minecraft.network.chat.Component
+import net.minecraft.resources.ResourceLocation
+import net.minecraft.util.StringRepresentable
+import net.minecraft.Util
import moe.nea.firmament.Firmament
+import moe.nea.firmament.gui.config.AllConfigsGui
import moe.nea.firmament.gui.config.BooleanHandler
import moe.nea.firmament.gui.config.ChoiceHandler
import moe.nea.firmament.gui.config.ClickHandler
+import moe.nea.firmament.gui.config.ColourHandler
import moe.nea.firmament.gui.config.DurationHandler
import moe.nea.firmament.gui.config.FirmamentConfigScreenProvider
import moe.nea.firmament.gui.config.HudMeta
import moe.nea.firmament.gui.config.HudMetaHandler
import moe.nea.firmament.gui.config.IntegerHandler
import moe.nea.firmament.gui.config.KeyBindingHandler
-import moe.nea.firmament.gui.config.ManagedConfig
+import moe.nea.firmament.util.data.ManagedConfig
import moe.nea.firmament.gui.config.ManagedOption
import moe.nea.firmament.gui.config.StringHandler
import moe.nea.firmament.gui.toMoulConfig
@@ -96,29 +105,31 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
val mappedSetter = setter.xmap(fromT, toT)
private val delegateI by lazy {
- wrapComponent(RowComponent(
- AlignComponent(
- TextComponent(
- IMinecraft.instance.defaultFontRenderer,
- { formatter(setter.get()) },
- 25,
- TextComponent.TextAlignment.CENTER, false, false
+ wrapComponent(
+ RowComponent(
+ AlignComponent(
+ TextComponent(
+ IMinecraft.INSTANCE.defaultFontRenderer,
+ { StructuredText.of(formatter(setter.get())) },
+ 25,
+ TextComponent.TextAlignment.CENTER, false, false
+ ),
+ GetSetter.constant(HorizontalAlign.CENTER),
+ GetSetter.constant(VerticalAlign.CENTER)
),
- GetSetter.constant(HorizontalAlign.CENTER),
- GetSetter.constant(VerticalAlign.CENTER)
- ),
- SliderComponent(
- mappedSetter,
- fromT(minValue),
- fromT(maxValue),
- minStep,
- 40
+ SliderComponent(
+ mappedSetter,
+ fromT(minValue),
+ fromT(maxValue),
+ minStep,
+ 40
+ )
)
- ))
+ )
}
}
- fun <T> helpRegisterChoice() where T : Enum<T>, T : StringIdentifiable {
+ fun <T> helpRegisterChoice() where T : Enum<T>, T : StringRepresentable {
register(ChoiceHandler::class.java as Class<ChoiceHandler<T>>) { handler, option, categoryAccordionId, configObject ->
object : ProcessedEditableOptionFirm<T>(option, categoryAccordionId, configObject) {
override fun createEditor(): GuiOptionEditor {
@@ -183,10 +194,30 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
}
}
}
+ register(ColourHandler::class.java) { handler, option, accordionId, configObject ->
+ object : ProcessedEditableOptionFirm<ChromaColour>(option, accordionId, configObject) {
+ override fun fromT(t: ChromaColour): Any {
+ return t
+ }
+
+ override fun toT(any: Any?): ChromaColour? {
+ return any as ChromaColour?
+ }
+
+ override fun createEditor(): GuiOptionEditor {
+ return GuiOptionEditorColour(this)
+ }
+
+ override fun getType(): Type? {
+ return ChromaColour::class.java
+ }
+ }
+
+ }
register(ClickHandler::class.java) { handler, option, categoryAccordionId, configObject ->
object : ProcessedEditableOptionFirm<Unit>(option, categoryAccordionId, configObject) {
override fun createEditor(): GuiOptionEditor {
- return GuiOptionEditorButton(this, -1, "Click", configObject)
+ return GuiOptionEditorButton(this, -1, StructuredText.of("Click"), configObject)
}
override fun toT(any: Any?): Unit? {
@@ -205,7 +236,7 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
register(HudMetaHandler::class.java) { handler, option, categoryAccordionId, configObject ->
object : ProcessedEditableOptionFirm<HudMeta>(option, categoryAccordionId, configObject) {
override fun createEditor(): GuiOptionEditor {
- return GuiOptionEditorButton(this, -1, "Edit HUD", configObject)
+ return GuiOptionEditorButton(this, -1, StructuredText.of("Edit HUD"), configObject)
}
override fun fromT(t: HudMeta): Any {
@@ -302,101 +333,111 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
}
}
- override fun open(parent: Screen?): Screen {
- val configObject = object : Config() {
- override fun saveNow() {
- ManagedConfig.allManagedConfigs.getAll().forEach { it.save() }
- }
+ val configObject = object : Config() {
+ override fun saveNow() {
+ ManagedConfig.allManagedConfigs.getAll().forEach { it.markDirty() }
+ }
- override fun shouldAutoFocusSearchbar(): Boolean {
- return true
- }
+ override fun shouldAutoFocusSearchbar(): Boolean {
+ return true
+ }
+
+ override fun getTitle(): StructuredText {
+ return StructuredText.of("Firmament ${Firmament.version.friendlyString}")
+ }
- override fun getTitle(): String {
- return "Firmament"
+ @Deprecated("Deprecated in java")
+ override fun executeRunnable(runnableId: Int) {
+ if (runnableId >= 0)
+ ErrorUtil.softError("Executed runnable $runnableId")
+ }
+
+ override fun getDescriptionBehaviour(option: ProcessedOption?): DescriptionRendereringBehaviour {
+ return DescriptionRendereringBehaviour.EXPAND_PANEL
+ }
+
+ fun mkSocial(name: String, identifier: ResourceLocation, link: String) = object : Social() {
+ override fun onClick() {
+ MC.openUrl(link)
}
- @Deprecated("Deprecated in java")
- override fun executeRunnable(runnableId: Int) {
- if (runnableId >= 0)
- ErrorUtil.softError("Executed runnable $runnableId")
+ override fun getTooltip(): List<StructuredText> {
+ return listOf(StructuredText.of(name))
}
- override fun getDescriptionBehaviour(option: ProcessedOption?): DescriptionRendereringBehaviour {
- return DescriptionRendereringBehaviour.EXPAND_PANEL
+ override fun getIcon(): MyResourceLocation {
+ return identifier.toMoulConfig()
}
+ }
- fun mkSocial(name: String, identifier: Identifier, link: String) = object : Social() {
- override fun onClick() {
- Util.getOperatingSystem().open(URI(link))
+ private val socials = listOf<Social>(
+ mkSocial(
+ "Discord", Firmament.identifier("textures/socials/discord.png"),
+ Firmament.modContainer.metadata.contact.get("discord").get()
+ ),
+ mkSocial(
+ "Source Code", Firmament.identifier("textures/socials/git.png"),
+ Firmament.modContainer.metadata.contact.get("sources").get()
+ ),
+ mkSocial(
+ "Modrinth", Firmament.identifier("textures/socials/modrinth.png"),
+ Firmament.modContainer.metadata.contact.get("modrinth").get()
+ ),
+ )
+
+ override fun getSocials(): List<Social> {
+ return socials
+ }
+ }
+ val categories = ManagedConfig.Category.entries.map {
+ val options = mutableListOf<ProcessedOptionFirm>()
+ var nextAccordionId = 720
+ it.configs.forEach { config ->
+ val categoryAccordionId = nextAccordionId++
+ options.add(object : ProcessedOptionFirm(-1, configObject) {
+ override fun getDebugDeclarationLocation(): String {
+ return "FirmamentConfig:${config.name}"
}
- override fun getTooltip(): List<String> {
- return listOf(name)
+ override fun getName(): StructuredText {
+ return MoulConfigPlatform.wrap(config.labelText)
}
- override fun getIcon(): MyResourceLocation {
- return identifier.toMoulConfig()
+ override fun getDescription(): StructuredText {
+ return StructuredText.of("Missing description")
}
- }
-
- private val socials = listOf<Social>(
- mkSocial("Discord", Firmament.identifier("textures/socials/discord.png"),
- Firmament.modContainer.metadata.contact.get("discord").get()),
- mkSocial("Source Code", Firmament.identifier("textures/socials/git.png"),
- Firmament.modContainer.metadata.contact.get("sources").get()),
- mkSocial("Modrinth", Firmament.identifier("textures/socials/modrinth.png"),
- Firmament.modContainer.metadata.contact.get("modrinth").get()),
- )
- override fun getSocials(): List<Social> {
- return socials
- }
- }
- val categories = ManagedConfig.Category.entries.map {
- val options = mutableListOf<ProcessedOptionFirm>()
- var nextAccordionId = 720
- it.configs.forEach { config ->
- val categoryAccordionId = nextAccordionId++
- options.add(object : ProcessedOptionFirm(-1, configObject) {
- override fun getDebugDeclarationLocation(): String {
- return "FirmamentConfig:${config.name}"
- }
-
- override fun getName(): String {
- return config.labelText.string
- }
-
- override fun getDescription(): String {
- return "Missing description"
- }
-
- override fun get(): Any {
- return Unit
- }
+ override fun get(): Any {
+ return Unit
+ }
- override fun getType(): Type {
- return Unit.javaClass
- }
+ override fun getType(): Type {
+ return Unit.javaClass
+ }
- override fun set(value: Any?): Boolean {
- return false
- }
+ override fun set(value: Any?): Boolean {
+ return false
+ }
- override fun createEditor(): GuiOptionEditor {
- return GuiOptionEditorAccordion(this, categoryAccordionId)
- }
- })
- config.allOptions.forEach { (key, option) ->
- val processedOption = getHandler(option, categoryAccordionId, configObject)
- options.add(processedOption)
+ override fun createEditor(): GuiOptionEditor {
+ return GuiOptionEditorAccordion(this, categoryAccordionId)
}
+ })
+ config.allOptions.forEach { (key, option) ->
+ val processedOption = getHandler(option, categoryAccordionId, configObject)
+ options.add(processedOption)
}
-
- return@map ProcessedCategoryFirm(it, options)
}
+
+ return@map ProcessedCategoryFirm(it, options)
+ }
+
+ override fun open(search: String?, parent: Screen?): Screen {
val editor = MoulConfigEditor(ProcessedCategory.collect(categories), configObject)
- return GuiElementWrapper(editor) // TODO : add parent support
+ if (search != null)
+ editor.search(search)
+ editor.setWide(AllConfigsGui.ConfigConfig.enableWideMC)
+ return MoulConfigScreenComponent(Component.empty(), GuiContext(GuiElementComponent(editor)), parent) // TODO : add parent support
}
}
diff --git a/src/compat/moulconfig/java/ProcessedCategoryFirm.kt b/src/compat/moulconfig/java/ProcessedCategoryFirm.kt
index 5313441..7c99528 100644
--- a/src/compat/moulconfig/java/ProcessedCategoryFirm.kt
+++ b/src/compat/moulconfig/java/ProcessedCategoryFirm.kt
@@ -1,9 +1,11 @@
package moe.nea.firmament.compat.moulconfig
+import io.github.notenoughupdates.moulconfig.common.text.StructuredText
import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorAccordion
+import io.github.notenoughupdates.moulconfig.platform.MoulConfigPlatform
import io.github.notenoughupdates.moulconfig.processor.ProcessedCategory
import io.github.notenoughupdates.moulconfig.processor.ProcessedOption
-import moe.nea.firmament.gui.config.ManagedConfig
+import moe.nea.firmament.util.data.ManagedConfig
class ProcessedCategoryFirm(
val category: ManagedConfig.Category,
@@ -21,12 +23,12 @@ class ProcessedCategoryFirm(
return "FirmamentCategory.${category.name}"
}
- override fun getDisplayName(): String {
- return category.labelText.string
+ override fun getDisplayName(): StructuredText {
+ return MoulConfigPlatform.wrap(category.labelText)
}
- override fun getDescription(): String {
- return category.description.string
+ override fun getDescription(): StructuredText {
+ return MoulConfigPlatform.wrap(category.description)
}
override fun getIdentifier(): String {
diff --git a/src/compat/moulconfig/java/ProcessedEditableOptionFirm.kt b/src/compat/moulconfig/java/ProcessedEditableOptionFirm.kt
index f0e9aa4..e1ad217 100644
--- a/src/compat/moulconfig/java/ProcessedEditableOptionFirm.kt
+++ b/src/compat/moulconfig/java/ProcessedEditableOptionFirm.kt
@@ -1,6 +1,8 @@
package moe.nea.firmament.compat.moulconfig
import io.github.notenoughupdates.moulconfig.Config
+import io.github.notenoughupdates.moulconfig.common.text.StructuredText
+import io.github.notenoughupdates.moulconfig.platform.MoulConfigPlatform
import moe.nea.firmament.gui.config.ManagedOption
import moe.nea.firmament.util.ErrorUtil
@@ -14,12 +16,12 @@ abstract class ProcessedEditableOptionFirm<T : Any>(
return "FirmamentOption:${managedConfig.name}:${managedOption.propertyName}"
}
- override fun getName(): String {
- return managedOption.labelText.string
+ override fun getName(): StructuredText {
+ return MoulConfigPlatform.wrap(managedOption.labelText)
}
- override fun getDescription(): String {
- return managedOption.labelDescription.string
+ override fun getDescription(): StructuredText {
+ return MoulConfigPlatform.wrap(managedOption.labelDescription)
}
abstract fun fromT(t: T): Any
@@ -34,11 +36,11 @@ abstract class ProcessedEditableOptionFirm<T : Any>(
ErrorUtil.softError("Failed to set value p0 in $this")
return false
}
- managedConfig.save()
+ managedConfig.markDirty()
return true
}
override fun explicitNotifyChange() {
- managedConfig.save()
+ managedConfig.markDirty()
}
}
diff --git a/src/compat/moulconfig/java/ProcessedOptionFirm.kt b/src/compat/moulconfig/java/ProcessedOptionFirm.kt
index 4d0096c..6936048 100644
--- a/src/compat/moulconfig/java/ProcessedOptionFirm.kt
+++ b/src/compat/moulconfig/java/ProcessedOptionFirm.kt
@@ -10,6 +10,9 @@ abstract class ProcessedOptionFirm(
private val accordionId: Int,
private val config: Config
) : ProcessedOption {
+ override fun getPath(): String? {
+ return "nonsense"
+ }
lateinit var category: ProcessedCategoryFirm
override fun getAccordionId(): Int {
return accordionId