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

Сохранение информации

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

  1. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Привет всем еще раз, в общем у меня есть маленький и простенький код на лайки. И я столкнулся с такой проблемой, что я не знаю как впринципе сохранять какую-то информацию. В моем случае, мне нужно чтобы лайки игрока где-то хранились. Я пробовал через SQLite, но видимо слишком тупой для этого :с
    Был бы очень рад если вы скинете какой-то гайд, или сами расскажете даже самый легкий способ хранения информации, и как ее вывести в чат. Даже json подойдет. Заранее спасибо :)
     
  2. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
  3. NuaN

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

    Баллы:
    96
    Имя в Minecraft:
    NuaN
  4. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Спасибо конфиги помогли, только теперь есть одна проблемка. Мне нужно сделать проверку на то, есть ли ник игрока в записи или нету. Я пробовал следующим кодом, но не получилось. Как это можно сделать?

    Код:

    @EventHandler
    public void handleJoinEvent(PlayerJoinEvent e) {
    Player player = e.getPlayer();
    String playerName = e.getPlayer().getName();
    Integer like = 0;
    String path = String.join(".", "player", playerName, "like");

    String likes = CustomConfig.get().getString("player." + playerName + ".like");
    int likesPlayer = Integer.parseInt(likes);
    Integer likesGet = like + likesPlayer;

    if (path == null) {
    CustomConfig.get().set(path, like);
    CustomConfig.save();
    }
    CustomConfig.get().set(path, likesGet);
    CustomConfig.save();
    }
    }
     
  5. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Для получения int в YamlConfiguration есть метод getInt(), записывай напрямую, незачем складывать и переводить число. Если ты хочешь проверить, есть ли такой путь, то нужно проверять значение, возвращаемое getConfigurationSection() на null
     
  6. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Понял, попробую, спасибо
     
  7. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Попробовал следующий код, все так же не получается. Может я чего не понимаю, можешь скинуть готовые строчки если не сложно?

    Код:

    if (CustomConfig.get().getConfigurationSection("player." + playerName + ".like") == null) {
    CustomConfig.get().set(path, like);
    CustomConfig.save();
    } else {
    CustomConfig.get().set(path, likesGet);
    CustomConfig.save();
    }
     
  8. alexandrage

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

    Баллы:
    173
    В этом нет особого смысла, config.getInt(path, 0) вернет 0, если запись отсутствует.
     
    Последнее редактирование: 20 янв 2022
  9. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Что ты пытаешься сделать?
     
  10. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Есть небольшой плагин на лайки, в конфиге хранятся данные с лайками игроков, они добавляются автоматически при заходе игрока на сервере следующими строками:
    player:
    Nick:
    like: 0

    Но если кто-то поставил игроку лайк и тот игрок перезашел, у него автоматом ставится 0 лайков.
    Я хочу сделать проверку, что если данные с этим игроков уже в конфиге, ничего делать не нужно.
    А если нету данных, то нужно их добавить.

    Данный метод не помог.
     
  11. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Используй эти методы:
    Код:
    public boolean playerRegistered(Player player) {
        return plugin.getConfig().getConfigurationSection("player." + player.getName()) != null;
    }
    
    public int getPlayerLikes(Player player) {
        if(playerRegistered(player)) {
            return plugin.getConfig().getInt("player." + player.getName() + ".like");
        } else {
            plugin.getConfig().set("player." + player.getName() + ".like", 0);
            plugin.saveConfig();
            return 0;
        }
    }
    
    Советую, кстати, сохранять игроков по UUID, а не по никам.
     
  12. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Спасибо, на счет UUID, какие могут быть проблемы если указывать по нику, а не по UUID?
     
  13. alexandrage

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

    Баллы:
    173
    Ты как то неправильно работаешь с конфигами.
     
  14. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Знаю, только учусь )
     
  15. alexandrage

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

    Баллы:
    173
    Можешь попробовать мою реализацию кастомконфигов для новичков.
    https://github.com/alexandrage/Example/blob/master/src/Example/cfg/Configs.java
    https://github.com/alexandrage/Example/blob/master/src/Example/cfg/CustomConfig.java
    Код:
            Configs configs = new Configs(this); //* инстанс конфигов.
            CustomConfig playerConfig = configs.get("playerName or UUID"); //* загрузить или создать конфиг игроку.
            int like = playerConfig.get().getInt("lige", 0); //* получить лайки, по умолчанию 0.
            playerConfig.get().set("lige", like+1); //* прибавить лайк.
            playerConfig.save(); //* записать данные в файл на выходе игрока из игры.
     
    Последнее редактирование: 20 янв 2022
  16. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Игрок может поменять ник через лицензию, например
     
  17. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Спасибо, буду пользоваться
     
  18. Автор темы
    OneLife_Petr

    OneLife_Petr Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Petr_Mirov
    Понял, твой метод сработал, спасибо тебе большое. А то мучился со вчерашнего дня.
     
  19. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    ;)
     

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