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

Помогите Конфиг

Тема в разделе "Разработка плагинов для новичков", создана пользователем 123f, 8 май 2013.

Статус темы:
Закрыта.
  1. Автор темы
    123f

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

    Баллы:
    88
    Skype:
    ragnazarich
    Имя в Minecraft:
    HA4AJibHuK
    Есть конфиг пример:
    Код:
    detector:
      'f1':
        x: 100
        y: 64
        z: 200
      'f2':
        x: 150
        y: 64
        z: 250
    Командой /detect add <name>
    в конфиг дописывается xyz блока в сегмент <name>
    Каждый раз когда игрок ломает блок, проверяется есть ли этот блок в конфиге
    Количество ключей в сегменте detect неизвестно (добавляются пользователем)

    Вопрос:
    Как осуществить проверку блока на наличие в конфиге?
    В частности как читать из конфига неизвестный ключ?
     
  2. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Я бы не стал использовать конфиг для проверки, это неудобно. Конфиг - только для сохранения.

    Можно создать Set<Block> blocks = new HashSet<Block>();
    Здесь "хранятся" блоки, которые нужны.

    Проверка входит ли в этот Set блои b тогда будет осущствляться так:
    if (blocks.contains(b)) {......}

    (я правда создал бы отдельный класс объединяющий координаты и название мира и использовал бы его вместо Block)
    в него записываешь блоки.

    Set соответственно сохраняешь файл или в конфиг. Set не очень удобно сохранять в конфиг, конфигу нужен уникальный ключ для записи. Но с точки зрения удобства работы - все преимущества на стороне конфига.
    Поэтому можно сохранять, допустим так:
    Код:
        public void saveBlocks(){
            try {
                File f = new File (plg.getDataFolder()+File.separator+"имя файла.yml");
                if (f.exists()) f.delete();
                if (blocks.size()>0){
                    f.createNewFile();
                    YamlConfiguration cfg = new YamlConfiguration();
                    int num = 1;
                    for (Block b : blocks){
                        i++;
                        COPhoto ph = album.get(id);
                        cfg.set("detector.f"+Integer.toString(i)+".world", b.getWorld().name());
                        cfg.set("detector.f"+Integer.toString(i)+".x", b.getX());
                        cfg.set("detector.f"+Integer.toString(i)+".y", b.getY);
                        cfg.set("detector.f"+Integer.toString(i)+".z", b.getZ());
                    }
                }
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    
    Ну и читаем обратно:

    Код:
        public void loadBlocks(){
            try {
                File f = new File (plg.getDataFolder()+File.separator+"имя файла.yml");
                if (f.exists()){
                    blocks.clear();
                    YamlConfiguration cfg = new YamlConfiguration();
                    cfg.load(f);
                    for (String str_id : cfg.getKeys(true)){
                        if (str_id.matches("detector.f[0-9]*")) {
                            World w = Bukkit.getServer().getWorld(cfg.getString(str_id+".world"));
                            if (w == null) continue;
                            int x = cfg.getInt(str_id+".x");
                            int y = cfg.getInt(str_id+".y");
                            int z = cfg.getInt(str_id+".z");
                            Block b = w.getBlockAt(x, y, z);
                            blocks.put (b);
                        }
                    }
                }
            } catch (Exception e){
            }
        }
    P.S. Код писал прямо тут, потому наверняка где-то что-то не так.
    Ну и если нужен стандартный конфиг плагина, то убирай везде cfg и меняй на getConfig()
     
Статус темы:
Закрыта.

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