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

Не работает такая вещь

  • Автор темы Автор темы Tyzun
  • Дата начала Дата начала
так вы кликаете по блоку. клик по блоку происходит на достаточно длинном расстоянии. Я в «лазере» для стрельбы учитывал три варианта: клик по блоку, по воздуху и по энтити
 
Не видит эта процедура событий клика по воздуху. Вообще. Видимо, это нужно прослушивать каким-то другим методом.
Обрати внимание на аннотацию!
Java:
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
В ней установлено правило - не обрабатывать событие, если оно отменено.
А событие клика по воздуху изначально создается как отмененное (я сам удивился... но это так)
Убери ignoreCancelled, и все заработает.

Это еще раз говорит о том, что файл с исходниками нужно показывать полностью ;)
 
А событие клика по воздуху изначально создается как отмененное (я сам удивился... но это так)

По этому поводу я могу сказать только: офигеть!

Как считаешь это чем-то оправдано или нужно писать тикет? ;)
 
Как считаешь это чем-то оправдано или нужно писать тикет? ;)
Скорее всего это оправдано:
Статус isCancelled() означает возможность воздействия игрока на блок.
Действие клика в воздух само по себе - бесполезно, и никак не может повлиять на окружающий мир. Вот и становится отмененным по умолчанию, чтобы проще было слушать события, возможно приводящие к изменению блоков.
Но если игрок выстрелил из лука, кинул яйцо, снежок, выстрелил из лука, кинул зелье и т.д. -
это невозможно отменить через PlayerInteractEvent. Придется слушать ProjectileLaunchEvent, PlayerEggThrowEvent, EntityShootBowEvent и т.д.
 
DPOH-VAR, большое спасибо. Я просто в этом понимаю чуть больше, чем ничего. Поэтому многих тонкостей пока не знаю.
Всё заработало. Преобразованный плагин почти готов! :)
 
LaoTheLizard, я тоже такой тонкости не знал. Кстати, когда-то наступал на эти грабли, но тогда решил, что PlayerInteractEvent не отрабатывает при клике по воздуху некоторыми предметами.

DPOH-VAR, в общем - да. Получается всё логично. Отменять при клике по воздуху собственно нечего, поэтому оно изначально отменено.
 
Напоследок вопрос такой:
if(item.getType() == Material.SKULL_ITEM)
Так я выявил, что в руке у игрока череп. Это работает. Только при этом срабатывает, когда в руке любой череп - зомби, скелета, крипера, человека ли - все равно. Как написать, что я хочу выявить в руке голову крипера, подскажите?
 
Напоследок вопрос такой:
if(item.getType() == Material.SKULL_ITEM)
Так я выявил, что в руке у игрока череп. Это работает. Только при этом срабатывает, когда в руке любой череп - зомби, скелета, крипера, человека ли - все равно. Как написать, что я хочу выявить в руке голову крипера, подскажите?
потребуется
item.getData()
или
item.getData().getData()
 
Назад
Верх