Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

ConfigurationSerializable

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

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

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Как работает ConfigurationSerializable? Как сделать метод deserialize()? Почему у меня очищается конфиг при старте плагина? Нигде не нашёл примера.

    Вот мой код:
    Код:
    package ru.serega6531.NearlySpawns;
    
    import java.util.ArrayList;
    
    import org.bukkit.Location;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.serialization.ConfigurationSerialization;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class NearlySpawns extends JavaPlugin {
     
        private static FileConfiguration config;
        private static ArrayList<Spawn> spawns = new ArrayList<Spawn>();
     
        public void onEnable(){
            ConfigurationSerialization.registerClass(Spawn.class);
            config = getConfig();
            for(String key : config.getConfigurationSection("spawns").getKeys(false)) {
                getLogger().info("Loading spawn named " + key);
                spawns.add(new Spawn(config.getConfigurationSection("spawns." + key).getValues(false)));
            }
            getCommand("addspawn").setExecutor(new CommandManager());
        }
     
        public void onDisable(){
            saveConfig();
        }
    
    }
    Код:
    package ru.serega6531.NearlySpawns;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.configuration.serialization.ConfigurationSerializable;
    
    public class Spawn implements ConfigurationSerializable {
     
        private Location location;
        private String name;
     
        public Spawn(Location location, String name){
            this.location = location;
            this.name = name;
        }
     
        public Location getLocation() {
            return location;
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public Map<String, Object> serialize() {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("name", name);
            map.put("loc.x", location.getBlockX());
            map.put("loc.y", location.getBlockY());
            map.put("loc.z", location.getBlockZ());
            return map;
        }
     
        public Spawn(Map<String, Object> map){
            this(new Location(Bukkit.getWorlds().get(0), (int)map.get("loc.x"), (int)map.get("loc.y"), (int)map.get("loc.z")), (String)map.get("name"));
        }
    }
    
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Up![DOUBLEPOST=1396166261,1396162243][/DOUBLEPOST]Конфиг уже не очищается, но вылезает NPE на строке
    Код:
    spawns.add(new Spawn(config.getConfigurationSection("spawns." + key).getValues(false)));
    [DOUBLEPOST=1396252416][/DOUBLEPOST]Up!
     
  4. kris13

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

    Баллы:
    78
    Судя по всему config.getConfigurationSection("spawns." + key) вернуло вам null. Надо бы конечно еще видеть как вы сохраняете в конфиг, но если я правильно помню config.getConfigurationSection("spawns").getKeys(false) вернет полные имена ключей, т.е. spawns.name и получается в методе getConfigurationSection("spawns." + key) вы спрашиваете от ключа spawns.spawns.name. Не уверен, но стоит проверить.
    А зачем вам реализация deserialize? Контракт ConfigurationSerializable предполагает только serialize
     
  5. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    А собрать обратно в объект как?
     
  6. Jampire

    Jampire Старожил Пользователь

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    В данном случае ConfigurationSerializable вообще не нужен.
    просто сохраняем конфиг и всё. (config.save(path))
     
  7. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    A Spawn-то как сохранять?
     
  8. kris13

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

    Баллы:
    78
    В ConfiguratuionSerialization есть метод deserealize возвращающий ConfiguratuionSerializable, он вас чем-то не устраивает?
     
  9. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Если править конфиг руками не будет необходимости, можно использовать Gson.
    С ним всё быстрее и понятнее.
     

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