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

Помогите Достать локации из конфига и загрузить их в лист.

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Хотел сделать сохранение координат блоков, которые я предварительно внес в лист и выгрузки тех самых локаций обратно в лист после включения, но уже 2 день я не знаю, как можно внести в лист эти координаты. Помогите мне с загрузкой координат в лист после включения плагина.

    Вот сам код, когда сервер выключается и ему нужно перед выключением записать координаты и мир самого блока:
    Код:
        @SuppressWarnings("unused")
        public static void save() {
    
            ConfigurationSection section = API.getInstance().getConfig().getConfigurationSection("AnvilLoc");
    
            for (String key : section.getKeys(false)) {
                size++;
            }
    
            for (Location loc : EventListener.loc) {
    
                API.getInstance().getConfig().set("AnvilLoc." + size + ".World", loc.getWorld().getName());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".X", loc.getX());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".Y", loc.getY());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".Z", loc.getZ());
                API.getInstance().saveConfig();
            }
        }
     
  2. Хостинг MineCraft
    <
  3. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Достанешь построчно потом Location loc = new Location (world, x, y, z);
    А уже loc пишешь в лист
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Дэк я так и делал, но он заносил исключительно только одну локацию.
     
  5. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Через for попробуй
     
  6. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я тоже об этом раньше думал, но потом забил, ибо я не знаю, что именно в нем записывать ...
     
  7. kompozitor

    kompozitor Ньюби

    Баллы:
    1
    Имя в Minecraft:
    Kompozitor
    Записывает координаты он корректно?
     
  8. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да, более чем. Вот мини кусочек его записи:
    '1':
    World: spawn
    X: -253.0
    Y: 63.0
    Z: 290.0
     
  9. kompozitor

    kompozitor Ньюби

    Баллы:
    1
    Имя в Minecraft:
    Kompozitor
    Код:
    FileConfiguration config;
    Set<String> locations;
    
    for(String key : config.getConfigurationSection("[тут верхний элемент конфига]").getKeys(false)){
           
                locations.add(key);
            
    }
    Попробуй в таком духе. "Верхним элементом конфига" я обозвал (вроде как) AnvilLoc
     
  10. SimMiMo

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

    Баллы:
    76
    Код:
    for (String key : section.getKeys(false)) {
                size++;
            }
            for (Location loc : EventListener.loc) {
                API.getInstance().getConfig().set("AnvilLoc." + size + ".World", loc.getWorld().getName());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".X", loc.getX());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".Y", loc.getY());
                API.getInstance().getConfig().set("AnvilLoc." + size + ".Z", loc.getZ());
                API.getInstance().saveConfig();
            }
    Откуда-то берете переменную size, потом ее увеличиваете и записываете много раз в for (Location loc : EventListener.loc) в одну и ту же секцию вашего листа "size" данные.
     
  11. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    а не проще все в одну строчку и .split?
     
  12. 0x1EE7C0DE

    0x1EE7C0DE Участник Пользователь

    Баллы:
    36
    Попробуй как-то так
    Код:
    for (int i = 0; i < EventListener.loc.size(); i++) {
    Location loc =  EventListener.loc.get(i);
    
                API.getInstance().getConfig().set("AnvilLoc." + i + ".World", loc.getWorld().getName());
                API.getInstance().getConfig().set("AnvilLoc." + i + ".X", loc.getX());
                API.getInstance().getConfig().set("AnvilLoc." + i + ".Y", loc.getY());
                API.getInstance().getConfig().set("AnvilLoc." + i + ".Z", loc.getZ());
                API.getInstance().saveConfig();
            }
    
     
  13. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    бл*** что за костыли алло?![DOUBLEPOST=1478618003,1478617825][/DOUBLEPOST]
    Код:
        public void addLocations() {
            for (String s : cfg.getConfigurationSection("AnvilLoc").getKeys(false)) {
                try {
                    Location loc = stringToLocation(config.getString(s));
                    locations.add(loc);
                } catch (Throwable t) {
                    // add location failed
                }
            }
        }
    
        public String locToString(Location loc) {
            return loc.getWorld().getName() + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
        }
    
        public Location stringToLocation(String str) {
            String str2loc[] = str.split("\\:");
            Location loc = new Location(Bukkit.getServer().getWorld(str2loc[0]), 0, 0, 0);
            loc.setX(Double.parseDouble(str2loc[1]));
            loc.setY(Double.parseDouble(str2loc[2]));
            loc.setZ(Double.parseDouble(str2loc[3]));
            return loc;
        }
     
    Последнее редактирование: 9 ноя 2016
  14. SimMiMo

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

    Баллы:
    76
    Удобнее для визуала делать наглядную иерархию.
     
  15. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    А из хэша в конфиг:
    Код:
        public void loadInConfig() {
            Iterator<Location> iterator = locs.iterator();
            while (iterator.hasNext()){
                Location loc = iterator.next();
                int size = cfg.getConfigurationSection("AnvilLoc").getKeys(false).toArray().length;
                cfg.set("AnvilLoc." + ++size, locToString(loc)); // ++size = Integer.valueOf(size + 1)
                saveConfig();
            }
        }
       
        public String locToString(Location loc) {
            return loc.getWorld().getName() + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
        }
     
  16. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Не, с таким готовым кодом он не сохраняет, printstacktrace молчит.
     
  17. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Код:
    List<String> list = new ArrayList<String>();
    public void onEnable() {
        config = getConfig();
        list = config.getStringList("Anvil");
    }
    public void onDisable() {
        config.set("Anvil", list);
        saveConfig();
    }
    
    @EventHandler
    public void PlayerInteract(PlayerInteractEvent e) {
        if (e.isCancelled())
            return;
        Block b = e.getClickedBlock();
        if (e.getAction() == Action.RIGHT_CLICK_BLOCK && list.contains(getLocation(b.getLocation()))
                && b.getType() == Material.ANVIL) {
            e.setCancelled(true);
            //код
        }
    }
    String getLocation(Location l) {
        return l.getWorld().getName() + ";" + l.getBlockX() + ";" + l.getBlockY() + ";" + l.getBlockZ();
    }
    
    Location getLocation(String l) {
        String[] g = l.split(";");
        return new Location(Bukkit.getWorld(g[0]), Integer.parseInt(g[1]), Integer.parseInt(g[2]), Integer.parseInt(g[3]));
    }
    
     
  18. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Так ты перезаписываешь те же секции.[DOUBLEPOST=1478756808,1478754155][/DOUBLEPOST]List<Map<String, Object>> AnvilLoc = new ArrayList<Map<String, Object>>();
    Добавляем мапы locs.add(loc.serialize());
    Записываем лист this.plugin.getConfig().set("AnvilLoc", locs);
    Читаем лист AnvilLoc = (List<Map<String, Object>>) this.plugin.getConfig().get("AnvilLoc");
    Пруфит.
     
  19. Kalabealu

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

    Баллы:
    46
    Имя в Minecraft:
    GoldFox
    alexandrage, help в моей теме.Плиз.Нужно по другому достать значение world, x, y, z.И потом при вводе команды /tphome телепортировалься игрок на Default кординаты.Там я выложил логи и сам плуг.
     
  20. Mr_RoboMan

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

    Баллы:
    123
    Дураку не помочь.
     
  21. _MediaNik_

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

    Баллы:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
     
Статус темы:
Закрыта.

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