Иконка ресурса

Сonfig TLX

Мой конфиг LTX - (github.com) config_tlx
Зачем и для чего я создал?
Первоначально я создавал для своей игры (не мода и не кода), чтобы создать не просто конфиг "ключ = значение" и т.п. строчки, а именно так-же это делается в INI файлах, но всё мне хотелось большего... По этому я хотел сделать, чтобы было похоже на LTX конфиг, но всё-же по своему.
Я недавно выложил код оружия (точнее обновил SMT хранилище) и там использовался этот мой конфиг, по-этому я выкладываю его в таком виде.
Вот эти конфиги которые я использовал - config.zip
И я сделал по своему:
- Пробелы ни где не учитываться, кроме "значения (VALUE)".
Ключ и значение разделяются первым знаком "=". Так-что не забывайте про String#trim().
Ключ и Значение это String, так-чтобы значение превратить String цифру в приметив цифру используете подходящие $.parse$, т.е.:
Код:
int i = Integer.parseInt(value);
float f = Float.parseFloat(value);
double d = Double.parseDouble(value);
- Можно использовать так называемые наследники и их комбинировать:
INI:
[item_1]
name = item_1_name

[item_2]
description=item_2_desc

[item_3]
durabilityMax=3

[item_4]
stackSizeMax=4

[item_all]:item_1:item_2:item_3:item_4
Наследники разделяются знаком ":", не хотел запятыми.
Наследник один перекрывает другого, в данном случаи получилось комбинация секция item_all имеет все 4 параметра.
В случаи если следующем наследнике будет такой-же ключ, то он его заменит.
- Имеются строчные комментарии, которые начинаются с "//" и заканчиваются новой строкой.
- Имеются строчные комментарии, которые начинаются с "/*" и заканчиваются "*/".

- Можно присоединить и другие файлы через "@include" и несколько путей указать через знак ":".
INI:
@include FileNotFound.err//Намеренная ошибка.
@include res\items\test.tlx : res\items\test1.tlx : res\items\test2.tlx : res\items\test3.tlx
Если файла не будет, то в консоле будет ошибка о не найденном файле.
- Как-бы и минус по оптимизации, но всё-же и плюс по функционалу - можно создавать секции в любом порядке.
В LTX нужен был порядок, если к примеру в первой секции был унаследован от второго, который был после первого, то была ошибка о не найденной секции.
- Если в наследниках "exclude", то эта секция не будет обработана для создания чего-либо, но нужна для того, чтобы от него что-либо унаследовано. Можно сказать абстрактная секция (типа как abstract class).
---
Пример использования:
Java:
HandlerConfig.process(new File(modConfigurationDirectory, "/smt/weapon/item/weapon/bullets.tlx"), new HashMap<String, SectionContainer>(), new BulletPC());
Java:
public class BulletPC implements IProcessConfig<BulletDummy> {

    @Override
    public BulletDummy newInstance(final String id) {
        return new BulletDummy();
    }

    @Override
    public void process(final String key, final String value, final BulletDummy item) {
        BulletDummy wpn = (BulletDummy)item;
        if ("name".equals(key)) wpn.name = value;
        else if ("description".equals(key)) wpn.description = value;
        else if ("damage".equals(key)) wpn.damage = Integer.parseInt(value);
        else if ("size".equals(key)) wpn.size = Float.parseFloat(value);
        else if ("speed".equals(key)) wpn.speed = Float.parseFloat(value);
        else if ("weight".equals(key)) wpn.weight = Float.parseFloat(value);
        else if ("effects".equals(key)) {
            wpn.effects = value.split(":");
            for (int i = 0; i < wpn.effects.length; ++i)
                wpn.effects[i] = wpn.effects[i].trim();
        }

    }

    @Override
    public void finish(final BulletDummy bullet, final String id) {
        Reg.bullets.put(id, bullet.toBullet());
    }

}
Java:
public class BulletDummy {

    public String name, description;
    public int damage;
    public float size, speed, weight;
    public String[] effects;
  
    public final Bullet toBullet() {
        return new Bullet(name, description, damage, size, speed, weight, effects);
    }

}
Java:
public class Bullet {

    final String name, description;
    final int damage;
    final float size, speed, weight;
    final String[] effects;

    public Bullet(final String name, final String description,
            final int damage, final float size, final float speed, final float weight, final String[] effects) {
        this.name = name;
        this.description = description;
        this.damage = damage;
        this.size = size;
        this.speed = speed;
        this.weight = weight;
        this.effects = effects;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public int getDamage() {
        return damage;
    }

    public float getSize() {
        return size;
    }

    public float getSpeed() {
        return speed;
    }

    public float getWeight() {
        return weight;
    }

    public String[] getEffects() {
        return effects;
    }

}
---
Думаю я всё описал.
Работает в eclipse на 1.7.10, но думаю и для других версией подойдёт. Главное, чтобы вы правильно работали с этими конфигами.
Автор
timaxa007
Первый выпуск
Обновление
Оценка
4.00 звёзд 1 оценок

Другие ресурсы пользователя timaxa007

Последние рецензии

Круто, наследование секций можно юзать для установки дефолтных значений
Чувствуется нехватка типизации значений, с ней бы IProcessConfig был бы не нужен
Сверху