Вопрос Заставить Хранителя игнорировать конкретных игроков

Версия Minecraft
1.19.X

lolmanlol

Пользователь
Сообщения
3
Пишу плагин для игнорирования игрока враждебными мобами. На всех, кроме Хранителя плагин работает нормально. Попытался найти на него ивенты и нашёл только WardenAngerChangeEvent, при отмене которого, Хранитель больше не атакует, но теперь просто следует за игроком и безостановочно занюхивает его...

Вопрос: как сделать так, чтобы хранитель перестал вынюхивать игрока?
Код ивентов:

@EventHandler
public void onTargetEvent(EntityTargetLivingEntityEvent event) {
if(event.getTarget() instanceof Player) {
event.setCancelled(true);
}
}
@EventHandler
public void angerWarden(WardenAngerChangeEvent event){
if(event.getTarget() instanceof Player) {
event.setCancelled(true);
}
}
 
Решение
Он не агриться и не атакует. Не важно, что он идёт на звук, проблема в том, что он просто идёт по пятам игрока, как бы вынюхивая его, даже если игрок идёт на шифте и не издаёт звуков.
через NMS изменяй логику ИИ хранителя
Java:
@EventHandler
public void onTarget(EntityTargetEvent e) {
  if (e.getTarget() instanceof Player player) {
    // Проверяй, игнорируется ли player
  }
}

Если у тебя джава ниже 16, то проапай её, на версии 1.19 уже никто не сидит ниже 17
 
Попробуй получить вардена через Entity и ставить ему warden.setTarget(null);
Проблема в том, что ивент EntityTargetEvent, как и EntityTargetLivingEntityEvent? срабатывает только на моменте, когда он уже вошёл в некий режим атаки. Если он не атакует, то просто следует за игроком буквально вынюхивая его след!
Java:
@EventHandler
public void onTarget(EntityTargetEvent e) {
  if (e.getTarget() instanceof Player player) {
    // Проверяй, игнорируется ли player
  }
}

Если у тебя джава ниже 16, то проапай её, на версии 1.19 уже никто не сидит ниже 17
Проверку делал, выводил текст в консоль, когда ивент срабатывает и ник игрока, когда моб агриться на и него. У хранителя этот ивент срабатывает только если агр происходит от удара по нему, поэтому для него использовал ивент WardenAngerChangeEvent, который в принципе не даёт ему начать атаковать игрока. Проводил различные тест, поэтому уверен в сказаном.

Он не агриться и не атакует. Не важно, что он идёт на звук, проблема в том, что он просто идёт по пятам игрока, как бы вынюхивая его, даже если игрок идёт на шифте и не издаёт звуков.

Версия джавы: jdk-17.0.9
 
Последнее редактирование:
Он не агриться и не атакует. Не важно, что он идёт на звук, проблема в том, что он просто идёт по пятам игрока, как бы вынюхивая его, даже если игрок идёт на шифте и не издаёт звуков.
через NMS изменяй логику ИИ хранителя
 
через NMS изменяй логику ИИ хранителя
Спасибо, на будущее очень поможет.
Подумал о том, где в общем он используется и решил, "Раз он не трогает конкретных игроков, а просто преследует их, то может так и надо?". Можно сказать, не баг, а фишка)

Итог: Через ивенты полность не отрубить его поиск игрока, Единственное решение - Менять логику ИИ хранителя, как это предложил делать Destroy

Всех Благодарю за помощь, до свидания!
 
Назад
Сверху Снизу