From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/HurtByTargetGoal.cpp | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Minecraft.World/HurtByTargetGoal.cpp (limited to 'Minecraft.World/HurtByTargetGoal.cpp') diff --git a/Minecraft.World/HurtByTargetGoal.cpp b/Minecraft.World/HurtByTargetGoal.cpp new file mode 100644 index 00000000..a146c47d --- /dev/null +++ b/Minecraft.World/HurtByTargetGoal.cpp @@ -0,0 +1,45 @@ +#include "stdafx.h" +#include "net.minecraft.world.entity.h" +#include "net.minecraft.world.phys.h" +#include "net.minecraft.world.level.h" +#include "HurtByTargetGoal.h" + +HurtByTargetGoal::HurtByTargetGoal(Mob *mob, bool alertSameType) : TargetGoal(mob, 16, false) +{ + this->alertSameType = alertSameType; + setRequiredControlFlags(TargetGoal::TargetFlag); +} + +bool HurtByTargetGoal::canUse() +{ + return canAttack(mob->getLastHurtByMob(), false); +} + +void HurtByTargetGoal::start() +{ + mob->setTarget(mob->getLastHurtByMob()); + oldHurtByMob = mob->getLastHurtByMob(); + + if (alertSameType) + { + vector > *nearby = mob->level->getEntitiesOfClass(typeid(*mob), AABB::newTemp(mob->x, mob->y, mob->z, mob->x + 1, mob->y + 1, mob->z + 1)->grow(within, 4, within)); + for(AUTO_VAR(it, nearby->begin()); it != nearby->end(); ++it) + { + shared_ptr other = dynamic_pointer_cast(*it); + if (this->mob->shared_from_this() == other) continue; + if (other->getTarget() != NULL) continue; + other->setTarget(mob->getLastHurtByMob()); + } + delete nearby; + } + + TargetGoal::start(); +} + +void HurtByTargetGoal::tick() +{ + if (mob->getLastHurtByMob() != NULL && mob->getLastHurtByMob() != oldHurtByMob) + { + this->start(); + } +} -- cgit v1.2.3