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

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

Сам мало в этом разбираюсь, но надеюсь что помог.
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();
    }
  }
Знакомый говнокод призона...
 
Сам мало в этом разбираюсь, но надеюсь что помог.
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();
    }
  }
Капец, понадобится достаточно много времени, чтобы разобраться мне в коде.
 
Сам мало в этом разбираюсь, но надеюсь что помог.
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();
    }
  }

омг!!!!!!!!!
 
Мне нужно решить два вопроса: как сделать, чтобы при заходе нового игрока создавался файл с нужным содержимым, и как сделать, чтобы при убийстве игрока, киллеру в этот файл добавлялась одна единица в определенную графу, в моем случае "kills". И та же история со смертями. Ну или предложите альтернативу, если вам не сложно. Ведь я новичок, еще многого не знаю, и чтобы не писать "говнокод", хотя даже его я не смогу написать, я спрашиваю у вас. Все когда-то были начинающими, не пишете же вы коды с пеленок.
 
Мне нужно решить два вопроса: как сделать, чтобы при заходе нового игрока создавался файл с нужным содержимым, и как сделать, чтобы при убийстве игрока, киллеру в этот файл добавлялась одна единица в определенную графу, в моем случае "kills". И та же история со смертями. Ну или предложите альтернативу, если вам не сложно. Ведь я новичок, еще многого не знаю, и чтобы не писать "говнокод", хотя даже его я не смогу написать, я спрашиваю у вас. Все когда-то были начинающими, не пишете же вы коды с пеленок.
PlayerDeathEvent =>
Main.getConfig().set(p.getName() + ".kills", Main.getConfig().getInt(p.getName() + ".kills" + 1));
 
Можешь и сразу статик вносить при входе игрока
Так даже лучше.
Подскажи, как опытный кодер, как лучше сделать: Чтобы для каждого игрока свой файл или чтобы данные игроков сохранялись в одном файле?
 
Главное - написать призон. Как, почему, зачем... Неважно! Даже если ты не знаешь, что такое мапы, то да. Почему бы и нет? Одного лаганого нехватает кристаликса, на котором игроки телепортируются назад. То, что pitch, yaw влияет на тп - я вообще молчу...

Спасибо человеку, который нанял 15-и летнего кодера(Kargond).
 
Главное - написать призон. Как, почему, зачем... Неважно! Даже если ты не знаешь, что такое мапы, то да. Почему бы и нет? Одного лаганого нехватает кристаликса, на котором игроки телепортируются назад. То, что pitch, yaw влияет на тп - я вообще молчу...

Спасибо человеку, который нанял 15-и летнего кодера(Kargond).
И к чему ты это? Я просил помощи, а не облить дерьмом.
 
И к чему ты это? Я просил помощи, а не облить дерьмом.
Дерьмом я не обливал, если почитать пару раз, то можно сделать вывод, что лучше не начинать изучение ни одного из языка программирования. А то, что ты еще и с говно призона начинаешь, тебя явно не в правильное русло направит (код там хня).
 
Лол, он же написал что начал писать плагин для статистики.
Дерьмом я не обливал, если почитать пару раз, то можно сделать вывод, что лучше не начинать изучение ни одного из языка программирования. А то, что ты еще и с говно призона начинаешь, тебя явно не в правильное русло направит (код там хня).
Вот тут я несогласен если ты хочешь научиться программировать, не важно на каком языке, ты должен с чего-то начинать. Статьи почитать, книжки или даже видео уроки. В общем суть не в этом, главное то что ты хочешь этому научиться. Даже тот самый Kargon, сколько ему сейчас лет? В одной из моих тем он сам говорил что был не опытен тогда. Неважно как начинающие пишут код, для них уже что-то написанное и рабочоее большое достижение. Главное потом в ближайшим будущем посмотреть на свой код и сказать "какой же я был не опытен тогда".
 
Лол, он же написал что начал писать плагин для статистики.

Вот тут я несогласен если ты хочешь научиться программировать, не важно на каком языке, ты должен с чего-то начинать. Статьи почитать, книжки или даже видео уроки. В общем суть не в этом, главное то что ты хочешь этому научиться. Даже тот самый Kargon, сколько ему сейчас лет? В одной из моих тем он сам говорил что был не опытен тогда. Неважно как начинающие пишут код, для них уже что-то написанное и рабочоее большое достижение. Главное потом в ближайшим будущем посмотреть на свой код и сказать "какой же я был не опытен тогда".
Кинь его профиль
 
Лол, он же написал что начал писать плагин для статистики.

Вот тут я несогласен если ты хочешь научиться программировать, не важно на каком языке, ты должен с чего-то начинать. Статьи почитать, книжки или даже видео уроки. В общем суть не в этом, главное то что ты хочешь этому научиться. Даже тот самый Kargon, сколько ему сейчас лет? В одной из моих тем он сам говорил что был не опытен тогда. Неважно как начинающие пишут код, для них уже что-то написанное и рабочоее большое достижение. Главное потом в ближайшим будущем посмотреть на свой код и сказать "какой же я был не опытен тогда".
Не говори с этим человеком, ему лишь бы кого-то дерьмом облить.
 
Вот держи простенький апи для работы с конфигами.
CustomConfig.java
Java:
package Example;

import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

public class CustomConfig {
  
    private YamlConfiguration yml;
    private File file;
  
    CustomConfig(String name) {
        this.file = new File(Main.plugin().getDataFolder(), name+".yml");
        yml = YamlConfiguration.loadConfiguration(file);
        this.file.getParentFile().mkdirs();
    }
  
    public FileConfiguration get() {
        return yml;
    }
  
    public void save() {
        try {
            yml.save(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
    public void reload() {
        try {
            yml.load(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Configs.java
Java:
package Example;

import java.util.HashMap;
import java.util.Map;

public class Configs {
    private Map<String, CustomConfig> sfg = new HashMap<String, CustomConfig>();

    public CustomConfig get(String name) {
        if(sfg.get(name)==null) add(name);
        return sfg.get(name);
    }

    public Map<String, CustomConfig> getConfigs() {
        return sfg;
    }

    public void add(String name) {
        CustomConfig custom = new CustomConfig(name);
        sfg.put(name, custom);
    }

    public void save(String name) {
        if(sfg.get(name)==null) add(name);
        try {
            sfg.get(name).save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
    public void saveAll() {
        for(String name : sfg.keySet()) {
            save(name);
        }
    }
}
Пример использования в главном класса, условно Main.java
Java:
package Example;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
  
    private static Main instance;
    private static Configs config;
  
    public static Main plugin() {
        return instance;
    }

    public static Configs config() {
        return config;
    }

    @Override
    public void onEnable() {
        instance = this;
        config = new Configs();
    }
  
    @Override
    public void onDisable() {
        config.saveAll();
    }
}
Работа с конфигом до некуда простая.
Получить-создать конфиг игрока.
CustomConfig cfg = Main.config().get(username);
Записать патч с именем kills со значением 10 .
cfg.get().set("kills", 10);
Сохранить в файл когда нужно. Не обязательно saveAll() в onDisable сохраняет все загруженные конфиги при остановке сервера.
cfg.save();
Прочитать патч с именем kills. "0" как дефольтный аргумент, если записи еще нет.
cfg.get().get("kills", "0");
 

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

Назад
Верх