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

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

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

  1. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    так вы кликаете по блоку. клик по блоку происходит на достаточно длинном расстоянии. Я в «лазере» для стрельбы учитывал три варианта: клик по блоку, по воздуху и по энтити
     
  2. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Обрати внимание на аннотацию!
    Код:
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
    В ней установлено правило - не обрабатывать событие, если оно отменено.
    А событие клика по воздуху изначально создается как отмененное (я сам удивился... но это так)
    Убери ignoreCancelled, и все заработает.

    Это еще раз говорит о том, что файл с исходниками нужно показывать полностью ;)
     
    smilesdc, Den_Abr, LaoTheLizard и ещё 1-му нравится это.
  3. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    По этому поводу я могу сказать только: офигеть!

    Как считаешь это чем-то оправдано или нужно писать тикет? ;)
     
  4. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Скорее всего это оправдано:
    Статус isCancelled() означает возможность воздействия игрока на блок.
    Действие клика в воздух само по себе - бесполезно, и никак не может повлиять на окружающий мир. Вот и становится отмененным по умолчанию, чтобы проще было слушать события, возможно приводящие к изменению блоков.
    Но если игрок выстрелил из лука, кинул яйцо, снежок, выстрелил из лука, кинул зелье и т.д. -
    это невозможно отменить через PlayerInteractEvent. Придется слушать ProjectileLaunchEvent, PlayerEggThrowEvent, EntityShootBowEvent и т.д.
     
  5. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    DPOH-VAR, большое спасибо. Я просто в этом понимаю чуть больше, чем ничего. Поэтому многих тонкостей пока не знаю.
    Всё заработало. Преобразованный плагин почти готов! :)
     
    slavik123123123 нравится это.
  6. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    LaoTheLizard, я тоже такой тонкости не знал. Кстати, когда-то наступал на эти грабли, но тогда решил, что PlayerInteractEvent не отрабатывает при клике по воздуху некоторыми предметами.

    DPOH-VAR, в общем - да. Получается всё логично. Отменять при клике по воздуху собственно нечего, поэтому оно изначально отменено.
     
  7. LaoTheLizard

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

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

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    потребуется
    item.getData()
    или
    item.getData().getData()
     
    ПриветОтМиднайта и LaoTheLizard нравится это.
  9. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    DPOH-VAR, спасибо, это именно то, что мне было нужно.
     

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