ошибка при вызове определенных строк из карты List‹String› в файле конфигурации 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' определен ранее для ссылки на мой основной класс, в котором определена конфигурация get.

что я ожидаю вывести с player1name как значение args[1] title1 - title2 - title3 -

с действительным именем игрока вместо того, чтобы возвращать титулы, которые есть у игрока, все, что я получаю в чате, это [] -

любая помощь будет принята с благодарностью.


person James Conrad    schedule 16.04.2013    source источник


Ответы (2)


Вам нужно будет перебрать все строки и добавить их в переменную перед отправкой сообщения - что-то вроде (непроверено)

StringBuilder message = new StringBuilder();
for (String player : s)
   message.append(player).append(" - ");
sender.sendMessage(message.toString());
person Evan Knowles    schedule 16.04.2013
comment
в вашем заявлении for на что должен ссылаться игрок? вы не звоните ему потом, так что это неиспользуемая строка? - person James Conrad; 16.04.2013
comment
хорошо попробовал это с вашим кодом там (после вашего редактирования), и теперь я даже не получаю [] - вернулся, он просто печатает пустую строку на экране - person James Conrad; 16.04.2013
comment
Вы уверены, что возвращаются игроки? Попробуйте вывести размер возвращаемого списка. - person Evan Knowles; 16.04.2013
comment
предполагая, что способ сделать это на самом деле sender.sendMessage(Integer.toString(players.length())); тогда он ничего не возвращает или ошибка, просто пустая строка. player — это не опечатка, я переименовал переменную, чтобы не запутаться. - person James Conrad; 16.04.2013
comment
Вам не обязательно отправлять его в виде сообщения, если у вас есть доступная консоль, вы можете использовать System.out.println(players.length()); для его печати. В этом случае Integer.toString не требуется, он будет преобразован автоматически. Если бы в списке не было сообщений, он должен был вернуть 0, поэтому я подозреваю, что может быть ошибка при отправке или чтении сообщения. - person Evan Knowles; 16.04.2013
comment
да нет 0 вообще, вот мой текущий код после предложенных вами изменений, все еще без кода результатов, отредактированного в основном посте, чтобы отразить изменения. - person James Conrad; 16.04.2013
comment
Можете ли вы прикрепить отладчик? - person Evan Knowles; 16.04.2013
comment
Я уверен, что вы, вероятно, имеете в виду что-то большее, чем то, что я сделал, я обновил код для отладки моего результата.. 16.04 07:38:30 [Server] INFO I got to this point pre return 16.04 07:38:30 [Server] INFO I got to this point post message 16.04 07:38:30 [Server] INFO I got to this point pre- list мне это кажется, что он вообще не выполняет оператор for? - person James Conrad; 16.04.2013

API Bukkit также дает вам возможность использовать класс YamlConfiguration и его метод getStringList(), где вы отправляете строку-путь к нужному списку, и он, ну, отправляет вам список. Если бы вы использовали его для этого файла, вам нужна была бы строка вроде

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

И для этого конкретного типа вывода я бы использовал

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

Причина, по которой у вас был этот вывод, заключалась в том, что у вас было (ASet + " - "). ASet при чтении в виде строки выглядит как [title1, title2], и ваш набор был пуст. Кроме того, наличие дефиса рядом с ним вообще не исправит форматирование; следовательно, мои методы замены. Избавьтесь от квадратных скобок, запятых и пробелов и введите то, что вы на самом деле хотели.

person AegisHexad    schedule 24.03.2014