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

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

Статус
Закрыто для дальнейших ответов.

Jampire

Старожил
Пользователь
Баллы
173
Имя в 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' - она начинает прекрасно читаться, но именно мои объекты все-равно игнорируются. К тому же не важно, в какую часть секции ее запихнуть.
 
Последнее редактирование:
Черт. Проблема была так проста. Забыл про десериализацию.
Код:
    public static MySuperClass deserialize(Map<String, Object> ser) {
        return new MySuperClass((ItemStack) ser.get("stack"));
    }

Тему закрываю и оставляю в качестве помощи другим :)
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх