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

Стартап Работа с локациями в конфиге

Тема в разделе "Разработка плагинов для новичков", создана пользователем Типа админ:D, 15 апр 2017.

  1. Автор темы
    Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Может кому понадобится?
    Код:
    // Запись локации в конфигурацию
    public static void writeLocationToConfig(String path, Location location){
        String x = String.valueOf(location.getX());
        String y = String.valueOf(location.getY());
        String z = String.valueOf(location.getZ());
        String world = location.getWorld().getName();
        String toConfig = world+","+x+","+y+","+z;
        plugin.getConfig().set(path, toConfig);
    }
    // Получение локации из конфига
    public static Location getLocationFromConfig(String path){
        try {
            String[] locationString = plugin.getConfig().getString(path).split(",");
            World world = Bukkit.getWorld(locationString[0]);
            double x = Double.valueOf(locationString[1]);
            double y = Double.valueOf(locationString[2]);
            double z = Double.valueOf(locationString[3]);
            return new Location(world, x, y, z);
        } catch (Exception exception) {
            return null;
        }
    }
    Способ применения:
    Код:
    Location playerLocation = player.getLocation();
    writeLocationToConfig("path.to.player.location", playerLocation);
    // чё то там пробелы, всякая другая фигня ....
    // ....
    Location savedPlayerLocation = getLocationFromConfig("path.to.player.location");
    // дальнейшие манипуляции....
    Как это будет выглядеть в конфиге? Пожалуйста:
    Код:
    path:
      to:
        player:
          location: world,231,46,837
    Дополнительные методы для отдельного превращения локаций в String и обратно.
    Пригодится для сравнения локаций: if(strLocation1.equals(strLocation2))
    Код:
    // Превратить Location в String
    // Пример вывода: world,281,83,392
    public static String locationAsString(Location location){
        return location.getWorld().getName() + ","
                + location.getX() + ","
                + location.getY() + ","
                + location.getZ();
    }
    // Превратить String в Location
    public static Location stringAsLocation(String locationString){
        String[] _locationString = locationString.split(",");
        World world = Bukkit.getWorld(_locationString[0]);
        double x = Double.valueOf(_locationString[1]);
        double y = Double.valueOf(_locationString[2]);
        double z = Double.valueOf(_locationString[3]);
        return new Location(world, x, y, z);
    }
    Это самые рабочие(если подумать) методы, которые не проверялись.
    Значения могут быть и не только 281,83,392, но и с точностью до десятичных(кроме мира, конечно): world,281.281235,83.289,392.9281884

    Возможно, есть свои методы, которые есть в ядре, но я такие не видел.
     
    Последнее редактирование: 15 апр 2017
  2. Blc_Dragon

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

    Баллы:
    76
  3. Автор темы
    Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    ???
     
  4. Blc_Dragon

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

    Баллы:
    76
    ты не знаешь про хорошие методы, поэтому будешь "дарить" всем костыли?
     
  5. Автор темы
    Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Да.
     
  6. AtomicInteger

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

    Баллы:
    76
    Про неявное приведение типов не слыхал?
    Вот это обработка ошибок.Высший пилотаж.
    А тут обработка уже не нужна?Понимаю, вероятность того, что кто-то туда положит не ту строку мала, но всё же, это должно обрабатываться.
    Так делать плохо, а ещё хуже советовать так делать кому-то ещё.Но, можешь подправить и, быть может, сгодится кому.
     
  7. Автор темы
    Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Работает - не трожь
     
  8. xDark

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

    Баллы:
    96
    не трогай*
     
  9. _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Мой принцип)0))
     
  10. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
  11. alexandrage

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

    Баллы:
    173
    [​IMG]
     
  12. AtomicInteger

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

    Баллы:
    76
    А в коде выглядит ещё хуже.
     
  13. Blc_Dragon

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

    Баллы:
    76
    т.е. лишние километры текста, лишние переменные, лишние методы в коде - это хорошо. так что ли?
     
  14. Автор темы
    Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Кому как
     
  15. AtomicInteger

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

    Баллы:
    76
    Ты о чём?
     
  16. Blc_Dragon

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

    Баллы:
    76
    сравни размеры кода из этого стартапа, и размеры кода с той ссыли, которую я кинул.

    да и в принципе это все бессмысленный спор, ибо кому что нравится.
     
  17. AtomicInteger

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

    Баллы:
    76
    Вообще, я был за твой вариант.Так как писать свой сериализатор на уже сериализуемый объект, как минимум, глупо, да ещё и с такими ошибками.
     

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