【问题标题】:error calling specific strings from a List<String> Map in a bukkit config file从 bukkit 配置文件中的 List<String> Map 调用特定字符串时出错
【发布时间】:2013-04-16 10:33:27
【问题描述】:

我对编码很陌生。 我已经尝试了所有方法。我可以考虑尝试获取存储在我的配置中的标题列表,以作为消息发送给播放器,但我没有尝试过任何工作。

引用的当前配置设置

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' 是前面定义的,以引用我在其中定义 get config 的主类。

我希望以player1name 作为args[1] 值输出的内容 title1 - title2 - title3 -

使用有效的玩家名称而不是返回玩家拥有的头衔,我被发送到聊天室的只是 [] -

任何帮助将不胜感激。

【问题讨论】:

    标签: java config minecraft bukkit


    【解决方案1】:

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

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

    【讨论】:

    • 在你的 for 声明中玩家应该引用什么?之后你没有调用它,所以它是一个未使用的字符串?
    • 好的,用你的代码试了一下(在你编辑之后),现在我什至没有得到 [] - 返回它只是在屏幕上打印一个空白行
    • 你确定有玩家被退回?尝试输出返回列表的大小。
    • 假设这样做的方法实际上是 sender.sendMessage(Integer.toString(players.length()));那么它不会返回任何内容或错误,只是一个空白行。玩家不是错字,我重命名了变量以减少对我的混淆。
    • 您不一定需要将其作为消息发送,如果您有可用的控制台,您可以使用System.out.println(players.length()); 打印它。在这种情况下不需要Integer.toString,它将自动转换。如果列表中没有消息,那么它应该返回 0,所以这让我怀疑在发送或读取消息时可能存在错误。
    【解决方案2】:

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

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

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

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

    你有这个输出的原因是因为你有(ASet + " - ")。读取为字符串时的 ASet 看起来像 [title1, title2] 并且您的集合是空的。此外,在它旁边有破折号根本不会纠正格式。因此我的替换方法。去掉方括号、逗号和空格,加入你真正想要的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2022-07-31
      • 2016-06-20
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多