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/FleeSunGoal.cpp | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Minecraft.World/FleeSunGoal.cpp (limited to 'Minecraft.World/FleeSunGoal.cpp') diff --git a/Minecraft.World/FleeSunGoal.cpp b/Minecraft.World/FleeSunGoal.cpp new file mode 100644 index 00000000..a9799038 --- /dev/null +++ b/Minecraft.World/FleeSunGoal.cpp @@ -0,0 +1,52 @@ +#include "stdafx.h" +#include "net.minecraft.world.entity.ai.control.h" +#include "net.minecraft.world.entity.ai.navigation.h" +#include "net.minecraft.world.entity.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.phys.h" +#include "FleeSunGoal.h" + +FleeSunGoal::FleeSunGoal(PathfinderMob *mob, float speed) +{ + this->mob = mob; + this->speed = speed; + this->level = mob->level; + setRequiredControlFlags(Control::MoveControlFlag); +} + +bool FleeSunGoal::canUse() +{ + if (!level->isDay()) return false; + if (!mob->isOnFire()) return false; + if (!level->canSeeSky(Mth::floor(mob->x), (int) mob->bb->y0, Mth::floor(mob->z))) return false; + + Vec3 *pos = getHidePos(); + if (pos == NULL) return false; + wantedX = pos->x; + wantedY = pos->y; + wantedZ = pos->z; + return true; +} + +bool FleeSunGoal::canContinueToUse() +{ + return !mob->getNavigation()->isDone(); +} + +void FleeSunGoal::start() +{ + mob->getNavigation()->moveTo(wantedX, wantedY, wantedZ, speed); +} + +Vec3 *FleeSunGoal::getHidePos() +{ + Random *random = mob->getRandom(); + for (int i = 0; i < 10; i++) + { + int xt = Mth::floor(mob->x + random->nextInt(20) - 10); + int yt = Mth::floor(mob->bb->y0 + random->nextInt(6) - 3); + int zt = Mth::floor(mob->z + random->nextInt(20) - 10); + if (!level->canSeeSky(xt, yt, zt) && mob->getWalkTargetValue(xt, yt, zt) < 0) return Vec3::newTemp(xt, yt, zt); + } + return NULL; +} \ No newline at end of file -- cgit v1.2.3