Procházet zdrojové kódy

Improve special entries

Lortseam před 4 roky
rodič
revize
5e3638a5d2

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

@@ -11,10 +11,8 @@ public class BoundedEntry<T extends Number> extends Entry<T> {
 
     @Getter
     private final T min, max;
-    @Getter
-    private final boolean slider;
 
-    public BoundedEntry(EntryOrigin origin, T min, T max, boolean slider) {
+    public BoundedEntry(EntryOrigin origin, T min, T max) {
         super(origin, value -> {
             if (new BigDecimal(value.toString()).compareTo(new BigDecimal(min.toString())) < 0) {
                 logger.warn("[CompleteConfig] Tried to set value of field " + origin.getField() + " to a value less than minimum bound, setting to minimum now!");
@@ -27,11 +25,6 @@ public class BoundedEntry<T extends Number> extends Entry<T> {
         });
         this.min = min;
         this.max = max;
-        this.slider = slider;
-    }
-
-    public BoundedEntry(EntryOrigin origin, T min, T max) {
-        this(origin, min, max, false);
     }
 
 }

+ 10 - 3
lib/src/main/java/me/lortseam/completeconfig/data/Entry.java

@@ -1,5 +1,6 @@
 package me.lortseam.completeconfig.data;
 
+import com.google.common.base.Predicates;
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
 import com.google.common.collect.Lists;
@@ -34,11 +35,17 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
             Transformation.byType(boolean.class, Boolean.class).transforms(BooleanEntry::new),
             Transformation.byAnnotation(ConfigEntry.BoundedInteger.class).andType(int.class, Integer.class).transforms(origin -> {
                 ConfigEntry.BoundedInteger bounds = origin.getAnnotation();
-                return new BoundedEntry<>(origin, bounds.min(), bounds.max(), bounds.slider());
+                if (bounds.slider()) {
+                    return new SliderEntry<>(origin, bounds.min(), bounds.max());
+                }
+                return new BoundedEntry<>(origin, bounds.min(), bounds.max());
             }),
             Transformation.byAnnotation(ConfigEntry.BoundedLong.class).andType(long.class, Long.class).transforms(origin -> {
                 ConfigEntry.BoundedLong bounds = origin.getAnnotation();
-                return new BoundedEntry<>(origin, bounds.min(), bounds.max(), bounds.slider());
+                if (bounds.slider()) {
+                    return new SliderEntry<>(origin, bounds.min(), bounds.max());
+                }
+                return new BoundedEntry<>(origin, bounds.min(), bounds.max());
             }),
             Transformation.byAnnotation(ConfigEntry.BoundedFloat.class).andType(float.class, Float.class).transforms(origin -> {
                 ConfigEntry.BoundedFloat bounds = origin.getAnnotation();
@@ -255,7 +262,7 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
         }
 
         Entry<T> build(ConfigContainer parentObject, TranslationIdentifier parentTranslation) {
-            Entry<T> entry = transformations.stream().filter(transformation -> transformation.test(this)).findFirst().orElse(Transformation.by(e -> true).transforms(Entry::new)).transform(this, parentObject, parentTranslation);
+            Entry<T> entry = transformations.stream().filter(transformation -> transformation.test(this)).findFirst().orElse(Transformation.by(Predicates.alwaysTrue()).transforms(Entry::new)).transform(this, parentObject, parentTranslation);
             for (Consumer<Entry<T>> interaction : interactions) {
                 interaction.accept(entry);
             }

+ 11 - 0
lib/src/main/java/me/lortseam/completeconfig/data/SliderEntry.java

@@ -0,0 +1,11 @@
+package me.lortseam.completeconfig.data;
+
+import me.lortseam.completeconfig.data.entry.EntryOrigin;
+
+public class SliderEntry<T extends Number> extends BoundedEntry<T> {
+
+    public SliderEntry(EntryOrigin origin, T min, T max) {
+        super(origin, min, max);
+    }
+
+}

+ 2 - 1
lib/src/main/java/me/lortseam/completeconfig/data/structure/ParentDataPart.java

@@ -1,5 +1,6 @@
 package me.lortseam.completeconfig.data.structure;
 
+import com.google.common.base.Predicates;
 import org.spongepowered.configurate.CommentedConfigurationNode;
 
 import java.util.function.BiConsumer;
@@ -16,7 +17,7 @@ public interface ParentDataPart<C extends DataPart> extends DataPart {
 
     @Override
     default void fetch(CommentedConfigurationNode node) {
-        propagateToChildren(childNode -> true, DataPart::fetch, node);
+        propagateToChildren(Predicates.alwaysTrue(), DataPart::fetch, node);
     }
 
     default void propagateToChildren(Predicate<CommentedConfigurationNode> childNodeCondition, BiConsumer<C, CommentedConfigurationNode> function, CommentedConfigurationNode node) {

+ 2 - 2
lib/src/main/java/me/lortseam/completeconfig/extensions/clothbasicmath/ClothBasicMathClientExtension.java

@@ -8,7 +8,7 @@ import me.shedaniel.math.Color;
 public final class ClothBasicMathClientExtension implements ConfigExtensionPattern {
 
     ClothBasicMathClientExtension() {
-        dependOn("cloth-config2", () -> GuiRegistry.addGlobalRegistrar(registry -> registry.registerColorProvider((ColorEntry<Color> entry) -> GuiRegistry.build(
+        dependOn("cloth-config2", () -> GuiRegistry.addGlobalRegistrar(registry -> registry.registerSpecialProvider((ColorEntry<Color> entry) -> GuiRegistry.build(
                 builder -> builder
                         .startColorField(entry.getText(), entry.getValue())
                         .setAlphaMode(entry.isAlphaMode())
@@ -16,7 +16,7 @@ public final class ClothBasicMathClientExtension implements ConfigExtensionPatte
                         .setTooltip(entry.getTooltip())
                         .setSaveConsumer2(entry::setValue),
                 entry.requiresRestart()
-        ), true, Color.class)));
+        ), ColorEntry.class, Color.class)));
     }
 
 }

+ 30 - 35
lib/src/main/java/me/lortseam/completeconfig/gui/cloth/GuiRegistry.java

@@ -1,5 +1,6 @@
 package me.lortseam.completeconfig.gui.cloth;
 
+import com.google.common.base.Predicates;
 import com.google.common.collect.Lists;
 import com.google.common.collect.MoreCollectors;
 import com.google.common.reflect.TypeToken;
@@ -46,31 +47,25 @@ public final class GuiRegistry {
     }
 
     public void registerProvider(GuiProvider<?> provider, Predicate<Entry<?>> predicate, Type... types) {
-        registrations.add(0, new GuiProviderRegistration(predicate.and(entry -> {
-            if (types.length == 0) {
-                return true;
-            }
-            return ArrayUtils.contains(types, entry.getType());
-        }), provider));
+        registrations.add(0, new GuiProviderRegistration(entry -> {
+            if (types.length > 0 && !ArrayUtils.contains(types, entry.getType())) return false;
+            return predicate.test(entry);
+        }, provider));
     }
 
     public void registerProvider(GuiProvider<?> provider, Type... types) {
         if (types.length == 0) {
             throw new IllegalArgumentException("Types must not be empty");
         }
-        registerProvider(provider, entry -> true, types);
+        registerProvider(provider, Predicates.alwaysTrue(), types);
     }
 
-    public void registerBoundedProvider(GuiProvider<? extends BoundedEntry<?>> provider, boolean slider, Type... types) {
-        registerProvider(provider, entry -> entry instanceof BoundedEntry && ((BoundedEntry<?>) entry).isSlider() == slider, types);
+    public <T extends Entry<?>> void registerSpecialProvider(GuiProvider<?> provider, Class<T> entryType, Predicate<T> predicate, Type... types) {
+        registerProvider(provider, entry -> entry.getClass() == entryType && predicate.test((T) entry), types);
     }
 
-    public void registerEnumProvider(GuiProvider<? extends EnumEntry<?>> provider, EnumEntry.DisplayType enumDisplayType) {
-        registerProvider(provider, entry -> entry instanceof EnumEntry && ((EnumEntry<?>) entry).getDisplayType() == enumDisplayType);
-    }
-
-    public void registerColorProvider(GuiProvider<? extends ColorEntry<?>> provider, boolean alphaModeSupported, Type... types) {
-        registerProvider(provider, entry -> entry instanceof ColorEntry<?> && (!((ColorEntry<?>) entry).isAlphaMode() || alphaModeSupported), types);
+    public <T extends Entry<?>> void registerSpecialProvider(GuiProvider<?> provider, Class<T> entryType, Type... types) {
+        registerSpecialProvider(provider, entryType, Predicates.alwaysTrue(), types);
     }
 
     private void registerDefaultProviders() {
@@ -91,7 +86,7 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), int.class, Integer.class);
-       registerBoundedProvider((BoundedEntry<Integer> entry) -> build(
+       registerSpecialProvider((BoundedEntry<Integer> entry) -> build(
                builder -> builder
                        .startIntField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -100,16 +95,16 @@ public final class GuiRegistry {
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), false, int.class, Integer.class);
-       registerBoundedProvider((BoundedEntry<Integer> entry) -> build(
+       ), BoundedEntry.class, int.class, Integer.class);
+       registerSpecialProvider((SliderEntry<Integer> entry) -> build(
                builder -> builder
                        .startIntSlider(entry.getText(), entry.getValue(), entry.getMin(), entry.getMax())
                        .setDefaultValue(entry.getDefaultValue())
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), true, int.class, Integer.class);
-       registerColorProvider((ColorEntry<Integer> entry) -> build(
+       ), SliderEntry.class, int.class, Integer.class);
+       registerSpecialProvider((ColorEntry<Integer> entry) -> build(
                builder -> builder
                        .startColorField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -117,7 +112,7 @@ public final class GuiRegistry {
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), true, int.class, Integer.class);
+       ), ColorEntry.class, int.class, Integer.class);
        registerProvider((Entry<Long> entry) -> build(
                builder -> builder
                        .startLongField(entry.getText(), entry.getValue())
@@ -126,7 +121,7 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), long.class, Long.class);
-       registerBoundedProvider((BoundedEntry<Long> entry) -> build(
+       registerSpecialProvider((BoundedEntry<Long> entry) -> build(
                builder -> builder
                        .startLongField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -135,15 +130,15 @@ public final class GuiRegistry {
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), false, long.class, Long.class);
-       registerBoundedProvider((BoundedEntry<Long> entry) -> build(
+       ), BoundedEntry.class, long.class, Long.class);
+       registerSpecialProvider((SliderEntry<Long> entry) -> build(
                builder -> builder
                        .startLongSlider(entry.getText(), entry.getValue(), entry.getMin(), entry.getMax())
                        .setDefaultValue(entry.getDefaultValue())
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), true, long.class, Long.class);
+       ), SliderEntry.class, long.class, Long.class);
        registerProvider((Entry<Float> entry) -> build(
                builder -> builder
                        .startFloatField(entry.getText(), entry.getValue())
@@ -152,7 +147,7 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), float.class, Float.class);
-       registerBoundedProvider((BoundedEntry<Float> entry) -> build(
+       registerSpecialProvider((BoundedEntry<Float> entry) -> build(
                builder -> builder
                        .startFloatField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -161,7 +156,7 @@ public final class GuiRegistry {
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), false, float.class, Float.class);
+       ), BoundedEntry.class, float.class, Float.class);
        registerProvider((Entry<Double> entry) -> build(
                builder -> builder
                        .startDoubleField(entry.getText(), entry.getValue())
@@ -170,7 +165,7 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), double.class, Double.class);
-       registerBoundedProvider((BoundedEntry<Double> entry) -> build(
+       registerSpecialProvider((BoundedEntry<Double> entry) -> build(
                builder -> builder
                        .startDoubleField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -179,7 +174,7 @@ public final class GuiRegistry {
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), false, double.class, Double.class);
+       ), BoundedEntry.class, double.class, Double.class);
        registerProvider((Entry<String> entry) -> build(
                builder -> builder
                        .startStrField(entry.getText(), entry.getValue())
@@ -188,7 +183,7 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), String.class);
-       registerEnumProvider((EnumEntry<Enum<?>> entry) -> build(
+       registerSpecialProvider((EnumEntry<Enum<?>> entry) -> build(
                builder -> builder
                        .startEnumSelector(entry.getText(), entry.getTypeClass(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
@@ -196,8 +191,8 @@ public final class GuiRegistry {
                        .setEnumNameProvider(entry.getEnumNameProvider())
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
-       ), EnumEntry.DisplayType.BUTTON);
-       registerEnumProvider((EnumEntry<Enum<?>> entry) -> {
+       ), EnumEntry.class, entry -> entry.getDisplayType() == EnumEntry.DisplayType.BUTTON);
+       registerSpecialProvider((EnumEntry<Enum<?>> entry) -> {
            List<Enum> enumValues = Arrays.asList(((Class<? extends Enum<?>>) entry.getTypeClass()).getEnumConstants());
            return build(
                    builder -> builder
@@ -211,7 +206,7 @@ public final class GuiRegistry {
                            .setSaveConsumer(entry::setValue),
                    entry.requiresRestart()
            );
-       }, EnumEntry.DisplayType.DROPDOWN);
+       }, EnumEntry.class, entry -> entry.getDisplayType() == EnumEntry.DisplayType.DROPDOWN);
        registerProvider((Entry<List<Integer>> entry) -> build(
                builder -> builder
                        .startIntList(entry.getText(), entry.getValue())
@@ -252,14 +247,14 @@ public final class GuiRegistry {
                        .setSaveConsumer(entry::setValue),
                entry.requiresRestart()
        ), new TypeToken<List<String>>() {}.getType());
-       registerColorProvider((ColorEntry<TextColor> entry) -> build(
+       registerSpecialProvider((ColorEntry<TextColor> entry) -> build(
                builder -> builder
                        .startColorField(entry.getText(), entry.getValue())
                        .setDefaultValue(entry.getDefaultValue())
                        .setTooltip(entry.getTooltip())
                        .setSaveConsumer3(entry::setValue),
                entry.requiresRestart()
-       ), false, TextColor.class);
+       ), ColorEntry.class, entry -> !entry.isAlphaMode(), TextColor.class);
     }
 
     Optional<GuiProvider<Entry<?>>> getProvider(Entry<?> entry) {