fromgate
Administrator
Сегодня я сделал с классом конфиг в Nukkit'е то, что давно хотел.
Во-первых, был создан отдельный класс ConfigSection - он основа на LinkedHashMap (раньше весь конфиг был построен именно на нём), который является основой для построения всего конфигуратора.
Во-вторых, в Config были добавлены конструкторы и методы, позволяющие использовать его без привязки к конкретному файлу. Раньше, чтобы обращаться к конфигурации сохранённой в виде ресурса в jar-файл, приходилось всё равно использовать файл, который создавался автоматические вне зависимости от того нужен он Вам или нет.
Ну и важно: обеспечена полная совместимость с предыдущей версией классов Config и SimpleConfig. Т.е. Ваши плагины продолжат работу без изменений.
Ну а главное для чего это делалось — это значительное упрощение работы с конфигами, которые не имеют однозначно определяемого набора ключей (к примеру, в качестве ключа выступает имя игрока или имя региона и т.п.).
Допустим, что у Вас в config.yml хранятся данные вида:
Т.е. элементом конфигурации players является секция с неопределённым набором ключей - "players.<имяИгрока>.mana".
Когда имя игрока известно - проблем получить значение не возникнет. А если нужно просто получить список всех значений?
Вот варианты:
Собственно, пример говорит сам за себя.
Во-первых, был создан отдельный класс ConfigSection - он основа на LinkedHashMap (раньше весь конфиг был построен именно на нём), который является основой для построения всего конфигуратора.
Во-вторых, в Config были добавлены конструкторы и методы, позволяющие использовать его без привязки к конкретному файлу. Раньше, чтобы обращаться к конфигурации сохранённой в виде ресурса в jar-файл, приходилось всё равно использовать файл, который создавался автоматические вне зависимости от того нужен он Вам или нет.
Ну и важно: обеспечена полная совместимость с предыдущей версией классов Config и SimpleConfig. Т.е. Ваши плагины продолжат работу без изменений.
Ну а главное для чего это делалось — это значительное упрощение работы с конфигами, которые не имеют однозначно определяемого набора ключей (к примеру, в качестве ключа выступает имя игрока или имя региона и т.п.).
Допустим, что у Вас в config.yml хранятся данные вида:
Code:
players:
fromgate:
mana: 100
bob:
mana: 10
john:
mana: 30
Когда имя игрока известно - проблем получить значение не возникнет. А если нужно просто получить список всех значений?
Вот варианты:
Java:
public void readPlayersMana(){
ConfigSection section = this.getConfig().getSections("players");
//Имена всех игроков можно будет получить так:
Set<String> names = section.getKeys(false); // имена всех игроков
// Можно теперь использовать их, чтобы перебирать в цикле.
names.forEach(player ->{
int mana = ((ConfigSection) section.get(player)).getInt("mana");
this.getLogger().info(player+"'s mana is "+mana);
});
// А можно поступить ещё проще
section.entrySet().forEach(entry ->{
int mana = ((ConfigSection) entry.getValue()).getInt("mana");
this.getLogger().info(entry.getKey()+"'s mana is "+mana);
});
}