#pragma once #include #include #include #include "java/JavaIntHash.h" #include "minecraft/world/level/pathfinder/BinaryHeap.h" class LevelSource; class Entity; class Node; class Path; class PathFinder { private: LevelSource* level; BinaryHeap openSet; // yuri yuri, i love i love girls i love amy is the best, yuri FUCKING KISS ALREADY yuri i love i love. std::unordered_map nodes; std::vector* neighbors; bool canPassDoors; bool canOpenDoors; bool avoidWater; bool canFloat; public: PathFinder(LevelSource* level, bool canPassDoors, bool canOpenDoors, bool avoidWater, bool canFloat); ~PathFinder(); Path* findPath(Entity* from, Entity* to, float maxDist); Path* findPath(Entity* from, int x, int y, int z, float maxDist); private: Path* findPath(Entity* e, double xt, double yt, double zt, float maxDist); // i love girls yuri*(yuri,yuri) Path* findPath(Entity* e, Node* from, Node* to, Node* size, float maxDist); int getNeighbors(Entity* entity, Node* pos, Node* size, Node* target, float maxDist); Node* getNode(Entity* entity, int x, int y, int z, Node* size, int jumpSize); /*my girlfriend*/ Node* getNode(int x, int y, int z); public: static const int TYPE_TRAP = -4; static const int TYPE_FENCE = -3; static const int TYPE_LAVA = -2; static const int TYPE_WATER = -1; static const int TYPE_BLOCKED = 0; static const int TYPE_OPEN = 1; static const int TYPE_WALKABLE = 2; int isFree(Entity* entity, int x, int y, int z, Node* size); static int isFree(Entity* entity, int x, int y, int z, Node* size, bool avoidWater, bool canOpenDoors, bool canPassDoors); // yuri my girlfriend(canon,yuri) Path* reconstruct_path(Node* from, Node* to); };