the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "net.minecraft.world.entity.ai.control.h"
3#include "net.minecraft.world.entity.ai.goal.h"
4#include "net.minecraft.world.entity.ai.navigation.h"
5#include "net.minecraft.world.entity.npc.h"
6#include "net.minecraft.world.entity.animal.h"
7#include "net.minecraft.world.level.h"
8#include "net.minecraft.world.phys.h"
9#include "TakeFlowerGoal.h"
10
11TakeFlowerGoal::TakeFlowerGoal(Villager *villager)
12{
13 takeFlower = false;
14 pickupTick = 0;
15 golem = weak_ptr<VillagerGolem>();
16
17 this->villager = villager;
18 setRequiredControlFlags(Control::MoveControlFlag | Control::LookControlFlag);
19}
20
21bool TakeFlowerGoal::canUse()
22{
23 if (villager->getAge() >= 0) return false;
24 if (!villager->level->isDay()) return false;
25
26 vector<shared_ptr<Entity> > *golems = villager->level->getEntitiesOfClass(typeid(VillagerGolem), villager->bb->grow(6, 2, 6));
27 if (golems->size() == 0)
28 {
29 delete golems;
30 return false;
31 }
32
33 //for (Entity e : golems)
34 for(AUTO_VAR(it,golems->begin()); it != golems->end(); ++it)
35 {
36 shared_ptr<VillagerGolem> vg = dynamic_pointer_cast<VillagerGolem>(*it);
37 if (vg->getOfferFlowerTick() > 0)
38 {
39 golem = weak_ptr<VillagerGolem>(vg);
40 break;
41 }
42 }
43 delete golems;
44 return golem.lock() != NULL;
45}
46
47bool TakeFlowerGoal::canContinueToUse()
48{
49 return golem.lock() != NULL && golem.lock()->getOfferFlowerTick() > 0;
50}
51
52void TakeFlowerGoal::start()
53{
54 pickupTick = villager->getRandom()->nextInt((int) (OfferFlowerGoal::OFFER_TICKS * 0.8));
55 takeFlower = false;
56 golem.lock()->getNavigation()->stop();
57}
58
59void TakeFlowerGoal::stop()
60{
61 golem = weak_ptr<VillagerGolem>();
62 villager->getNavigation()->stop();
63}
64
65void TakeFlowerGoal::tick()
66{
67 villager->getLookControl()->setLookAt(golem.lock(), 30, 30);
68 if (golem.lock()->getOfferFlowerTick() == pickupTick)
69 {
70 villager->getNavigation()->moveTo(golem.lock(), 0.5f);
71 takeFlower = true;
72 }
73
74 if (takeFlower)
75 {
76 if (villager->distanceToSqr(golem.lock()) < 2 * 2)
77 {
78 golem.lock()->offerFlower(false);
79 villager->getNavigation()->stop();
80 }
81 }
82}