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

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

Статус
Закрыто для дальнейших ответов.

123f

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

Вопрос:
Как осуществить проверку блока на наличие в конфиге?
В частности как читать из конфига неизвестный ключ?
 
Я бы не стал использовать конфиг для проверки, это неудобно. Конфиг - только для сохранения.

Можно создать 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()
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх