1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как сохранить это в конфиг?

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

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

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

    Баллы:
    76
    Окей. У меня есть миниигра. Добавляю в неё team режим. Остановился и очень сильно заступорился на проблеме о точках спавнов тимейтов. Окей, добавляется всё в HM хорошо, всё работает, как надо, но всё никак не могу нормальное сохранение и доставание из config-а сделать... Окей, локации я храню в HashMap<String (Название цвета команды), List<Location>>. И не знаю, почему, но ну ни в какую не могу нормально сохранять и загружать это... Окей, сохраняется оно более-менее нормально этим кодом.
    Код:
    for(Entry<String, List<Location>> tostore: Tspawns.entrySet()) {
                for(int i=0;i<tostore.getValue().size();i++){
                    getConfig().set("Teams."+tostore.getKey()+"."+i+".World",tostore.getValue().get(i).getWorld().getName());
                    getConfig().set("Teams."+tostore.getKey()+"."+i+".x",tostore.getValue().get(i).getX());
                    getConfig().set("Teams."+tostore.getKey()+"."+i+".y",tostore.getValue().get(i).getY());
                    getConfig().set("Teams."+tostore.getKey()+"."+i+".z",tostore.getValue().get(i).getZ());
                }
            }
    Но какое чудо нужно написать, чтобы обратно загружать - kill me please. Вот на чём я сейчас остановился. Разумеется, код не работает...
    Код:
    for(String b : getConfig().getConfigurationSection("Teams").getKeys(false)) {
                List<Location> toadd = new ArrayList<>();
                for(String i : getConfig().getConfigurationSection("Teams."+b).getKeys(false)){
                    toadd.add(new Location(Bukkit.getWorld(getConfig().getString("Teams." + b + "."+i+".World")),getConfig().getInt("Teams." + b + "."+i+".x"), getConfig().getInt("Teams." + b + "."+i+".y"), getConfig().getInt("Teams." + b + "."+i+".z")));
                }
                Tspawns.put(getConfig().getString("Teams."+b), toadd);
            }
    *Если что, сохраняю в onDisable, загружаю в onEnable.
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Делай сериализацию / десериализацию вручную, например, сохраняешь локацию в строку в виде:
    "<world> <x> <y> <z> <yaw> <pitch>"
    Код:
    String locData = new StringBuilder()
            .append(location.getWorld().getName()).append(" ")
            .append....
            .toString();
    Для выгрузки берешь строку, сплиттишь через пробел на части:
    Код:
    String[] data = locData.split(" ");
    А дальше каждый параметр по очереди парсишь, например:
    Код:
    double x = Double.parseDouble(data[1]);
    Делаешь всего два метода, которые работают с сериализацией и больше не паришся.
     
  3. alexandrage

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

    Баллы:
    173
    Код:
    package Example.sfg;
    
    import java.util.Map;
    
    import org.bukkit.configuration.serialization.ConfigurationSerializable;
    import org.bukkit.configuration.serialization.SerializableAs;
    
    @SerializableAs(value = "MapSer")
    public class MapSer implements ConfigurationSerializable {
    
        private Map<String, Object> map;
    
        public 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, "MapSer");
        }
    Код:
            MapSer ms = new MapSer(map);
            this.getConfig().set("name", ms);
            ms = (MapSer) this.getConfig().get("name", MapSer.class);
     
    Последнее редактирование: 19 сен 2018
  4. Автор темы
    pro100koder

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

    Баллы:
    76
    Извиняюсь, но я решил уже по старинке) А зачем нужно что-то особое? Как я понял (тупо поглядев на название), сериализация - это что-то вроде сохранения данных в реальном времени? Просто данные о спавнах нужно сохранить раз в жизни, а потом просто использовать данные, и не терять их при краше. Данных немного, так что любым способом разницы на нагрузку сервера не заметно.
     
  5. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Нет, не в реальном времени, а более правильным способом..
     
  6. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Я бы использовал другой эпитет -- обратимым.
     
Статус темы:
Закрыта.

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