[config] Minor API additions for respackopts

This commit is contained in:
Johannes Frohnmeyer 2022-08-28 21:24:26 +02:00
parent e413d5f47e
commit 2943149f58
Signed by: Johannes
GPG Key ID: E76429612C2929F4
3 changed files with 27 additions and 7 deletions

View File

@ -12,6 +12,7 @@ import java.util.function.Consumer;
public interface ConfigBuilder<Builder extends ConfigBuilder<Builder>> extends CategoryBuilder<Builder> { public interface ConfigBuilder<Builder extends ConfigBuilder<Builder>> extends CategoryBuilder<Builder> {
Builder setLoadMethod(Consumer<ConfigInstance> load); Builder setLoadMethod(Consumer<ConfigInstance> load);
Builder setWriteMethod(Consumer<ConfigInstance> write); Builder setWriteMethod(Consumer<ConfigInstance> write);
Builder executeAfterWrite(Consumer<ConfigInstance> method);
Builder setPath(Path path); Builder setPath(Path path);
ConfigInstance build(); ConfigInstance build();

View File

@ -107,6 +107,13 @@ public class ConfigBuilderImpl extends CategoryBuilderImpl<ConfigBuilderImpl> im
return this; return this;
} }
@Override
public ConfigBuilderImpl executeAfterWrite(Consumer<ConfigInstance> method) {
checkBuilt();
this.write = this.write.andThen(method);
return null;
}
public ConfigBuilderImpl setPath(Path path) { public ConfigBuilderImpl setPath(Path path) {
checkBuilt(); checkBuilt();
this.path = path; this.path = path;

View File

@ -2,33 +2,45 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny;
import io.gitlab.jfronny.commons.throwable.Try; import io.gitlab.jfronny.commons.throwable.Try;
import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.LibJf;
import io.gitlab.jfronny.libjf.config.api.v1.ui.tiny.WidgetFactory;
import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory; import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory;
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance; import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
import io.gitlab.jfronny.libjf.config.api.v1.ui.tiny.WidgetFactory;
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryInfoWidgetBuilder; import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryInfoWidgetBuilder;
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryListWidget; import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryListWidget;
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.presets.PresetsScreen; import io.gitlab.jfronny.libjf.config.impl.ui.tiny.presets.PresetsScreen;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.resource.language.I18n; import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.*; import net.minecraft.screen.ScreenTexts;
import net.minecraft.text.*; import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import java.util.*; import java.util.*;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class TinyConfigScreen extends Screen { public class TinyConfigScreen extends Screen {
public TinyConfigScreen(ConfigCategory config, Screen parent) { public TinyConfigScreen(ConfigCategory config, Screen parent) {
super(Text.translatable(config.getTranslationPrefix() + "title")); super(getTitle(config.getTranslationPrefix()));
this.parent = parent; this.parent = parent;
this.config = config; this.config = config;
this.widgets = EntryInfoWidgetBuilder.buildWidgets(config); this.widgets = EntryInfoWidgetBuilder.buildWidgets(config);
this.translationPrefix = config.getTranslationPrefix(); this.translationPrefix = config.getTranslationPrefix();
} }
public static Text getTitle(String categoryPath) {
final String titlePath = categoryPath + "title";
if (JfConfigSafe.TRANSLATION_SUPPLIER.apply(titlePath) != null) {
return Text.translatable(titlePath);
}
final String alternatePath = categoryPath.length() == 0 ? "" : categoryPath.substring(0, categoryPath.length() - 1);
if (JfConfigSafe.TRANSLATION_SUPPLIER.apply(alternatePath) != null) {
return Text.translatable(alternatePath);
}
return Text.translatable(titlePath);
}
private final String translationPrefix; private final String translationPrefix;
private final Screen parent; private final Screen parent;
private final ConfigCategory config; private final ConfigCategory config;
@ -66,7 +78,7 @@ public class TinyConfigScreen extends Screen {
this.addSelectableChild(this.list); this.addSelectableChild(this.list);
for (Map.Entry<String, ConfigCategory> entry : config.getCategories().entrySet()) { for (Map.Entry<String, ConfigCategory> entry : config.getCategories().entrySet()) {
this.list.addReference(width / 2, this.list.addReference(width / 2,
Text.translatable(entry.getValue().getTranslationPrefix() + "title"), getTitle(entry.getValue().getTranslationPrefix()),
() -> new TinyConfigScreen(entry.getValue(), this)); () -> new TinyConfigScreen(entry.getValue(), this));
} }
for (WidgetState<?> info : widgets) { for (WidgetState<?> info : widgets) {
@ -85,7 +97,7 @@ public class TinyConfigScreen extends Screen {
for (ConfigInstance ci : config.getReferencedConfigs()) { for (ConfigInstance ci : config.getReferencedConfigs()) {
if (ci != null) { if (ci != null) {
this.list.addReference(width / 2, this.list.addReference(width / 2,
Text.translatable("libjf-config-v1.see-also", Text.translatable(ci.getTranslationPrefix() + "title")), Text.translatable("libjf-config-v1.see-also", getTitle(ci.getTranslationPrefix())),
() -> new TinyConfigScreen(ci, this)); () -> new TinyConfigScreen(ci, this));
} }
} }