Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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 resource, File 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;
    }
Буду рад если мне удалось помочь вам в разработке плагина, оставляйте ваши отзывы и комментарии
 

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

Назад
Верх