Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Типа админ:D

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Qamulex
Может кому понадобится?
Java:
// Запись локации в конфигурацию
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;
    }
}
Способ применения:
Java:
Location playerLocation = player.getLocation();
writeLocationToConfig("path.to.player.location", playerLocation);
// чё то там пробелы, всякая другая фигня ....
// ....
Location savedPlayerLocation = getLocationFromConfig("path.to.player.location");
// дальнейшие манипуляции....
Как это будет выглядеть в конфиге? Пожалуйста:
YAML:
path:
  to:
    player:
      location: world,231,46,837
Дополнительные методы для отдельного превращения локаций в String и обратно.
Пригодится для сравнения локаций: if(strLocation1.equals(strLocation2))
Java:
// Превратить 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

Возможно, есть свои методы, которые есть в ядре, но я такие не видел.
 
Последнее редактирование:
Про неявное приведение типов не слыхал?
  • return null;
  • }
Вот это обработка ошибок.Высший пилотаж.
  • 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);
  • }
А тут обработка уже не нужна?Понимаю, вероятность того, что кто-то туда положит не ту строку мала, но всё же, это должно обрабатываться.
Так делать плохо, а ещё хуже советовать так делать кому-то ещё.Но, можешь подправить и, быть может, сгодится кому.
 
Про неявное приведение типов не слыхал?

Вот это обработка ошибок.Высший пилотаж.

А тут обработка уже не нужна?Понимаю, вероятность того, что кто-то туда положит не ту строку мала, но всё же, это должно обрабатываться.
Так делать плохо, а ещё хуже советовать так делать кому-то ещё.Но, можешь подправить и, быть может, сгодится кому.
Работает - не трожь
 
это не красиво в конфиге смотрится. Для одной локации ещё норм. А для 10+ уже не оч.
images
 
сравни размеры кода из этого стартапа, и размеры кода с той ссыли, которую я кинул.

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

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

Назад
Верх