Quellcode durchsuchen

[WIP] Group tooltips

Lortseam vor 4 Jahren
Ursprung
Commit
8b6889206d

+ 4 - 0
src/main/java/me/lortseam/completeconfig/api/ConfigGroup.java

@@ -18,4 +18,8 @@ public interface ConfigGroup extends ConfigEntryContainer {
         return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, getClass().getSimpleName());
     }
 
+    default String[] getCustomTooltipKeys() {
+        return null;
+    }
+
 }

+ 17 - 4
src/main/java/me/lortseam/completeconfig/data/Collection.java

@@ -3,8 +3,8 @@ package me.lortseam.completeconfig.data;
 import lombok.Getter;
 import me.lortseam.completeconfig.api.ConfigEntryContainer;
 import me.lortseam.completeconfig.api.ConfigGroup;
-import me.lortseam.completeconfig.data.text.TranslationIdentifier;
 import me.lortseam.completeconfig.data.part.FlatDataPart;
+import me.lortseam.completeconfig.data.text.TranslationIdentifier;
 import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
 import net.minecraft.text.Text;
 
@@ -12,27 +12,40 @@ import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 public class Collection implements FlatDataPart<ConfigMap> {
 
     private final TranslationIdentifier translation;
+    private final TranslationIdentifier[] tooltipTranslation;
     @Getter
     private final EntryMap entries;
     @Getter
     private final CollectionMap collections;
 
-    Collection(TranslationIdentifier translation) {
-        this.translation = translation;
+    Collection(TranslationIdentifier parentTranslation, ConfigGroup group) {
+        translation = parentTranslation.append(group.getConfigGroupID());
         entries = new EntryMap(translation);
         collections = new CollectionMap(translation);
+        String[] customTooltipKeys = group.getCustomTooltipKeys();
+        if (customTooltipKeys != null && customTooltipKeys.length > 0) {
+            tooltipTranslation = Arrays.stream(customTooltipKeys).map(key -> translation.root().append(key)).toArray(TranslationIdentifier[]::new);
+        } else {
+            tooltipTranslation = translation.appendTooltip().orElse(null);
+        }
+        resolve(group);
     }
 
     public Text getText() {
         return translation.translate();
     }
 
-    void resolve(ConfigEntryContainer container) {
+    public Optional<TranslationIdentifier[]> getTooltip() {
+        return Optional.ofNullable(tooltipTranslation);
+    }
+
+    private void resolve(ConfigEntryContainer container) {
         entries.resolve(container);
         List<ConfigEntryContainer> containers = new ArrayList<>();
         for (Class<? extends ConfigEntryContainer> clazz : container.getConfigClasses()) {

+ 1 - 2
src/main/java/me/lortseam/completeconfig/data/CollectionMap.java

@@ -15,8 +15,7 @@ public class CollectionMap extends ConfigMap<Collection> {
 
     void resolve(ConfigGroup group) {
         String groupID = group.getConfigGroupID();
-        Collection collection = new Collection(translation.append(groupID));
-        collection.resolve(group);
+        Collection collection = new Collection(translation, group);
         if (collection.getEntries().isEmpty() && collection.getCollections().isEmpty()) {
             LOGGER.warn("[CompleteConfig] Group " + groupID + " is empty!");
             return;

+ 11 - 22
src/main/java/me/lortseam/completeconfig/data/Entry.java

@@ -76,7 +76,7 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
     private final T defaultValue;
     private final TranslationIdentifier parentTranslation;
     private TranslationIdentifier customTranslation;
-    private TranslationIdentifier[] customTooltipTranslations;
+    private TranslationIdentifier[] customTooltipTranslation;
     private boolean forceUpdate;
     private boolean requiresRestart;
     private String comment;
@@ -159,29 +159,18 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
     }
 
     public Optional<Text[]> getTooltip() {
-        TranslationIdentifier[] translations = null;
-        if (customTooltipTranslations != null) {
-            translations = customTooltipTranslations;
+        TranslationIdentifier[] translation;
+        if (customTooltipTranslation != null) {
+            translation = customTooltipTranslation;
         } else {
-            TranslationIdentifier defaultTooltipTranslation = getTranslation().append("tooltip");
-            if (defaultTooltipTranslation.exists()) {
-                translations = new TranslationIdentifier[] {defaultTooltipTranslation};
+            Optional<TranslationIdentifier[]> defaultTooltip = TranslationIdentifier.defaultTooltip(getTranslation());
+            if (defaultTooltip.isPresent()) {
+                translation = defaultTooltip.get();
             } else {
-                List<TranslationIdentifier> defaultTooltipTranslations = new ArrayList<>();
-                for(int i = 0;; i++) {
-                    TranslationIdentifier key = defaultTooltipTranslation.append(Integer.toString(i));
-                    if(key.exists()) {
-                        defaultTooltipTranslations.add(key);
-                    } else {
-                        if (!defaultTooltipTranslations.isEmpty()) {
-                            translations = defaultTooltipTranslations.toArray(new TranslationIdentifier[0]);
-                        }
-                        break;
-                    }
-                }
+                return Optional.empty();
             }
         }
-        return translations != null ? Optional.of(Arrays.stream(translations).map(TranslationIdentifier::translate).toArray(Text[]::new)) : Optional.empty();
+        return Optional.of(Arrays.stream(translation).map(TranslationIdentifier::translate).toArray(Text[]::new));
     }
 
     public boolean requiresRestart() {
@@ -197,14 +186,14 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
             }
             String customTranslationKey = annotation.customTranslationKey();
             if (!StringUtils.isBlank(customTranslationKey)) {
-                customTranslation = parentTranslation.getModTranslation().appendKey(customTranslationKey);
+                customTranslation = parentTranslation.root().appendKey(customTranslationKey);
             }
             String[] customTooltipKeys = annotation.customTooltipKeys();
             if (customTooltipKeys.length > 0) {
                 if (Arrays.stream(customTooltipKeys).anyMatch(StringUtils::isBlank)) {
                     throw new IllegalAnnotationParameterException("Entry tooltip key(s) must not be blank");
                 }
-                customTooltipTranslations = Arrays.stream(customTooltipKeys).map(key -> parentTranslation.getModTranslation().appendKey(key)).toArray(TranslationIdentifier[]::new);
+                customTooltipTranslation = Arrays.stream(customTooltipKeys).map(key -> parentTranslation.root().appendKey(key)).toArray(TranslationIdentifier[]::new);
             }
             forceUpdate = annotation.forceUpdate();
             requiresRestart = annotation.requiresRestart();

+ 25 - 1
src/main/java/me/lortseam/completeconfig/data/text/TranslationIdentifier.java

@@ -6,6 +6,9 @@ import net.minecraft.client.resource.language.I18n;
 import net.minecraft.text.TranslatableText;
 import org.apache.commons.lang3.ArrayUtils;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 import java.util.regex.Pattern;
 
 @AllArgsConstructor(access = AccessLevel.PRIVATE)
@@ -28,7 +31,7 @@ public final class TranslationIdentifier {
         return builder.toString();
     }
 
-    public TranslationIdentifier getModTranslation() {
+    public TranslationIdentifier root() {
         return new TranslationIdentifier(modKey, new String[0]);
     }
 
@@ -48,4 +51,25 @@ public final class TranslationIdentifier {
         return new TranslationIdentifier(modKey, key.split(Pattern.quote(".")));
     }
 
+    public Optional<TranslationIdentifier[]> appendTooltip() {
+        TranslationIdentifier baseTranslation = append("tooltip");
+        if (baseTranslation.exists()) {
+            return Optional.of(new TranslationIdentifier[] {baseTranslation});
+        } else {
+            List<TranslationIdentifier> multiLineTranslation = new ArrayList<>();
+            for(int i = 0;; i++) {
+                TranslationIdentifier key = baseTranslation.append(Integer.toString(i));
+                if(key.exists()) {
+                    multiLineTranslation.add(key);
+                } else {
+                    if (!multiLineTranslation.isEmpty()) {
+                        return Optional.of(multiLineTranslation.toArray(new TranslationIdentifier[0]));
+                    }
+                    break;
+                }
+            }
+        }
+        return Optional.empty();
+    }
+
 }

+ 5 - 4
src/main/java/me/lortseam/completeconfig/gui/cloth/ClothGuiBuilder.java

@@ -38,12 +38,13 @@ public class ClothGuiBuilder implements GuiBuilder {
         ConfigBuilder builder = supplier.get()
                 .setParentScreen(parentScreen)
                 .setSavingRunnable(savingRunnable);
-        TranslationIdentifier customTranslation = config.getTranslation().append("title");
-        builder.setTitle(customTranslation.exists() ? customTranslation.translate() : new TranslatableText("completeconfig.gui.defaultTitle", FabricLoader.getInstance().getModContainer(config.getModID()).get().getMetadata().getName()));
+        TranslationIdentifier customTitle = config.getTranslation().append("title");
+        builder.setTitle(customTitle.exists() ? customTitle.translate() : new TranslatableText("completeconfig.gui.defaultTitle", FabricLoader.getInstance().getModContainer(config.getModID()).get().getMetadata().getName()));
         for(Collection collection : config.values()) {
-            ConfigCategory configCategory = builder.getOrCreateCategory(collection.getText());
+            ConfigCategory category = builder.getOrCreateCategory(collection.getText());
+            //TODO: Add tooltip (description)
             for (AbstractConfigListEntry<?> entry : buildCollection(collection)) {
-                configCategory.addEntry(entry);
+                category.addEntry(entry);
             }
         }
         return builder.build();