Мой конфиг LTX - (github.com) config_tlx
Зачем и для чего я создал?
Первоначально я создавал для своей игры (не мода и не кода), чтобы создать не просто конфиг "ключ = значение" и т.п. строчки, а именно так-же это делается в INI файлах, но всё мне хотелось большего... По этому я хотел сделать, чтобы было похоже на LTX конфиг, но всё-же по своему.
И я сделал по своему:
- Пробелы ни где не учитываться, кроме "значения (VALUE)".
Ключ и значение разделяются первым знаком "=". Так-что не забывайте про String#trim().
Ключ и Значение это String, так-чтобы значение превратить String цифру в приметив цифру используете подходящие $.parse$, т.е.:
- Можно использовать так называемые наследники и их комбинировать:
Наследники разделяются знаком ":", не хотел запятыми.
Наследник один перекрывает другого, в данном случаи получилось комбинация секция item_all имеет все 4 параметра.
В случаи если следующем наследнике будет такой-же ключ, то он его заменит.
- Имеются строчные комментарии, которые начинаются с "//" и заканчиваются новой строкой.
- Имеются строчные комментарии, которые начинаются с "/*" и заканчиваются "*/".
- Можно присоединить и другие файлы через "@include" и несколько путей указать через знак ":".
Если файла не будет, то в консоле будет ошибка о не найденном файле.
- Как-бы и минус по оптимизации, но всё-же и плюс по функционалу - можно создавать секции в любом порядке.
- Если в наследниках "exclude", то эта секция не будет обработана для создания чего-либо, но нужна для того, чтобы от него что-либо унаследовано. Можно сказать абстрактная секция (типа как abstract class).
---
---
Думаю я всё описал.
Работает в eclipse на 1.7.10, но думаю и для других версией подойдёт. Главное, чтобы вы правильно работали с этими конфигами.
Зачем и для чего я создал?
Первоначально я создавал для своей игры (не мода и не кода), чтобы создать не просто конфиг "ключ = значение" и т.п. строчки, а именно так-же это делается в INI файлах, но всё мне хотелось большего... По этому я хотел сделать, чтобы было похоже на LTX конфиг, но всё-же по своему.
Я недавно выложил код оружия (точнее обновил SMT хранилище) и там использовался этот мой конфиг, по-этому я выкладываю его в таком виде.
Вот эти конфиги которые я использовал - config.zip
Вот эти конфиги которые я использовал - 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 нужен был порядок, если к примеру в первой секции был унаследован от второго, который был после первого, то была ошибка о не найденной секции.
---
Пример использования:
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, но думаю и для других версией подойдёт. Главное, чтобы вы правильно работали с этими конфигами.