the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 65 lines 2.2 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.entity.ai.control.h" 3#include "net.minecraft.world.entity.ai.util.h" 4#include "net.minecraft.world.entity.ai.navigation.h" 5#include "net.minecraft.world.entity.ai.village.h" 6#include "net.minecraft.world.entity.h" 7#include "net.minecraft.world.level.h" 8#include "net.minecraft.world.level.dimension.h" 9#include "MoveIndoorsGoal.h" 10 11MoveIndoorsGoal::MoveIndoorsGoal(PathfinderMob *mob) 12{ 13 insideX = insideZ = -1; 14 15 this->mob = mob; 16 setRequiredControlFlags(Control::MoveControlFlag); 17} 18 19bool MoveIndoorsGoal::canUse() 20{ 21 if ((mob->level->isDay() && !mob->level->isRaining()) || mob->level->dimension->hasCeiling) return false; 22 if (mob->getRandom()->nextInt(50) != 0) return false; 23 if (insideX != -1 && mob->distanceToSqr(insideX, mob->y, insideZ) < 2 * 2) return false; 24 shared_ptr<Village> village = mob->level->villages->getClosestVillage(Mth::floor(mob->x), Mth::floor(mob->y), Mth::floor(mob->z), 14); 25 if (village == NULL) return false; 26 shared_ptr<DoorInfo> _doorInfo = village->getBestDoorInfo(Mth::floor(mob->x), Mth::floor(mob->y), Mth::floor(mob->z)); 27 doorInfo = _doorInfo; 28 return _doorInfo != NULL; 29} 30 31bool MoveIndoorsGoal::canContinueToUse() 32{ 33 return !mob->getNavigation()->isDone(); 34} 35 36void MoveIndoorsGoal::start() 37{ 38 insideX = -1; 39 shared_ptr<DoorInfo> _doorInfo = doorInfo.lock(); 40 if( _doorInfo == NULL ) 41 { 42 doorInfo = weak_ptr<DoorInfo>(); 43 return; 44 } 45 if (mob->distanceToSqr(_doorInfo->getIndoorX(), _doorInfo->y, _doorInfo->getIndoorZ()) > 16 * 16) 46 { 47 Vec3 *pos = RandomPos::getPosTowards(dynamic_pointer_cast<PathfinderMob>(mob->shared_from_this()), 14, 3, Vec3::newTemp(_doorInfo->getIndoorX() + 0.5, _doorInfo->getIndoorY(), _doorInfo->getIndoorZ() + 0.5)); 48 if (pos != NULL) mob->getNavigation()->moveTo(pos->x, pos->y, pos->z, 1.0f); 49 } 50 else mob->getNavigation()->moveTo(_doorInfo->getIndoorX() + 0.5, _doorInfo->getIndoorY(), _doorInfo->getIndoorZ() + 0.5, 1.0f); 51} 52 53void MoveIndoorsGoal::stop() 54{ 55 shared_ptr<DoorInfo> _doorInfo = doorInfo.lock(); 56 if( _doorInfo == NULL ) 57 { 58 doorInfo = weak_ptr<DoorInfo>(); 59 return; 60 } 61 62 insideX = _doorInfo->getIndoorX(); 63 insideZ = _doorInfo->getIndoorZ(); 64 doorInfo = weak_ptr<DoorInfo>(); 65}