Войти или зарегистрироваться

Помогите Эвент наведения курсора на игрока

Есть 1 способ, но это скажем так.. костыль.
В общем каждый короткий промежуток времени можно запускать с большой силой снаряд (projectile) по взгляду игрока, но дописав в него спец. метадату и сделав невидимым(Хотя при большой силе он и так будет незаметен), а затем слушать EntityDamageByEntity и в случае если наш тип сущности того кто ударил эквивалентен например снежку, то в случае наличия спец. метадаты отменять event и задавать как цель event.getEntity()
Таким образом мы сразу решаем проблему с тем что игрок может быть спрятан за блоком, но это таки довольно костыльно.
Можно также кидать проджектайл при EntityMoveEvent, но это еще хуже, так что лучше используй общий шедулер который будет бегать по игрокам, или Шедулер-Куратор отдельный для каждого, но опять же это как-то костыльно [2]

В общем отпишись если найдешь что :)
Это не очень хорошо, ибо мне надо определить игрока сразу же, как на того навели курсор. Если сделать выброс снежка каждые 20 тиков, то нагрузка будет большая. В любом случае нагрузка будет большая, но надо выбрать наименьшую.
 
Это не очень хорошо, ибо мне надо определить игрока сразу же, как на того навели курсор. Если сделать выброс снежка каждые 20 тиков, то нагрузка будет большая. В любом случае нагрузка будет большая, но надо выбрать наименьшую.
Если не секрет, то зачем нужно?
 
В любом случае нагрузка будет большая, но надо выбрать наименьшую.
Посмотрите код damage indicators, там ни чего сложного, а нагрузку меньшую чем обработка на стороне клиента вы точно не получите.
 
Если не секрет, то зачем нужно?
Хочу сделать так: если игрок убивал игрока, то он становится его врагом. При наведении курсора на врага, его ник становится красным. Вот-так вот.
 
Есть 1 способ, но это скажем так.. костыль.
В общем каждый короткий промежуток времени можно запускать с большой силой снаряд (projectile) по взгляду игрока, но дописав в него спец. метадату и сделав невидимым(Хотя при большой силе он и так будет незаметен), а затем слушать EntityDamageByEntity и в случае если наш тип сущности того кто ударил эквивалентен например снежку, то в случае наличия спец. метадаты отменять event и задавать как цель event.getEntity()
Таким образом мы сразу решаем проблему с тем что игрок может быть спрятан за блоком, но это таки довольно костыльно.
Можно также кидать проджектайл при EntityMoveEvent, но это еще хуже, так что лучше используй общий шедулер который будет бегать по игрокам, или Шедулер-Куратор отдельный для каждого, но опять же это как-то костыльно [2]

В общем отпишись если найдешь что :)
Я так гранаты себе сделал:)
 
Хочу сделать так: если игрок убивал игрока, то он становится его врагом. При наведении курсора на врага, его ник становится красным. Вот-так вот.
А ведь так уже сделано с зомби с кастомным именем: при наведении на зомби над ним появляется его имя
 
Всяко советую отказаться от затее, и красить ник по достижению определенного расстояния, ибо такой тяжкий код ради такой маленькой фичурки...
По моему не стоит того.
Хотелось бы узнать к чему пришел ТС :)
 
Хотелось бы узнать к чему пришел ТС :)
Я отказался, теперь у меня другая проблема! Как засунуть зомбейке в руку предмет? Выкидываю прямо под ним предмет, так эта гадина не берет! Как сделать так, чтоб он взял?
 
Я отказался, теперь у меня другая проблема! Как засунуть зомбейке в руку предмет? Выкидываю прямо под ним предмет, так эта гадина не берет! Как сделать так, чтоб он взял?
setItemInHand? Или я что-то пропустил.
 
Я отказался, теперь у меня другая проблема! Как засунуть зомбейке в руку предмет? Выкидываю прямо под ним предмет, так эта гадина не берет! Как сделать так, чтоб он взял?
"Суём" предмет в руку:
Код:
zombie.getEntityEquipment().setItemInHand(item)
Чтобы он подобрал:
Код:
zombie.setCanPickupItems(true);

А вот и тема про курсор:
https://forums.bukkit.org/threads/how-to-check-if-a-player-is-looking-at-a-player.163653/
Сборник тем про наведения курсора:
https://forums.bukkit.org/threads/how-to-get-an-entity-on-cursor.172259/
Работоспособность этих тем не гарантирую.
 
Последнее редактирование:
"Суём" предмет в руку:
Код:
zombie.getEntityEquipment().setItemInHand(item)
Чтобы он подобрал:
Код:
zombie.setCanPickupItems(true);

А вот и тема про курсор:
https://forums.bukkit.org/threads/how-to-check-if-a-player-is-looking-at-a-player.163653/
Сборник тем про наведения курсора:
https://forums.bukkit.org/threads/how-to-get-an-entity-on-cursor.172259/
Работоспособность этих тем не гарантирую.
Спасибо, братишка :3
 
Хочу сделать так: если игрок убивал игрока, то он становится его врагом. При наведении курсора на врага, его ник становится красным. Вот-так вот.


Может проще подсвечивать ник тогда когда он находится на определенном расстоянии? Без вычисления наведения?

Если же нужно именно когда "прицеливаешься".
То тут решения два:
1. Получаешь перечень блоков по направлению взора (вот пример из Laser) сканируешь все блоки и определяешь есть ли игрок в данном блоке, т.е. проверяешь координаты игрока в соотношении к каждому блоку. Вот пример из Laser: выбор всех Entity из списка блоков. Ну и соответственно - результат.
2. Вспоминешь школьные знания геометрии и вычисляешь расстояние от точки (кординты игрока) до линии (определяемой направлением взора). Если это расстояние меньше какого-то значения (допустим 1 блок) то подсвечиваешь ник.

И честно говоря, думаю в заданной задаче, предпочтительнее второй варинт: первый, как мне кажется, будет ресурсоемкий - это сканирование множества блоков в PlayerMoveEvent. Разве что поставить какой-то таймаут.

Это несколько иное. Я бы даже сказал - совсем другое. Это не то на что смотрит игрок, а то на что "нацелен" моб. Т.е. если стоит три игрока и рядом крипер - то крипер нацелен на одного из игроков (хотя может на него и не смотрит ;)). Если этого игрока убил другой крипер, то цель переопределяется и предоставляется возможность обработать это событие (допустим перевесить цель вместо Васи на Петю).
 
Назад
Верх