瀏覽代碼

Add more environment checks

Lortseam 4 年之前
父節點
當前提交
9c8215c658

+ 3 - 0
lib/src/main/java/me/lortseam/completeconfig/data/BaseCollection.java

@@ -8,6 +8,8 @@ import me.lortseam.completeconfig.data.structure.ParentDataPart;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
 import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
 import me.lortseam.completeconfig.util.ReflectionUtils;
 import me.lortseam.completeconfig.util.ReflectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ArrayUtils;
 
 
@@ -28,6 +30,7 @@ abstract class BaseCollection implements ParentDataPart {
         collections = new CollectionSet(translation);
         collections = new CollectionSet(translation);
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public Text getText() {
     public Text getText() {
         return translation.toText();
         return translation.toText();
     }
     }

+ 6 - 2
lib/src/main/java/me/lortseam/completeconfig/data/BooleanEntry.java

@@ -3,6 +3,9 @@ package me.lortseam.completeconfig.data;
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
@@ -14,7 +17,7 @@ public class BooleanEntry extends Entry<Boolean> {
 
 
     BooleanEntry(EntryOrigin origin) {
     BooleanEntry(EntryOrigin origin) {
         super(origin);
         super(origin);
-        valueTranslationSupplier = origin.getOptionalAnnotation(ConfigEntry.Boolean.class).map(annotation -> {
+        valueTranslationSupplier = FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT ? origin.getOptionalAnnotation(ConfigEntry.Boolean.class).map(annotation -> {
             if (StringUtils.isBlank(annotation.trueTranslationKey()) && StringUtils.isBlank(annotation.falseTranslationKey())) {
             if (StringUtils.isBlank(annotation.trueTranslationKey()) && StringUtils.isBlank(annotation.falseTranslationKey())) {
                 return null;
                 return null;
             } else {
             } else {
@@ -26,9 +29,10 @@ public class BooleanEntry extends Entry<Boolean> {
                     return translation.append(value ? "true" : "false");
                     return translation.append(value ? "true" : "false");
                 };
                 };
             }
             }
-        }).orElse(null);
+        }).orElse(null) : null;
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public Function<Boolean, Text> getValueTextSupplier() {
     public Function<Boolean, Text> getValueTextSupplier() {
         if (valueTranslationSupplier != null) {
         if (valueTranslationSupplier != null) {
             return bool -> valueTranslationSupplier.apply(bool).toText();
             return bool -> valueTranslationSupplier.apply(bool).toText();

+ 14 - 1
lib/src/main/java/me/lortseam/completeconfig/data/Collection.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import lombok.extern.log4j.Log4j2;
 import me.lortseam.completeconfig.data.structure.Identifiable;
 import me.lortseam.completeconfig.data.structure.Identifiable;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -23,10 +26,20 @@ public class Collection extends BaseCollection implements Identifiable {
     Collection(String id, TranslationKey translation, String[] customTooltipTranslationKeys, String comment) {
     Collection(String id, TranslationKey translation, String[] customTooltipTranslationKeys, String comment) {
         super(translation);
         super(translation);
         this.id = id;
         this.id = id;
-        customTooltipTranslation = ArrayUtils.isNotEmpty(customTooltipTranslationKeys) ? Arrays.stream(customTooltipTranslationKeys).map(key -> translation.root().append(key)).toArray(TranslationKey[]::new) : null;
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+            customTooltipTranslation = ArrayUtils.isNotEmpty(customTooltipTranslationKeys) ? Arrays.stream(customTooltipTranslationKeys).map(key -> translation.root().append(key)).toArray(TranslationKey[]::new) : null;
+        } else {
+            customTooltipTranslation = null;
+        }
         this.comment = !StringUtils.isBlank(comment) ? comment : null;
         this.comment = !StringUtils.isBlank(comment) ? comment : null;
     }
     }
 
 
+    @Environment(EnvType.SERVER)
+    Collection(String id, String comment) {
+        this(id, null, null, comment);
+    }
+
+    @Environment(EnvType.CLIENT)
     public Optional<Text[]> getTooltipTranslation() {
     public Optional<Text[]> getTooltipTranslation() {
         return (customTooltipTranslation != null ? Optional.of(customTooltipTranslation) : translation.appendTooltip()).map(lines -> {
         return (customTooltipTranslation != null ? Optional.of(customTooltipTranslation) : translation.appendTooltip()).map(lines -> {
             return Arrays.stream(lines).map(TranslationKey::toText).toArray(Text[]::new);
             return Arrays.stream(lines).map(TranslationKey::toText).toArray(Text[]::new);

+ 8 - 1
lib/src/main/java/me/lortseam/completeconfig/data/CollectionSet.java

@@ -3,6 +3,8 @@ package me.lortseam.completeconfig.data;
 import lombok.extern.log4j.Log4j2;
 import lombok.extern.log4j.Log4j2;
 import me.lortseam.completeconfig.api.ConfigGroup;
 import me.lortseam.completeconfig.api.ConfigGroup;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.loader.api.FabricLoader;
 
 
 @Log4j2(topic = "CompleteConfig")
 @Log4j2(topic = "CompleteConfig")
 public class CollectionSet extends DataSet<Collection> {
 public class CollectionSet extends DataSet<Collection> {
@@ -13,7 +15,12 @@ public class CollectionSet extends DataSet<Collection> {
 
 
     void resolve(ConfigGroup group) {
     void resolve(ConfigGroup group) {
         String groupId = group.getId();
         String groupId = group.getId();
-        Collection collection = new Collection(groupId, translation.append(groupId), group.getTooltipTranslationKeys(), group.getComment());
+        Collection collection;
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+            collection = new Collection(groupId, translation.append(groupId), group.getTooltipTranslationKeys(), group.getComment());
+        } else {
+            collection = new Collection(groupId, group.getComment());
+        }
         collection.resolveContainer(group);
         collection.resolveContainer(group);
         if (collection.isEmpty()) {
         if (collection.isEmpty()) {
             logger.warn("Empty group: " + groupId);
             logger.warn("Empty group: " + groupId);

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

@@ -7,6 +7,8 @@ import lombok.extern.log4j.Log4j2;
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.io.ConfigSource;
 import me.lortseam.completeconfig.io.ConfigSource;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 import net.fabricmc.loader.api.FabricLoader;
 import net.fabricmc.loader.api.FabricLoader;
 import net.fabricmc.loader.api.metadata.ModMetadata;
 import net.fabricmc.loader.api.metadata.ModMetadata;
 
 
@@ -44,7 +46,7 @@ public final class Config extends BaseCollection {
     private final boolean saveOnExit;
     private final boolean saveOnExit;
 
 
     private Config(ConfigSource source, ConfigContainer[] children, boolean saveOnExit) {
     private Config(ConfigSource source, ConfigContainer[] children, boolean saveOnExit) {
-        super(TranslationKey.from(source));
+        super(FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT ? TranslationKey.from(source) : null);
         this.source = source;
         this.source = source;
         this.saveOnExit = saveOnExit;
         this.saveOnExit = saveOnExit;
         resolve(children);
         resolve(children);
@@ -54,6 +56,7 @@ public final class Config extends BaseCollection {
         return FabricLoader.getInstance().getModContainer(source.getModId()).get().getMetadata();
         return FabricLoader.getInstance().getModContainer(source.getModId()).get().getMetadata();
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public TranslationKey getTranslation(boolean includeBranch) {
     public TranslationKey getTranslation(boolean includeBranch) {
         if (includeBranch) {
         if (includeBranch) {
             return translation.append(source.getBranch());
             return translation.append(source.getBranch());

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

@@ -17,6 +17,9 @@ import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.exception.IllegalAnnotationParameterException;
 import me.lortseam.completeconfig.exception.IllegalAnnotationParameterException;
 import me.lortseam.completeconfig.extensions.CompleteConfigExtension;
 import me.lortseam.completeconfig.extensions.CompleteConfigExtension;
 import me.lortseam.completeconfig.util.ReflectionUtils;
 import me.lortseam.completeconfig.util.ReflectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.spongepowered.configurate.CommentedConfigurationNode;
 import org.spongepowered.configurate.CommentedConfigurationNode;
@@ -83,20 +86,25 @@ public class Entry<T> implements DataPart, Identifiable {
         defaultValue = getValue();
         defaultValue = getValue();
         ConfigEntry annotation = field.getDeclaredAnnotation(ConfigEntry.class);
         ConfigEntry annotation = field.getDeclaredAnnotation(ConfigEntry.class);
         id = annotation != null && !StringUtils.isBlank(annotation.value()) ? annotation.value() : field.getName();
         id = annotation != null && !StringUtils.isBlank(annotation.value()) ? annotation.value() : field.getName();
-        if (annotation != null && !StringUtils.isBlank(annotation.translationKey())) {
-            translation = origin.getParentTranslation().append(annotation.translationKey());
-        } 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);
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+            if (annotation != null && !StringUtils.isBlank(annotation.translationKey())) {
+                translation = origin.getParentTranslation().append(annotation.translationKey());
+            } 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);
+            }
         } else {
         } else {
-            tooltipTranslation = translation.appendTooltip().orElse(null);
+            translation = null;
+            tooltipTranslation = null;
         }
         }
         requiresRestart = annotation != null && annotation.requiresRestart();
         requiresRestart = annotation != null && annotation.requiresRestart();
         comment = annotation != null && !StringUtils.isBlank(annotation.comment()) ? annotation.comment() : null;
         comment = annotation != null && !StringUtils.isBlank(annotation.comment()) ? annotation.comment() : null;
@@ -153,10 +161,12 @@ public class Entry<T> implements DataPart, Identifiable {
         }
         }
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public Text getText() {
     public Text getText() {
         return translation.toText();
         return translation.toText();
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public Optional<Text[]> getTooltip() {
     public Optional<Text[]> getTooltip() {
         return Optional.ofNullable(tooltipTranslation).map(lines -> {
         return Optional.ofNullable(tooltipTranslation).map(lines -> {
             return Arrays.stream(lines).map(TranslationKey::toText).toArray(Text[]::new);
             return Arrays.stream(lines).map(TranslationKey::toText).toArray(Text[]::new);

+ 3 - 0
lib/src/main/java/me/lortseam/completeconfig/data/EnumEntry.java

@@ -2,6 +2,8 @@ package me.lortseam.completeconfig.data;
 
 
 import com.google.common.base.CaseFormat;
 import com.google.common.base.CaseFormat;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 
 
 import java.util.function.Function;
 import java.util.function.Function;
@@ -12,6 +14,7 @@ public class EnumEntry<T extends Enum<?>> extends Entry<T> {
         super(origin);
         super(origin);
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public final Function<Enum, Text> getValueTextSupplier() {
     public final Function<Enum, Text> getValueTextSupplier() {
         return enumValue -> translation.append(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, enumValue.name())).toText();
         return enumValue -> translation.append(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, enumValue.name())).toText();
     }
     }

+ 5 - 0
lib/src/main/java/me/lortseam/completeconfig/data/Registry.java

@@ -8,6 +8,8 @@ import me.lortseam.completeconfig.data.entry.Transformation;
 import me.lortseam.completeconfig.gui.ConfigScreenBuilder;
 import me.lortseam.completeconfig.gui.ConfigScreenBuilder;
 import me.lortseam.completeconfig.io.ConfigSource;
 import me.lortseam.completeconfig.io.ConfigSource;
 import me.lortseam.completeconfig.util.ReflectionUtils;
 import me.lortseam.completeconfig.util.ReflectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 import net.minecraft.text.TextColor;
 import net.minecraft.text.TextColor;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -73,6 +75,7 @@ public final class Registry {
      * @param modId the mod's ID
      * @param modId the mod's ID
      * @param screenBuilder the screen builder
      * @param screenBuilder the screen builder
      */
      */
+    @Environment(EnvType.CLIENT)
     public static void register(@NonNull String modId, @NonNull ConfigScreenBuilder screenBuilder) {
     public static void register(@NonNull String modId, @NonNull ConfigScreenBuilder screenBuilder) {
         getConfigs(modId).screenBuilder = screenBuilder;
         getConfigs(modId).screenBuilder = screenBuilder;
     }
     }
@@ -103,6 +106,7 @@ public final class Registry {
         return Collections.unmodifiableList(transformations);
         return Collections.unmodifiableList(transformations);
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public static Optional<ConfigScreenBuilder> getScreenBuilder(String modId, ConfigScreenBuilder fallback) {
     public static Optional<ConfigScreenBuilder> getScreenBuilder(String modId, ConfigScreenBuilder fallback) {
         ConfigScreenBuilder screenBuilder = getConfigs(modId).screenBuilder;
         ConfigScreenBuilder screenBuilder = getConfigs(modId).screenBuilder;
         if (screenBuilder != null) {
         if (screenBuilder != null) {
@@ -114,6 +118,7 @@ public final class Registry {
     private static class ModConfigSet extends HashSet<Config> {
     private static class ModConfigSet extends HashSet<Config> {
 
 
         private Config main;
         private Config main;
+        @Environment(EnvType.CLIENT)
         private ConfigScreenBuilder screenBuilder;
         private ConfigScreenBuilder screenBuilder;
 
 
         private void add(Config config, boolean main) {
         private void add(Config config, boolean main) {

+ 5 - 1
lib/src/main/java/me/lortseam/completeconfig/data/SliderEntry.java

@@ -3,6 +3,9 @@ package me.lortseam.completeconfig.data;
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.text.TranslationKey;
 import me.lortseam.completeconfig.data.text.TranslationKey;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
@@ -15,13 +18,14 @@ public class SliderEntry<T extends Number> extends BoundedEntry<T> {
     public SliderEntry(EntryOrigin origin, T min, T max) {
     public SliderEntry(EntryOrigin origin, T min, T max) {
         super(origin, min, max);
         super(origin, min, max);
         ConfigEntry.Slider slider = origin.getAnnotation(ConfigEntry.Slider.class);
         ConfigEntry.Slider slider = origin.getAnnotation(ConfigEntry.Slider.class);
-        if (!StringUtils.isBlank(slider.valueTranslationKey())) {
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT && !StringUtils.isBlank(slider.valueTranslationKey())) {
             valueTranslation = translation.root().append(slider.valueTranslationKey());
             valueTranslation = translation.root().append(slider.valueTranslationKey());
         } else {
         } else {
             valueTranslation = null;
             valueTranslation = null;
         }
         }
     }
     }
 
 
+    @Environment(EnvType.CLIENT)
     public Function<T, Text> getValueTextSupplier() {
     public Function<T, Text> getValueTextSupplier() {
         if (valueTranslation != null) {
         if (valueTranslation != null) {
             return valueTranslation::toText;
             return valueTranslation::toText;

+ 3 - 0
lib/src/main/java/me/lortseam/completeconfig/data/text/TranslationKey.java

@@ -1,6 +1,8 @@
 package me.lortseam.completeconfig.data.text;
 package me.lortseam.completeconfig.data.text;
 
 
 import me.lortseam.completeconfig.io.ConfigSource;
 import me.lortseam.completeconfig.io.ConfigSource;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.text.TranslatableText;
@@ -23,6 +25,7 @@ public final class TranslationKey {
     private final String modKey;
     private final String modKey;
     private final String[] keyParts;
     private final String[] keyParts;
 
 
+    @Environment(EnvType.CLIENT)
     private TranslationKey(String modKey, String... keyParts) {
     private TranslationKey(String modKey, String... keyParts) {
         this.modKey = modKey;
         this.modKey = modKey;
         this.keyParts = keyParts;
         this.keyParts = keyParts;