aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2021-09-18 16:46:07 +0900
committersyeyoung <cyoung06@naver.com>2021-09-18 16:46:07 +0900
commit07f74480447495e6cd42237e4740fb082cb4b821 (patch)
tree0b1f61eac4e424f5adf924b94f67dfe71d57ba98 /src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
parent44eef4302880c031465aae4d712f57ca366e2b44 (diff)
downloadSkyblock-Dungeons-Guide-07f74480447495e6cd42237e4740fb082cb4b821.tar.gz
Skyblock-Dungeons-Guide-07f74480447495e6cd42237e4740fb082cb4b821.tar.bz2
Skyblock-Dungeons-Guide-07f74480447495e6cd42237e4740fb082cb4b821.zip
Waypoints!
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java')
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
index 85970fa3..c68cb511 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
@@ -26,6 +26,8 @@ import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonDoor;
import kr.syeyoung.dungeonsguide.dungeon.events.DungeonStateChangeEvent;
import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonMechanic;
import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonRoomDoor;
+import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.pathfinding.JPSPathfinder;
import kr.syeyoung.dungeonsguide.pathfinding.NodeProcessorDungeonRoom;
import kr.syeyoung.dungeonsguide.roomedit.EditingContext;
import kr.syeyoung.dungeonsguide.roomprocessor.ProcessorFactory;
@@ -40,6 +42,7 @@ import net.minecraft.pathfinding.PathEntity;
import net.minecraft.pathfinding.PathFinder;
import net.minecraft.pathfinding.PathPoint;
import net.minecraft.util.BlockPos;
+import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import javax.vecmath.Vector2d;
@@ -91,22 +94,33 @@ public class DungeonRoom {
this.currentState = currentState;
}
- public ScheduledFuture<List<BlockPos>> createEntityPathTo(IBlockAccess blockaccess, Entity entityIn, BlockPos targetPos, float dist) {
- ScheduledFuture<List<BlockPos>> sf = asyncPathFinder.schedule(() -> {
- PathFinder pathFinder = new PathFinder(nodeProcessorDungeonRoom);
- PathEntity latest = pathFinder.createEntityPathTo(blockaccess, entityIn, targetPos, dist);
- if (latest != null) {
- List<BlockPos> poses = new ArrayList<>();
- for (int i = 0; i < latest.getCurrentPathLength(); i++) {
- PathPoint pathPoint = latest.getPathPointFromIndex(i);
- poses.add(getMin().add(pathPoint.xCoord, pathPoint.yCoord, pathPoint.zCoord));
+ public ScheduledFuture<List<Vec3>> createEntityPathTo(IBlockAccess blockaccess, Entity entityIn, BlockPos targetPos, float dist) {
+ if (FeatureRegistry.SECRET_PATHFIND_STRATEGY.isEnabled()) {
+ ScheduledFuture<List<Vec3>> sf = asyncPathFinder.schedule(() -> {
+ BlockPos min = new BlockPos(getMin().getX(), 0, getMin().getZ());
+ BlockPos max= new BlockPos(getMax().getX(), 255, getMax().getZ());
+ JPSPathfinder pathFinder = new JPSPathfinder(context.getWorld(), min, max);
+ pathFinder.pathfind(entityIn.getPositionVector(), new Vec3(targetPos).addVector(0.5, 0.5, 0.5), 1.5f,1000);
+ return pathFinder.getRoute();
+ }, 0, TimeUnit.MILLISECONDS);
+ return sf;
+ } else {
+ ScheduledFuture<List<Vec3>> sf = asyncPathFinder.schedule(() -> {
+ PathFinder pathFinder = new PathFinder(nodeProcessorDungeonRoom);
+ PathEntity latest = pathFinder.createEntityPathTo(blockaccess, entityIn, targetPos, dist);
+ if (latest != null) {
+ List<Vec3> poses = new ArrayList<>();
+ for (int i = 0; i < latest.getCurrentPathLength(); i++) {
+ PathPoint pathPoint = latest.getPathPointFromIndex(i);
+ poses.add(new Vec3(getMin().add(pathPoint.xCoord, pathPoint.yCoord, pathPoint.zCoord)).addVector(0.5,0.5,0.5));
+ }
+ return poses;
}
- return poses;
- }
- return new ArrayList<>();
- }, 0, TimeUnit.MILLISECONDS);
- asyncPathFinder.schedule(() -> sf.cancel(true), 10, TimeUnit.SECONDS);
- return sf;
+ return new ArrayList<>();
+ }, 0, TimeUnit.MILLISECONDS);
+ asyncPathFinder.schedule(() -> sf.cancel(true), 10, TimeUnit.SECONDS);
+ return sf;
+ }
}
private static final ScheduledExecutorService asyncPathFinder = Executors.newScheduledThreadPool(4);