PlaceHolderAPI不起作用

时间:2016-08-16 14:41:55

标签: java minecraft bukkit

作为我的插件的一部分,我有一个清晰的聊天命令,在空白消息的末尾有一个显示文本的选项。我的问题是PlaceHolderAPI无法正常工作。

命令代码:

if (label.equalsIgnoreCase("clearchat") || label.equalsIgnoreCase("mcc")) {
    if (p.hasPermission("mystic.chat.admin.clearchat")) {
        for (int i = 0; i < getConfig().getInt("clearChat.blankLines"); i++) {
            Bukkit.broadcastMessage(" ");
        }
        for (String s : getConfig().getStringList("clearChat.endMessage")) {
            s = PlaceholderAPI.setPlaceholders(p, s);
            // This is here to check if the PlaceHolderAPI even knows there is place holders in it
            p.sendMessage(String.valueOf(PlaceholderAPI.containsPlaceholders(s)));
            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', s));

        }
        return true;
    } else {
        p.sendMessage(ChatColor.RED + "You are lacking the required permission node!");
        return true;
    }
}

配置文件部分:

clearChat:
  blankLines: 256
  endMessage:
  - '&bChat was cleared by %player_name%'

当我运行命令“/ mcc”或“/ clearchat”时,它总是说错(因为没有识别任何占位符)并且没有任何占位符被替换。

我确实在构建路径中正确使用了API,并且命令字完全没有,除了占位符没有转换。

我觉得好像我犯了一个愚蠢的错误,或者我这样做完全错误的方式......

2 个答案:

答案 0 :(得分:0)

你不应该使用p.getName()来使用另一个api,然后使用String.replace替换%name%

答案 1 :(得分:0)

您使用的API错误 你这样做了

s = PlaceholderAPI.setPlaceholders(p, s);

如果没有占位符只是用try{} catch (Exception e)围绕该行,API会抛出错误,然后将其发送给播放器

p.sendMessage(s);

不需要String.valueOf(s),因为API [期望]返回一个String,无论如何设置String s = PlaceholderAPI.setPlaceholders(p, s);会将那里的任何对象转换为字符串。