4jcraft/Minecraft.World/AI/Goals/OfferFlowerGoal.cpp
2026-03-13 17:06:56 -05:00

42 lines
1.4 KiB
C++

#include "../../Platform/stdafx.h"
#include "../../Headers/net.minecraft.world.entity.ai.control.h"
#include "../../Headers/net.minecraft.world.entity.npc.h"
#include "../../Headers/net.minecraft.world.entity.animal.h"
#include "../../Headers/net.minecraft.world.level.h"
#include "../../Headers/net.minecraft.world.phys.h"
#include "OfferFlowerGoal.h"
OfferFlowerGoal::OfferFlowerGoal(VillagerGolem* golem) {
this->golem = golem;
setRequiredControlFlags(Control::MoveControlFlag |
Control::LookControlFlag);
}
bool OfferFlowerGoal::canUse() {
if (!golem->level->isDay()) return false;
if (golem->getRandom()->nextInt(8000) != 0) return false;
villager = std::weak_ptr<Villager>(std::dynamic_pointer_cast<Villager>(
golem->level->getClosestEntityOfClass(typeid(Villager),
golem->bb->grow(6, 2, 6),
golem->shared_from_this())));
return villager.lock() != NULL;
}
bool OfferFlowerGoal::canContinueToUse() {
return _tick > 0 && villager.lock() != NULL;
}
void OfferFlowerGoal::start() {
_tick = OFFER_TICKS;
golem->offerFlower(true);
}
void OfferFlowerGoal::stop() {
golem->offerFlower(false);
villager = std::weak_ptr<Villager>();
}
void OfferFlowerGoal::tick() {
golem->getLookControl()->setLookAt(villager.lock(), 30, 30);
--_tick;
}