Помощь работа с конфигами

Baraban4ik

Разработчик
Пользователь
Сообщения
285
Решения
1
Я хочу сделать 2 файла
messages.yml и config.yml чтобы их можно было перезагружать командой
и символы & работали в файле messages.yml
Я новичок возможно буду тупить
Объединено

Вот как реализовал не знаю правильно но оно работает

Java:
package com.specter.stem.configurations;

import java.io.File;
import java.io.IOException;
import java.util.*;

import com.google.common.collect.Lists;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;

public class Configurations
{
    private Map<String, Map.Entry<FileConfiguration, File>> configurations = new HashMap<> ();

    private List<String> configurationsNames;

    private Plugin plugin;

    public Configurations(Plugin plugin, String... configurationsNames)
    {
        this.plugin = plugin;

        this.configurationsNames = Lists.newArrayList(configurationsNames);

        this.loadConfigurations();
    }

    private File generateDefaultFile(String name)
    {
        File file = new File(this.plugin.getDataFolder(), name);

        if (!file.exists())
        {
            this.plugin.saveResource(name, false);
        }

        return file;
    }

    public void loadConfigurations()
    {
        for (String configurationName : this.configurationsNames)
        {
            if (this.configurations.containsKey(configurationName))
            {
                continue;
            }

            File configurationFile = this.generateDefaultFile(configurationName);

            FileConfiguration configuration = YamlConfiguration.loadConfiguration(configurationFile);

            this.configurations.put(configurationName, new AbstractMap.SimpleEntry<> (configuration, configurationFile));
        }
    }

    public void reloadConfigurations()
    {
        this.configurations.clear();

        this.loadConfigurations();
    }

    private Optional<Map.Entry<FileConfiguration, File>> getEntry(String configurationName)
    {
        return Optional.ofNullable(this.configurations.get(configurationName));
    }

    public FileConfiguration get(String configurationName)
    {
        return this.getEntry(configurationName)
                .map(Map.Entry::getKey)
                .orElse(null);
    }

    private File getFile(String configurationName)
    {
        return this.getEntry(configurationName)
                .map(Map.Entry::getValue)
                .orElse(null);
    }

    public void save(String configurationName)
    {
        this.getEntry(configurationName).ifPresent((entry) ->
        {
            try {
                entry.getKey().save(entry.getValue());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

Java:
package com.specter.stem;

import com.specter.stem.commands.StemCommand;
import com.specter.stem.configurations.Configurations;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;


public final class Stem extends JavaPlugin {

    private static Stem instance;
    public Configurations configurations = new Configurations(this, "config.yml", "messages.yml");

    @Override
    public void onEnable() {
        this.configurations.loadConfigurations();
        System.out.println(ChatColor.GREEN + "Stem plugin is enabled");
        instance = this;

        new StemCommand();
    }

    @Override
    public void onDisable() {
        this.configurations = null;
    }

    public void reload()
    {
        this.configurations.reloadConfigurations();
    }

    public static Stem getInstance() {
        return instance;
    }
}
 
Последнее редактирование:
Решение
Я хочу сделать 2 файла
messages.yml и config.yml чтобы их можно было перезагружать командой
и символы & работали в файле messages.yml
Я новичок возможно буду тупить
Объединено

Вот как реализовал не знаю правильно но оно работает


Java:
package com.specter.stem.configurations;

import java.io.File;
import java.io.IOException;
import java.util.*;

import com.google.common.collect.Lists;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;

public class Configurations
{
    private Map<String, Map.Entry<FileConfiguration, File>> configurations = new HashMap<> ();

    private List<String> configurationsNames;

    private...
Я хочу сделать 2 файла
messages.yml и config.yml чтобы их можно было перезагружать командой
и символы & работали в файле messages.yml
Я новичок возможно буду тупить
Объединено

Вот как реализовал не знаю правильно но оно работает


Java:
package com.specter.stem.configurations;

import java.io.File;
import java.io.IOException;
import java.util.*;

import com.google.common.collect.Lists;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;

public class Configurations
{
    private Map<String, Map.Entry<FileConfiguration, File>> configurations = new HashMap<> ();

    private List<String> configurationsNames;

    private Plugin plugin;

    public Configurations(Plugin plugin, String... configurationsNames)
    {
        this.plugin = plugin;

        this.configurationsNames = Lists.newArrayList(configurationsNames);

        this.loadConfigurations();
    }

    private File generateDefaultFile(String name)
    {
        File file = new File(this.plugin.getDataFolder(), name);

        if (!file.exists())
        {
            this.plugin.saveResource(name, false);
        }

        return file;
    }

    public void loadConfigurations()
    {
        for (String configurationName : this.configurationsNames)
        {
            if (this.configurations.containsKey(configurationName))
            {
                continue;
            }

            File configurationFile = this.generateDefaultFile(configurationName);

            FileConfiguration configuration = YamlConfiguration.loadConfiguration(configurationFile);

            this.configurations.put(configurationName, new AbstractMap.SimpleEntry<> (configuration, configurationFile));
        }
    }

    public void reloadConfigurations()
    {
        this.configurations.clear();

        this.loadConfigurations();
    }

    private Optional<Map.Entry<FileConfiguration, File>> getEntry(String configurationName)
    {
        return Optional.ofNullable(this.configurations.get(configurationName));
    }

    public FileConfiguration get(String configurationName)
    {
        return this.getEntry(configurationName)
                .map(Map.Entry::getKey)
                .orElse(null);
    }

    private File getFile(String configurationName)
    {
        return this.getEntry(configurationName)
                .map(Map.Entry::getValue)
                .orElse(null);
    }

    public void save(String configurationName)
    {
        this.getEntry(configurationName).ifPresent((entry) ->
        {
            try {
                entry.getKey().save(entry.getValue());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}


Java:
package com.specter.stem;

import com.specter.stem.commands.StemCommand;
import com.specter.stem.configurations.Configurations;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;


public final class Stem extends JavaPlugin {

    private static Stem instance;
    public Configurations configurations = new Configurations(this, "config.yml", "messages.yml");

    @Override
    public void onEnable() {
        this.configurations.loadConfigurations();
        System.out.println(ChatColor.GREEN + "Stem plugin is enabled");
        instance = this;

        new StemCommand();
    }

    @Override
    public void onDisable() {
        this.configurations = null;
    }

    public void reload()
    {
        this.configurations.reloadConfigurations();
    }

    public static Stem getInstance() {
        return instance;
    }
}
Ну и в чем проблема то?
Java:
System.out.println(this.configurations.get("messages.yml").getString("Console-messages.Test"));
Как по мне, в конфигах проще использовать '§' вместо '&' чтобы не городить конструкций вида ChatColor.translateAlternateColorCodes()
 
Последнее редактирование:
Вот как реализовал не знаю правильно но оно работает
Выглядит рабочим. Использовать Map$Entry для такой задачи я бы не стал. Можно обернуть оба объекта в один или использовать Pair
 
Назад
Сверху Снизу