From 20068f7c02c79449eb3af977d1ae5aa146648836 Mon Sep 17 00:00:00 2001 From: Mona <59416038+meowora@users.noreply.github.com> Date: Tue, 6 Jan 2026 21:46:36 +0100 Subject: [PATCH] fix: moulconfig crashing --- .../Accessor_GuiOptionEditorDropdown.java | 27 ------------- .../Mixin_ConfigProcessorDriver.java | 5 ++- .../Mixin_GuiOptionEditorDropdown.java | 38 ++++++++++++++++++ ...or.java => Mixin_MoulConfigProcessor.java} | 15 +++++-- ...ConfigGuiOptionEditorDropdownAccessor.java | 14 +++++++ .../utils/MoulConfigProcessorAccessor.java | 11 +++++ .../internal/compat/MoulConfigCompat.kt | 40 ++++++++++++++----- 7 files changed, 106 insertions(+), 44 deletions(-) delete mode 100644 minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_GuiOptionEditorDropdown.java create mode 100644 minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_GuiOptionEditorDropdown.java rename minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/{Accessor_MoulConfigProcessor.java => Mixin_MoulConfigProcessor.java} (58%) create mode 100644 minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigGuiOptionEditorDropdownAccessor.java create mode 100644 minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigProcessorAccessor.java diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_GuiOptionEditorDropdown.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_GuiOptionEditorDropdown.java deleted file mode 100644 index dabf73855..000000000 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_GuiOptionEditorDropdown.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.polyfrost.oneconfig.internal.mixin.compat.moulconfig; - -import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorDropdown; -import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; -import org.polyfrost.oneconfig.relocator.annotations.RelocatedMixin; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Pseudo -@MoulConfig -//#if MC==1.8.9||MC>=1.21.4 -@RelocatedMixin -//#endif -@Mixin(value = GuiOptionEditorDropdown.class, remap = false) -public interface Accessor_GuiOptionEditorDropdown { - - @Accessor("values") - public String[] oneconfig$values(); - - @Accessor("useOrdinal") - public boolean oneconfig$useOrdinal(); - - @Accessor("constants") - public Enum[] oneconfig$constants(); - -} diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_ConfigProcessorDriver.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_ConfigProcessorDriver.java index 058e9bfa0..19719251e 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_ConfigProcessorDriver.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_ConfigProcessorDriver.java @@ -4,6 +4,7 @@ import io.github.notenoughupdates.moulconfig.processor.ConfigStructureReader; import io.github.notenoughupdates.moulconfig.processor.MoulConfigProcessor; import org.polyfrost.oneconfig.internal.compat.MoulConfigCompat; +import org.polyfrost.oneconfig.internal.utils.MoulConfigProcessorAccessor; import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; import org.polyfrost.oneconfig.relocator.annotations.RelocatedMixin; import org.spongepowered.asm.mixin.Final; @@ -28,10 +29,10 @@ public class Mixin_ConfigProcessorDriver { @Inject(at = @At("TAIL"), method = "processConfig") public void processorEndConfig(CallbackInfo ci) { - if (reader instanceof MoulConfigProcessor && reader instanceof Accessor_MoulConfigProcessor) { + if (reader instanceof MoulConfigProcessor && reader instanceof MoulConfigProcessorAccessor) { MoulConfigCompat.parseMoulconfig( (MoulConfigProcessor) reader, - ((Accessor_MoulConfigProcessor) reader).oneconfig$getConfig()); + ((MoulConfigProcessorAccessor) reader).oneconfig$getConfig()); } } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_GuiOptionEditorDropdown.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_GuiOptionEditorDropdown.java new file mode 100644 index 000000000..3fd44a570 --- /dev/null +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_GuiOptionEditorDropdown.java @@ -0,0 +1,38 @@ +package org.polyfrost.oneconfig.internal.mixin.compat.moulconfig; + +import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorDropdown; +import org.polyfrost.oneconfig.internal.utils.MoulConfigGuiOptionEditorDropdownAccessor; +import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; +import org.polyfrost.oneconfig.relocator.annotations.RelocatedMixin; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; + +@Pseudo +@MoulConfig +//#if MC==1.8.9||MC>=1.21.4 +@RelocatedMixin +//#endif +@Mixin(value = GuiOptionEditorDropdown.class, remap = false) +public class Mixin_GuiOptionEditorDropdown implements MoulConfigGuiOptionEditorDropdownAccessor { + + @Shadow + private String[] values; + @Shadow + private boolean useOrdinal; + @Shadow + private Enum[] constants; + + public String[] oneconfig$values() { + return this.values; + } + + public boolean oneconfig$useOrdinal() { + return this.useOrdinal; + } + + public Enum[] oneconfig$constants() { + return this.constants; + } + +} diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_MoulConfigProcessor.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_MoulConfigProcessor.java similarity index 58% rename from minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_MoulConfigProcessor.java rename to minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_MoulConfigProcessor.java index 3d60f537a..7789daa13 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Accessor_MoulConfigProcessor.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/moulconfig/Mixin_MoulConfigProcessor.java @@ -2,11 +2,13 @@ import io.github.notenoughupdates.moulconfig.Config; import io.github.notenoughupdates.moulconfig.processor.MoulConfigProcessor; +import org.polyfrost.oneconfig.internal.utils.MoulConfigProcessorAccessor; import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; import org.polyfrost.oneconfig.relocator.annotations.RelocatedMixin; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.Shadow; @Pseudo @MoulConfig @@ -14,9 +16,14 @@ @RelocatedMixin //#endif @Mixin(value = MoulConfigProcessor.class, remap = false) -public interface Accessor_MoulConfigProcessor { +public class Mixin_MoulConfigProcessor implements MoulConfigProcessorAccessor { - @Accessor("configBaseObject") - T oneconfig$getConfig(); + @Final + @Shadow + private T configBaseObject; + + public T oneconfig$getConfig() { + return this.configBaseObject; + } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigGuiOptionEditorDropdownAccessor.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigGuiOptionEditorDropdownAccessor.java new file mode 100644 index 000000000..017bcd4d6 --- /dev/null +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigGuiOptionEditorDropdownAccessor.java @@ -0,0 +1,14 @@ +package org.polyfrost.oneconfig.internal.utils; + +import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; + +@MoulConfig +public interface MoulConfigGuiOptionEditorDropdownAccessor { + + String[] oneconfig$values(); + + boolean oneconfig$useOrdinal(); + + Enum[] oneconfig$constants(); + +} diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigProcessorAccessor.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigProcessorAccessor.java new file mode 100644 index 000000000..fedf075a6 --- /dev/null +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/utils/MoulConfigProcessorAccessor.java @@ -0,0 +1,11 @@ +package org.polyfrost.oneconfig.internal.utils; + +import io.github.notenoughupdates.moulconfig.Config; +import org.polyfrost.oneconfig.relocator.annotations.MoulConfig; + +@MoulConfig +public interface MoulConfigProcessorAccessor { + + T oneconfig$getConfig(); + +} diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/MoulConfigCompat.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/MoulConfigCompat.kt index 3b66b373f..855272d61 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/MoulConfigCompat.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/MoulConfigCompat.kt @@ -3,20 +3,35 @@ package org.polyfrost.oneconfig.internal.compat import dev.deftu.omnicore.api.client.getIconResource import dev.deftu.omnicore.api.client.getIconResourcePath import io.github.notenoughupdates.moulconfig.ChromaColour -import io.github.notenoughupdates.moulconfig.gui.editors.* +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.GuiOptionEditorDraggableList +import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorInfoText +import io.github.notenoughupdates.moulconfig.gui.editors.GuiOptionEditorText import io.github.notenoughupdates.moulconfig.processor.MoulConfigProcessor import io.github.notenoughupdates.moulconfig.processor.ProcessedCategory import io.github.notenoughupdates.moulconfig.processor.ProcessedOption import org.polyfrost.oneconfig.api.config.v1.ConfigManager import org.polyfrost.oneconfig.api.config.v1.Tree import org.polyfrost.oneconfig.api.config.v1.Visualizer -import org.polyfrost.oneconfig.api.config.v1.Visualizer.* -import org.polyfrost.oneconfig.api.config.v1.dsl.* +import org.polyfrost.oneconfig.api.config.v1.Visualizer.ButtonVisualizer +import org.polyfrost.oneconfig.api.config.v1.Visualizer.ColorVisualizer +import org.polyfrost.oneconfig.api.config.v1.Visualizer.DropdownVisualizer +import org.polyfrost.oneconfig.api.config.v1.Visualizer.SliderVisualizer +import org.polyfrost.oneconfig.api.config.v1.Visualizer.SwitchVisualizer +import org.polyfrost.oneconfig.api.config.v1.Visualizer.TextVisualizer +import org.polyfrost.oneconfig.api.config.v1.dsl.category +import org.polyfrost.oneconfig.api.config.v1.dsl.icon +import org.polyfrost.oneconfig.api.config.v1.dsl.noCache +import org.polyfrost.oneconfig.api.config.v1.dsl.saveFunction +import org.polyfrost.oneconfig.api.config.v1.dsl.subcategory import org.polyfrost.oneconfig.internal.DynamicPolyImage -import org.polyfrost.oneconfig.internal.mixin.compat.moulconfig.Accessor_GuiOptionEditorDropdown +import org.polyfrost.oneconfig.internal.utils.MoulConfigGuiOptionEditorDropdownAccessor import org.polyfrost.polyui.color.PolyColor import java.lang.reflect.Type -import java.util.UUID +import java.util.* import kotlin.reflect.KClass import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.nanoseconds @@ -24,12 +39,16 @@ import io.github.notenoughupdates.moulconfig.Config as MoulConfig import org.polyfrost.oneconfig.relocator.annotations.MoulConfig as Moulconfig @Moulconfig -object MoulConfigCompat { +data object MoulConfigCompat { @JvmStatic fun parseMoulconfig(processor: MoulConfigProcessor<*>, config: MoulConfig) { - CompatLoader.markFirstModAsSkip() - ConfigManager.active().register(parseConfigTree(config, processor.allCategories.values)) + runCatching { + CompatLoader.markFirstModAsSkip() + ConfigManager.active().register(parseConfigTree(config, processor.allCategories.values)) + }.onFailure { + println("Failed to load moulconfig compat for $this due to $it") + } } fun parseConfigTree(config: MoulConfig, children: Iterable): Tree = Tree.tree().apply { @@ -126,10 +145,9 @@ object MoulConfigCompat { ColorVisualizer::class.java } - is Accessor_GuiOptionEditorDropdown -> { + is MoulConfigGuiOptionEditorDropdownAccessor -> { fun getIndex(): Int { - val selectedObject: Any? = children.get() - if (selectedObject == null) return -1 + val selectedObject: Any = children.get() ?: return -1 return if (editor.`oneconfig$useOrdinal`()) { selectedObject as Int