Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Slavchik2001

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

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

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

Назад
Верх