SimpleConfig: Работаем с файлами конфигурации по-новому!

fromgate

Administrator
SimpleConfig: Работаем с файлами конфигурации по-новому!

Недавно, вдохновленный идеей плагина Yamler, я написал небольшой класс, который предполагал использовать в плагине Regions (который всё никак не доведу до состояния, которое можно считать релизом). Об этом классе (а точнее о самой ранней его версии) я рассказывал недавно.

В итоге немного доработав и модифицировав класс, я понял, что такой инструмент вполне можно внедрить и в сам Nukkit. При работе с простыми конфигами он значительно упростит жизнь разработчиков (чего стоят сегодняшние терзания, в ВК по этому поводу ;)). А для более сложных конструкций можно будет разрабатывать собственные решения на основе того же класса Config (он никуда не делся).

Итак, вот ссылка на исходник класса (кому интересно): https://github.com/Nukkit/Nukkit/blob/master/src/main/java/cn/nukkit/utils/SimpleConfig.java

Ну и расскажу как пользоваться этим классом.

Первым делом создаете класс-наследник от класса SimpleConfig:

Java:
package ru.nukkit.regions.config;
 
import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.SimpleConfig;
 
import java.util.List;
 
public class RegionsConfig extends SimpleConfig {
 
	@Path (value = "claim.max-regions-per-player")
	public int maxRegionPerPlayer=5;
 
	@Path (value = "claim.max-claim-volume")
	public int maxClaimVolume=10000;
 
	@Path (value = "claim.claim-only-existing-regions")
	public boolean claimOnlyExisting = false;
 
	@Path (value = "claim.allow-to-claim-another-regions")
	public boolean intersectionsAllowed = false;
 
	public RegionsConfig(PluginBase plugin) {
		super(plugin);
	}
}
Теперь, необходимо создать объект соответствующий этому классу (создаем в классе плагина)
Java:
	private RegionsConfig cfg;
 
	@Override
	public void onEnable(){
		// Здесь можно сделать сохранение конфига из ресурса
		this.cfg = new RegionsConfig(this); // создаем конфигуратор
		this.cfg.load(); // загрузка данных из конфига
		this.cfg.save(); // сохранение данных в конфиг
		// Делаете всё остальное, что хотите делать в конфиге
	}
После того как был выполнен метод cfg.load() данные из конфига будут присвоены соответствующим полям и чтобы получать значения не нужно озадачиваться куда делся метод getNested :), а нужно просто обратиться к переменной:

Java:
player.sendMessage ("Вы можете приватить не более "+ cfg.maxClaimVolume + " блоков!");
Если пришло время изменить значение в конфиге, то достаточно просто присвоить соответствующей переменной и вызвать метод save():
Java:
cfg.intersectionsAllowed=true;
cfg.save();

Вот собственно и всё! Ну на всякий случай несколько примечаний:


Примечание 1. Использование другого файла (отличного от config.yml);
Чтобы создать файл с именем отличным от config.yml, нужно создать соответствующий конструктор:

Java:
	public RegionsConfig(PluginBase plugin) {
		super(plugin,"data.yml");
	}
В этом случае будет создан (или загружен) файл "data.yml", расположенный в директории плагина.

Примечание 2. Об аннотации Path
Аннотация Path определяет путь по которому будет сохраняться переменная в конфиге. Если Вы не укажете этот путь, то будет использовано имя переменной, причем знак "_" в имени будет заменён на точку.
Таким образом (для примера) код
Java:
	@Path (value = "claim.volume")
	public int maxClaimVolume=10000;
и код
Java:
	public int claim_volume=10000;
в полученном файле конфига будут представлены одинаково.
 
Top