diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentFloatRange.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentFloatRange.java index 6a1ff860e..51058692e 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentFloatRange.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentFloatRange.java @@ -1,13 +1,10 @@ package net.minestom.server.command.builder.arguments.minecraft; -import net.minestom.server.command.builder.arguments.Argument; import net.minestom.server.utils.math.FloatRange; import java.util.regex.Pattern; -public class ArgumentFloatRange extends Argument { - - public static final int FORMAT_ERROR = -1; +public class ArgumentFloatRange extends ArgumentRange { public ArgumentFloatRange(String id) { super(id); @@ -20,7 +17,14 @@ public class ArgumentFloatRange extends Argument { return SUCCESS; // Is a single number } catch (NumberFormatException e) { String[] split = value.split(Pattern.quote("..")); - if (split.length == 2) { + if (split.length == 1) { + try { + Float.valueOf(split[0]); // min + return SUCCESS; + } catch (NumberFormatException e2) { + return FORMAT_ERROR; + } + } else if (split.length == 2) { try { Float.valueOf(split[0]); // min Float.valueOf(split[1]); // max @@ -37,18 +41,31 @@ public class ArgumentFloatRange extends Argument { @Override public FloatRange parse(String value) { if (value.contains("..")) { + final int index = value.indexOf('.'); String[] split = value.split(Pattern.quote("..")); - final float min = Float.valueOf(split[0]); - final float max = Float.valueOf(split[1]); + + final float min; + final float max; + if (index == 0) { + // Format ..NUMBER + min = Float.MIN_VALUE; + max = Float.valueOf(split[0]); + } else { + if (split.length == 2) { + // Format NUMBER..NUMBER + min = Float.valueOf(split[0]); + max = Float.valueOf(split[1]); + } else { + // Format NUMBER.. + min = Float.valueOf(split[0]); + max = Float.MAX_VALUE; + } + } + return new FloatRange(min, max); } else { final float number = Float.valueOf(value); return new FloatRange(number, number); } } - - @Override - public int getConditionResult(FloatRange value) { - return SUCCESS; - } } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentIntRange.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentIntRange.java index 304266813..04ea874d2 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentIntRange.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentIntRange.java @@ -1,13 +1,10 @@ package net.minestom.server.command.builder.arguments.minecraft; -import net.minestom.server.command.builder.arguments.Argument; import net.minestom.server.utils.math.IntRange; import java.util.regex.Pattern; -public class ArgumentIntRange extends Argument { - - public static final int FORMAT_ERROR = -1; +public class ArgumentIntRange extends ArgumentRange { public ArgumentIntRange(String id) { super(id); @@ -20,7 +17,14 @@ public class ArgumentIntRange extends Argument { return SUCCESS; // Is a single number } catch (NumberFormatException e) { String[] split = value.split(Pattern.quote("..")); - if (split.length == 2) { + if (split.length == 1) { + try { + Integer.valueOf(split[0]); // min + return SUCCESS; + } catch (NumberFormatException e2) { + return FORMAT_ERROR; + } + } else if (split.length == 2) { try { Integer.valueOf(split[0]); // min Integer.valueOf(split[1]); // max @@ -37,18 +41,31 @@ public class ArgumentIntRange extends Argument { @Override public IntRange parse(String value) { if (value.contains("..")) { + final int index = value.indexOf('.'); String[] split = value.split(Pattern.quote("..")); - final int min = Integer.valueOf(split[0]); - final int max = Integer.valueOf(split[1]); + + final int min; + final int max; + if (index == 0) { + // Format ..NUMBER + min = Integer.MIN_VALUE; + max = Integer.valueOf(split[0]); + } else { + if (split.length == 2) { + // Format NUMBER..NUMBER + min = Integer.valueOf(split[0]); + max = Integer.valueOf(split[1]); + } else { + // Format NUMBER.. + min = Integer.valueOf(split[0]); + max = Integer.MAX_VALUE; + } + } + return new IntRange(min, max); } else { final int number = Integer.valueOf(value); return new IntRange(number, number); } } - - @Override - public int getConditionResult(IntRange value) { - return SUCCESS; - } } diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentRange.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentRange.java index 88c48a97f..a0e829c2e 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentRange.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentRange.java @@ -2,25 +2,16 @@ package net.minestom.server.command.builder.arguments.minecraft; import net.minestom.server.command.builder.arguments.Argument; -// FIXME: cannot make the minecraft:range identifier working -public class ArgumentRange extends Argument { +public abstract class ArgumentRange extends Argument { - public ArgumentRange(String id, boolean allowSpace, boolean useRemaining) { - super(id, allowSpace, useRemaining); + public static final int FORMAT_ERROR = -1; + + public ArgumentRange(String id) { + super(id); } @Override - public int getCorrectionResult(String value) { - return 0; - } - - @Override - public Float parse(String value) { - return null; - } - - @Override - public int getConditionResult(Float value) { - return 0; + public int getConditionResult(T value) { + return SUCCESS; } }