您将如何向命令添加可选参数?
How exactly would you add optional arguments to a command?
我正在尝试提供向我的一些命令添加可选参数的选项,这只是示例中的一个:
public class CommandHug implements CommandExecutor {
String MessageHugPrefix;
String MessageHugEmote;
String MessageNoPermission;
public CommandHug() {
this.MessageHugPrefix = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugPrefix"));
this.MessageHugEmote = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugEmote"));
this.MessageNoPermission = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.NoPermission"));
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("hug")) {
if (!sender.hasPermission("netsync.fun")) {
sender.sendMessage(String.valueOf(this.MessageNoPermission));
} else
for (Player players : Bukkit.getOnlinePlayers()) {
if (args.length == 0) {
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!", 7, 50, 7);
} else {
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + args[1] + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + args[1] + " hugged you!", 7, 50, 7);
}
}
}
return true;
}
}
这是一个名为 /hug 的命令,它会在聊天中发送一条消息,说明发件人拥抱了他们,或者发件人可以在拥抱所有人的命令后添加其他玩家的用户名/随机参数。唯一的问题是,当我在测试服务器上尝试 运行 /hug 命令时,它实际上什么也没做,控制台没有错误,聊天没有输出,没有消息/标题发送给玩家;没有。这些字符串已经在配置文件中定义,并且可以正确提取。知道哪里出了问题吗?
其实还是比较容易的。首先设置这个可选值的任何变量的默认值。然后添加一个条件语句,如果参数长度大于 0,则更改该默认值。在你给我的例子中,这是如何完成的:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("hug")) {
if (!sender.hasPermission("netsync.fun")) {
sender.sendMessage(String.valueOf(this.MessageNoPermission));
} else
for (Player players : Bukkit.getOnlinePlayers()) {
// this is the default value
Player target = (Player) sender;
// if the argument length is greater the 0, set the value of "target" to args[1]
if (args.length > 0) {
Player target = Bukkit.getPlayerExact(args[1]);
// its a good idea to make sure that the player exists by running a null check
if (player == null) {
players.sendMessage("Player not found!");
}
}
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + player.getName() + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + player.getName() + " hugged you!", 7, 50, 7);
}
}
}
return true;
}
我正在尝试提供向我的一些命令添加可选参数的选项,这只是示例中的一个:
public class CommandHug implements CommandExecutor {
String MessageHugPrefix;
String MessageHugEmote;
String MessageNoPermission;
public CommandHug() {
this.MessageHugPrefix = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugPrefix"));
this.MessageHugEmote = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugEmote"));
this.MessageNoPermission = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.NoPermission"));
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("hug")) {
if (!sender.hasPermission("netsync.fun")) {
sender.sendMessage(String.valueOf(this.MessageNoPermission));
} else
for (Player players : Bukkit.getOnlinePlayers()) {
if (args.length == 0) {
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!", 7, 50, 7);
} else {
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + args[1] + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + args[1] + " hugged you!", 7, 50, 7);
}
}
}
return true;
}
}
这是一个名为 /hug 的命令,它会在聊天中发送一条消息,说明发件人拥抱了他们,或者发件人可以在拥抱所有人的命令后添加其他玩家的用户名/随机参数。唯一的问题是,当我在测试服务器上尝试 运行 /hug 命令时,它实际上什么也没做,控制台没有错误,聊天没有输出,没有消息/标题发送给玩家;没有。这些字符串已经在配置文件中定义,并且可以正确提取。知道哪里出了问题吗?
其实还是比较容易的。首先设置这个可选值的任何变量的默认值。然后添加一个条件语句,如果参数长度大于 0,则更改该默认值。在你给我的例子中,这是如何完成的:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("hug")) {
if (!sender.hasPermission("netsync.fun")) {
sender.sendMessage(String.valueOf(this.MessageNoPermission));
} else
for (Player players : Bukkit.getOnlinePlayers()) {
// this is the default value
Player target = (Player) sender;
// if the argument length is greater the 0, set the value of "target" to args[1]
if (args.length > 0) {
Player target = Bukkit.getPlayerExact(args[1]);
// its a good idea to make sure that the player exists by running a null check
if (player == null) {
players.sendMessage("Player not found!");
}
}
players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + player.getName() + " hugged you!");
players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + player.getName() + " hugged you!", 7, 50, 7);
}
}
}
return true;
}