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

Помогите В конфиг попадает имя package класса

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

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

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

    Баллы:
    66
    Всем привет,
    очень нужна помощь, формирую конфиг для плагина, но когда пытаюсь вставить в конфиг HashMap со своим классом, то в полученной файл почему то попадает имя пакаджа, где лежит класс MyClass
    Код:
    mysection:
      test222: !!ru.travnik.myplugin.MyClass
    Вот как добавляю конфигурацию
    Код:
    HashMap<String, MyClass> count = new HashMap<String, MyClass>();
    count.put("test", new MyClass(1, 1, 2, "test"));
    count.put("test222", new MyClass(4, -1, 2, "test2"));
    config.createSection("mysection", count);
    Что нужно сделать чтобы в конфиг не попадало имя package, где лежит класс?
     
  2. Хостинг MineCraft
    <
  3. Exception_Prototype

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

    Баллы:
    46
    Я не знаю зачем тебе такое, но можно String[] str = text.split(\\.); и взять последний объект из массива.
     
  4. Автор темы
    travnik

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

    Баллы:
    66
    MyClass представляет собой определенную структуру
     
  5. Exception_Prototype

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

    Баллы:
    46
    Вот так сетится в конфиге твой класс !!ru.travnik.myplugin.MyClass. На сколько я понял, тебе нужно только название класса в конфиг пихнуть. Ну так раздели всю строку как я тебе показал выше split и возьми последний элемент массива и запиши его в конфиг. Это и будет название твоего класса.[DOUBLEPOST=1488615888,1488615796][/DOUBLEPOST]Да и вообще, разве у класса нет getName(); ?
     
  6. Автор темы
    travnik

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

    Баллы:
    66
    имя сетится не с класса, а то которое я указал, но перед полями класса сетит пакадж класса
     
  7. Exception_Prototype

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

    Баллы:
    46
    А, так вы их и не записываете. Вы только класс записываете, а поля в никуда. Если вас надо создавать и сохранять классы, то используйте сериализацию или же записывайте каждое поле отдельно.[DOUBLEPOST=1488616720,1488616321][/DOUBLEPOST]И вообще, опишите для чего вы это делаете. Ибо мне кажется вы какой то костыль сейчас делаете.
     
  8. Автор темы
    travnik

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

    Баллы:
    66
    вот класс

    Код:
    package ru.travnik.travniksky;
    
    public class BlockCountInfo {
        public int id;
        public int data;
        public int count;
        public String message;
     
        public BlockCountInfo()
        {
        }
     
        public BlockCountInfo(int id, int data, int count, String message) {
            super();
            this.id = id;
            this.data = data;
            this.count = count;
            this.message = message;
        }
    
        public boolean equals(Object obj){
            if (!(obj instanceof BlockCountInfo))
                return false;
            BlockCountInfo entry = (BlockCountInfo)obj;
            return equals(entry.id, entry.data);
        }
     
        public boolean equals(int id, int data){
            return this.id == id && this.data == data;
        }
     
        public boolean equals(int id){
            return this.id == id && this.data == Utils.NOT_USE_DATA;
        }
    }
    а вот какой конфиг получается

    Код:
    MaxCountBlocks:
      test222: !!ru.travnik.travniksky.BlockCountInfo
        count: 2
        data: -1
        id: 4
        message: test2
      test: !!ru.travnik.travniksky.BlockCountInfo
        count: 2
        data: 1
        id: 1
        message: test
     
  9. Exception_Prototype

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

    Баллы:
    46
    Опишите что вы пытаетесь сделать.
     
  10. Автор темы
    travnik

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

    Баллы:
    66
    Мне нужно чтобы конфиг получался

    Код:
    MaxCountBlocks:
      test222:
        count: 2
        data: -1
        id: 4
        message: test2
      test:
        count: 2
        data: 1
        id: 1
        message: test
    в нем не было !!ru.travnik.travniksky.BlockCountInfo
     
  11. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    @travnik, выглядит это так, как будто ConfigurationSection.createSection() автоматически сериализует (сохраняет состояние в файле) ваш класс. И чтобы его потом так же автоматически можно было десериализовать (загрузить из файла) просто необходимо знать какой это класс, поэтому он и записывается.
    Если это очень сильно не нравится, то можно написать свой сериализатор/десериализатор, которому это не поданобится.
     
  12. Автор темы
    travnik

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

    Баллы:
    66
    Решил вопрос таким способом

    Код:
    HashMap<String, Object> count = new HashMap<String, Object>();
            count.put("test", toConfigBlockCountInfo(new BlockCountInfo(1, 1, 2, "test")));
            count.put("test222", toConfigBlockCountInfo(new BlockCountInfo(4, -1, 2, "test2")));
            config.createSection(SECTION_MAX_COUNT, count);
    Код:
    private HashMap<String, Object> toConfigBlockCountInfo(BlockCountInfo info){
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("id", info.id);
            map.put("data", info.data);
            map.put("count", info.count);
            map.put("message", info.message);
            return map;
        }
    [DOUBLEPOST=1488626998,1488626877][/DOUBLEPOST]
    Так вот если удалить "!!ru.travnik.travniksky.BlockCountInfo" из конфига, то броблем с десериализацией никаких нет. Может какие есть настройки для сериализации, чтобы не сериализовало лишнюю информацию
     
  13. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Может быть.
     
  14. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну вот и юзай этот кастомный сериализатор и все. Работает же.[DOUBLEPOST=1488629818][/DOUBLEPOST]Или же перемести этот класс в дефольтный пакет.
     
  15. AtomicInteger

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

    Баллы:
    46
    Ты пытаешься записать в конфиг класс, то есть сам объект, в то время, как тебе нужны свойства объекта, то есть поля класса.Так что создай обычный bean, и записывай поля с помощью созданных геттеров.
     
  16. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku

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