Bladeren bron

Allow different titles for multiple configs

Lortseam 4 jaren geleden
bovenliggende
commit
89b47788f7

+ 12 - 4
lib/src/main/java/me/lortseam/completeconfig/data/Config.java

@@ -6,11 +6,14 @@ import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.data.text.TranslationIdentifier;
 import me.lortseam.completeconfig.io.ConfigSource;
 import net.fabricmc.loader.api.FabricLoader;
+import net.fabricmc.loader.api.metadata.ModMetadata;
 
 import java.util.*;
 
 @Log4j2
-public class Config extends BaseCollection {
+public final class Config extends BaseCollection {
+
+    public static final String ID = "config";
 
     private static final Map<String, Config> mainConfigs = new HashMap<>();
     private static final Set<Config> saveOnExitConfigs = new HashSet<>();
@@ -47,12 +50,17 @@ public class Config extends BaseCollection {
         resolve(children);
     }
 
-    public String getModID() {
-        return source.getModID();
+    @Override
+    public String getID() {
+        return ID;
+    }
+
+    public ModMetadata getMod() {
+        return FabricLoader.getInstance().getModContainer(source.getModID()).get().getMetadata();
     }
 
     public TranslationIdentifier getTranslation() {
-        return translation;
+        return translation.append(source.getBranch());
     }
 
     private void load() {

+ 1 - 3
lib/src/main/java/me/lortseam/completeconfig/data/structure/DataPart.java

@@ -4,9 +4,7 @@ import org.spongepowered.configurate.CommentedConfigurationNode;
 
 public interface DataPart {
 
-    default String getID() {
-        throw new UnsupportedOperationException();
-    }
+    String getID();
 
     void apply(CommentedConfigurationNode node);
 

+ 7 - 3
lib/src/main/java/me/lortseam/completeconfig/data/text/TranslationIdentifier.java

@@ -1,5 +1,6 @@
 package me.lortseam.completeconfig.data.text;
 
+import me.lortseam.completeconfig.data.Config;
 import me.lortseam.completeconfig.io.ConfigSource;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.text.Text;
@@ -7,6 +8,7 @@ import net.minecraft.text.TranslatableText;
 import org.apache.commons.lang3.ArrayUtils;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import java.util.regex.Pattern;
@@ -14,7 +16,7 @@ import java.util.regex.Pattern;
 public final class TranslationIdentifier {
 
     public static TranslationIdentifier from(ConfigSource source) {
-        return new TranslationIdentifier("config." + source.getModID());
+        return new TranslationIdentifier(Config.ID + "." + source.getModID());
     }
 
     private final String modKey;
@@ -46,8 +48,10 @@ public final class TranslationIdentifier {
         return new TranslatableText(getKey(), args);
     }
 
-    public TranslationIdentifier append(String key) {
-        return new TranslationIdentifier(modKey, ArrayUtils.addAll(this.keyParts, key.split(Pattern.quote("."))));
+    public TranslationIdentifier append(String... subKeys) {
+        return new TranslationIdentifier(modKey, ArrayUtils.addAll(keyParts, Arrays.stream(subKeys).map(subKey -> {
+            return subKey.split(Pattern.quote("."));
+        }).flatMap(Arrays::stream).toArray(String[]::new)));
     }
 
     public Optional<TranslationIdentifier[]> appendTooltip() {

+ 1 - 1
lib/src/main/java/me/lortseam/completeconfig/gui/ModMenuIntegration.java

@@ -15,7 +15,7 @@ public final class ModMenuIntegration implements ModMenuApi {
     @Override
     public Map<String, ConfigScreenFactory<?>> getProvidedConfigScreenFactories() {
         return Maps.transformValues(Config.getMainConfigs(), config -> parentScreen -> {
-            return ConfigScreenBuilder.getMainBuilder(config.getModID()).orElse(defaultScreenBuilder).build(parentScreen, config);
+            return ConfigScreenBuilder.getMainBuilder(config.getMod().getId()).orElse(defaultScreenBuilder).build(parentScreen, config);
         });
     }
 

+ 1 - 2
lib/src/main/java/me/lortseam/completeconfig/gui/cloth/ClothConfigScreenBuilder.java

@@ -13,7 +13,6 @@ import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
 import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
-import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.text.StringVisitable;
 import net.minecraft.text.TranslatableText;
@@ -47,7 +46,7 @@ public final class ClothConfigScreenBuilder extends ConfigScreenBuilder {
                 .setParentScreen(parentScreen)
                 .setSavingRunnable(config::save);
         TranslationIdentifier customTitle = config.getTranslation().append("title");
-        builder.setTitle(customTitle.exists() ? customTitle.toText() : new TranslatableText("completeconfig.gui.defaultTitle", FabricLoader.getInstance().getModContainer(config.getModID()).get().getMetadata().getName()));
+        builder.setTitle(customTitle.exists() ? customTitle.toText() : new TranslatableText("completeconfig.gui.defaultTitle", config.getMod().getName()));
         if (!config.getEntries().isEmpty()) {
             ConfigCategory category = builder.getOrCreateCategory(config.getText());
             for (Entry<?> entry : config.getEntries()) {

+ 1 - 0
lib/src/main/java/me/lortseam/completeconfig/io/ConfigSource.java

@@ -44,6 +44,7 @@ public final class ConfigSource {
     private final String modID;
     @EqualsAndHashCode.Include
     @ToString.Include
+    @Getter
     private final String[] branch;
     private final HoconConfigurationLoader loader;