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

Помогите Парсинг конфига

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

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

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

    Баллы:
    61
    Имеется следующий конфиг (YAML):
    Код:
    maps:
    - teams:
      - x: 0
        y: 5
        z: 0
      - x: 0
        y: 2
        z: 0
      spawners:
      - x: 0
        y: 5
        z: 0
        type: iron
      - x: 0
        y: 2
        z: 0
        type: bronze
    Вопрос:
    Как нормально получить значения из массивов, например координаты базы или спавнера?
    Используется Bukkit FileConfiguration.
     
  2. NukerFall

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

    Баллы:
    76
    Во-первых, так как ты сделал, работать не будет.
     
  3. NukerFall

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

    Баллы:
    76
    Код:
    maps:
      teams:
        x1: 0
        y1: 5
        z1: 0
        x2: 0
        y2: 2
        z2: 0
      spawners:
        1:
          x: 0
          y: 2
          z: 0
          type: 'IRON'
        2:
          x: 0
          y: 2
          z: 0
          type: 'GOLD'
    

    Код:
    Double x1 = plugin.getConfig().getDouble("maps.teams.x1");
    Double x2 = plugin.getConfig().getDouble("maps.teams.x2");
    Double y1 = plugin.getConfig().getDouble("maps.teams.y1");
    Double y2 = plugin.getConfig().getDouble("maps.teams.y2");
    Double z1 = plugin.getConfig().getDouble("maps.teams.z1");
    Double z2 = plugin.getConfig().getDouble("maps.teams.z2");
    ConfigurationSection s = main.getConfig().getConfigurationSection("maps.spawners.1");
    Double x = s.getDouble("x");
    Double y = s.getDouble("y");
    Double z = s.getDouble("z");
    Material m = Material.valueOf(s.getString("type"));
     
    Последнее редактирование: 30 янв 2020
  4. Автор темы
    Playrek

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

    Баллы:
    61
    Проблема в том, что нужно перебрать эти значения, а не просто взять. Чтобы без изменений в коде можно было сделать, например, не 2, а 4 спавнера.
     
  5. NukerFall

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

    Баллы:
    76
    Тогда вбей всё в стринглист, в чём проблема?
    Код:
    maps:
      teams:
        - '0.0;5.0;0.0'
        - '0.0;2.0;0.0'
      spawners:
        - '0.0;5.0;0.0;IRON'
        - '0.0;2.0;0.0;GOLD'
    

    Код:
    for (String s : plugin.getConfig().getStringList("maps.spawners")) {
    Double x = s.split(";")[0];
    Double x = s.split(";")[1];
    Double x = s.split(";")[2];
    Material m = Material.valueOf(s.split(";")[3]);
    }
    
     
  6. TrashCode

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

    Баллы:
    31
    Имя в Minecraft:
    TrashCode
    Или используй config.getConfigurationSection("maps.spawners").getKeys(false), чтобы названия всех спавнеров
     
  7. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Держи немного екземпла)
     

    Вложения:

  8. Автор темы
    Playrek

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

    Баллы:
    61
    Всем спасибо. Сделал через стринглист и getKeys(false) .
    Код:
    ConfigurationSection cs = config.getConfigurationSection("bedwars.maps");
    
            for (String mapsStr : cs.getKeys(false)) {
                ConfigurationSection map = cs.getConfigurationSection(mapsStr);
    
                List<String> list = map.getStringList("spawners");
    
                for (String spawner : list) {
                    String[] splitList = spawner.split(";");
    
                    int x = Integer.parseInt(splitList[0]);
                    int y = Integer.parseInt(splitList[1]);
                    int z = Integer.parseInt(splitList[2]);
                    String world = splitList[3];
                    String typeStr = splitList[4];
    
                    Material type = null;
    
                    if (typeStr.equalsIgnoreCase("BRONZE")) {
                        type = Material.CLAY_BRICK;
                    } else if (typeStr.equalsIgnoreCase("IRON")) {
                        type = Material.IRON_INGOT;
                    } else {
                        getLogger().info("Incorrect config");
                        return;
                    }
    
                    Material finalType = type;
                    getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                        @Override
                        public void run() {
                            getServer().getWorlds().get(0).dropItemNaturally(
                                    new Location(getServer().getWorld(world), x, y, z),
                                    new ItemStack(finalType, 1));
                        }
                    }, 0L, 20L);
                }
            }
     
Статус темы:
Закрыта.

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