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

Работа с YAML-файлами

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    SoKnight_
    В общем, пишу небольшой плагин для лифтов на командах типа /ce level [Этаж], команда работает только тогда, когда игрок находится в заранее созданном регионе лифта. И тут сама проблема: Не знаю как загрузить в необходимый файл (например elevators.yml) информацию о регионе в нужном формате, а также как эту информацию потом получать, когда игрок будет использовать команду. Сам формат примерно такой:
    Код:
    hotel: //Имя лифта, полученное от команды /ce create [Имя лифта]
      region:
        pos1:
          x: 1 //Координата X первой точки региона
          y: 1
          z: 1
        pos2:
          x: 1 //Координата X второй точки региона
          y: 1
          z: 1
      levels:
        total: 5 //Число этажей в лифте
        list:
          1:
            x: 1 //Координата X точки телепортирования на первый этаж
            y: 1
            z: 1
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В чём конкретно проблема?
    Получение значения из конфига - config.get()
    Установка - config.set()
    Сохранение - config.save()
    Структура лифтов в памяти:
    Elevator:
    Cuboid + List<Location>
    В Cuboid две штуки Location.
    Количество этажей указывать не обязательно, для перебора значений есть config.getConfigurationSection().get keys(false).
    Список лифтов хранить где-нибудь в виде HashMap<String, Elevator> //имя, лифт
    Для перебора:
    for(Map.Entry<String, Elevator> entry : elevatorsMap.entrySet()) {
    String n = entry.getKey();
    Elevator e = entry.getValue();
    }
     
    Последнее редактирование: 29 янв 2019
  3. Dan_Ender

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

    Баллы:
    76
    Сериализация/десериализация локаций из/в строку.
    Не захламляй файл секциями.
    https://pastebin.com/hrp2yzKc

    ** Написано на коленке
     
  4. Автор темы
    SoKnight

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

    Баллы:
    66
    Имя в Minecraft:
    SoKnight_
    Screenshot_1.png [​IMG]
    Я пока что сомневаюсь, что это то, но если я правильно понял, то чтобы получить например координаты лифта я использую метод, помеченный как "Чтение", а чтобы записать новые координаты - метод "Запись", так?
     
    Последнее редактирование: 30 янв 2019
  5. NyanGuyMF

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

    Баллы:
    76
    Да, методом ConfigurationSection#set(key, object) * грубо говоря, YamlConfigration - ConfigurationSection * можно установить значение «object» в конфиге с доступом по «key».
    ConfigurationSection#get{Object}(key) получит занчение типа Object (#getString, #getInt etc.), которое располагается под ключом «key».

    Пример исспользования:
    PHP:
    # yaml config
    version0.4

    players
    :
      
    SoKnight'Hello, SoKnight'
      
    NyanGuyMF'Bye, NyanGuyMF'

    greeting'Hi, {player}'
    PHP:
    // Java code
    YamlConfiguration config YamlConfiguration.load(new File("path to file"));
    /* Получаем строки из конфига */
    String greeting config.getString("greeting");
    String nyan config.getString("players.NyanGuyMF");
    /* Добавляем значения в конфиг */
    config.set("players.Notch""Omg, Notch! >:o");
    config.set("version".5);
    Bukkit wiki по конфигурациями
    Bukkit docs для YamlConfiguration
     
  6. Автор темы
    SoKnight

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

    Баллы:
    66
    Имя в Minecraft:
    SoKnight_
    I'm press F =) Ответ получен, тему закрываю. Всем спасибо за помощь.
     
Статус темы:
Закрыта.

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