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

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

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

  1. Автор темы
    kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    Afek
    Всем привет! У меня есть лист с локациями! Как узнать какая из локаций ближе к игроку? Думал сделать через if(p.distance(loc) < distanceloc)... Но нечего не получилось? Кто сможет помочь? Заранее спасибо )
     
  2. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Comparator
     
  3. alexandrage

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

    Баллы:
    173
    Сортировкой не?
     
  4. Alastar

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

    Баллы:
    173
    Рефлексия
     
  5. demkom

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

    Баллы:
    76
    Имя в Minecraft:
    G_demkom_G
    чего
     
  6. bristol

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

    Баллы:
    46
    Лол, а как тебе тут рефлексия поможет?
     
  7. Alastar

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

    Баллы:
    173
    Ой, я думал мы играем в "предложи самый нелепый способ найти минимум"
     
  8. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    min(loc1, loc2, loc3, ...)
     
  9. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    [​IMG]
     
  10. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    чё ты этим хочешь сказать?)
     
  11. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Брать минимальную локацию когда ему нужно ближайшую, гениально.
     
  12. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    немного не так. может это поможет
    [
    ))
     
  13. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Мой вариант. Не знаю как я засунул всё в 1 строку, но должно работать.
    PHP:
    public Location getNearestLocation(Player player, List<Locationlocations) {
        
    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;
    }
     
    Последнее редактирование: 17 апр 2018
  14. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    PHP:
    Location loc e.getPlayer().getLocation();
    ну а дальше просто
    min(abs(loc - loc1),abs(loc - loc2), abs(loc - loc3), ...)

    Я это не тестил, не чмырите за неправильность ;)
     
  15. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Сортировка через компаратор не в моде?
     
  16. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Укажу на ошибку. Для начала надеюсь что это псевдокод, просто чтобы показать какие методы использовать.
    Локации - не числа, нельзя просто взять модуль. Метод для расстояния между локациями уже есть - Location.distance(location2), но для оптимизации лучше использовать расстояние в квадрате. Даже если у тебя есть набор расстояний, min вернёт тебе число, а не локацию. Надо пройтись по всем локациям, опять считать расстояние чтобы сравнить с минимальным, что довольно костыльно.
    Проще создать отдельную переменную с текущей ближайшей локацией, и сравнивать все в списке с ней.
     
  17. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Location не наследует Comparable, а писать свой не хотелось.
     
  18. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    да, это псевдокод, я не "джавник"
     
  19. Автор темы
    kefavova

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

    Баллы:
    76
    Имя в Minecraft:
    Afek
    Я хотел бы сделать через 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;
    }
    (Это плагин, а не мод....)
     
  20. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Сделай компаратор и все, а не занимайся хренью
     

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