1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите OnPlayerDeath эвент ошибка

Тема в разделе "Разработка плагинов для новичков", создана пользователем N-Games, 26 мар 2020 в 13:04.

  1. Автор темы
    N-Games

    N-Games Ньюби

    Баллы:
    1
    Вот код:
    Код:
    public void onPlayerDeath(PlayerDeathEvent e)
    {
        Player player = e.getEntity().getPlayer();
        Player kill = e.getEntity().getKiller();
        String killer = kill.getPlayer().getName();
        String pl = player.getName();
       
        File cy = new File(Main.jp.getDataFolder(),"p_"+pl+".yml");
        FileConfiguration cc = YamlConfiguration.loadConfiguration(cy);
        File kl = new File(Main.jp.getDataFolder(),"p_"+killer+".yml");
        FileConfiguration kk = YamlConfiguration.loadConfiguration(kl);
        int exp = cc.getInt("Exp");
        int exp2 = kk.getInt("Exp");
        long rand = Math.round((Math.random() * 101) + 50);
        if (exp > 101) {cc.set("Exp", exp - rand); player.sendMessage("§cВы умерли и у вас забрали " + rand + "очков влияния.");}
        kk.set("Exp", exp2 + rand);
        kill.sendMessage("§bВы убили игрока " + player.getName() + ", и получили за это " + rand + "очков влияния.");
        Save.saveCY(cc, cy);
        Save.saveCY(kk, kl);
    }
    Когда умираю нечего не происходит. Вообще. Даже если поменять pl на ник игрока нечего не забирает.
     
  2. Быстрая раскрутка сервера Minecraft
  3. MurlikMurlik

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

    Баллы:
    76
    Аннотацию @EventHandler поставил?
    Слушатель зарегистрировал?
     
  4. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Никогда не работай с файлами в синхронных слушателях эвентов.
    Не стоит работать с YamlConfiguration в синхронных слушателях эвентов.
    Код:
    // Отсутствует аннотация @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e) {
        Player player = e.getEntity().getPlayer();
        Player kill = e.getEntity().getKiller(); // Возможный null
        String killer = kill.getPlayer().getName(); // Возможный NullPointerException
        String pl = player.getName();
    
        File cy = new File(Main.jp.getDataFolder(),"p_"+pl+".yml");
        FileConfiguration cc = YamlConfiguration.loadConfiguration(cy); // Возможный IOException, в итоге пустой файл = нет записей.
        File kl = new File(Main.jp.getDataFolder(),"p_"+killer+".yml");
        FileConfiguration kk = YamlConfiguration.loadConfiguration(kl); // Возможный IOException, в итоге пустой файл = нет записей.
        int exp = cc.getInt("Exp");
        int exp2 = kk.getInt("Exp");
        long rand = Math.round((Math.random() * 101) + 50); // Вместо Math.random() можно использовать Random#nextInt()
        if (exp > 101) {
            cc.set("Exp", exp - rand);
            player.sendMessage("§cВы умерли и у вас забрали " + rand + "очков влияния.");
        }
        kk.set("Exp", exp2 + rand);
        kill.sendMessage("§bВы убили игрока " + player.getName() + ", и получили за это " + rand + "очков влияния.");
        Save.saveCY(cc, cy); // Возможный IOException, из-за чего теряются твои записи.
        Save.saveCY(kk, kl); // Возможный IOException, из-за чего теряются твои записи.
    }
     
  5. Автор темы
    N-Games

    N-Games Ньюби

    Баллы:
    1
    Там была анотация, просто забыл сюда ее написать
     
  6. Автор темы
    N-Games

    N-Games Ньюби

    Баллы:
    1
    Да
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Каждый раз читать файл? Земля пухом.
     
  8. twyhzz

    twyhzz Новичок

    Баллы:
    16
    Скорее всего ты все таки не зарегистрировал слушатель. А так попробуй продебажить метод твой.
     

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