1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Не работает функционал для рангов

Тема в разделе "Разработка плагинов для новичков", создана пользователем DackZz2, 30 апр 2024.

  1. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    Вообще ты можешь и эту реализацию оставить, она просто максимально медленная и не оптимизированная. Она разве не работает? Выведи кол-во киллов киллера и киллов в кфг. Как токо игрок достигнет кол-ва определенных убийств, то выдастся награда. Добавь дебаг после фора: Bukkit.getLogger().info("Игрока: " + killer.getStatistic(Statistic.PLAYER_KILLS) + " | КФГ: " + Main.getInstance().getConfig().getInt("ranks." + key + ".kills"));
     
  2. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Этот код у меня сработал один раз, потом что-то сломалось я хз. Вот только есть одно но - когда игрок убивает другого, то плагин проверяет прошлое значение убийств, а не новое
     
  3. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    Как только игрок умирает, он и смотрит сколько кол-ва убийств у киллера, как только он достигнет 10, 20 - он выдаст награду. Он и будет у тебя работать 1 раз. Скрины консоли в студию.
     
  4. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Нее, я каждый раз менял это количество в конфиге, чтобы тестить
     
  5. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    я пихнул туда дебагов 4 штуки.
    ranks:
    one:
    prefix: "&6Первый"
    kills: 22
    reward: "eco give %player% 1000"
    two:
    prefix: "&6Второй"
    kills: 24
    reward: "eco give %player% 2000"
    При достижении 22 киллов консоль выводит 22 one 22, но действия не происходят, хоть эти значение равны.
    Дальше 23 килла, выводит 23 one 22 two 24. Я вообще не понимаю что происходит
    Код:
    @EventHandler
        public void onPlayerDeath(PlayerDeathEvent event) {
            Player player = event.getEntity();
            Player killer = player.getKiller();
            if (killer != null) {
                int playerKills = killer.getStatistic(Statistic.PLAYER_KILLS) + 1;
                Bukkit.getLogger().info(String.valueOf(playerKills));
                for (String key : Main.getInstance().getConfig().getConfigurationSection("ranks").getKeys(false)) {
                    Bukkit.getLogger().info(key);
                    int requiredKills = Main.getInstance().getConfig().getInt("ranks." + key + ".kills");
                    Bukkit.getLogger().info(String.valueOf(requiredKills));
                    if (playerKills == requiredKills) {
                        killer.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.up").replace("%rank%", rank)));
                        Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), Main.getInstance().getConfig().getString("ranks." + key + ".reward").replace("%player%", killer.getName()));
                        Main.setRank(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
                        Bukkit.getLogger().info(key);
                    }
                }
            }
     
  6. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Продебаж адекватно, чтобы всё было понятно и покажи СКРИН консоли, а то из твоих слов, что там творится - нифига не понятно.


    Код:
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent event) {
            Player player = event.getEntity();
            Player killer = player.getKiller();
            if (killer != null) {
                int playerKills = killer.getStatistic(Statistic.PLAYER_KILLS) + 1;
                
                System.out.println("PlayerKills: " + playerKills);
                
                for (String key : Main.getInstance().getConfig().getConfigurationSection("ranks").getKeys(false)) {
    
                    int requiredKills = Main.getInstance().getConfig().getInt("ranks." + key + ".kills");
    
                    System.out.println("key: " + key + " required: " + requiredKills + " currentKills: " + playerKills + " value: " + (playerKills == requiredKills));
                    
                    if (playerKills == requiredKills) {
                        System.out.println("key: " + key + " used");
                        killer.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.up").replace("%rank%", rank)));
                        Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), Main.getInstance().getConfig().getString("ranks." + key + ".reward").replace("%player%", killer.getName()));
                        Main.setRank(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
                    }
                }
            }
        }
    И будем разбираться дальше
     
  7. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Вот что говорит консоль при достижении первого ранга, но действий всё равно нет
    upload_2024-5-5_13-26-31.png
     
  8. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ну значит выполнился твой код. В чём проблема тогда у тебя?
     
  9. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Я же говорю, действия после проверки if (playerKills == requiredKills) не выполняются
     
  10. BetterLex

    BetterLex Активный участник Пользователь

    Баллы:
    76
    Чёт вы слишком сильно код усложняете. Я бы тупо строку playerkills и строку requiredkills сравнивал. Если playerkills == requiredkills, то выдаём ранг.
     
  11. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    А я по-твоему что сделал?
     
  12. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    у тебя как раз таки консоль говорит, что выполняется всё. Вот эта бы строчка не выводилась у тебя в консоль, если бы условие было б false
    System.out.println("key: " + key + " used");
     
  13. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Я вижу что консоль говорит. После проверки есть 3 действия - отправка сообщения, выполнение команды и выдача ранга, так вот они не выполняются, в этом и проблема
     
  14. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    н
    Значит они у тебя все три не работают)
     
  15. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Вот я и хочу разобраться почему они не работают, я понимаю что это бред, но оно так и есть, они не работают по какой-то причине, хотя там ничего такого и нет
     
  16. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    Выводи в консоль каждые 3 строки и смотри, какие аргументы ты передаешь в методы.
     
  17. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Типа Bukkit.getLogger().info(Main.setRank(Main.getInstance().getConfig().getString("ranks." + key + ".prefix")))
    ?
     
  18. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    Bukkit.getLogger().info(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
     
  19. Автор темы
    DackZz2

    DackZz2 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    Вот я сделал, ничего не выводит
    Код:
    System.out.println(Main.getInstance().getConfig().getString("messages.up").replace("%rank%", rank));
                        System.out.println(Main.getInstance().getConfig().getString("ranks." + key + ".reward").replace("%player%", killer.getName()));
                   System.out.println(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
     
  20. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Почему оно ничего не выводит - та ещё загадка. Ошибок в консоли нет?
     

Поделиться этой страницей