mirror of https://github.com/Minestom/Minestom.git
Update args
This commit is contained in:
parent
5c8cf728c2
commit
6811e39137
|
@ -39,7 +39,7 @@ public final class CommandReader {
|
|||
return s.substring(1, s.length()-1).replaceAll("\\\\\"", "\"");
|
||||
}
|
||||
|
||||
public String getRemaining() {
|
||||
public String readRemaining() {
|
||||
return read(input.length());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package net.minestom.server.command.builder.arguments;
|
||||
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.utils.StringUtils;
|
||||
import net.minestom.server.command.CommandReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
@ -12,21 +11,28 @@ import org.jetbrains.annotations.Nullable;
|
|||
* Example: "Hey I am a string"
|
||||
*/
|
||||
public class ArgumentString extends Argument<String> {
|
||||
|
||||
private static final char BACKSLASH = '\\';
|
||||
private static final char DOUBLE_QUOTE = '"';
|
||||
private static final char QUOTE = '\'';
|
||||
|
||||
public static final int QUOTE_ERROR = 1;
|
||||
|
||||
public ArgumentString(String id) {
|
||||
super(id, true);
|
||||
super(id);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String parse(@NotNull String input) throws ArgumentSyntaxException {
|
||||
return staticParse(input);
|
||||
public @NotNull Result<String> parse(CommandReader reader) {
|
||||
//todo check if we should support '
|
||||
final char c = reader.peekNextChar();
|
||||
if (c == DOUBLE_QUOTE) {
|
||||
try {
|
||||
return Result.success(reader.readQuotedString());
|
||||
} catch (Exception e) {
|
||||
return Result.syntaxError("String doesn't have closing quotes", reader.readRemaining(), QUOTE_ERROR);
|
||||
}
|
||||
} else {
|
||||
return Result.success(reader.readWord());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -41,43 +47,6 @@ public class ArgumentString extends Argument<String> {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link Argument#parse(Argument)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static String staticParse(@NotNull String input) throws ArgumentSyntaxException {
|
||||
// Return if not quoted
|
||||
if (!input.contains(String.valueOf(DOUBLE_QUOTE)) &&
|
||||
!input.contains(String.valueOf(QUOTE)) &&
|
||||
!input.contains(StringUtils.SPACE)) {
|
||||
return input;
|
||||
}
|
||||
|
||||
// Check if value start and end with quote
|
||||
final char first = input.charAt(0);
|
||||
final char last = input.charAt(input.length() - 1);
|
||||
final boolean quote = input.length() >= 2 &&
|
||||
first == last && (first == DOUBLE_QUOTE || first == QUOTE);
|
||||
if (!quote)
|
||||
throw new ArgumentSyntaxException("String argument needs to start and end with quotes", input, QUOTE_ERROR);
|
||||
|
||||
// Remove first and last characters (quotes)
|
||||
input = input.substring(1, input.length() - 1);
|
||||
|
||||
// Verify backslashes
|
||||
for (int i = 1; i < input.length(); i++) {
|
||||
final char c = input.charAt(i);
|
||||
if (c == first) {
|
||||
final char lastChar = input.charAt(i - 1);
|
||||
if (lastChar != BACKSLASH) {
|
||||
throw new ArgumentSyntaxException("Non-escaped quote", input, QUOTE_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return StringUtils.unescapeJavaString(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("String<%s>", getId());
|
||||
|
|
|
@ -1,27 +1,29 @@
|
|||
package net.minestom.server.command.builder.arguments;
|
||||
|
||||
import net.minestom.server.command.CommandReader;
|
||||
import net.minestom.server.utils.StringUtils;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Represents an argument which will take all the remaining of the command.
|
||||
* <p>
|
||||
* Example: Hey I am a string
|
||||
*/
|
||||
public class ArgumentStringArray extends Argument<String[]> {
|
||||
//todo maybe deprecate? this arg doesn't make sense, the user isn't a baby they can cut it themselves
|
||||
public static final byte[] prop = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(2); // Greedy phrase
|
||||
});
|
||||
|
||||
public ArgumentStringArray(String id) {
|
||||
super(id, true, true);
|
||||
super(id);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String[] parse(@NotNull String input) {
|
||||
return input.split(Pattern.quote(StringUtils.SPACE));
|
||||
public @NotNull Result<String[]> parse(CommandReader reader) {
|
||||
return Result.success(reader.readRemaining().split(StringUtils.SPACE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -31,9 +33,7 @@ public class ArgumentStringArray extends Argument<String[]> {
|
|||
|
||||
@Override
|
||||
public byte @Nullable [] nodeProperties() {
|
||||
return BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(2); // Greedy phrase
|
||||
});
|
||||
return prop;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package net.minestom.server.command.builder.arguments;
|
||||
|
||||
import net.minestom.server.command.CommandReader;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -27,21 +26,19 @@ public class ArgumentWord extends Argument<String> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String parse(CommandReader reader) throws ArgumentSyntaxException {
|
||||
final String word = reader.getWord();
|
||||
public @NotNull Result<String> parse(CommandReader reader) {
|
||||
final String word = reader.readWord();
|
||||
|
||||
// Check restrictions (acting as literal)
|
||||
if (hasRestrictions()) {
|
||||
for (String r : restrictions) {
|
||||
if (word.equals(r)) {
|
||||
reader.consume();
|
||||
return word;
|
||||
return Result.success(word);
|
||||
}
|
||||
}
|
||||
throw new ArgumentSyntaxException("Word needs to be in the restriction list", word, RESTRICTION_ERROR);
|
||||
return Result.incompatibleType();
|
||||
}
|
||||
reader.consume();
|
||||
return word;
|
||||
return Result.success(word);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,7 +2,6 @@ package net.minestom.server.command.builder.arguments.minecraft;
|
|||
|
||||
import net.minestom.server.command.CommandReader;
|
||||
import net.minestom.server.command.builder.arguments.Argument;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArgumentResourceLocation extends Argument<String> {
|
||||
|
@ -12,10 +11,9 @@ public class ArgumentResourceLocation extends Argument<String> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String parse(CommandReader reader) throws ArgumentSyntaxException {
|
||||
final String input = reader.getWord();
|
||||
reader.consume();
|
||||
return input;
|
||||
public @NotNull Result<String> parse(CommandReader reader) {
|
||||
//todo shouldn't this have some syntax checks?
|
||||
return Result.success(reader.readWord());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,6 @@ package net.minestom.server.command.builder.arguments.minecraft;
|
|||
|
||||
import net.minestom.server.command.CommandReader;
|
||||
import net.minestom.server.command.builder.arguments.Argument;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -16,14 +15,12 @@ public class ArgumentUUID extends Argument<UUID> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UUID parse(CommandReader reader) throws ArgumentSyntaxException {
|
||||
final String input = reader.getWord();
|
||||
public @NotNull Result<UUID> parse(CommandReader reader) {
|
||||
final String input = reader.readWord();
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(input);
|
||||
reader.consume();
|
||||
return uuid;
|
||||
return Result.success(UUID.fromString(input));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
throw new ArgumentSyntaxException("Invalid UUID", input, INVALID_UUID);
|
||||
return Result.syntaxError("Invalid UUID", input, INVALID_UUID);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue