Ну что же, получили мы ConfigurationLoader
, что же дальше?
Всё просто! Нам нужно загрузить конфиг в память. Делается это с помощью метода load()
. load()
возвращает корневую ноду конфига.
CommentedConfigurationNode defaultWayNode = localLoader.load();
А вот с CommentedConfigurationNode
можно работать как с простым деревом.
Давайте что-нибудь сделаем с CommentedConfigurationNode
.
defaultWayNode.getNode("test", "node").setValue(true);
(Примечание: комментарий можно указать с помощью метода .setComment(String)
Что же произойдет? Давайте сохраним корневую ноду и посмотрим, что там появилось.
localLoader.save(defaultWayNode);
test {
node=true
}
Уже неплохо, получить значение ноды из конфига можно так:
defaultWayNode.getNode("test", "node").getValue();
Если нода по пути test -> node
не задана, то вернётся null
.
Чтобы избежать этого, можно передать значение по-умолчанию. Делается это так:
defaultWayNode.getNode("test", "node").getValue(true);
Примечание: как сразу сохранять значения по-умолчанию я объясню в конце.(Блок: "Краткое описание ConfigurationOptions
)
А если нам нужно сохранить и получить какой-то список?
Делается это вот так:
List<String> strings = new ArrayList<>();
strings.add("Sanya");
strings.add("Dima");
strings.add("Sergey");
strings.add("Sasha");
strings.add("Nastya");
strings.add("Olya");
defaultWayNode.getNode("names").setValue(strings);
localLoader.save(defaultWayNode); // Сохраняем в конфиг, лучше всего это делать во время выключения плагина
logger.info(String.valueOf(defaultWayNode.getNode("names").getList(TypeToken.of(String.class))));
В конфиге будет это
names=[
Sanya,
Dima,
Sergey,
Sasha,
Nastya,
Olya
]
В этом примере мы видим TypeToken
. Для чего он? Он нужен для указания конкретного класса, если бы мы его не указали, мы бы получили не List<String>
, а List<?>
.
Рветесь в бой? Давайте сохраним зачарованныйItemStack
:
Код
ItemStack sword = ItemStack.of(ItemTypes.DIAMOND_SWORD, 1);
EnchantmentData enchantmentData = sword.getOrCreate(EnchantmentData.class).get();
enchantmentData.addElement(ItemEnchantment.of(Enchantments.FIRE_ASPECT, 1));
enchantmentData.addElement(ItemEnchantment.of(Enchantments.SHARPNESS, 1000));
sword.offer(enchantmentData);
defaultWayNode.getNode("mySword").setValue(TypeToken.of(ItemStack.class), sword);
Давайте посмотри на конфиг:
Конфиг
mySword {
ContentVersion=1
Count=1
ItemType="minecraft:diamond_sword"
UnsafeDamage=0
UnsafeData {
ench=[
{
id=20
lvl=1
},
{
id=16
lvl=1000
}
]
}
}
ench
- массив с ID зачарвоаний.
ItemType
- id предмета(не цифровой!)
Count
- кол-во
ContentVersion
- нужно для внутренних нужд(конвертация старых конфигов в новые)
UnsafeDamage
- дамаг ItemStack.(в minecraft 1.13 будет удален)
Получить ItemStack
можно так:
ItemStack mySword = defaultWayNode.getNode("mySword").getValue(TypeToken.of(ItemStack.class));