diff options
Diffstat (limited to 'Minecraft.World/TakeFlowerGoal.cpp')
| -rw-r--r-- | Minecraft.World/TakeFlowerGoal.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/Minecraft.World/TakeFlowerGoal.cpp b/Minecraft.World/TakeFlowerGoal.cpp index feb87093..48db34d3 100644 --- a/Minecraft.World/TakeFlowerGoal.cpp +++ b/Minecraft.World/TakeFlowerGoal.cpp @@ -24,24 +24,31 @@ bool TakeFlowerGoal::canUse() if (!villager->level->isDay()) return false; vector<shared_ptr<Entity> > *golems = villager->level->getEntitiesOfClass(typeid(VillagerGolem), villager->bb->grow(6, 2, 6)); - if (golems->size() == 0) + if ( golems == nullptr ) + return false; + + if ( golems->size() == 0) { delete golems; return false; } - //for (Entity e : golems) - for(AUTO_VAR(it,golems->begin()); it != golems->end(); ++it) - { - shared_ptr<VillagerGolem> vg = dynamic_pointer_cast<VillagerGolem>(*it); - if (vg->getOfferFlowerTick() > 0) + for (auto entity : *golems ) + { + if ( entity == nullptr ) + continue; + + // safe to call std::static_pointer_cast because of getEntitiesOfClass(typeid(VillagerGolem), ...) makes sure we do not have entities of any other type. + auto vg = std::static_pointer_cast<VillagerGolem>(entity); + if ( vg && vg->getOfferFlowerTick() > 0) { - golem = weak_ptr<VillagerGolem>(vg); - break; + golem = vg; + delete golems; + return true; } } delete golems; - return golem.lock() != NULL; + return false; } bool TakeFlowerGoal::canContinueToUse() |
