Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Работа с файлами.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Slavchik2001, 9 май 2017.

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

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Я начал делать плагин для вывода статистики игрока командой. Столкнулся с такой проблемой:
    я выводил статистику убийств/смертей через getStatistic(Statistic.PLAYER_KILLS), но у меня не получилось сделать так, чтобы можно было просмотреть статистику игрока, который оффлайн. Тогда я подумал и понял, что нужно сохранять всю статистику в определенном файле, чтобы просматривать ее без проблем. Я начинающий, многого не знаю. На рубакките я не нашел тем, где объясняется, как работать с файлами. Так вот. Я хочу, чтобы при первом входе игрока на сервер, в файле создавалась запись вида:
    Код:
    player:
       playername:
         kills:
         deaths:
    
    Ну или что-то подобное, и сделать так, чтобы по умолчанию kills/deaths были равны нулю.

    И следующий вопрос, чтобы не создавать новую тему, звучит так: какой эвент или какое условие нужно поставить, чтобы при убийстве игрока, к определенной переменной добавлялась единица.
    И как сделать, чтобы эту единицу он добавлял в этот файл с игроками. Знаю, вопросы, наверное, глупые, но я новичок, и не смогу сделать это сам.
     
  2. Хостинг MineCraft
    <
  3. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Для таких целей надо SQL использовать, а не кфг
     
  4. Автор темы
    Slavchik2001

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Я новичок, только учусь, поэтому пробую что-то новое.[DOUBLEPOST=1494350619,1494338984][/DOUBLEPOST]Я начал реализовывать по-другому. Я сделал, чтобы при заходе нового игрока создавался файл с его ником. Но я не могу сделать так, чтобы по умолчанию там находились какие-то строки. Также я не знаю, как сделать, чтобы при убийстве игрока в эту строку добавлялась единица при убийстве/смерти. Прошу помощи у вас, опытных кодеров, т.к. мои знания ограничены.
     
  5. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    .set(path, value)
     
  6. Автор темы
    Slavchik2001

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Позже попробую, а, вообще, спасибо за ответ.
     
  7. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Files.copy(from.toPath(), to.toPath(), StandartCopyOption.REPLACE_EXISTING);
    ???
    PROFIT
     
  8. Автор темы
    Slavchik2001

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Это, чтобы копировать значение из стандартного файла?
     
  9. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Да, чтобы по 100500 раз не писать самостоятельно (нужен будет уже один существующий(стандартный файл), чтобы работало)
     
  10. danil2004

    danil2004 Ньюби

    Баллы:
    1
    Почему не работают команды, но пермишенс настроен*
    Я когда выдаю привелегию префикс есть, но команды не работают
     
  11. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Лол, серьёзно?
    world/stats/%uuid%.json
    Статы поданы.
     
  12. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Так ему не из одного мира надо, наверное
     
  13. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    так трудно, наверное, перебрать все папки с мирами, и сложить три числа между собой
     
  14. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    во всяком случае, с бд работать удобнее, чем собирать числа по файликам хер знает где
     
  15. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Внезапно статы хранятся только в основном мире.
     
  16. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    пам пам (рил?) [пошарился по папкам миров и охренел. моя жизнь никогда не станет прежней]
     
  17. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    :confused:
     
  18. Автор темы
    Slavchik2001

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Никогда бы и не подумал об этом. Спасибо. Попробую все)[DOUBLEPOST=1494430649,1494429638][/DOUBLEPOST]Подскажите, как мне это разродить? upload_2017-5-10_19-37-26.png
     
  19. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А че ты копировать собрался?
     
  20. Автор темы
    Slavchik2001

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

    Баллы:
    66
    Имя в Minecraft:
    Slavok2001
    Мне нужно скопировать из стандартного файла строчки, и воткнуть их в файлы, которые создаются при заходе игрока.
     
  21. Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Сам мало в этом разбираюсь, но надеюсь что помог.
    Main.instance. // это через главный класс
    levelsConfig // переменная моего конфига, который находиться в Mian(главный класс).
    Код:
        public void onJoin(final PlayerJoinEvent e) {
            final Player p = e.getPlayer();
            if (!Main.instance.levelsConfig.contains(String.valueOf(p.getName()) + ".level")) {
                Levels.levels.put(p.getName(), 1);
            }
            else {
                Levels.levels.put(p.getName(), Main.instance.levelsConfig.getInt(String.valueOf(p.getName()) + ".level"));
            }
            if (!Main.instance.levelsConfig.contains(String.valueOf(p.getName()) + ".kills")) {
                Levels.kills.put(p.getName(), 0);
            }
            else {
                Levels.kills.put(p.getName(), Main.instance.levelsConfig.getInt(String.valueOf(p.getName()) + ".kills"));
            }
            if (!Main.instance.levelsConfig.contains(String.valueOf(p.getName()) + ".deaths")) {
                Levels.deaths.put(p.getName(), 0);
            }
            else {
                Levels.deaths.put(p.getName(), Main.instance.levelsConfig.getInt(String.valueOf(p.getName()) + ".deaths"));
            }
            p.setMaxHealth((double)(18 + getLevel(p) * 2));
        }
    
        @EventHandler
        public void onQuit(final PlayerQuitEvent e) {
            final Player p = e.getPlayer();
            Main.instance.levelsConfig.set(String.valueOf(p.getName()) + ".level", (Object)Levels.levels.get(p.getName()));
            Main.instance.levelsConfig.set(String.valueOf(p.getName()) + ".kills", (Object)Levels.kills.get(p.getName()));
            Main.instance.levelsConfig.set(String.valueOf(p.getName()) + ".deaths", (Object)Levels.deaths.get(p.getName()));
            Levels.levels.remove(p.getName());
            Levels.kills.remove(p.getName());
            Levels.deaths.remove(p.getName());
            Levels.faction.remove(p.getName());
            Main.instance.saveCustomYml(Main.instance.levelsConfig, Main.instance.levels);
        }
    
    Это для смертей игрока.
    Код:
       public static int getDeaths(final Player p) {
            if (!p.isOnline()) {
                final int deathsAmount = Main.instance.levelsConfig.getInt(String.valueOf(p.getName()) + ".deaths");
                return deathsAmount;
            }
            final int deathsAmount = Levels.deaths.get(p.getName());
            return deathsAmount;
        }
    Вставишь в тот же класс или достанешь через хешьмап.
    Levels.deaths.put(killed.getName(), Levels.deaths.get(killed.getName()) + 1); 
    И конфиг сохранить:
    Код:
    public void saveCustomYml(FileConfiguration ymlConfig, File ymlFile)
      {
        try
        {
          ymlConfig.save(ymlFile);
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
      }
    
     
    Последнее редактирование: 11 май 2017

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