diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index c554b926..abc741a5 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -17,7 +17,6 @@ package baritone.cache; -import baritone.api.cache.IBlockTypeAccess; import baritone.utils.Helper; import baritone.utils.pathing.PathingBlockType; import net.minecraft.block.Block; @@ -31,7 +30,7 @@ import java.util.*; * @author Brady * @since 8/3/2018 1:04 AM */ -public final class CachedChunk implements IBlockTypeAccess, Helper { +public final class CachedChunk implements Helper { public static final Set BLOCKS_TO_KEEP_TRACK_OF; @@ -143,8 +142,7 @@ public final class CachedChunk implements IBlockTypeAccess, Helper { calculateHeightMap(); } - @Override - public final IBlockState getBlock(int x, int y, int z) { + public final IBlockState getBlock(int x, int y, int z, int dimension) { int internalPos = z << 4 | x; if (heightMap[internalPos] == y) { // we have this exact block, it's a surface block @@ -155,10 +153,10 @@ public final class CachedChunk implements IBlockTypeAccess, Helper { return overview[internalPos]; } PathingBlockType type = getType(x, y, z); - if (type == PathingBlockType.SOLID && y == 127 && mc.player.dimension == -1) { + if (type == PathingBlockType.SOLID && y == 127 && dimension == -1) { return Blocks.BEDROCK.getDefaultState(); } - return ChunkPacker.pathingTypeToBlock(type); + return ChunkPacker.pathingTypeToBlock(type, dimension); } private PathingBlockType getType(int x, int y, int z) { diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index c25139ac..95c20f37 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -59,22 +59,25 @@ public final class CachedRegion implements ICachedRegion { */ private final int z; + private final int dimension; + /** * Has this region been modified since its most recent load or save */ private boolean hasUnsavedChanges; - CachedRegion(int x, int z) { + CachedRegion(int x, int z, int dimension) { this.x = x; this.z = z; this.hasUnsavedChanges = false; + this.dimension = dimension; } @Override public final IBlockState getBlock(int x, int y, int z) { CachedChunk chunk = chunks[x >> 4][z >> 4]; if (chunk != null) { - return chunk.getBlock(x & 15, y, z & 15); + return chunk.getBlock(x & 15, y, z & 15, dimension); } return null; } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index b1fcd6fd..ad04755b 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -56,7 +56,9 @@ public final class CachedWorld implements ICachedWorld, Helper { private final LinkedBlockingQueue toPack = new LinkedBlockingQueue<>(); - CachedWorld(Path directory) { + private final int dimension; + + CachedWorld(Path directory, int dimension) { if (!Files.exists(directory)) { try { Files.createDirectories(directory); @@ -64,6 +66,7 @@ public final class CachedWorld implements ICachedWorld, Helper { } } this.directory = directory.toString(); + this.dimension = dimension; System.out.println("Cached world directory: " + directory); // Insert an invalid region element cachedRegions.put(0, null); @@ -241,7 +244,7 @@ public final class CachedWorld implements ICachedWorld, Helper { */ private synchronized CachedRegion getOrCreateRegion(int regionX, int regionZ) { return cachedRegions.computeIfAbsent(getRegionID(regionX, regionZ), id -> { - CachedRegion newRegion = new CachedRegion(regionX, regionZ); + CachedRegion newRegion = new CachedRegion(regionX, regionZ, dimension); newRegion.load(this.directory); return newRegion; }); diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index e29bde00..d73cdb03 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -144,7 +144,7 @@ public final class ChunkPacker implements Helper { return PathingBlockType.SOLID; } - public static IBlockState pathingTypeToBlock(PathingBlockType type) { + public static IBlockState pathingTypeToBlock(PathingBlockType type, int dimension) { switch (type) { case AIR: return Blocks.AIR.getDefaultState(); @@ -154,7 +154,7 @@ public final class ChunkPacker implements Helper { return Blocks.LAVA.getDefaultState(); case SOLID: // Dimension solid types - switch (mc.player.dimension) { + switch (dimension) { case -1: return Blocks.NETHERRACK.getDefaultState(); case 0: diff --git a/src/main/java/baritone/cache/WorldData.java b/src/main/java/baritone/cache/WorldData.java index 36a239fa..897a0d87 100644 --- a/src/main/java/baritone/cache/WorldData.java +++ b/src/main/java/baritone/cache/WorldData.java @@ -35,11 +35,13 @@ public class WorldData implements IWorldData { private final Waypoints waypoints; //public final MapData map; public final Path directory; + public final int dimension; - WorldData(Path directory) { + WorldData(Path directory, int dimension) { this.directory = directory; - this.cache = new CachedWorld(directory.resolve("cache")); + this.cache = new CachedWorld(directory.resolve("cache"), dimension); this.waypoints = new Waypoints(directory.resolve("waypoints")); + this.dimension = dimension; } public void onClose() { diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index e3a53bba..45b46fdb 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -91,7 +91,7 @@ public enum WorldProvider implements IWorldProvider, Helper { } catch (IOException ignored) {} } System.out.println("Baritone world data dir: " + dir); - this.currentWorld = this.worldCache.computeIfAbsent(dir, WorldData::new); + this.currentWorld = this.worldCache.computeIfAbsent(dir, d -> new WorldData(d, dimensionID)); } public final void closeWorld() {