77 lines
4.0 KiB
Java
77 lines
4.0 KiB
Java
package io.gitlab.jfronny.respackopts.util;
|
|
|
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
|
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
|
|
import io.gitlab.jfronny.respackopts.model.tree.ConfigEntry;
|
|
import io.gitlab.jfronny.respackopts.model.tree.GuiEntryBuilderParam;
|
|
import io.gitlab.jfronny.respackopts.model.enums.PackReloadType;
|
|
import io.gitlab.jfronny.respackopts.integration.DashLoaderCompat;
|
|
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
|
|
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.client.gui.screen.Screen;
|
|
import net.minecraft.text.LiteralText;
|
|
import net.minecraft.text.Text;
|
|
import net.minecraft.text.TranslatableText;
|
|
import net.minecraft.util.Language;
|
|
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.function.Consumer;
|
|
|
|
public class GuiFactory {
|
|
public void buildCategory(ConfigBranch source, String screenId, Consumer<AbstractConfigListEntry<?>> config, Consumer<PackReloadType> reloadTypeAggregator, ConfigEntryBuilder entryBuilder, String namePrefix) {
|
|
for (Map.Entry<String, ConfigEntry<?>> in : source.getValue().entrySet()) {
|
|
ConfigEntry<?> entry = in.getValue();
|
|
String entryName = ("".equals(namePrefix) ? "" : namePrefix + ".") + in.getKey();
|
|
String translationPrefix = (source.getVersion() < 3 ? "respackopts." + entry.getEntryType() + "." : "rpo.") + screenId;
|
|
config.accept(entry.buildEntry(
|
|
new GuiEntryBuilderParam(entryBuilder, getText(entryName, translationPrefix), () -> {
|
|
String k = (source.getVersion() < 3 ? "respackopts.tooltip." : "rpo.tooltip.") + screenId + "." + entryName;
|
|
if (Language.getInstance().hasTranslation(k)) {
|
|
Text[] res = new Text[1];
|
|
res[0] = new TranslatableText(k);
|
|
return Optional.of(res);
|
|
} else
|
|
return Optional.empty();
|
|
}, screenId, entryName, translationPrefix, () -> reloadTypeAggregator.accept(entry.getReloadType()), reloadTypeAggregator)));
|
|
}
|
|
}
|
|
|
|
public static Text getText(String name, String translationPrefix) {
|
|
String translatableNameKey = translationPrefix + "." + name;
|
|
return Language.getInstance().hasTranslation(translatableNameKey)
|
|
? new TranslatableText(translatableNameKey)
|
|
: new LiteralText(name);
|
|
}
|
|
|
|
public Screen buildGui(ConfigBranch source, String packId, Screen parent) {
|
|
try {
|
|
ConfigBuilder builder;
|
|
builder = ConfigBuilder.create()
|
|
.setParentScreen(parent)
|
|
.setTitle(getText(packId, source.getVersion() < 4 ? "respackopts.title" : "rpo"));
|
|
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
|
|
PackReloadType.Aggregator agg = new PackReloadType.Aggregator();
|
|
builder.setSavingRunnable(() -> {
|
|
MetaCache.save();
|
|
if (Respackopts.CONFIG.debugLogs) Respackopts.LOGGER.info("GuiFactory SavingRunnable " + agg.get());
|
|
if (agg.get() == PackReloadType.Resource) {
|
|
Respackopts.forcePackReload = true;
|
|
DashLoaderCompat.requestForceReload();
|
|
Respackopts.reloadData();
|
|
}
|
|
});
|
|
ConfigCategory config = builder.getOrCreateCategory(getText(packId, source.getVersion() < 4 ? "respackopts.title" : "rpo"));
|
|
buildCategory(source, packId, config::addEntry, agg, entryBuilder, "");
|
|
return builder.build();
|
|
}
|
|
catch (Throwable t) {
|
|
t.printStackTrace();
|
|
return new FatalErrorScreen(new TranslatableText("respackopts.loadFailed"), new TranslatableText("respackopts.loadError"));
|
|
}
|
|
}
|
|
}
|