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

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

energy455

Активный участник
Пользователь
Баллы
78
Всем привет)

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

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



И еще) Как можно узнать кто поставил табличку, админ или игрок)
 
Есть еще событие PlayerInteractEntityEvent.

Используйте BlockPlaceEvent.
BlockPlaceEvent#getPlayer().isOp().
 
Если табличка уже стоит, то вы не сможете узнать кто ее поставил. Надо заранее добавлять поставленной табличке мета-данные, чтобы по клику узнавать, какой игрок ее поствил.
И вообще, эта тема отличается от той, которая указана в заголовке.
 
Если табличка уже стоит, то вы не сможете узнать кто ее поставил. Надо заранее добавлять поставленной табличке мета-данные, чтобы по клику узнавать, какой игрок ее поствил.
И вообще, эта тема отличается от той, которая указана в заголовке.
понял спасибо, теперь вернемся к теме заголовка.


Есть еще событие PlayerInteractEntityEvent.
этим методом слушать?
нужно отловить, если игрок из моей же команды бьет меня, то..
 
Хм. Раз он только клик ПКМ отлавливает, тогда все же вам надо слушать EntityDamageByEntityEvent и разрешить френдлифаер.
Дальше далайте проверки и просто отменяйте событие(EntityDamageByEntityEvent#setCancelled(true)), чтобы игрок не нанес урон по своему.
 
Хм. Раз он только клик ПКМ отлавливает, тогда все же вам надо слушать EntityDamageByEntityEvent и разрешить френдлифаер.
Дальше далайте проверки и просто отменяйте событие(EntityDamageByEntityEvent#setCancelled(true)), чтобы игрок не нанес урон по своему.
раз другого выхода нет, так и сделаю) Спасибо :)
Если табличка уже стоит, то вы не сможете узнать кто ее поставил. Надо заранее добавлять поставленной табличке мета-данные, чтобы по клику узнавать, какой игрок ее поствил.
И вообще, эта тема отличается от той, которая указана в заголовке.
Код:
e.getBlockPlaced().setMetadata
добавить мета данные, как я понял так, но что передавать в параметр metaDataValue?
 
Лучше бы вам не класть указатель на Player в конструктор FixedMetadataValue.
Делайте так: e.getBlockPlaced().setMetadata(this, e.getPlayer().getUniqueId().toString());//или e.getPlayer().getName()

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

Надеюсь, вы знаете как потом получить игрока по его uuid или по имени?
я чуть ошибся, использовал this в статик методе)

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

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

Назад
Верх