Replace Arguments by CommandContext in demo commands

This commit is contained in:
themode 2021-03-11 00:11:29 +01:00
parent db02e93429
commit 9c1ff216a1
18 changed files with 85 additions and 78 deletions

View File

@ -1,6 +1,6 @@
package net.minestom.server.command;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.permission.Permission;
import org.jetbrains.annotations.NotNull;
@ -12,7 +12,7 @@ import java.util.Set;
* Sender used in {@link CommandManager#executeServerCommand(String)}.
* <p>
* Be aware that {@link #sendMessage(String)} is empty on purpose because the purpose
* of this sender is to process the data of {@link Arguments#getReturnData()}.
* of this sender is to process the data of {@link CommandContext#getReturnData()}.
*/
public class ServerSender implements CommandSender {

View File

@ -102,7 +102,7 @@ public abstract class Argument<T> {
/**
* Gets the ID of the argument, showed in-game above the chat bar
* and used to retrieve the data when the command is parsed in {@link net.minestom.server.command.builder.Arguments}.
* and used to retrieve the data when the command is parsed in {@link net.minestom.server.command.builder.CommandContext}.
*
* @return the argument id
*/

View File

@ -3,7 +3,6 @@ package net.minestom.server.command.builder.parser;
import it.unimi.dsi.fastutil.ints.Int2ObjectRBTreeMap;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandManager;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.CommandSyntax;

View File

@ -31,7 +31,7 @@ public class Main {
CommandManager commandManager = MinecraftServer.getCommandManager();
commandManager.register(new TestCommand());
/*commandManager.register(new GamemodeCommand());
commandManager.register(new GamemodeCommand());
commandManager.register(new EntitySelectorCommand());
commandManager.register(new HealthCommand());
commandManager.register(new SimpleCommand());
@ -43,7 +43,7 @@ public class Main {
commandManager.register(new TitleCommand());
commandManager.register(new BookCommand());
commandManager.register(new ShootCommand());
commandManager.register(new HorseCommand());*/
commandManager.register(new HorseCommand());
commandManager.setUnknownCommandCallback((sender, command) -> sender.sendMessage("unknown command"));

View File

@ -3,8 +3,8 @@ package demo.commands;
import net.minestom.server.chat.ChatColor;
import net.minestom.server.chat.ColoredText;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.entity.Player;
import net.minestom.server.item.metadata.WrittenBookMeta;
@ -27,7 +27,7 @@ public class BookCommand extends Command {
return true;
}
private void execute(CommandSender sender, Arguments args) {
private void execute(CommandSender sender, CommandContext context) {
Player player = sender.asPlayer();
final WrittenBookMeta bookMeta = new WrittenBookMeta();

View File

@ -1,8 +1,8 @@
package demo.commands;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.arguments.minecraft.ArgumentEntity;
import net.minestom.server.entity.Entity;
@ -16,7 +16,7 @@ public class EntitySelectorCommand extends Command {
public EntitySelectorCommand() {
super("ent");
setDefaultExecutor((sender, args) -> System.out.println("DEFAULT"));
setDefaultExecutor((sender, context) -> System.out.println("DEFAULT"));
ArgumentEntity argumentEntity = ArgumentType.Entity("entities").onlyPlayers(true);
@ -26,9 +26,9 @@ public class EntitySelectorCommand extends Command {
}
private void executor(CommandSender commandSender, Arguments arguments) {
private void executor(CommandSender commandSender, CommandContext context) {
Instance instance = commandSender.asPlayer().getInstance();
EntityFinder entityFinder = arguments.get("entities");
EntityFinder entityFinder = context.get("entities");
List<Entity> entities = entityFinder.find(commandSender);
System.out.println("found " + entities.size() + " entities");
}

View File

@ -1,8 +1,8 @@
package demo.commands;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentEnum;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
@ -35,22 +35,22 @@ public class GamemodeCommand extends Command {
addSyntax(this::executeOnOther, player, mode);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
sender.sendMessage("Usage: /gamemode [player] <gamemode>");
}
private void executeOnSelf(CommandSender sender, Arguments arguments) {
private void executeOnSelf(CommandSender sender, CommandContext context) {
Player player = (Player) sender;
GameMode gamemode = arguments.get("gamemode");
GameMode gamemode = context.get("gamemode");
assert gamemode != null; // mode is not supposed to be null, because gamemodeName will be valid
player.setGameMode(gamemode);
player.sendMessage("You are now playing in " + gamemode.toString().toLowerCase());
}
private void executeOnOther(CommandSender sender, Arguments arguments) {
GameMode gamemode = arguments.get("gamemode");
EntityFinder targetFinder = arguments.get("player");
private void executeOnOther(CommandSender sender, CommandContext context) {
GameMode gamemode = context.get("gamemode");
EntityFinder targetFinder = context.get("player");
Player target = targetFinder.findFirstPlayer(sender);
assert gamemode != null; // mode is not supposed to be null, because gamemodeName will be valid
assert target != null;

View File

@ -1,8 +1,8 @@
package demo.commands;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.arguments.number.ArgumentNumber;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
@ -36,7 +36,7 @@ public class HealthCommand extends Command {
return true;
}
private void defaultExecutor(CommandSender sender, Arguments args) {
private void defaultExecutor(CommandSender sender, CommandContext context) {
sender.sendMessage("Correct usage: health [set/add] [number]");
}
@ -57,14 +57,14 @@ public class HealthCommand extends Command {
}
}
private void sendSuggestionMessage(CommandSender sender, Arguments args) {
sender.sendMessage("/health " + args.get("mode") + " [Integer]");
private void sendSuggestionMessage(CommandSender sender, CommandContext context) {
sender.sendMessage("/health " + context.get("mode") + " [Integer]");
}
private void onHealthCommand(CommandSender sender, Arguments args) {
private void onHealthCommand(CommandSender sender, CommandContext context) {
final Player player = (Player) sender;
final String mode = args.get("mode");
final int value = args.get("value");
final String mode = context.get("mode");
final int value = context.get("value");
switch (mode.toLowerCase()) {
case "set":

View File

@ -1,8 +1,8 @@
package demo.commands;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
import net.minestom.server.entity.EntityCreature;
@ -37,7 +37,7 @@ public class HorseCommand extends Command {
return true;
}
private void defaultExecutor(CommandSender sender, Arguments args) {
private void defaultExecutor(CommandSender sender, CommandContext context) {
sender.sendMessage("Correct usage: horse [baby] [marking] [color]");
}
@ -59,12 +59,12 @@ public class HorseCommand extends Command {
sender.sendMessage("SYNTAX ERROR: '" + exception.getInput() + "' should be replaced by " + values + ".");
}
private void onHorseCommand(CommandSender sender, Arguments args) {
private void onHorseCommand(CommandSender sender, CommandContext context) {
var player = (Player) sender;
boolean baby = args.get("baby");
HorseMeta.Marking marking = args.get("marking");
HorseMeta.Color color = args.get("color");
boolean baby = context.get("baby");
HorseMeta.Marking marking = context.get("marking");
HorseMeta.Color color = context.get("color");
var horse = new EntityCreature(EntityType.HORSE);
var meta = (HorseMeta) horse.getEntityMeta();
meta.setBaby(baby);

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
@ -18,45 +18,45 @@ public class LoadExtensionCommand extends Command {
setDefaultExecutor(this::usage);
Argument extension = ArgumentType.DynamicStringArray("extensionName");
var extension = ArgumentType.DynamicStringArray("extensionName");
setArgumentCallback(this::extensionCallback, extension);
addSyntax(this::execute, extension);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
sender.sendMessage("Usage: /load <extension file name>");
}
private void execute(CommandSender sender, Arguments arguments) {
String name = join(arguments.getStringArray("extensionName"));
sender.sendMessage("extensionFile = "+name+"....");
private void execute(CommandSender sender, CommandContext context) {
String name = join(context.getStringArray("extensionName"));
sender.sendMessage("extensionFile = " + name + "....");
ExtensionManager extensionManager = MinecraftServer.getExtensionManager();
Path extensionFolder = extensionManager.getExtensionFolder().toPath().toAbsolutePath();
Path extensionJar = extensionFolder.resolve(name);
try {
if(!extensionJar.toFile().getCanonicalPath().startsWith(extensionFolder.toFile().getCanonicalPath())) {
sender.sendMessage("File name '"+name+"' does not represent a file inside the extensions folder. Will not load");
if (!extensionJar.toFile().getCanonicalPath().startsWith(extensionFolder.toFile().getCanonicalPath())) {
sender.sendMessage("File name '" + name + "' does not represent a file inside the extensions folder. Will not load");
return;
}
} catch (IOException e) {
e.printStackTrace();
sender.sendMessage("Failed to load extension: "+e.getMessage());
sender.sendMessage("Failed to load extension: " + e.getMessage());
return;
}
try {
boolean managed = extensionManager.loadDynamicExtension(extensionJar.toFile());
if(managed) {
if (managed) {
sender.sendMessage("Extension loaded!");
} else {
sender.sendMessage("Failed to load extension, check your logs.");
}
} catch (Exception e) {
e.printStackTrace();
sender.sendMessage("Failed to load extension: "+e.getMessage());
sender.sendMessage("Failed to load extension: " + e.getMessage());
}
}
@ -68,7 +68,7 @@ public class LoadExtensionCommand extends Command {
StringBuilder b = new StringBuilder();
for (int i = 0; i < extensionNameParts.length; i++) {
String s = extensionNameParts[i];
if(i != 0) {
if (i != 0) {
b.append(" ");
}
b.append(s);

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.entity.Player;
import java.util.Collection;
@ -16,7 +16,7 @@ public class PlayersCommand extends Command {
setDefaultExecutor(this::usage);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
final Collection<Player> players = MinecraftServer.getConnectionManager().getOnlinePlayers();
final int playerCount = players.size();
sender.sendMessage("Total players: " + playerCount);

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.entity.Player;
import net.minestom.server.potion.Potion;
@ -34,10 +34,10 @@ public class PotionCommand extends Command {
return true;
}
private void onPotionCommand(CommandSender sender, Arguments args) {
private void onPotionCommand(CommandSender sender, CommandContext context) {
final Player player = (Player) sender;
final PotionEffect potion = args.get("potion");
final int duration = args.get("duration");
final PotionEffect potion = context.get("potion");
final int duration = context.get("duration");
player.sendMessage(player.getActiveEffects().toString());
player.addEffect(new Potion(

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
@ -16,8 +16,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;
public class ReloadExtensionCommand extends Command {
@ -43,12 +41,12 @@ public class ReloadExtensionCommand extends Command {
addSyntax(this::execute, extension);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
sender.sendMessage("Usage: /reload <extension name>");
}
private void execute(CommandSender sender, Arguments arguments) {
String name = join(arguments.getStringArray("extensionName"));
private void execute(CommandSender sender, CommandContext context) {
String name = join(context.getStringArray("extensionName"));
sender.sendMessage("extensionName = " + name + "....");
ExtensionManager extensionManager = MinecraftServer.getExtensionManager();

View File

@ -1,8 +1,8 @@
package demo.commands;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
import net.minestom.server.entity.EntityType;
@ -31,7 +31,7 @@ public class ShootCommand extends Command {
return true;
}
private void defaultExecutor(CommandSender sender, Arguments args) {
private void defaultExecutor(CommandSender sender, CommandContext context) {
sender.sendMessage("Correct usage: shoot [default/spectral/colored]");
}
@ -39,9 +39,9 @@ public class ShootCommand extends Command {
sender.sendMessage("SYNTAX ERROR: '" + exception.getInput() + "' should be replaced by 'default', 'spectral' or 'colored'");
}
private void onShootCommand(CommandSender sender, Arguments args) {
private void onShootCommand(CommandSender sender, CommandContext context) {
Player player = (Player) sender;
String mode = args.get("type");
String mode = context.get("type");
EntityProjectile projectile;
switch (mode) {
case "default":

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.entity.Player;
import net.minestom.server.utils.Position;
@ -14,7 +14,7 @@ public class TeleportCommand extends Command {
public TeleportCommand() {
super("tp");
setDefaultExecutor((source, args) -> source.sendMessage("Usage: /tp x y z"));
setDefaultExecutor((source, context) -> source.sendMessage("Usage: /tp x y z"));
var posArg = ArgumentType.RelativeVec3("pos");
var playerArg = ArgumentType.Word("player");
@ -23,8 +23,8 @@ public class TeleportCommand extends Command {
addSyntax(this::onPositionTeleport, posArg);
}
private void onPlayerTeleport(CommandSender sender, Arguments args) {
final String playerName = args.get("player");
private void onPlayerTeleport(CommandSender sender, CommandContext context) {
final String playerName = context.get("player");
Player pl = MinecraftServer.getConnectionManager().getPlayer(playerName);
if (pl != null && sender.isPlayer()) {
Player player = (Player) sender;
@ -33,10 +33,10 @@ public class TeleportCommand extends Command {
sender.sendMessage("Teleported to player " + playerName);
}
private void onPositionTeleport(CommandSender sender, Arguments args) {
private void onPositionTeleport(CommandSender sender, CommandContext context) {
final Player player = sender.asPlayer();
final RelativeVec relativeVec = args.get("pos");
final RelativeVec relativeVec = context.get("pos");
final Position position = relativeVec.from(player).toPosition();
player.teleport(position);

View File

@ -3,8 +3,8 @@ package demo.commands;
import net.minestom.server.chat.ChatColor;
import net.minestom.server.chat.ColoredText;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.suggestion.SuggestionEntry;
import static net.minestom.server.command.builder.arguments.ArgumentType.Integer;
@ -17,9 +17,18 @@ public class TestCommand extends Command {
setDefaultExecutor(this::usage);
addSubcommand(new Sub());
var test1 = Word("msg").setSuggestionCallback((sender, context, suggestion) -> {
suggestion.addEntry(new SuggestionEntry("test"));
});
addSyntax((sender, context) -> {
System.out.println("input: " + context.getInput());
}, test1);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
sender.sendMessage("Incorrect usage");
}
@ -28,12 +37,14 @@ public class TestCommand extends Command {
public Sub() {
super("sub");
setDefaultExecutor((sender, context) -> sender.sendMessage("default sub"));
var test1 = Word("msg").setSuggestionCallback((sender, context, suggestion) -> {
final String input = suggestion.getInput();
if (!input.isEmpty()) {
int num = Integer.valueOf(input) * 2;
suggestion.addEntry(new SuggestionEntry(String.valueOf(num), ColoredText.of(ChatColor.RED, "Hover")));
System.out.println("test: "+context.get("msg3"));
System.out.println("test: " + context.get("msg3"));
}
});

View File

@ -6,9 +6,8 @@ import com.google.gson.JsonParser;
import net.minestom.server.chat.ColoredText;
import net.minestom.server.chat.JsonMessage;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.entity.Player;
@ -19,19 +18,19 @@ public class TitleCommand extends Command {
source.sendMessage("Unknown syntax (note: title must be quoted)");
});
Argument content = ArgumentType.String("content");
var content = ArgumentType.String("content");
addSyntax(this::handleTitle, content);
}
private void handleTitle(CommandSender source, Arguments args) {
private void handleTitle(CommandSender source, CommandContext context) {
if (!source.isPlayer()) {
source.sendMessage("Only players can run this command!");
return;
}
Player player = source.asPlayer();
String titleContent = args.get("content");
String titleContent = context.get("content");
player.sendTitleTime(10, 100, 10);
try {

View File

@ -2,8 +2,8 @@ package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
@ -29,12 +29,12 @@ public class UnloadExtensionCommand extends Command {
addSyntax(this::execute, extension);
}
private void usage(CommandSender sender, Arguments arguments) {
private void usage(CommandSender sender, CommandContext context) {
sender.sendMessage("Usage: /unload <extension name>");
}
private void execute(CommandSender sender, Arguments arguments) {
String name = join(arguments.getStringArray("extensionName"));
private void execute(CommandSender sender, CommandContext context) {
String name = join(context.getStringArray("extensionName"));
sender.sendMessage("extensionName = " + name + "....");
ExtensionManager extensionManager = MinecraftServer.getExtensionManager();