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

Slavchik2001

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

И следующий вопрос, чтобы не создавать новую тему, звучит так: какой эвент или какое условие нужно поставить, чтобы при убийстве игрока, к определенной переменной добавлялась единица.
И как сделать, чтобы эту единицу он добавлял в этот файл с игроками. Знаю, вопросы, наверное, глупые, но я новичок, и не смогу сделать это сам.
 
Для таких целей надо SQL использовать, а не кфг
 
Для таких целей надо SQL использовать, а не кфг
Я новичок, только учусь, поэтому пробую что-то новое.
Я начал реализовывать по-другому. Я сделал, чтобы при заходе нового игрока создавался файл с его ником. Но я не могу сделать так, чтобы по умолчанию там находились какие-то строки. Также я не знаю, как сделать, чтобы при убийстве игрока в эту строку добавлялась единица при убийстве/смерти. Прошу помощи у вас, опытных кодеров, т.к. мои знания ограничены.
 
Я новичок, только учусь, поэтому пробую что-то новое.
Я начал реализовывать по-другому. Я сделал, чтобы при заходе нового игрока создавался файл с его ником. Но я не могу сделать так, чтобы по умолчанию там находились какие-то строки. Также я не знаю, как сделать, чтобы при убийстве игрока в эту строку добавлялась единица при убийстве/смерти. Прошу помощи у вас, опытных кодеров, т.к. мои знания ограничены.
.set(path, value)
 
Это, чтобы копировать значение из стандартного файла?
Да, чтобы по 100500 раз не писать самостоятельно (нужен будет уже один существующий(стандартный файл), чтобы работало)
 
Почему не работают команды, но пермишенс настроен*
Я когда выдаю привелегию префикс есть, но команды не работают
 
так трудно, наверное, перебрать все папки с мирами, и сложить три числа между собой
во всяком случае, с бд работать удобнее, чем собирать числа по файликам хер знает где
 
Сам мало в этом разбираюсь, но надеюсь что помог.
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();
    }
  }
 
Последнее редактирование:
Назад
Верх Низ