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

Помогите Сериализация объекта в конфиг [решение]

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

Статус темы:
Закрыта.
  1. Автор темы
    Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Впервые создаю тему в данном подфоруме и надеюсь найдется кто-нибудь, кто сможет мне помочь.

    Возможно, что это баг движка или еще что-то, но сам я уже перепробовал очень многое и никак не могу заставить работать правильно.

    Пытаюсь сохранить объект в конфиг, используя силы встроенного YML движка и возникли проблемы.

    При старте плагина регистрирую класс
    Код:
    ConfigurationSerialization.registerClass(MySuperClass.class);
    Сам класс делаю сериализируемым
    Код:
    MySuperClass implements ConfigurationSerializable {
    Прописываю саму сериализацию
    Код:
        @Override
        public Map<String, Object> serialize() {
            Map<String, Object> ser = new HashMap<String, Object>();
            ser.put("stack", this.stack);
            return ser;
        }
    Допустим, записываю в конфиг секцию таких объектов
    Код:
    Main.config.set("list.123", c);
    Main.config.set("list.1234", c);
    Пытаюсь получить их
    Код:
    for (String c : Main.config.getConfigurationSection("list").getValues(false).keySet()) {
                Main.config.get("list." + c);
            }
    
    В итоге при попытке сохранить этот объект в конфиг он сохраняется прекрасно и выглядит в целом как и должен.
    При попытке его загрузить, никаких ошибок не происходит, но и в самом объекте конфига его не оказывается

    Код:
    Main.config.getConfigurationSection("list").getValues(false).keySet().size()
    в итоге возвращает 0, ибо в самом объекте конфига секция оказывается пустым, но в файле всё прекрасно.

    Код:
    list:
      '123':
        ==: MySuperClass
        name: '123'
      '1234':
        ==: MySuperClass
        name: '1234'
    
    НО! Стоит записать в эту же секцию любую другую строку, например 'string': 'string' - она начинает прекрасно читаться, но именно мои объекты все-равно игнорируются. К тому же не важно, в какую часть секции ее запихнуть.
     
    Последнее редактирование: 23 окт 2015
  2. Хостинг MineCraft
    <
  3. Автор темы
    Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Черт. Проблема была так проста. Забыл про десериализацию.
    Код:
        public static MySuperClass deserialize(Map<String, Object> ser) {
            return new MySuperClass((ItemStack) ser.get("stack"));
        }
    [DOUBLEPOST=1445569921,1445569889][/DOUBLEPOST]Тему закрываю и оставляю в качестве помощи другим :)
     
Статус темы:
Закрыта.

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