Lortseam 4 anni fa
parent
commit
bb9b3978f0

+ 15 - 13
lib/src/main/java/me/lortseam/completeconfig/data/Entry.java

@@ -33,6 +33,7 @@ import java.lang.reflect.Type;
 import java.util.Arrays;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.function.Supplier;
 import java.util.function.UnaryOperator;
 
 @Log4j2(topic = "CompleteConfig")
@@ -67,7 +68,7 @@ public class Entry<T> implements DataPart, Identifiable {
     @Getter
     private final T defaultValue;
     protected final TranslationKey translation;
-    private final TranslationKey[] tooltipTranslation;
+    private final Supplier<TranslationKey[]> tooltipTranslationSupplier;
     @Accessors(fluent = true)
     @Getter
     private final boolean requiresRestart;
@@ -92,19 +93,20 @@ public class Entry<T> implements DataPart, Identifiable {
             } else {
                 translation = origin.getParentTranslation().append(id);
             }
-            if (annotation != null && annotation.tooltipTranslationKeys().length > 0) {
-                tooltipTranslation = Arrays.stream(annotation.tooltipTranslationKeys()).map(key -> {
-                    if (StringUtils.isBlank(key)) {
-                        throw new IllegalAnnotationParameterException("Tooltip translation key of entry " + this + " may not be blank");
-                    }
-                    return translation.root().append(key);
-                }).toArray(TranslationKey[]::new);
-            } else {
-                tooltipTranslation = translation.appendTooltip().orElse(null);
-            }
+            tooltipTranslationSupplier = () -> {
+                if (annotation != null && annotation.tooltipTranslationKeys().length > 0) {
+                    return Arrays.stream(annotation.tooltipTranslationKeys()).map(key -> {
+                        if (StringUtils.isBlank(key)) {
+                            throw new IllegalAnnotationParameterException("Tooltip translation key of entry " + this + " may not be blank");
+                        }
+                        return translation.root().append(key);
+                    }).toArray(TranslationKey[]::new);
+                }
+                return translation.appendTooltip().orElse(null);
+            };
         } else {
             translation = null;
-            tooltipTranslation = null;
+            tooltipTranslationSupplier = null;
         }
         requiresRestart = annotation != null && annotation.requiresRestart();
         comment = annotation != null && !StringUtils.isBlank(annotation.comment()) ? annotation.comment() : null;
@@ -168,7 +170,7 @@ public class Entry<T> implements DataPart, Identifiable {
 
     @Environment(EnvType.CLIENT)
     public Optional<Text[]> getTooltip() {
-        return Optional.ofNullable(tooltipTranslation).map(lines -> {
+        return Optional.ofNullable(tooltipTranslationSupplier.get()).map(lines -> {
             return Arrays.stream(lines).map(TranslationKey::toText).toArray(Text[]::new);
         });
     }

+ 7 - 1
lib/src/main/java/me/lortseam/completeconfig/data/entry/EntryOrigin.java

@@ -5,6 +5,8 @@ import lombok.RequiredArgsConstructor;
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.util.ReflectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
@@ -18,9 +20,13 @@ public final class EntryOrigin {
     protected final Field field;
     @Getter
     private final ConfigContainer parentObject;
-    @Getter
     private final TranslationKey parentTranslation;
 
+    @Environment(EnvType.CLIENT)
+    public TranslationKey getParentTranslation() {
+        return parentTranslation;
+    }
+
     public Type getType() {
         return ReflectionUtils.getFieldType(field);
     }

+ 4 - 2
lib/src/test/java/me/lortseam/completeconfig/data/BaseCollectionTest.java

@@ -4,6 +4,7 @@ import com.google.common.collect.Iterables;
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
+import me.lortseam.completeconfig.io.ConfigSource;
 import me.lortseam.completeconfig.test.data.containers.*;
 import me.lortseam.completeconfig.test.data.groups.EmptyGroup;
 import me.lortseam.completeconfig.test.data.listeners.EmptyListener;
@@ -15,16 +16,17 @@ import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.mock;
 
 public class BaseCollectionTest {
 
+    private static final String MOD_ID = "test";
+
     private BaseCollection baseCollection;
     private final LogCaptor logCaptor = LogCaptor.forName("CompleteConfig");
 
     @BeforeEach
     public void beforeEach() {
-        baseCollection = new BaseCollection(mock(TranslationKey.class)) {};
+        baseCollection = new BaseCollection(TranslationKey.from(new ConfigSource(MOD_ID, new String[0]))) {};
     }
 
     @AfterEach