diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/CommandManager.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/CommandManager.java index b2dee80..bcbbf9c 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/CommandManager.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/CommandManager.java @@ -1,6 +1,6 @@ package de.kentoj.scrow.bukkit.services.command; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import org.bukkit.plugin.Plugin; public interface CommandManager { diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/ArgumentData.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/ArgumentData.java new file mode 100644 index 0000000..e0d6ab4 --- /dev/null +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/ArgumentData.java @@ -0,0 +1,15 @@ +package de.kentoj.scrow.bukkit.services.command.cmds2; + +import org.jetbrains.annotations.Nullable; + +public interface ArgumentData { + + T getValue(); + + CommandArgument getArgument(); + + /** + * @return null if the default value for the type was used + */ + @Nullable String getRawValue(); +} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandContext.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandContext.java index 21f35de..e2439c2 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandContext.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandContext.java @@ -17,9 +17,20 @@ public interface CommandContext { * @return Object that is parsed from the raw argument * @throws CommandInvocationException if no value given and no default value supplied */ - T getArg(String name); + ArgumentData getArgData(String name); + @SuppressWarnings("unchecked") + default T getArgData(CommandArgument arg) { + return (T) getArgData(arg.getName()); + } + + @SuppressWarnings("unchecked") + default T getArg(String name) { + return (T) getArgData(name).getValue(); + } + + @SuppressWarnings("unchecked") default T getArg(CommandArgument arg) { - return getArg(arg.getName()); + return (T) getArgData(arg.getName()).getValue(); } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandFactory.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandFactory.java index e5b46d2..90c1ef2 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandFactory.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/CommandFactory.java @@ -1,7 +1,7 @@ package de.kentoj.scrow.bukkit.services.command.cmds2; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.Literal; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.Literal; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.type.ArgumentType; import java.util.function.Function; diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/Commands.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/Commands.java index dbeb3d0..2ce05b5 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/Commands.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/Commands.java @@ -1,7 +1,7 @@ package de.kentoj.scrow.bukkit.services.command.cmds2; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.Literal; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.Literal; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.type.ArgumentType; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/Literal.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/Literal.java similarity index 88% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/Literal.java rename to core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/Literal.java index e2abcf9..bc0ab3d 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/Literal.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/Literal.java @@ -1,4 +1,4 @@ -package de.kentoj.scrow.bukkit.services.command.cmds2.node; +package de.kentoj.scrow.bukkit.services.command.cmds2.literal; import de.kentoj.scrow.bukkit.services.command.CommandExecutor; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; @@ -6,6 +6,7 @@ import org.bukkit.permissions.Permission; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Set; public interface Literal { @@ -23,6 +24,8 @@ public interface Literal { @Nullable Literal getLiteral(String rawArg); + Set getLiterals(); + boolean hasLiteral(); void setExecutor(@Nullable CommandExecutor executor); diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/RootLiteral.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/RootLiteral.java similarity index 74% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/RootLiteral.java rename to core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/RootLiteral.java index bd85233..5c77afd 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/node/RootLiteral.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/cmds2/literal/RootLiteral.java @@ -1,4 +1,4 @@ -package de.kentoj.scrow.bukkit.services.command.cmds2.node; +package de.kentoj.scrow.bukkit.services.command.cmds2.literal; import java.util.Set; diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/ArgumentType.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/ArgumentType.java index e79ffd1..188f0eb 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/ArgumentType.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/ArgumentType.java @@ -8,12 +8,14 @@ import java.util.Set; public interface ArgumentType { + T parseInput(String rawInput); + + String readRawInput(ArgumentReader reader); + /** * @throws CommandInvocationException if the given value may not be used */ void checkValue(CommandContext ctx, T value) throws CommandInvocationException; Set getDefaultSuggestions(CommandContext ctx); - - T parseInput(ArgumentReader reader); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/NumberArgumentType.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/NumberArgumentType.java index 3791587..596710b 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/NumberArgumentType.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/NumberArgumentType.java @@ -18,6 +18,20 @@ public class NumberArgumentType { Preconditions.checkArgument(min < max, "min is greater than max"); return new ArgumentType<>() { + @Override + public Integer parseInput(String rawInput) { + try { + return Integer.parseInt(rawInput); + } catch (NumberFormatException ex) { + throw new CommandInvocationException("Invalid number -- " + rawInput); + } + } + + @Override + public String readRawInput(ArgumentReader reader) { + return reader.readWord(); + } + @Override public void checkValue(CommandContext ctx, Integer value) throws CommandInvocationException { if (value < min) throw new CommandInvocationException("Value too small -- " + value); @@ -28,16 +42,6 @@ public class NumberArgumentType { public Set getDefaultSuggestions(CommandContext ctx) { return Set.of(); } - - @Override - public Integer parseInput(ArgumentReader reader) { - final var str = reader.readWord(); - try { - return Integer.parseInt(str); - } catch (NumberFormatException ex) { - throw new CommandInvocationException("Invalid number -- " + str); - } - } }; } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/PlayerArgumentType.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/PlayerArgumentType.java index fde23fc..44db33d 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/PlayerArgumentType.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/services/command/type/PlayerArgumentType.java @@ -19,39 +19,43 @@ import java.util.stream.Collectors; public class PlayerArgumentType { private static final ArgumentType player = new ArgumentType<>() { + + @Override + public Player parseInput(String rawInput) { + if (rawInput.length() == 36) { + var uuid = UUID.fromString(rawInput); + return Bukkit.getPlayer(uuid); + } else { + return Bukkit.getPlayerExact(rawInput); + } + } + + @Override + public String readRawInput(ArgumentReader reader) { + return reader.readWord(); + } + @Override public void checkValue(CommandContext ctx, Player value) throws CommandInvocationException { - if (value == null) - throw new CommandInvocationException("Player is not online"); + if (value == null) throw new CommandInvocationException("Player is not online"); } @Override public Set getDefaultSuggestions(CommandContext ctx) { return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toSet()); } - - @Override - public Player parseInput(ArgumentReader reader) { - final var word = reader.readWord(); - if (word.length() == 36) { - var uuid = UUID.fromString(word); - return Bukkit.getPlayer(uuid); - } else { - return Bukkit.getPlayerExact(word); - } - } }; private static final ArgumentType offlinePlayer = new ArgumentType<>() { + @Override - public OfflinePlayer parseInput(ArgumentReader reader) { - final var str = reader.readWord(); + public OfflinePlayer parseInput(String rawInput) { OfflinePlayer player; - player = Bukkit.getPlayerExact(str); + player = Bukkit.getPlayerExact(rawInput); if (player == null) { try { - player = Bukkit.getOfflinePlayer(UUID.fromString(str)); + player = Bukkit.getOfflinePlayer(UUID.fromString(rawInput)); } catch (IllegalArgumentException ex) { throw new CommandInvocationException("Not a UUID or name of an online player"); } @@ -59,6 +63,11 @@ public class PlayerArgumentType { return player; } + @Override + public String readRawInput(ArgumentReader reader) { + return reader.readWord(); + } + @Override public Set getDefaultSuggestions(CommandContext ctx) { return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toSet()); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java index 631eb69..be65dac 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java @@ -5,7 +5,7 @@ import com.mongodb.MongoClientSettings; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClients; import de.kentoj.scrow.bukkit.cmds2.CommandFactoryImpl; -import de.kentoj.scrow.bukkit.cmds2.CommandManagerImpl; +import de.kentoj.scrow.bukkit.cmds2.bukkit.BukkitCommandManager; import de.kentoj.scrow.bukkit.economy.InMemoryEconomyService; import de.kentoj.scrow.bukkit.economy.MongoEconomyService; import de.kentoj.scrow.bukkit.services.command.cmds2.Commands; @@ -49,7 +49,7 @@ public class ScrowAPISurface { ); Commands.setFactory(new CommandFactoryImpl()); - ScrowAPI.setCommandManager(new CommandManagerImpl()); + ScrowAPI.setCommandManager(new BukkitCommandManager()); } public static void destroyScrowAPI() { diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/CommandArgumentImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandArgumentImpl.java similarity index 96% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/CommandArgumentImpl.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandArgumentImpl.java index b7319ce..62194a7 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/CommandArgumentImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandArgumentImpl.java @@ -1,4 +1,4 @@ -package de.kentoj.scrow.bukkit.cmds2.types; +package de.kentoj.scrow.bukkit.cmds2; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandContext; diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandContextImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandContextImpl.java index bb321c5..b43b699 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandContextImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandContextImpl.java @@ -1,6 +1,7 @@ package de.kentoj.scrow.bukkit.cmds2; import com.google.common.base.Preconditions; +import de.kentoj.scrow.bukkit.services.command.cmds2.ArgumentData; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandContext; import de.kentoj.scrow.bukkit.services.command.exception.CommandInvocationException; import lombok.Getter; @@ -16,13 +17,13 @@ public class CommandContextImpl implements CommandContext { @Getter private final CommandSender sender; - private final Map arguments; + private final Map> arguments; @SuppressWarnings("unchecked") - public T getArg(String name) { - final T value = (T) arguments.get(name); - Preconditions.checkState(value != null, "no value for '" + name + "'-argument"); - return value; + public ArgumentData getArgData(String name) { + final var data = (ArgumentData) arguments.get(name); + Preconditions.checkState(data != null, "no data for '" + name + "'-argument"); + return data; } @Override diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandFactoryImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandFactoryImpl.java index a52b14a..d4cce4f 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandFactoryImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandFactoryImpl.java @@ -1,13 +1,10 @@ package de.kentoj.scrow.bukkit.cmds2; -import de.kentoj.scrow.bukkit.cmds2.types.CommandArgumentImpl; -import de.kentoj.scrow.bukkit.cmds2.types.LiteralImpl; -import de.kentoj.scrow.bukkit.cmds2.types.RootLiteralImpl; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandContext; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandFactory; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.Literal; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.Literal; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.type.ArgumentType; import java.util.function.Function; diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/LiteralImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/LiteralImpl.java similarity index 85% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/LiteralImpl.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/LiteralImpl.java index eed641c..66d2844 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/LiteralImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/LiteralImpl.java @@ -1,18 +1,15 @@ -package de.kentoj.scrow.bukkit.cmds2.types; +package de.kentoj.scrow.bukkit.cmds2; import de.kentoj.scrow.bukkit.services.command.CommandExecutor; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.Literal; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.Literal; import lombok.Getter; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.permissions.Permission; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Getter public class LiteralImpl implements Literal { @@ -51,6 +48,11 @@ public class LiteralImpl implements Literal { return !literals.isEmpty(); } + @Override + public Set getLiterals() { + return new HashSet<>(literals.values()); + } + @Override public void addArgument(CommandArgument argument) { arguments.add(argument); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/RootLiteralImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/RootLiteralImpl.java similarity index 79% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/RootLiteralImpl.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/RootLiteralImpl.java index e456ca0..4c48860 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/types/RootLiteralImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/RootLiteralImpl.java @@ -1,6 +1,6 @@ -package de.kentoj.scrow.bukkit.cmds2.types; +package de.kentoj.scrow.bukkit.cmds2; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import lombok.Getter; import lombok.Setter; diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitCommand.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommand.java similarity index 82% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitCommand.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommand.java index 77b0096..fd348c9 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitCommand.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommand.java @@ -1,6 +1,8 @@ -package de.kentoj.scrow.bukkit.cmds2.parsing; +package de.kentoj.scrow.bukkit.cmds2.bukkit; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.cmds2.parsing.ArgumentReaderImpl; +import de.kentoj.scrow.bukkit.cmds2.parsing.CommandProcessor; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.exception.CommandInvocationException; import org.bukkit.ChatColor; import org.bukkit.command.Command; diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandManagerImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommandManager.java similarity index 74% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandManagerImpl.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommandManager.java index 6419497..03176fa 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/CommandManagerImpl.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitCommandManager.java @@ -1,17 +1,16 @@ -package de.kentoj.scrow.bukkit.cmds2; +package de.kentoj.scrow.bukkit.cmds2.bukkit; -import de.kentoj.scrow.bukkit.cmds2.parsing.BukkitCommand; import de.kentoj.scrow.bukkit.services.command.CommandManager; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import org.bukkit.Bukkit; import org.bukkit.command.CommandMap; import org.bukkit.plugin.Plugin; -public class CommandManagerImpl implements CommandManager { +public class BukkitCommandManager implements CommandManager { private final CommandMap commandMap; - public CommandManagerImpl() { + public BukkitCommandManager() { try { var field = Bukkit.getPluginManager().getClass().getDeclaredField("commandMap"); field.setAccessible(true); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitTabCompleter.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitTabCompleter.java similarity index 83% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitTabCompleter.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitTabCompleter.java index 71373fe..f4bff8e 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/BukkitTabCompleter.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/bukkit/BukkitTabCompleter.java @@ -1,6 +1,6 @@ -package de.kentoj.scrow.bukkit.cmds2.parsing; +package de.kentoj.scrow.bukkit.cmds2.bukkit; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import lombok.RequiredArgsConstructor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/ArgumentDataImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/ArgumentDataImpl.java new file mode 100644 index 0000000..6e72150 --- /dev/null +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/ArgumentDataImpl.java @@ -0,0 +1,13 @@ +package de.kentoj.scrow.bukkit.cmds2.parsing; + +import de.kentoj.scrow.bukkit.services.command.cmds2.ArgumentData; +import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; +import lombok.Value; +import org.jetbrains.annotations.Nullable; + +@Value +public class ArgumentDataImpl implements ArgumentData { + T value; + CommandArgument argument; + @Nullable String rawValue; +} diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/CommandProcessor.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/CommandProcessor.java index 1dd3d68..c81a156 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/CommandProcessor.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/cmds2/parsing/CommandProcessor.java @@ -2,12 +2,12 @@ package de.kentoj.scrow.bukkit.cmds2.parsing; import de.kentoj.scrow.bukkit.cmds2.CommandContextImpl; import de.kentoj.scrow.bukkit.services.command.ArgumentReader; +import de.kentoj.scrow.bukkit.services.command.cmds2.ArgumentData; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.Literal; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.Literal; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.exception.CommandInvocationException; import lombok.RequiredArgsConstructor; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import java.util.HashMap; @@ -16,7 +16,7 @@ import java.util.Map; @RequiredArgsConstructor public class CommandProcessor { - private final Map arguments = new HashMap<>(); + private final Map> arguments = new HashMap<>(); private final CommandSender sender; private final ArgumentReader argumentReader; @@ -48,20 +48,21 @@ public class CommandProcessor { private void processArguments(Literal node) { node.getArguments().forEach(arg -> { - Object parsed = parseArgument(arg); + var parsed = parseArgument(arg); arguments.put(arg.getName(), parsed); }); } - private Object parseArgument(CommandArgument argument) { + private ArgumentData parseArgument(CommandArgument argument) { if (argumentReader.isEOF()) { var defaultValue = argument.getDefaultValue(new CommandContextImpl(sender, arguments)); if (defaultValue == null) throw new CommandInvocationException("Missing argument -- " + argument.getName()); - return defaultValue; + return new ArgumentDataImpl<>(defaultValue, argument, null); } - T value = argument.getType().parseInput(argumentReader); + final var rawValue = argument.getType().readRawInput(argumentReader); + T value = argument.getType().parseInput(rawValue); argument.getType().checkValue(new CommandContextImpl(sender, arguments), value); - return value; + return new ArgumentDataImpl<>(value, argument, rawValue); } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java index ef1c2d3..2504ada 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java @@ -4,7 +4,7 @@ import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandArgument; import de.kentoj.scrow.bukkit.services.command.cmds2.CommandContext; import de.kentoj.scrow.bukkit.services.command.cmds2.Commands; -import de.kentoj.scrow.bukkit.services.command.cmds2.node.RootLiteral; +import de.kentoj.scrow.bukkit.services.command.cmds2.literal.RootLiteral; import de.kentoj.scrow.bukkit.services.command.type.NumberArgumentType; import de.kentoj.scrow.bukkit.services.command.type.PlayerArgumentType; import org.bukkit.Bukkit;