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

Discussion in 'Разработка плагинов' started by fromgate, 11/2/16.

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
We welcome you on our site. This site is devoted to the Nukkit project and all that is connected with him. Here you can communicate, download plugins, also many other things get acquainted! Register the account right now :3
  1. fromgate

    fromgate Administrator

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

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

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

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

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

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

    Code:
    package ru.nukkit.regions.config;
    
    import cn.nukkit.plugin.PluginBase;
    import cn.nukkit.utils.SimpleConfig;
    
    import java.util.List;
    
    public class RegionsConfig extends SimpleConfig {
    
    [pre][code]@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);
    }
    [/pre]
    }[/code]

    Теперь, необходимо создать объект соответствующий этому классу (создаем в классе плагина)
    Code:
     private RegionsConfig cfg;
    
    [pre][code]@Override
    public void onEnable(){
        // Здесь можно сделать сохранение конфига из ресурса
        this.cfg = new RegionsConfig(this); // создаем конфигуратор
        this.cfg.load(); // загрузка данных из конфига
        this.cfg.save(); // сохранение данных в конфиг
        // Делаете всё остальное, что хотите делать в конфиге
    }
    [/code][/pre]
    После того как был выполнен метод cfg.load() данные из конфига будут присвоены соответствующим полям и чтобы получать значения не нужно озадачиваться куда делся метод getNested :), а нужно просто обратиться к переменной:

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

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

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

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

Share This Page