Вопрос Получаю лишь данные из 1-й секции

Ght

Пользователь
Сообщения
157
Решения
11
Config.yml
YAML:
Payday-perm:
  Doctor:
    Permission: "payday.doctor"
    Pay: 150
    message: "&a%player_name% &f| Вы получили степендию в размере &a"
    every-time: 10
  Student:
    Permission: "payday.student"
    Pay: 400
    message: "&a%player_name% &f| Вы получили степендию в размере &a"
    every-time: 10
  Police:
    Permission: "payday.plice"
    Pay: 50
    message: "&a%player_name% &f| Вы получили зарплату в размере &a"
    every-time: 10
Столкнулся с такой замечательной проблемой. Видно лишь первую секцию "Doctor" секции ниже он не воспринимает)
Выдаю себе payday.doctor он видит и выдаёт. Но как только я меня его на payday.student. Пишет что я нигде не работаю. То есть он не видет в конфиге эту секцию) Ну или не обрабатывает.

Code

Java:
    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String arg, @NotNull String[] args) {
        String unwork = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("message-unwork"));
        Player p = (Player) sender;
        sender = p.getPlayer();
        ConfigurationSection playerSection = Config.getConfig().getConfigurationSection("Payday-perm");
        for (String key : playerSection.getKeys(false)) {
            ConfigurationSection givemoneyX = playerSection.getConfigurationSection(key);
            String dostup = ChatColor.translateAlternateColorCodes('&' , givemoneyX.getString(".Permission"));
            String msg = ChatColor.translateAlternateColorCodes('&' , givemoneyX.getString(".message"));
            int money = givemoneyX.getInt(".Pay");

            msg = PlaceholderAPI.setPlaceholders(p.getPlayer(),msg);


            if (args.length == 0) {
                p.sendMessage(ChatColor.RED + "Sorry. Usage /payday get");
                return true;
            }
            if (args[0].equalsIgnoreCase("get") && p.hasPermission(dostup)) {
                try {
                    Economy.add(p.getName(), money);
                    p.sendMessage(msg + money);
                } catch (UserDoesNotExistException | MaxMoneyException | NoLoanPermittedException e) {
                    throw new RuntimeException(e);
                }
            } else {
                p.sendMessage(unwork);
                return true;
            }
            return true;
        }
        return true;
    }
 
Решение
секции ниже он не воспринимает
Потому что вы обрываете цикл.

else { p.sendMessage(unwork); return true; }
Вам надо придумать что-то другое вместо этого.
Например, перед циклом завести переменную типа boolean с названием work, инициализированная в false, при выдаче чего-то там изменять её на true, в else поменять на переход к следующему ключу else { continue; }
И после цикла сделать проверку на work, если оно false, значит выводить сообщение о том, что игрок не работает.
секции ниже он не воспринимает
Потому что вы обрываете цикл.

else { p.sendMessage(unwork); return true; }
Вам надо придумать что-то другое вместо этого.
Например, перед циклом завести переменную типа boolean с названием work, инициализированная в false, при выдаче чего-то там изменять её на true, в else поменять на переход к следующему ключу else { continue; }
И после цикла сделать проверку на work, если оно false, значит выводить сообщение о том, что игрок не работает.
 
Потому что вы обрываете цикл.


Вам надо придумать что-то другое вместо этого.
Например, перед циклом завести переменную типа boolean с названием work, инициализированная в false, при выдаче чего-то там изменять её на true, в else поменять на переход к следующему ключу else { continue; }
И после цикла сделать проверку на work, если оно false, значит выводить сообщение о том, что игрок не работает.
Спасибо, всё починилось
Объединено

можно было сделать легче,
p.sendMessage(unwork);
вынести за цикл
 
Последнее редактирование:
Назад
Сверху Снизу