Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите отловить кого ударил плеер

Тема в разделе "Разработка плагинов для новичков", создана пользователем energy455, 29 июл 2015.

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

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

    Баллы:
    78
    Skype:
    vlad_street
    Всем привет)

    Есть команда, игроки друг друга бить не могут(setAllowFriendlyFire(false)).
    Как можно отловить, кого ударил игрок который в той же команде?

    Через EntityDamageByEntityEvent все работает, если setAllowFriendlyFire(true). Иначе он просто не срабатывает)
    Подскажите пожалуйста.



    И еще) Как можно узнать кто поставил табличку, админ или игрок)
     
  2. Хостинг MineCraft
    <
  3. leonmark061

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

    Баллы:
    76
    Есть еще событие PlayerInteractEntityEvent.

    Используйте BlockPlaceEvent.
    BlockPlaceEvent#getPlayer().isOp().
     
  4. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    Спасибо. Как его можно вызвать с метода PlayerInteractEvent ?

    игрок кликнул по табличке, если табличку поставил админ, то гуд
     
  5. leonmark061

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

    Баллы:
    76
    Если табличка уже стоит, то вы не сможете узнать кто ее поставил. Надо заранее добавлять поставленной табличке мета-данные, чтобы по клику узнавать, какой игрок ее поствил.[DOUBLEPOST=1438154374,1438154310][/DOUBLEPOST]И вообще, эта тема отличается от той, которая указана в заголовке.
     
  6. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    понял спасибо, теперь вернемся к теме заголовка.


    этим методом слушать?
    нужно отловить, если игрок из моей же команды бьет меня, то..
     
  7. saharin94

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

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Лол, это эвент клика ПКМ по Entity.
     
  8. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    я уже догнал xD
     
  9. leonmark061

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

    Баллы:
    76
    Хм. Раз он только клик ПКМ отлавливает, тогда все же вам надо слушать EntityDamageByEntityEvent и разрешить френдлифаер.
    Дальше далайте проверки и просто отменяйте событие(EntityDamageByEntityEvent#setCancelled(true)), чтобы игрок не нанес урон по своему.
     
  10. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    раз другого выхода нет, так и сделаю) Спасибо :)[DOUBLEPOST=1438171102,1438169073][/DOUBLEPOST]
    Код:
    e.getBlockPlaced().setMetadata
    добавить мета данные, как я понял так, но что передавать в параметр metaDataValue?
     
  11. leonmark061

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

    Баллы:
    76
    new FixedMetadataValue((Plugin) plugin, (Object) value).
     
  12. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
  13. leonmark061

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

    Баллы:
    76
    Лучше бы вам не класть указатель на Player в конструктор FixedMetadataValue.
    Делайте так: e.getBlockPlaced().setMetadata(this, e.getPlayer().getUniqueId().toString());//или e.getPlayer().getName()

    Надеюсь, вы знаете как потом получить игрока по его uuid или по имени?
     
  14. Автор темы
    energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    я чуть ошибся, использовал this в статик методе)

    спасибо большое.
    да, знаю))
     

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