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

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

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

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

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Подскажите Event, который срабатывает, если игрок наводит курсор на entity.
     
  2. kris13

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

    Баллы:
    78
    Нет такого.
     
  3. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    А я думал, что упустил где-то)
     
  4. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    ProtocolLib'ом можно отлавливать поворот головы игрока.
     
  5. kirill2011s

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

    Баллы:
    103
    Зачем протокол либ, если есть PlayerMoveEvent?
     
  6. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    И как это реализовать с помощью PlayerMoveEvent? Он ведь только за передвижения.
     
  7. kirill2011s

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

    Баллы:
    103
    Вообще-то нет, я проверял, даже при движении игрока головой, вызывается этот эвент.
     
    ПриветОтЛайки нравится это.
  8. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    А как ты тогда определишь, что игрок смотрит на entity?
     
  9. kirill2011s

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

    Баллы:
    103
    Так собственно в чем вопрос? В том что лучше, подключать библиотеку или пользоваться стандартным эвентом, или же алгоритм который говорит смотрит-ли игрок на игрока?
     
  10. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Явно последнее, ибо 2 первых не дадут мне нужный результат
     
  11. kirill2011s

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

    Баллы:
    103
    Ну вообще, тут надо посидеть и подумать с часик.
    Если у меня останется время, я подумаю. А так вообще, задача программиста и состоит в придумывании алгоритма, а этот раздел предназначен только чтобы узнать какие-то основные функции нужные для составления алгоритма.

    Занятие инерестное, я завтра посараюсь предложить что-нибудь работающее.
     
  12. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Можно взять 2 вектора(2 локации - смотрящего и того, на кого смотрят) и с помощью метода angle в классе Vector проверять отклонение взгляда на игрока. И естественно нужно пилить отдельные проверки на расстояние между игроками и спрятан ли он за блоками
     
  13. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    А нельзя Entity преобразовать в Block? :)
    Можно еще попробовать в игрока поставить 2 блока воздуха, задать мету и так проверять. Но один минус, возможны лаги на сервере из-за постоянного перемещения блоков воздуха.
     
  14. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Боже, а зачем блок то?
     
  15. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Первая мысль преобразовать в блок, чтоб проверять getTargetBlock() :D
    А что на счет второй?
     
  16. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Всё проще, выясняешь, когда игрок смотрит на игрока(как - см. выше), узнаёшь между ними расстояние и через тот же getTargetBlock() выясняешь, нет ли между ними блока
     
  17. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Нагрузка будет большая?
     
  18. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Хз
     
  19. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

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

    В общем отпишись если найдешь что :)
     
  20. kris13

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

    Баллы:
    78
    Я бы написал клиентский мод... ну правда, гораздо проще и удобней, а главное без костылей.
     

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