the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 82 lines 2.0 kB view raw
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}