Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
2.4 kB · 91 lines
C++
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#include "stdafx.h"#include "net.minecraft.world.entity.ai.control.h"#include "net.minecraft.world.entity.ai.navigation.h"#include "net.minecraft.world.entity.player.h"#include "net.minecraft.world.entity.h"#include "net.minecraft.world.level.h"#include "TemptGoal.h"
TemptGoal::TemptGoal(PathfinderMob *mob, double speedModifier, int itemId, bool canScare){ px = py = pz = pRotX = pRotY = 0.0; player = weak_ptr<Player>(); calmDown = 0; _isRunning = false; oldAvoidWater = false;
this->mob = mob; this->speedModifier = speedModifier; this->itemId = itemId; this->canScare = canScare; setRequiredControlFlags(Control::MoveControlFlag | Control::LookControlFlag);}
bool TemptGoal::canUse(){ if (calmDown > 0) { --calmDown; return false; } player = weak_ptr<Player>(mob->level->getNearestPlayer(mob->shared_from_this(), 10)); if (player.lock() == NULL) return false; mob->setDespawnProtected(); // If we've got a nearby player, then consider this mob as something we'd miss if it despawned shared_ptr<ItemInstance> item = player.lock()->getSelectedItem(); if (item == NULL) return false; if (item->id != itemId) return false; return true;}
bool TemptGoal::canContinueToUse(){ if (canScare) { if(player.lock() == NULL) return false; if (mob->distanceToSqr(player.lock()) < 6 * 6) { if (player.lock()->distanceToSqr(px, py, pz) > 0.1 * 0.1) return false; if (abs(player.lock()->xRot - pRotX) > 5 || abs(player.lock()->yRot - pRotY) > 5) return false; } else { px = player.lock()->x; py = player.lock()->y; pz = player.lock()->z; } pRotX = player.lock()->xRot; pRotY = player.lock()->yRot; } return canUse();}
void TemptGoal::start(){ px = player.lock()->x; py = player.lock()->y; pz = player.lock()->z; _isRunning = true; oldAvoidWater = mob->getNavigation()->getAvoidWater(); mob->getNavigation()->setAvoidWater(false);}
void TemptGoal::stop(){ player = weak_ptr<Player>(); mob->getNavigation()->stop(); calmDown = 100; _isRunning = false; mob->getNavigation()->setAvoidWater(oldAvoidWater);}
void TemptGoal::tick(){ mob->getLookControl()->setLookAt(player.lock(), 30, mob->getMaxHeadXRot()); if (mob->distanceToSqr(player.lock()) < 2.5 * 2.5) mob->getNavigation()->stop(); else mob->getNavigation()->moveTo(player.lock(), speedModifier);}
bool TemptGoal::isRunning(){ return _isRunning;}