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

Помогите Объекты в конфиге с разными именами.

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

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

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

    Баллы:
    46
    Мне нужно, чтобы когда я писал команду /mwars "name" в конфиге отображалось вот так:
    Код:
    arenas:
      name:
        test:
          time: 1800
    Всё так и работает, но мне нужно ещё одну арену и я пишу команду снова (только с другим именем арены), и происходит вот это.
    Код:
    arenas:
      name:
        abc:
          time: 1800
    Старое имя заменяется на новое.

    Что делать?
    вот как я проверяю существует ли уже это имя.
    Код:
    if(config.getConfigurationSection("arenas.name").isConfigurationSection(arenaname)) return;
     
    Последнее редактирование: 28 май 2017
  2. Хостинг MineCraft
    <
  3. Exception_Prototype

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

    Баллы:
    46
    Пусть у тебя имя арены и будет ключом к секции в конфиге.
     
  4. Автор темы
    Bomber123

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

    Баллы:
    46
    Можно переформулировать?
     
  5. demkom

    demkom Администратор Пользователь

    Баллы:
    76
    Skype:
    demkom1983
    Имя в Minecraft:
    G_demkom_G
    Зачем ты такое спрашиваешь?
     
  6. Автор темы
    Bomber123

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

    Баллы:
    46
    Ребят, кто умеет делать мини игры киньте тутор где вы этому учились а то тутор с рубакита мне не подходит.
     
  7. Slavkaa

    Slavkaa Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Slavok2001
    Код:
    if(Main.getConfig().contains("arenas.name." + args[0]) return;
    
    Вот тебе проверка на наличие строки с аргументом, который ты ввел.
     
  8. Автор темы
    Bomber123

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

    Баллы:
    46
    Вообще-то у меня другой конфиг.
     
  9. Slavkaa

    Slavkaa Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Slavok2001
    Код:
    if(config.contains("arenas.name." + args[0])) return;
     
  10. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    46
    как тебе идея перестать писать плагины?
     
  11. demkom

    demkom Администратор Пользователь

    Баллы:
    76
    Skype:
    demkom1983
    Имя в Minecraft:
    G_demkom_G
    x2
     
  12. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Для тех кто не хочет и не может понимать snakeyaml, подарю свой map сериализатор.


    Код:
    package Example;
    
    import java.util.Map;
    
    import org.bukkit.configuration.serialization.ConfigurationSerializable;
    import org.bukkit.configuration.serialization.SerializableAs;
    
    @SerializableAs(value="Map")
    public class MapSer implements ConfigurationSerializable {
    
        private Map<String, Object> map;
     
        MapSer(Map<String, Object> map) {
            this.map = map;
        }
     
        @Override
        public Map<String, Object> serialize() {
            return map;
        }
     
        public static MapSer deserialize(Map<String, Object> map) {
            return new MapSer(map);
        }
     
        public Map<String, Object> get() {
            return map;
        }
    }
    Регистрируем его в главном классе таким вот статиком.

    Код:
        static {
            ConfigurationSerialization.registerClass(MapSer.class, "Map");
        }
    Ну и пример юза конечно же. Тут я использовал свой кастомконфиг класс, не суть.
    Код:
            //Наш конфиг.
            CustomConfig cfg =  Main.config().get("arenas");
            //Мапа с аренами.
            Map<String, Object> arena = new HashMap<String, Object>();
            //TODO
            HashMap<String, Integer> stat = new HashMap<String, Integer>();
            stat.put("time", 1111111);
            arena.put("arena_1", stat);
            //TODO
            //Запись мапы с указанием на наш сериализатор.
            cfg.get().set("arenas", new MapSer(arena));
            cfg.save();
            //Читаем из конфига и десериализуем в мапу
            MapSer ms = (MapSer) cfg.get().get("arenas");
            //Получаем нашу мапу обратно.
            arena = ms.get();
    
    Ну вот и все, всю грязную работу snakeyaml берет на себя, а у вас привычный HashMap.
     
    Последнее редактирование: 28 май 2017
  13. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Он не сможет это сделать сам :3[DOUBLEPOST=1495993725,1495993642][/DOUBLEPOST]
    Я не думаю, что нормальные минигеймы делали по туториалам...
    Заменять буковки не можем??? Эх... Всё потеряно...
     

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