错误从bukkit配置文件中的List <string> Map调用特定字符串</string>

时间:2013-04-16 10:33:28

标签: java config minecraft bukkit

我对编码很新。 我已经尝试了所有的东西。我可以想到尝试获取存储在我的配置中的标题列表,以便作为消息发送给播放器,而我尝试过的任何工作都没有。

当前配置设置已引用

players:
    player1name:
        - title1
        - title2
        - title3
    player2name:
        - title1
        - title3

调用发送消息代码行

    if (args.length == 2) {
                        try {
                        // insert code here to display titles list available
                        // to
                        // player
                        Player p = Bukkit.getPlayer(args[1]);
                        if (p == null) {
                            sender.sendMessage("Could Not Find Player!!");
                            return true;
                        }
                        Bukkit.broadcastMessage("I got to this point pre- list");
                        List<String> s = this.Ach.getConfig()
                                .getStringList("players." + p + "titles");

                        StringBuilder message = new StringBuilder();
                        Bukkit.broadcastMessage("I got to this point post message");
                        for (String players : s) {

                            message.append(players).append(" - ");
                        Bukkit.broadcastMessage("I got to this point post for");

                        sender.sendMessage(message.toString()); // (message.toString());
                        } 

                        // Set<String> keys =
                        // this.Ach.getConfig().getConfigurationSection("player."
                        // + p + "titles").getKeys(false);
                        // sender.sendMessage(keys + " - ");
                        Bukkit.broadcastMessage("I got to this point pre return");
                        return true;}
                        catch (Exception e) {
                            e.printStackTrace();
                        }

之前定义的'Ach'是为了引用我的主类,即在。中定义了配置。

我期望以player1name作为args[1]值输出 title1 - title2 - title3 -

使用有效的玩家名称而不是返回玩家拥有的标题,我将被发送到聊天中 [] -

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要遍历所有字符串并在发送消息之前将它们添加到变量中 - 类似于(未经测试的)

StringBuilder message = new StringBuilder();
for (String player : s)
   message.append(player).append(" - ");
sender.sendMessage(message.toString());

答案 1 :(得分:0)

Bukkit API还为您提供了使用YamlConfiguration类及其getStringList()方法的选项,您可以在其中将字符串路径发送到所需的列表,然后将列表发送给您。 如果你将它用于该文件,你会想要一个像

这样的行
List<String> titlesList = this.Ach.getStringList("players." + sender.getName());

对于那个特定的输出类型,我会使用

sender.sendMessage(titlesList.toString().replace("[", "").replace("]", "").replace(", ", " - ");

您输出该输出的原因是因为您有(ASet + " - ")。当作为字符串读取时,ASet看起来像[title1, title2]并且您的集合为空。此外,在它旁边使用短划线根本不会纠正格式;因此我的替换方法。摆脱方括号,逗号和空格,以及你真正想要的东西。