【问题标题】:Minecraft spigot plugin, multiple args to stringMinecraft spigot 插件,多个 args 到字符串
【发布时间】:2020-07-12 10:43:34
【问题描述】:

我正在尝试制作插件,玩家可以使用命令/signeditor2 edit <Line-number> <text that can have spaces> 更改符号 但我只是不知道该怎么做。 这是我的代码,但是当我使用它时,它只在消息的第一个单词上输入。 如何将行号后面的所有参数连接到一个字符串,然后将字符串放到符号上?

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;
    }
}

【问题讨论】:

  • 使用调试器时,argssbs 是什么意思?

标签: java minecraft


【解决方案1】:

假设我们有一个名为 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

希望能帮到你

卢卡

【讨论】:

    【解决方案2】:

    你应该避免在命令中使用多个参数,因为 Minecraft 会解释命令和空格。

    理想情况下,您应该为此输入使用另一种方法,例如打开新的标志 GUI 或捕获聊天消息 - spigot wiki 有 this answer

    祝你插件好运

    【讨论】:

      【解决方案3】:

      这不是正确的做法。

      我会在聊天中捕获一条消息/只有一个参数,然后用空格替换“_”。

      “This_is_a_new_line”变为:“这是一个新行”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多