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

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    Может кому понадобится?
    Код:
    // Запись локации в конфигурацию
    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. Хостинг MineCraft
    <
  3. Blc_Dragon

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

    Баллы:
    31
    Имя в Minecraft:
    Blc_Dragon
  4. Автор темы
    Типа админ:D

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

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    ???
     
  5. Blc_Dragon

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

    Баллы:
    31
    Имя в Minecraft:
    Blc_Dragon
    ты не знаешь про хорошие методы, поэтому будешь "дарить" всем костыли?
     
  6. Автор темы
    Типа админ:D

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

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    Да.
     
  7. AtomicInteger

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

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

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

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

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    не трогай*
     
  10. _MasterCapeXD_

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

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

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
  12. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    [​IMG]
     
  13. AtomicInteger

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

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

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

    Баллы:
    31
    Имя в Minecraft:
    Blc_Dragon
    т.е. лишние километры текста, лишние переменные, лишние методы в коде - это хорошо. так что ли?
     
  15. Автор темы
    Типа админ:D

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

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

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

    Баллы:
    46
    Ты о чём?
     
  17. Blc_Dragon

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

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

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

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

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

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