Я реализовал простенький компилятор, который ищет классы в заданной папке + добавляет необходимые импорты и аннотации.
Например пишем исходный файл episodion/SetItemGrp.java с таким содержанием:
PHP код:
@DatFile(value = "SetItemGrp", localizable = true)
@SafePackage
class SetItemGrpDat{
SetItemGrp[] setItemGrp;
}
class SetItemGrp{
int setId;
ItemVariable[] items;
String[] itemBonus;
ItemVariable[] shileds;
String[] shieldBonus;
@IntConst(0)
int unk1;
@IntConst(0)
int unk2;
EnchantBonus[] enchantBonus;
}
class ItemVariable {
int[] itemId;
}
class EnchantBonus{
int level;
String bonus;
}
Вызов компилятора и генерация xml:
PHP код:
File srcFolder = new File("dat");
File outFolder = new File("classes");
new SimpleCompiler(outFolder).compile(srcFolder);
ClassLoader cl = new URLClassLoader(new URL[]{
new File("classes").toURI().toURL()
});
Class clazz = cl.loadClass("episodion.SetItemGrpDat");
Object dat = new L2DatInputStream(
new L2FileInputStream(
new FileInputStream("G:\\Lineage II Kr\\system\\"+ DatNameUtil.getFileName(clazz, "k"))
)
).readObject(clazz);
JAXBContext context = JAXBContext.newInstance(clazz);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty("jaxb.formatted.output", true);
marshaller.marshal(dat, System.out);
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<setItemGrpDat>
<setItemGrp>
<setId>0</setId>
<items>
<itemId>23</itemId>
</items>
<items>
<itemId>2386</itemId>
</items>
<items>
<itemId>43</itemId>
</items>
<itemBonus>세트 효과 없음</itemBonus>
<itemBonus>물리방어력 2% 증가, 최대HP 41 증가.</itemBonus>
<unk1>0</unk1>
<unk2>0</unk2>
</setItemGrp>
...
</setItemGrpDat>
Code: XML
Описывать формат такими простыми классами не намного сложнее ddf.
Cразу получаем маппинг в xml и кучу других плюшек.