Minecraft spigot 插件,多个参数到字符串
Minecraft spigot plugin, multiple args to string
我正在尝试制作玩家可以使用命令更改符号的插件 /signeditor2 edit <Line-number> <text that can have spaces>
但我就是不知道该怎么做。
这是我的代码,但当我使用它时,它只在消息的第一个单词上输入符号。
如何将行号后的所有args连接到一个字符串,然后将字符串放入符号?
public class SignEditor implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
int al = args.length;
if (label.equalsIgnoreCase("SignEditor")) {
if (args[0].equalsIgnoreCase("Edit")){
// player
Player player = (Player) sender;
String Sarg1 = args[1];
int arg1 = Integer.parseInt(Sarg1);
Block b = player.getTargetBlock(null, 10);
if (sender instanceof Player) {
if (player.hasPermission("dg.SignEditor.edit.use")) {
if (args.length > 0 ) {
if (b.getType().name().contains("SIGN")) {
if ((arg1 - 1) > 3 || (arg1 -1 < 0)) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.InvalidLine")));
}
else {
StringBuilder sb = new StringBuilder(args[2]);
for (int i = 2; i < al; i++) {
sb.append(' ').append(args[i]);
}
String sbs = sb.toString();
Block bx = player.getTargetBlockExact(10);
Sign sign = (Sign) bx.getState();
sign.setLine(arg1 - 1, sbs);
sign.update();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Succsessfull")));
}
}
else player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.NoSign")));
return false;
}
if (args.length <= 0) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.NoArguments")));
return false;
}
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.MissingPermissions")));
return true;
}
else
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.OnlyPlayers")));
return false;
}
if (args[0].equalsIgnoreCase("reload")) {
Main.plugin.reloadConfig();
Player player = (Player) sender;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("reload.message")));
}
}
return false;
}
public boolean isNum(String num) {
try {
Integer.parseInt(num);
} catch (Exception e) {
return false;
}
return true;
}
}
由于 Minecraft 解释命令和空格的方式,您应该避免在命令中使用多个参数。
理想情况下,您应该为此输入使用替代方法,例如打开新的标志 GUI 或捕获聊天消息 - spigot wiki this answer
祝插件使用顺利
假设我们有一个名为 args 的字符串数组,其值为 {"edit", "2", "first", "second", "first"}
,如果您键入命令 /signeditor2 edit 2 first second first
,该数组将存在,我们可以在我们的子数组上应用 String.join
方法数组。
String argsToOneString = String.join(" ", Arrays.asList(args).subList(2, 5).toArray(new String[]{}));
当我们打印 argsToOneString
时,我们得到 first second third
。
希望能帮到你,
卢卡
这不是正确的方法。
我要么在 chat/have 中捕获一条消息,只有 1 个参数,然后用空格替换“_”。
"This_is_a_new_line" 变为:"这是一个新行"。
我正在尝试制作玩家可以使用命令更改符号的插件 /signeditor2 edit <Line-number> <text that can have spaces>
但我就是不知道该怎么做。
这是我的代码,但当我使用它时,它只在消息的第一个单词上输入符号。
如何将行号后的所有args连接到一个字符串,然后将字符串放入符号?
public class SignEditor implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
int al = args.length;
if (label.equalsIgnoreCase("SignEditor")) {
if (args[0].equalsIgnoreCase("Edit")){
// player
Player player = (Player) sender;
String Sarg1 = args[1];
int arg1 = Integer.parseInt(Sarg1);
Block b = player.getTargetBlock(null, 10);
if (sender instanceof Player) {
if (player.hasPermission("dg.SignEditor.edit.use")) {
if (args.length > 0 ) {
if (b.getType().name().contains("SIGN")) {
if ((arg1 - 1) > 3 || (arg1 -1 < 0)) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.InvalidLine")));
}
else {
StringBuilder sb = new StringBuilder(args[2]);
for (int i = 2; i < al; i++) {
sb.append(' ').append(args[i]);
}
String sbs = sb.toString();
Block bx = player.getTargetBlockExact(10);
Sign sign = (Sign) bx.getState();
sign.setLine(arg1 - 1, sbs);
sign.update();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Succsessfull")));
}
}
else player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.NoSign")));
return false;
}
if (args.length <= 0) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.NoArguments")));
return false;
}
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.MissingPermissions")));
return true;
}
else
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("Edit.Failed.OnlyPlayers")));
return false;
}
if (args[0].equalsIgnoreCase("reload")) {
Main.plugin.reloadConfig();
Player player = (Player) sender;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7<&6SignEditor&7> " + Main.plugin.getConfig().getString("reload.message")));
}
}
return false;
}
public boolean isNum(String num) {
try {
Integer.parseInt(num);
} catch (Exception e) {
return false;
}
return true;
}
}
由于 Minecraft 解释命令和空格的方式,您应该避免在命令中使用多个参数。
理想情况下,您应该为此输入使用替代方法,例如打开新的标志 GUI 或捕获聊天消息 - spigot wiki this answer
祝插件使用顺利
假设我们有一个名为 args 的字符串数组,其值为 {"edit", "2", "first", "second", "first"}
,如果您键入命令 /signeditor2 edit 2 first second first
,该数组将存在,我们可以在我们的子数组上应用 String.join
方法数组。
String argsToOneString = String.join(" ", Arrays.asList(args).subList(2, 5).toArray(new String[]{}));
当我们打印 argsToOneString
时,我们得到 first second third
。
希望能帮到你,
卢卡
这不是正确的方法。
我要么在 chat/have 中捕获一条消息,只有 1 个参数,然后用空格替换“_”。
"This_is_a_new_line" 变为:"这是一个新行"。