Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Я немного изменил код и добавил дебаг, при первом выводит one, при втором выводит two
ranks:
one:
prefix: "&6Первый"
kills: 10
reward: "eco give %player% 1000"
two:
prefix: "&6Второй"
kills: 20
reward: "eco give %player% 2000"
Код:
@EventHandler
    public void onPlayerDeath(PlayerDeathEvent event) {
        Player player = event.getEntity();
        Player killer = player.getKiller();
        if (killer != null) {
            for (String key : Main.getInstance().getConfig().getConfigurationSection("ranks").getKeys(false)) {
                Bukkit.getLogger().info("Checking key: " + key);
                if (killer.getStatistic(Statistic.PLAYER_KILLS) == Main.getInstance().getConfig().getInt("ranks." + key + ".kills")) {
                    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"));
                    Main.setRank(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
                    Bukkit.getLogger().info("Action performed for key: " + key);
                    break;
                }
            }
        }
    }
Вообще ты можешь и эту реализацию оставить, она просто максимально медленная и не оптимизированная. Она разве не работает? Выведи кол-во киллов киллера и киллов в кфг. Как токо игрок достигнет кол-ва определенных убийств, то выдастся награда. Добавь дебаг после фора: Bukkit.getLogger().info("Игрока: " + killer.getStatistic(Statistic.PLAYER_KILLS) + " | КФГ: " + Main.getInstance().getConfig().getInt("ranks." + key + ".kills"));
 
Вообще ты можешь и эту реализацию оставить, она просто максимально медленная и не оптимизированная. Она разве не работает? Выведи кол-во киллов киллера и киллов в кфг. Как токо игрок достигнет кол-ва определенных убийств, то выдастся награда. Добавь дебаг после фора: Bukkit.getLogger().info("Игрока: " + killer.getStatistic(Statistic.PLAYER_KILLS) + " | КФГ: " + Main.getInstance().getConfig().getInt("ranks." + key + ".kills"));
Этот код у меня сработал один раз, потом что-то сломалось я хз. Вот только есть одно но - когда игрок убивает другого, то плагин проверяет прошлое значение убийств, а не новое
 
Этот код у меня сработал один раз, потом что-то сломалось я хз. Вот только есть одно но - когда игрок убивает другого, то плагин проверяет прошлое значение убийств, а не новое
Как только игрок умирает, он и смотрит сколько кол-ва убийств у киллера, как только он достигнет 10, 20 - он выдаст награду. Он и будет у тебя работать 1 раз. Скрины консоли в студию.
 
Как только игрок умирает, он и смотрит сколько кол-ва убийств у киллера, как только он достигнет 10, 20 - он выдаст награду. Он и будет у тебя работать 1 раз. Скрины консоли в студию.
Нее, я каждый раз менял это количество в конфиге, чтобы тестить
 
Как только игрок умирает, он и смотрит сколько кол-ва убийств у киллера, как только он достигнет 10, 20 - он выдаст награду. Он и будет у тебя работать 1 раз. Скрины консоли в студию.
я пихнул туда дебагов 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);
                }
            }
        }
 
я пихнул туда дебагов 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);
                }
            }
        }
Продебаж адекватно, чтобы всё было понятно и покажи СКРИН консоли, а то из твоих слов, что там творится - нифига не понятно.


Код:
    @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"));
                }
            }
        }
    }

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


Код:
    @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"));
                }
            }
        }
    }

И будем разбираться дальше
Вот что говорит консоль при достижении первого ранга, но действий всё равно нет
upload_2024-5-5_13-26-31.png
 
Чёт вы слишком сильно код усложняете. Я бы тупо строку playerkills и строку requiredkills сравнивал. Если playerkills == requiredkills, то выдаём ранг.
 
Я же говорю, действия после проверки if (playerKills == requiredKills) не выполняются
у тебя как раз таки консоль говорит, что выполняется всё. Вот эта бы строчка не выводилась у тебя в консоль, если бы условие было б false
System.out.println("key: " + key + " used");
 
у тебя как раз таки консоль говорит, что выполняется всё. Вот эта бы строчка не выводилась у тебя в консоль, если бы условие было б false
System.out.println("key: " + key + " used");
Я вижу что консоль говорит. После проверки есть 3 действия - отправка сообщения, выполнение команды и выдача ранга, так вот они не выполняются, в этом и проблема
 
н
Я вижу что консоль говорит. После проверки есть 3 действия - отправка сообщения, выполнение команды и выдача ранга, так вот они не выполняются, в этом и проблема
Значит они у тебя все три не работают)
 
н

Значит они у тебя все три не работают)
Вот я и хочу разобраться почему они не работают, я понимаю что это бред, но оно так и есть, они не работают по какой-то причине, хотя там ничего такого и нет
 
Вот я и хочу разобраться почему они не работают, я понимаю что это бред, но оно так и есть, они не работают по какой-то причине, хотя там ничего такого и нет
Выводи в консоль каждые 3 строки и смотри, какие аргументы ты передаешь в методы.
 
Bukkit.getLogger().info(Main.getInstance().getConfig().getString("ranks." + key + ".prefix"));
Вот я сделал, ничего не выводит
Код:
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"));
 
Вот я сделал, ничего не выводит
Код:
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"));
Почему оно ничего не выводит - та ещё загадка. Ошибок в консоли нет?
 

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

Назад
Верх