Lortseam 5 éve
szülő
commit
dd4cb74be8

+ 21 - 1
src/main/java/me/lortseam/completeconfig/ConfigManager.java

@@ -28,6 +28,8 @@ import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
 import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
 import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import org.apache.commons.lang3.StringUtils;
 
@@ -130,6 +132,15 @@ public class ConfigManager {
                     if (!StringUtils.isBlank(customTranslationKey)) {
                         builder.setCustomTranslationKey(customTranslationKey);
                     }
+                    String[] customTooltipKeys = entryAnnotation.customTooltipKeys();
+                    if (customTooltipKeys.length > 0) {
+                        for (String key : customTooltipKeys) {
+                            if (StringUtils.isBlank(key)) {
+                                throw new IllegalAnnotationParameterException("Tooltip key(s) of entry field " + field + " must not be blank");
+                            }
+                        }
+                        builder.setCustomTooltipKeys(customTooltipKeys);
+                    }
                     builder.setForceUpdate(entryAnnotation.forceUpdate());
                 }
                 if (field.isAnnotationPresent(ConfigEntry.Integer.Bounded.class)) {
@@ -293,7 +304,16 @@ public class ConfigManager {
         List<AbstractConfigListEntry> list = new ArrayList<>();
         collection.getEntries().forEach((entryID, entry) -> {
             String translationKey = entry.getCustomTranslationKey() != null ? buildTranslationKey(entry.getCustomTranslationKey()) : buildTranslationKey(parentID, entryID);
-            list.add(guiRegistry.getProvider(entry).build(new TranslatableText(translationKey), entry.getField(), entry.getValue(), entry.getDefaultValue(), entry.getExtras(), entry::setValue));
+            String[] tooltipKeys = entry.getCustomTooltipKeys();
+            if (tooltipKeys != null) {
+                tooltipKeys = Arrays.stream(tooltipKeys).map(this::buildTranslationKey).toArray(String[]::new);
+            } else {
+                String defaultTooltipKey = joinIDs(translationKey, "tooltip");
+                if (I18n.hasTranslation(defaultTooltipKey)) {
+                    tooltipKeys = new String[] {defaultTooltipKey};
+                }
+            }
+            list.add(guiRegistry.getProvider(entry).build(new TranslatableText(translationKey), entry.getField(), entry.getValue(), entry.getDefaultValue(), tooltipKeys != null ? Optional.of(Arrays.stream(tooltipKeys).map(TranslatableText::new).toArray(Text[]::new)) : Optional.empty(), entry.getExtras(), entry::setValue));
         });
         collection.getCollections().forEach((subcategoryID, c) -> {
             String id = joinIDs(parentID, subcategoryID);

+ 2 - 0
src/main/java/me/lortseam/completeconfig/api/ConfigEntry.java

@@ -14,6 +14,8 @@ public @interface ConfigEntry {
 
     String customTranslationKey() default "";
 
+    String[] customTooltipKeys() default {};
+
     boolean forceUpdate() default false;
 
     @NoArgsConstructor(access = AccessLevel.PRIVATE)

+ 7 - 2
src/main/java/me/lortseam/completeconfig/entry/Entry.java

@@ -27,15 +27,18 @@ public class Entry<T> {
     @Getter
     private final String customTranslationKey;
     @Getter
+    private final String[] customTooltipKeys;
+    @Getter
     private final Extras<T> extras;
     private final List<Listener> listeners = new ArrayList<>();
     private final boolean forceUpdate;
 
-    private Entry(Field field, Class<T> type, ConfigEntryContainer parentObject, String customTranslationKey, Extras<T> extras, boolean forceUpdate) {
+    private Entry(Field field, Class<T> type, ConfigEntryContainer parentObject, String customTranslationKey, String[] customTooltipKeys, Extras<T> extras, boolean forceUpdate) {
         this.field = field;
         this.type = type;
         this.parentObject = parentObject;
         this.customTranslationKey = customTranslationKey;
+        this.customTooltipKeys = customTooltipKeys;
         this.extras = extras;
         this.forceUpdate = forceUpdate;
         defaultValue = getValue();
@@ -123,6 +126,8 @@ public class Entry<T> {
         @Setter
         private String customTranslationKey;
         @Setter
+        private String[] customTooltipKeys;
+        @Setter
         private boolean forceUpdate;
         private Bounds bounds;
 
@@ -132,7 +137,7 @@ public class Entry<T> {
         }
 
         public Entry<?> build() {
-            return new Entry<>(field, field.getType(), parentObject, customTranslationKey, new Extras<>(bounds), forceUpdate);
+            return new Entry<>(field, field.getType(), parentObject, customTranslationKey, customTooltipKeys, new Extras<>(bounds), forceUpdate);
         }
 
     }

+ 2 - 1
src/main/java/me/lortseam/completeconfig/gui/GuiProvider.java

@@ -5,11 +5,12 @@ import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import net.minecraft.text.Text;
 
 import java.lang.reflect.Field;
+import java.util.Optional;
 import java.util.function.Consumer;
 
 @FunctionalInterface
 public interface GuiProvider<T> {
 
-    AbstractConfigListEntry<T> build(Text text, Field field, T value, T defaultValue, Extras<T> extras, Consumer<T> saveConsumer);
+    AbstractConfigListEntry<T> build(Text text, Field field, T value, T defaultValue, Optional<Text[]> tooltip, Extras<T> extras, Consumer<T> saveConsumer);
 
 }

+ 22 - 11
src/main/java/me/lortseam/completeconfig/gui/GuiRegistry.java

@@ -39,94 +39,105 @@ public class GuiRegistry {
     }
 
     private void registerDefaultProviders() {
-        registerProvider((GuiProvider<Boolean>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<Boolean>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startBooleanToggle(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 boolean.class, Boolean.class
         );
-        registerProvider((GuiProvider<Integer>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<Integer>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startIntField(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 int.class, Integer.class
         );
-        registerBoundedProvider((GuiProvider<Integer>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerBoundedProvider((GuiProvider<Integer>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startIntSlider(text, value, extras.getBounds().getMin(), extras.getBounds().getMax())
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 int.class, Integer.class
         );
-        registerProvider((GuiProvider<Long>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<Long>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startLongField(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 long.class, Long.class
         );
-        registerBoundedProvider((GuiProvider<Long>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerBoundedProvider((GuiProvider<Long>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startLongSlider(text, value, extras.getBounds().getMin(), extras.getBounds().getMax())
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 long.class, Long.class
         );
-        registerProvider((GuiProvider<Float>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<Float>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startFloatField(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 float.class, Float.class
         );
-        registerBoundedProvider((GuiProvider<Float>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerBoundedProvider((GuiProvider<Float>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startFloatField(text, value)
                 .setDefaultValue(defaultValue)
                 .setMin(extras.getBounds().getMin())
                 .setMax(extras.getBounds().getMax())
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 float.class, Float.class
         );
-        registerProvider((GuiProvider<Double>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<Double>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startDoubleField(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 double.class, Double.class
         );
-        registerBoundedProvider((GuiProvider<Double>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerBoundedProvider((GuiProvider<Double>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startDoubleField(text, value)
                 .setDefaultValue(defaultValue)
                 .setMin(extras.getBounds().getMin())
                 .setMax(extras.getBounds().getMax())
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 double.class, Double.class
         );
-        registerProvider((GuiProvider<String>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<String>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startStrField(text, value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 String.class
         );
-        registerProvider((GuiProvider<? extends Enum>) (text, field, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+        registerProvider((GuiProvider<? extends Enum>) (text, field, value, defaultValue, tooltip, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startEnumSelector(text, (Class<Enum>) field.getType(), value)
                 .setDefaultValue(defaultValue)
+                .setTooltip(tooltip)
                                                                                             //TODO: Bad solution; provide custom enum name provider
                 .setEnumNameProvider(e -> new TranslatableText(((TranslatableText) text).getKey() + "." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, e.name())))
                 .setSaveConsumer(saveConsumer)