Войти или зарегистрироваться

[РЕШЕНО] Запись данных в кастомный конфиг

Статус
Закрыто для дальнейших ответов.

Zlodey_duo

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
_X_ZLODEY_X_
Не могу записать данные в кастомный конфиг, возникает какая то ошибка при методе set()
Пытался понять как работает это всё по этому создал тестовый плагин PlayerData который записывает ник игрока когда либо заходивший на сервер.

Could not pass event PlayerJoinEvent to PlayerData v1.0.0
me.playerdata.ru.SetDataPlayer.onJoin(SetDataPlayer.java:21)

Понял что ошибка в 21 строке в классе обработчика событий SetDataPlayer

Код в классе SetDataPlayer:
Код:
    private FileConfiguration data = PlayerData.getIstance().data;
 
    [USER=74023]@EventHandler[/USER]
    public void onJoin(PlayerJoinEvent e) {
     
        String name = e.getPlayer().getName();
     
        if(!data.contains("Players." + name)) {
         
            data.set("Players.", name);
            data.set("Players." + name, "BlockBreakCount:");
            data.set("Players." + name + ".BlockBreakCount", 0);
         
            PlayerData.getIstance().saveData();
         
        }else {
            return;
        }
     
    }

Код в главном классе
Код:
private File datacfg = new File(getDataFolder() + File.separator + "data.yml");
public FileConfiguration data = YamlConfiguration.loadConfiguration(datacfg);

//сохранение кастомного конфига

public void saveData() {
        try {
            data.save(datacfg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
А 21-я строка-то какая?
if(!data.contains("Players." + name)) { ?
Значит data у тебя null

P.S. Вместо использования PlayerData.getIstance() рекомендую передавать инстанс PlayerData в конструктор SetDataPlayer. Подробнее о том, чем плох твой вариант, можно почитать тут:
https://rubukkit.org/threads/staticheskie-metody-pri-napisanii-plagina.184996/
и тут:
https://rubukkit.org/threads/pochemu-static-singleton-ploxo-i-kakie-est-puti-reshenija.184953/
 
А 21-я строка-то какая?
if(!data.contains("Players." + name)) { ?
Значит data у тебя null

P.S. Вместо использования PlayerData.getIstance() рекомендую передавать инстанс PlayerData в конструктор SetDataPlayer. Подробнее о том, чем плох твой вариант, можно почитать тут:
https://rubukkit.org/threads/staticheskie-metody-pri-napisanii-plagina.184996/
и тут:
https://rubukkit.org/threads/pochemu-static-singleton-ploxo-i-kakie-est-puti-reshenija.184953/

21 строка -> data.set("Players.", name);

и да, у меня data.yml пустая создаётся, там ничего нету.
Возможно в этом ошибка, но тогда как сделать так чтобы была строка Players: в файле,
методом saveResourse()?
 
21 строка -> data.set("Players.", name);

и да, у меня data.yml пустая создаётся, там ничего нету.
Возможно в этом ошибка, но тогда как сделать так чтобы была строка Players: в файле,
методом saveResourse()?
Не может возникать NullPointerException на этой строке. Проверь ещё раз.
Если бы data была null, то ты бы словил исключение раньше.
Или исключение другое какое-то?
 
Не может возникать NullPointerException на этой строке. Проверь ещё раз.
Если бы data была null, то ты бы словил исключение раньше.
Или исключение другое какое-то?

Если твоё 'Исключение' - это где возникает ошибка, то она возникла на моменте записи set("Players.", name);
и ничего не записывается в этот кастомный конфиг data.yml
Попробую сейчас что нибудь потыкать...
 
Я вообще не понимаю что не так, что то с ивентом.
юзанул другой ивент BlockBreakEvent и почти тот же самый код с PlayerJoinEvent
всё работает, всё записывает...

@EventHandler
public void onBlockBreak(BlockBreakEvent e) {

String name = e.getPlayer().getDisplayName();
int count = base.getInt("Players." + name + "." + "BlockBreakCount");

count++;

base.set("Players." + name + "." + "BlockBreakCount", count);

Stats.getIstance().saveBase();

}
@EventHandler
public void onJoin(PlayerJoinEvent e) {

String name = e.getPlayer().getDisplayName();

if(!base.contains("Players." + name)) {

base.set("Players.", name + "." + "BlockBreakCount");

Stats.getIstance().saveBase();

}else {
return;
}
}

Код немного может отличаться от того что был приведён выше, т.к. сделан в другом плагине.
но суть та же и ошибка та же, в PlayerJoinEvent а именно метод base.set("Players.", name + "." + "BlockBreakCount");
 
base null тебе сказали же. Научись работать с ссылками на объект.
 
Нашёл ошибку...

не правильно использовал метод set()
При заходе на сервер должны были записываться данные о игроке.
base.set("Players.", name + "." + "BlockBreakCount");

Нужно было использовать так: base.set("Players." + name + "." + "BlockBreakCount", 0);
После запятой присваивается значение в моём примере это 0

ТЕМА ЗАКРЫТА!
 
base null тебе сказали же. Научись работать с ссылками на объект.

Мог бы подсказать, ссылки на статьи или ещё что нибудь, а не выёживаться свои умом.
Добродушный человек...
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх