Помогите Локация ближе к игроку

kefavova

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Afek
Всем привет! У меня есть лист с локациями! Как узнать какая из локаций ближе к игроку? Думал сделать через if(p.distance(loc) < distanceloc)... Но нечего не получилось? Кто сможет помочь? Заранее спасибо )
 
Ой, я думал мы играем в "предложи самый нелепый способ найти минимум"
 
0d4eeaa67e9bc48274617d950f7e5c7c.jpg
 
Мой вариант. Не знаю как я засунул всё в 1 строку, но должно работать.
PHP:
public Location getNearestLocation(Player player, List<Location> locations) {
    Location nearest = null;
    Location location = player.getLocation();
    for(Location loc : locations) {
        nearest = nearest == null ? loc : loc.distanceSquared(location) < nearest.distanceSquared(location) ? loc : nearest;
    }
    return nearest;
}
 
Последнее редактирование:
Брать минимальную локацию когда ему нужно ближайшую, гениально.
Всем привет! У меня есть лист с локациями! Как узнать какая из локаций ближе к игроку? Думал сделать через if(p.distance(loc) < distanceloc)... Но нечего не получилось? Кто сможет помочь? Заранее спасибо )
PHP:
Location loc = e.getPlayer().getLocation();
ну а дальше просто
min(abs(loc - loc1),abs(loc - loc2), abs(loc - loc3), ...)

Я это не тестил, не чмырите за неправильность 😉
 
PHP:
Location loc = e.getPlayer().getLocation();
ну а дальше просто
min(abs(loc - loc1),abs(loc - loc2), abs(loc - loc3), ...)

Я это не тестил, не чмырите за неправильность 😉
Укажу на ошибку. Для начала надеюсь что это псевдокод, просто чтобы показать какие методы использовать.
Локации - не числа, нельзя просто взять модуль. Метод для расстояния между локациями уже есть - Location.distance(location2), но для оптимизации лучше использовать расстояние в квадрате. Даже если у тебя есть набор расстояний, min вернёт тебе число, а не локацию. Надо пройтись по всем локациям, опять считать расстояние чтобы сравнить с минимальным, что довольно костыльно.
Проще создать отдельную переменную с текущей ближайшей локацией, и сравнивать все в списке с ней.
 
да, это псевдокод, я не "джавник"
Location не наследует Comparable, а писать свой не хотелось.
Сортировка через компаратор не в моде?
Сортировкой не?
Я хотел бы сделать через if()! Мне надо чтоб после проверки на дистанцию происходило какое-то действие...
Нашёл в интернете код но не могу разобраться что и как
Код:
    public static Location getLowestDistance(Location source, Location[] locs)
    {
    Location shortest = locs[0];
    for (Location loc : locs) {
        if (loc.distanceSquared(source) < shortest.distanceSquared(source))
            shortest = loc;
    }
    return shortest;
}

(Это плагин, а не мод....)
 
Я хотел бы сделать через if()! Мне надо чтоб после проверки на дистанцию происходило какое-то действие...
Нашёл в интернете код но не могу разобраться что и как
Код:
    public static Location getLowestDistance(Location source, Location[] locs)
    {
    Location shortest = locs[0];
    for (Location loc : locs) {
        if (loc.distanceSquared(source) < shortest.distanceSquared(source))
            shortest = loc;
    }
    return shortest;
}

(Это плагин, а не мод....)
Сделай компаратор и все, а не занимайся хренью
 
Назад
Верх