#include "../../Platform/stdafx.h" #include "../../Headers/net.minecraft.world.entity.h" #include "../../Headers/net.minecraft.world.entity.animal.h" #include "OwnerHurtTargetGoal.h" OwnerHurtTargetGoal::OwnerHurtTargetGoal(TamableAnimal* tameAnimal) : TargetGoal(tameAnimal, 32, false) { this->tameAnimal = tameAnimal; setRequiredControlFlags(TargetGoal::TargetFlag); timestamp = 0; } bool OwnerHurtTargetGoal::canUse() { if (!tameAnimal->isTame()) return false; std::shared_ptr owner = std::dynamic_pointer_cast(tameAnimal->getOwner()); if (owner == NULL) return false; ownerLastHurt = std::weak_ptr(owner->getLastHurtMob()); int ts = owner->getLastHurtMobTimestamp(); std::shared_ptr locked = ownerLastHurt.lock(); return ts != timestamp && canAttack(locked, false) && tameAnimal->wantsToAttack(locked, owner); } void OwnerHurtTargetGoal::start() { mob->setTarget(ownerLastHurt.lock()); std::shared_ptr owner = std::dynamic_pointer_cast(tameAnimal->getOwner()); if (owner != NULL) { timestamp = owner->getLastHurtMobTimestamp(); TargetGoal::start(); } }