Преглед на файлове

[WIP] Float and Double bounds

Lortseam преди 5 години
родител
ревизия
17a175089f

+ 1 - 1
gradle.properties

@@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
 	loader_version=0.8.2+build.194
 
 # Mod Properties
-	mod_version = 0.1.3
+	mod_version = 0.1.4
 	maven_group = com.gitlab.Lortseam
 	archives_base_name = completeconfig
 

+ 19 - 0
src/main/java/me/lortseam/completeconfig/CompleteConfig.java

@@ -11,6 +11,7 @@ import net.minecraft.client.resource.language.I18n;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Function;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class CompleteConfig {
@@ -70,6 +71,15 @@ public final class CompleteConfig {
                 .setSaveConsumer(saveConsumer)
                 .build()
         );
+        registry.registerBoundedTypeProvider(Float.TYPE, (translationKey, type, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+                .create()
+                .startFloatField(translationKey, value)
+                .setDefaultValue(defaultValue)
+                //TODO: Add error message
+                .setErrorSupplier(v -> v < extras.getBounds().getMin() || v > extras.getBounds().getMax() ? Optional.of("") : Optional.empty())
+                .setSaveConsumer(saveConsumer)
+                .build()
+        );
         registry.registerTypeProvider(Double.TYPE, (translationKey, type, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startDoubleField(translationKey, value)
@@ -77,6 +87,15 @@ public final class CompleteConfig {
                 .setSaveConsumer(saveConsumer)
                 .build()
         );
+        registry.registerBoundedTypeProvider(Double.TYPE, (translationKey, type, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
+                .create()
+                .startDoubleField(translationKey, value)
+                .setDefaultValue(defaultValue)
+                //TODO: Add error message
+                .setErrorSupplier(v -> v < extras.getBounds().getMin() || v > extras.getBounds().getMax() ? Optional.of("") : Optional.empty())
+                .setSaveConsumer(saveConsumer)
+                .build()
+        );
         registry.registerProvider((field, type, extras) -> Enum.class.isAssignableFrom(type), (GuiProvider<? extends Enum>) (translationKey, type, value, defaultValue, extras, saveConsumer) -> ConfigEntryBuilder
                 .create()
                 .startEnumSelector(translationKey, type, value)

+ 15 - 2
src/main/java/me/lortseam/completeconfig/ConfigManager.java

@@ -102,6 +102,7 @@ public class ConfigManager {
                 if (Modifier.isStatic(field.getModifiers())) {
                     return false;
                 }
+                //TODO: Do not allow final fields
                 if (container.isConfigPOJO()) {
                     return !ConfigEntryContainer.class.isAssignableFrom(field.getType()) && !field.isAnnotationPresent(ConfigEntry.Ignore.class);
                 }
@@ -120,16 +121,28 @@ public class ConfigManager {
                 }
                 if (field.isAnnotationPresent(ConfigEntry.Integer.Bounded.class)) {
                     if (field.getType() != Integer.TYPE) {
-                        throw new IllegalAnnotationTargetException("Cannot apply integer bound to non integer field " + field);
+                        throw new IllegalAnnotationTargetException("Cannot apply Integer bound to non Integer field " + field);
                     }
                     ConfigEntry.Integer.Bounded bounds = field.getDeclaredAnnotation(ConfigEntry.Integer.Bounded.class);
                     builder.setBounds(bounds.min(), bounds.max());
                 } else if (field.isAnnotationPresent(ConfigEntry.Long.Bounded.class)) {
                     if (field.getType() != Long.TYPE) {
-                        throw new IllegalAnnotationTargetException("Cannot apply long bound to non long field " + field);
+                        throw new IllegalAnnotationTargetException("Cannot apply Long bound to non Long field " + field);
                     }
                     ConfigEntry.Long.Bounded bounds = field.getDeclaredAnnotation(ConfigEntry.Long.Bounded.class);
                     builder.setBounds(bounds.min(), bounds.max());
+                } else if (field.isAnnotationPresent(ConfigEntry.Float.Bounded.class)) {
+                    if (field.getType() != Float.TYPE) {
+                        throw new IllegalAnnotationTargetException("Cannot apply Float bound to non Float field " + field);
+                    }
+                    ConfigEntry.Float.Bounded bounds = field.getDeclaredAnnotation(ConfigEntry.Float.Bounded.class);
+                    builder.setBounds(bounds.min(), bounds.max());
+                } else if (field.isAnnotationPresent(ConfigEntry.Double.Bounded.class)) {
+                    if (field.getType() != Double.TYPE) {
+                        throw new IllegalAnnotationTargetException("Cannot apply Double bound to non Double field " + field);
+                    }
+                    ConfigEntry.Double.Bounded bounds = field.getDeclaredAnnotation(ConfigEntry.Double.Bounded.class);
+                    builder.setBounds(bounds.min(), bounds.max());
                 }
                 Entry<?> entry = builder.build();
                 if (guiRegistry.getProvider(entry) == null) {

+ 34 - 4
src/main/java/me/lortseam/completeconfig/api/ConfigEntry.java

@@ -27,9 +27,9 @@ public @interface ConfigEntry {
         @Retention(RetentionPolicy.RUNTIME)
         public @interface Bounded {
 
-            int min();
+            int min() default java.lang.Integer.MIN_VALUE;
 
-            int max();
+            int max() default java.lang.Integer.MAX_VALUE;
 
         }
 
@@ -42,9 +42,39 @@ public @interface ConfigEntry {
         @Retention(RetentionPolicy.RUNTIME)
         public @interface Bounded {
 
-            long min();
+            long min() default java.lang.Long.MIN_VALUE;
 
-            long max();
+            long max() default java.lang.Long.MAX_VALUE;
+
+        }
+
+    }
+
+    @NoArgsConstructor(access = AccessLevel.PRIVATE)
+    class Float {
+
+        @Target(ElementType.FIELD)
+        @Retention(RetentionPolicy.RUNTIME)
+        public @interface Bounded {
+
+            float min() default -java.lang.Float.MAX_VALUE;
+
+            float max() default java.lang.Float.MAX_VALUE;
+
+        }
+
+    }
+
+    @NoArgsConstructor(access = AccessLevel.PRIVATE)
+    class Double {
+
+        @Target(ElementType.FIELD)
+        @Retention(RetentionPolicy.RUNTIME)
+        public @interface Bounded {
+
+            double min() default -java.lang.Double.MAX_VALUE;
+
+            double max() default java.lang.Double.MAX_VALUE;
 
         }