diff --git a/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/api/v1/dsl/ConfigBuilder.java b/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/api/v1/dsl/ConfigBuilder.java index b4469dc..d52ca10 100644 --- a/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/api/v1/dsl/ConfigBuilder.java +++ b/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/api/v1/dsl/ConfigBuilder.java @@ -12,6 +12,7 @@ import java.util.function.Consumer; public interface ConfigBuilder> extends CategoryBuilder { Builder setLoadMethod(Consumer load); Builder setWriteMethod(Consumer write); + Builder executeAfterWrite(Consumer method); Builder setPath(Path path); ConfigInstance build(); diff --git a/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/ConfigBuilderImpl.java b/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/ConfigBuilderImpl.java index 00c8860..12057a0 100644 --- a/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/ConfigBuilderImpl.java +++ b/libjf-config-core-v1/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/ConfigBuilderImpl.java @@ -107,6 +107,13 @@ public class ConfigBuilderImpl extends CategoryBuilderImpl im return this; } + @Override + public ConfigBuilderImpl executeAfterWrite(Consumer method) { + checkBuilt(); + this.write = this.write.andThen(method); + return null; + } + public ConfigBuilderImpl setPath(Path path) { checkBuilt(); this.path = path; diff --git a/libjf-config-ui-tiny-v1/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java b/libjf-config-ui-tiny-v1/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java index e0adc74..2692514 100644 --- a/libjf-config-ui-tiny-v1/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java +++ b/libjf-config-ui-tiny-v1/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java @@ -2,33 +2,45 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny; import io.gitlab.jfronny.commons.throwable.Try; 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.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.EntryListWidget; import io.gitlab.jfronny.libjf.config.impl.ui.tiny.presets.PresetsScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.screen.*; -import net.minecraft.text.*; +import net.minecraft.screen.ScreenTexts; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import java.util.*; @Environment(EnvType.CLIENT) public class TinyConfigScreen extends Screen { public TinyConfigScreen(ConfigCategory config, Screen parent) { - super(Text.translatable(config.getTranslationPrefix() + "title")); + super(getTitle(config.getTranslationPrefix())); this.parent = parent; this.config = config; this.widgets = EntryInfoWidgetBuilder.buildWidgets(config); 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 Screen parent; private final ConfigCategory config; @@ -66,7 +78,7 @@ public class TinyConfigScreen extends Screen { this.addSelectableChild(this.list); for (Map.Entry entry : config.getCategories().entrySet()) { this.list.addReference(width / 2, - Text.translatable(entry.getValue().getTranslationPrefix() + "title"), + getTitle(entry.getValue().getTranslationPrefix()), () -> new TinyConfigScreen(entry.getValue(), this)); } for (WidgetState info : widgets) { @@ -85,7 +97,7 @@ public class TinyConfigScreen extends Screen { for (ConfigInstance ci : config.getReferencedConfigs()) { if (ci != null) { 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)); } }