1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап Легкая работа с несколькими(кастомными) конфигами

Тема в разделе "Разработка плагинов для новичков", создана пользователем Zuif, 18 апр 2022.

  1. Автор темы
    Zuif

    Zuif Активный участник Пользователь

    Баллы:
    76
    Для начала, нужно создать абстрактный класс, который будут наследовать все наши конфиги:

    PHP:
    package %вашпакет%;

    import org.bukkit.configuration.file.YamlConfiguration;

    import java.io.*;

    public abstract class 
    AbstractConfiguration {
        private final 
    String path;
        private final 
    String filename;
        private 
    File file;
        private 
    YamlConfiguration configuration;

        public 
    AbstractConfiguration(final String path, final String filename) {
           
    //путь к вашему конфигу, можете изменять как угодно
            
    this.path = %инстанс вашего плагина%.getDataFolder() + path filename;
      

            
    this.filename filename;
            
    setFile();
            if (!
    file.exists()) {
                
    initializeFile();
             
    //этот метод для того, чтобы скопировать кастомный конфиг с вашего джарника(если он есть) можете удалить если хотите создавать чистые конфиги без дефолтных настроек
                
    copyFromResource(%инстанс вашего плагина%.getResource(filename), file);
            }
            
    setYamlConfiguration();
        }

        
    /**
         * создать файл
         */
        
    private void initializeFile() {

            if (!
    file.exists())
                
    file.getParentFile().mkdirs();
            try {
                
    file.createNewFile();
            } catch (
    IOException e) {
                
    e.printStackTrace();
            }
        }

        
    /**
         * @param resource
         * @param target 
         *               
         *               метод для копирования внутренних файлов из джарника в другой файл(внешний)
         *                 
         */
        
    private void copyFromResource(InputStream resourceFile target) {
            
    byte[] buffer;
            try {
                
    buffer = new byte[resource.available()];
                
    resource.read(buffer);
                
    OutputStream outStream = new FileOutputStream(target);
                
    outStream.write(buffer);
                
    outStream.flush();
                
    outStream.close();

            } catch (
    IOException e) {
                
    e.printStackTrace();
            }
        }

        
    /**
         * @param path создать файл по другому пути
         */
        
    public void initializeFile(String path) {
            
    File file = new File(path);
            if (!
    file.exists())
                
    file.getParentFile().mkdirs();
            try {
                
    file.createNewFile();
            } catch (
    IOException e) {
                
    e.printStackTrace();
            }
        }
        
    /**
         * сохранить конфиг
         */
        
    public void save() {
            try {
                
    getYamlConfiguration().save(getFile());
                
    reload();
            } catch (
    IOException e) {
                
    e.printStackTrace();
            }
        }

        private 
    void setFile() {
            
    this.file = new File(path);
        }

        public 
    File getFile() {
            return 
    file;
        }
      
        private 
    void setYamlConfiguration() {
            
    configuration YamlConfiguration.loadConfiguration(file);
        }
        
    /**
         * получить конфиг
         */
        
    public YamlConfiguration getYamlConfiguration() {
            return 
    configuration;
        }

        
    /**
         * перезагрузить конфиг
         */
        
    public void reload() {
            
    this.setYamlConfiguration();
        }
    }
    Затем, нужно создать класс нашего конфига, который будет наследовать абстрактный класс:
    PHP:
    package %вашпакет%;

    import %вашпакет%.AbstractConfiguration;

    public class 
    Example extends AbstractConfiguration {
        public 
    Example(String path) {
    //таким образом, будет создан конфиг Example.yml по пути который вы указали, и в него будет перенесена информация с Example.yml который находится в джарнике(если нужно)
            
    super(path"Example.yml");
        }
    }
    Вы можете добавить любые методы в ваш кастомный конфиг, например геттеры и сеттеры:
    PHP:
    package %вашпакет%;

    import %вашпакет%.AbstractConfiguration;

    public class 
    Example extends AbstractConfiguration {
        public 
    Example(String path) {
            
    super(path"Example.yml");
        }
      
        public 
    void setExamplepId(int id) {
            
    getYamlConfiguration().set("example-id",  id);
            
    save();
        }
      
        public 
    int getExampleId() {
            return 
    getYamlConfiguration().getInt("example-id");
        }
      
    }
    Для того чтобы получить ваш конфиг вы можете инициализировать его в вашем главном классе(который наследует JavaPlugin), а потом получать его:

    PHP:
    %вашпакет%
    public class 
    Main extends JavaPlugin{
    private 
    Example exampleConfig;

    public 
    void onEnable() {
    exampleConfig = new Example("/configs/")
    }

    public 
    Example getExampleConfig() {
    return 
    exampleConfig;
    }


    }
    Или же, вы можете создать отдельный класс, с помощью которого будете получать все конфиги(это более удобно если у вас много конфигов, чтобы не перегружать главный класс):
    PHP:
    public class ConfigManager {

        private 
    Example example;

        public 
    ConfigManager() {
            
    init();
        }

        private 
    void init() {
            
    String path "/configs/";
            
    example = new Example(path);
        }

        public 
    Example getExampleConfig() {
        return 
    example;
        }
     
    Буду рад если мне удалось помочь вам в разработке плагина, оставляйте ваши отзывы и комментарии
     

Поделиться этой страницей