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

Bomber123

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

Что делать?
вот как я проверяю существует ли уже это имя.
JavaScript:
if(config.getConfigurationSection("arenas.name").isConfigurationSection(arenaname)) return;
 
Последнее редактирование:
Пусть у тебя имя арены и будет ключом к секции в конфиге.
 
Ребят, кто умеет делать мини игры киньте тутор где вы этому учились а то тутор с рубакита мне не подходит.
 
Java:
if(Main.getConfig().contains("arenas.name." + args[0]) return;
Вот тебе проверка на наличие строки с аргументом, который ты ввел.
 
Для тех кто не хочет и не может понимать snakeyaml, подарю свой map сериализатор.


Java:
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;
    }
}
Регистрируем его в главном классе таким вот статиком.

Java:
    static {
        ConfigurationSerialization.registerClass(MapSer.class, "Map");
    }
Ну и пример юза конечно же. Тут я использовал свой кастомконфиг класс, не суть.
Java:
        //Наш конфиг.
        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.
 
Последнее редактирование:
Для тех кто не хочет и не может понимать snakeyaml, подарю свой map сериализатор.


Java:
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;
    }
}
Регистрируем его в главном классе таким вот статиком.

Java:
    static {
        ConfigurationSerialization.registerClass(MapSer.class, "Map");
    }
Ну и пример юза конечно же. Тут я использовал свой кастомконфиг класс, не суть.
Java:
        //Наш конфиг.
        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.
Он не сможет это сделать сам :3
Ребят, кто умеет делать мини игры киньте тутор где вы этому учились а то тутор с рубакита мне не подходит.
Я не думаю, что нормальные минигеймы делали по туториалам...
Вообще-то у меня другой конфиг.
Заменять буковки не можем??? Эх... Всё потеряно...
 
Назад
Верх