package io.gitlab.jfronny.respackopts.integration; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; import io.gitlab.jfronny.respackopts.util.MetaCache; import io.gitlab.jfronny.respackopts.Respackopts; import io.gitlab.jfronny.respackopts.model.ConfigFile; import io.gitlab.jfronny.respackopts.model.enums.PackReloadType; import me.shedaniel.clothconfig2.api.ConfigBuilder; import me.shedaniel.clothconfig2.api.ConfigCategory; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; import net.minecraft.client.gui.screen.FatalErrorScreen; import net.minecraft.text.TranslatableText; public class ModMenuCompat implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { return parent -> { try { ConfigBuilder builder; builder = ConfigBuilder.create() .setParentScreen(parent) .setTitle(new TranslatableText("respackopts.mainconfig")); ConfigEntryBuilder entryBuilder = builder.entryBuilder(); PackReloadType.Aggregator agg = new PackReloadType.Aggregator(); builder.setSavingRunnable(() -> { if (Respackopts.CONFIG.debugLogs) Respackopts.LOGGER.info("ModMenuCompat SavingRunnable " + agg.get()); Respackopts.CONFIG.save(); MetaCache.save(); if (agg.get() == PackReloadType.Resource) { DashLoaderCompat.requestForceReload(); Respackopts.forceReloadResources(); } }); //Respackopts config screen ConfigFile defaultConfig = new ConfigFile(); ConfigCategory mainConfig = builder.getOrCreateCategory(new TranslatableText("respackopts.mainconfig")); mainConfig.addEntry( entryBuilder.startBooleanToggle(new TranslatableText("respackopts.mainconfig.debugCommands"), Respackopts.CONFIG.debugCommands) .setDefaultValue(defaultConfig.debugCommands) .setSaveConsumer(b -> Respackopts.CONFIG.debugCommands = b) .build() ); mainConfig.addEntry( entryBuilder.startBooleanToggle(new TranslatableText("respackopts.mainconfig.debugLogs"), Respackopts.CONFIG.debugLogs) .setDefaultValue(defaultConfig.debugLogs) .setSaveConsumer(b -> Respackopts.CONFIG.debugLogs = b) .build() ); mainConfig.addEntry( entryBuilder.startBooleanToggle(new TranslatableText("respackopts.mainconfig.dashloaderCompat"), Respackopts.CONFIG.dashloaderCompat) .requireRestart() .setDefaultValue(defaultConfig.dashloaderCompat) .setSaveConsumer(b -> Respackopts.CONFIG.dashloaderCompat = b) .build() ); //Pack config screens MetaCache.forEach((id, conf) -> { ConfigCategory config = builder.getOrCreateCategory(new TranslatableText((MetaCache.getMeta(id).version >= 5 ? "rpo." : "respackopts.title.") + id)); Respackopts.GUI_FACTORY.buildCategory(conf, id, config::addEntry, agg, entryBuilder, ""); }); return builder.build(); } catch (Throwable t) { t.printStackTrace(); return new FatalErrorScreen(new TranslatableText("respackopts.loadFailed"), new TranslatableText("respackopts.loadError")); } }; } }