diff --git a/src/main/java/baritone/builder/CountingSurface.java b/src/main/java/baritone/builder/CountingSurface.java new file mode 100644 index 000000000..999b0f282 --- /dev/null +++ b/src/main/java/baritone/builder/CountingSurface.java @@ -0,0 +1,74 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.builder; + +import baritone.api.utils.BetterBlockPos; + +import java.util.OptionalInt; + +public class CountingSurface extends NavigableSurface { + public CountingSurface(int x, int y, int z) { + super(x, y, z, Attachment::new, $ -> new Attachment()); + } + + private static class Attachment { + public final int surfaceSize; + + public Attachment(Object a, Object b) { + this((Attachment) a, (Attachment) b); + } + + public Attachment(Attachment a, Attachment b) { + this.surfaceSize = a.surfaceSize + b.surfaceSize; + } + + public Attachment() { + this.surfaceSize = 1; + } + + @Override + public boolean equals(Object o) { // used as performance optimization in RedBlackNode to avoid augmenting unchanged attachments + if (this == o) { + return true; + } + if (!(o instanceof Attachment)) { + return false; + } + Attachment that = (Attachment) o; + return surfaceSize == that.surfaceSize; + } + + @Override + public int hashCode() { + return surfaceSize; + } + } + + public OptionalInt surfaceSize(BetterBlockPos pos) { // how big is the navigable surface from here? how many distinct coordinates can i walk to (in the future, the augmentation will probably have a list of those coordinates or something?) + Object data = getComponentAugmentation(pos); + if (data != null) { // i disagree with the intellij suggestion here i think it makes it worse + return OptionalInt.of(((Attachment) data).surfaceSize); + } else { + return OptionalInt.empty(); + } + } + + public int requireSurfaceSize(int x, int y, int z) { + return surfaceSize(new BetterBlockPos(x, y, z)).getAsInt(); + } +} diff --git a/src/main/java/baritone/builder/INavigableSurface.java b/src/main/java/baritone/builder/INavigableSurface.java new file mode 100644 index 000000000..b5f04ba8e --- /dev/null +++ b/src/main/java/baritone/builder/INavigableSurface.java @@ -0,0 +1,21 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.builder; + +public interface INavigableSurface { +} diff --git a/src/main/java/baritone/builder/NavigableSurface.java b/src/main/java/baritone/builder/NavigableSurface.java index 96e5d95d8..9f9243e32 100644 --- a/src/main/java/baritone/builder/NavigableSurface.java +++ b/src/main/java/baritone/builder/NavigableSurface.java @@ -18,67 +18,28 @@ package baritone.builder; import baritone.api.utils.BetterBlockPos; +import baritone.builder.utils.com.github.btrekkie.connectivity.Augmentation; import baritone.builder.utils.com.github.btrekkie.connectivity.ConnGraph; import java.util.Arrays; -import java.util.OptionalInt; +import java.util.function.Function; public class NavigableSurface { - // the encapsulation / separation of concerns is not great, but this is better for testing purposes than the fully accurate stuff in https://github.com/cabaletta/baritone/tree/builder-2/src/main/java/baritone/builder lol - public final CuboidBounds bounds; + + private final CuboidBounds bounds; private final BlockStateCachedData[] blocks; private final ConnGraph connGraph; - public NavigableSurface(int x, int y, int z) { + private final Function genVertexAugmentation; + + public NavigableSurface(int x, int y, int z, Augmentation augmentation, Function genVertexAugmentation) { this.bounds = new CuboidBounds(x, y, z); this.blocks = new BlockStateCachedData[bounds.volume()]; Arrays.fill(blocks, FakeStates.AIR); - - this.connGraph = new ConnGraph(Attachment::new); - } - - public static class Attachment { - public final int surfaceSize; - - public Attachment(Object a, Object b) { - this((Attachment) a, (Attachment) b); - } - - public Attachment(Attachment a, Attachment b) { - this.surfaceSize = a.surfaceSize + b.surfaceSize; - } - - public Attachment() { - this.surfaceSize = 1; - } - - @Override - public boolean equals(Object o) { // used as performance optimization in RedBlackNode to avoid augmenting unchanged attachments - if (this == o) { - return true; - } - if (!(o instanceof Attachment)) { - return false; - } - Attachment that = (Attachment) o; - return surfaceSize == that.surfaceSize; - } - - @Override - public int hashCode() { - return surfaceSize; - } - } - - public OptionalInt surfaceSize(BetterBlockPos pos) { // how big is the navigable surface from here? how many distinct coordinates can i walk to (in the future, the augmentation will probably have a list of those coordinates or something?) - Object data = connGraph.getComponentAugmentation(pos.toLong()); - if (data != null) { // i disagree with the intellij suggestion here i think it makes it worse - return OptionalInt.of(((Attachment) data).surfaceSize); - } else { - return OptionalInt.empty(); - } + this.genVertexAugmentation = genVertexAugmentation; + this.connGraph = new ConnGraph(augmentation); } // so the idea is that as blocks are added and removed, we'll maintain where the player can stand, and what connections that has to other places @@ -95,7 +56,7 @@ public class NavigableSurface { boolean currentlyAllowed = canPlayerStandIn(couldHaveChanged); if (currentlyAllowed) { // i'm sure this will get more complicated later - connGraph.setVertexAugmentation(couldHaveChanged.toLong(), new Attachment()); + connGraph.setVertexAugmentation(couldHaveChanged.toLong(), genVertexAugmentation.apply(couldHaveChanged)); } else { connGraph.removeVertexAugmentation(couldHaveChanged.toLong()); } @@ -108,11 +69,11 @@ public class NavigableSurface { } } - public boolean canPlayerStandIn(BetterBlockPos where) { + private boolean canPlayerStandIn(BetterBlockPos where) { return getBlockOrAir(where.down()) && !getBlockOrAir(where) && !getBlockOrAir(where.up()); } - public void computePossibleMoves(BetterBlockPos feet) { + private void computePossibleMoves(BetterBlockPos feet) { boolean anySuccess = canPlayerStandIn(feet); // even if all are fail, need to remove those edges from the graph, so don't return early for (int[] move : MOVES) { @@ -139,8 +100,8 @@ public class NavigableSurface { } } - public int requireSurfaceSize(int x, int y, int z) { - return surfaceSize(new BetterBlockPos(x, y, z)).getAsInt(); + public CuboidBounds bounds() { + return bounds; } public boolean getBlock(BetterBlockPos where) { @@ -158,6 +119,10 @@ public class NavigableSurface { return connGraph.connected(a.toLong(), b.toLong()); } + public Object getComponentAugmentation(BetterBlockPos pos) { // maybe should be protected? subclass defines it anyway + return connGraph.getComponentAugmentation(pos.toLong()); + } + public void placeBlock(BetterBlockPos where) { placeOrRemoveBlock(where, true); } diff --git a/src/test/java/baritone/builder/NavigableSurfaceTest.java b/src/test/java/baritone/builder/NavigableSurfaceTest.java index d463ad4b8..0059f0ddb 100644 --- a/src/test/java/baritone/builder/NavigableSurfaceTest.java +++ b/src/test/java/baritone/builder/NavigableSurfaceTest.java @@ -31,7 +31,7 @@ import static org.junit.Assert.assertEquals; public class NavigableSurfaceTest { @Test public void testBasic() { - NavigableSurface surface = new NavigableSurface(10, 10, 10); + CountingSurface surface = new CountingSurface(10, 10, 10); surface.placeBlock(0, 0, 0); assertEquals(OptionalInt.empty(), surface.surfaceSize(new BetterBlockPos(0, 0, 0))); assertEquals(1, surface.requireSurfaceSize(0, 1, 0)); @@ -108,8 +108,8 @@ public class NavigableSurfaceTest { assertEquals(4, surface.requireSurfaceSize(2, 1, 0)); } - private NavigableSurface makeFlatSurface(int width, int height) { - NavigableSurface surface = new NavigableSurface(width, height, width); + private CountingSurface makeFlatSurface(int width, int height) { + CountingSurface surface = new CountingSurface(width, height, width); for (int x = 0; x < width; x++) { for (int z = 0; z < width; z++) { surface.placeBlock(new BetterBlockPos(x, 0, z)); @@ -119,7 +119,7 @@ public class NavigableSurfaceTest { return surface; } - private NavigableSurface makeFlatSurface(int SZ) { + private CountingSurface makeFlatSurface(int SZ) { return makeFlatSurface(SZ, SZ); } @@ -143,7 +143,7 @@ public class NavigableSurfaceTest { public void testStep() { int SZ = 100; int lineAt = SZ / 2; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); for (int x = 0; x < SZ; x++) { surface.placeBlock(x, 1, lineAt); // doesn't block the player since you can step over 1 block } @@ -154,7 +154,7 @@ public class NavigableSurfaceTest { public void testBlocked() { int SZ = 100; int lineAt = SZ / 2; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); for (int x = 0; x < SZ; x++) { surface.placeBlock(x, 2, lineAt); // does block the player since you can't step over 2 blocks } @@ -163,15 +163,15 @@ public class NavigableSurfaceTest { assertEquals(SZ, surface.requireSurfaceSize(0, 3, lineAt)); } - private void fillSurfaceInOrderMaintainingConnection(NavigableSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder) { + private void fillSurfaceInOrderMaintainingConnection(CountingSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder) { fillSurfaceInOrderMaintainingConnection(surface, maintainConnectionTo, iterationOrder, false, false); } - private void fillSurfaceInOrderMaintainingConnection(NavigableSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder, boolean requirePathToPlacement, boolean allowSideSneakPlace) { + private void fillSurfaceInOrderMaintainingConnection(CountingSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder, boolean requirePathToPlacement, boolean allowSideSneakPlace) { fillSurfaceInOrderMaintainingConnection(surface, maintainConnectionTo, iterationOrder, requirePathToPlacement, allowSideSneakPlace, Integer.MAX_VALUE); } - private void fillSurfaceInOrderMaintainingConnection(NavigableSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder, boolean requirePathToPlacement, boolean allowSideSneakPlace, int stopAfter) { + private void fillSurfaceInOrderMaintainingConnection(CountingSurface surface, BetterBlockPos maintainConnectionTo, List iterationOrder, boolean requirePathToPlacement, boolean allowSideSneakPlace, int stopAfter) { int qty = 0; outer: while (true) { @@ -215,12 +215,12 @@ public class NavigableSurfaceTest { } } - private String reportBottomToTop(NavigableSurface surface) { - int len = surface.bounds.sizeY * ((surface.bounds.sizeX + 1) * surface.bounds.sizeZ + 1); + private String reportBottomToTop(CountingSurface surface) { + int len = surface.bounds().sizeY * ((surface.bounds().sizeX + 1) * surface.bounds().sizeZ + 1); StringBuilder report = new StringBuilder(len); - for (int y = 0; y < surface.bounds.sizeY; y++) { - for (int z = 0; z < surface.bounds.sizeZ; z++) { - for (int x = 0; x < surface.bounds.sizeX; x++) { + for (int y = 0; y < surface.bounds().sizeY; y++) { + for (int z = 0; z < surface.bounds().sizeZ; z++) { + for (int x = 0; x < surface.bounds().sizeX; x++) { report.append(surface.getBlock(new BetterBlockPos(x, y, z)) ? 'X' : ' '); } report.append('\n'); @@ -233,11 +233,11 @@ public class NavigableSurfaceTest { return report.toString(); } - private String reportSlice(NavigableSurface surface, int y) { - int len = (surface.bounds.sizeX + 1) * surface.bounds.sizeZ; + private String reportSlice(CountingSurface surface, int y) { + int len = (surface.bounds().sizeX + 1) * surface.bounds().sizeZ; StringBuilder report = new StringBuilder(len); - for (int z = 0; z < surface.bounds.sizeZ; z++) { - for (int x = 0; x < surface.bounds.sizeX; x++) { + for (int z = 0; z < surface.bounds().sizeZ; z++) { + for (int x = 0; x < surface.bounds().sizeX; x++) { report.append(surface.getBlock(new BetterBlockPos(x, y, z)) ? 'X' : ' '); } report.append('\n'); @@ -248,21 +248,21 @@ public class NavigableSurfaceTest { return report.toString(); } - private static List genReportedWallOrder(NavigableSurface surface, int y) { - List ret = new ArrayList<>((surface.bounds.sizeX + surface.bounds.sizeZ) * 2); - for (int x = 0; x < surface.bounds.sizeX; x++) { + private static List genReportedWallOrder(CountingSurface surface, int y) { + List ret = new ArrayList<>((surface.bounds().sizeX + surface.bounds().sizeZ) * 2); + for (int x = 0; x < surface.bounds().sizeX; x++) { ret.add(new BetterBlockPos(x, y, 0)); } // start at 1 not 0 so that we don't repeat the last iteration of the previous loop (that would make the report look bad because the staircase would repeat one column for no reason) - for (int z = 1; z < surface.bounds.sizeZ; z++) { - ret.add(new BetterBlockPos(surface.bounds.sizeX - 1, y, z)); + for (int z = 1; z < surface.bounds().sizeZ; z++) { + ret.add(new BetterBlockPos(surface.bounds().sizeX - 1, y, z)); } // same deal for starting at -2 rather than -1 - for (int x = surface.bounds.sizeX - 2; x >= 0; x--) { - ret.add(new BetterBlockPos(x, y, surface.bounds.sizeZ - 1)); + for (int x = surface.bounds().sizeX - 2; x >= 0; x--) { + ret.add(new BetterBlockPos(x, y, surface.bounds().sizeZ - 1)); } // and same again - for (int z = surface.bounds.sizeZ - 2; z > 0; z--) { + for (int z = surface.bounds().sizeZ - 2; z > 0; z--) { ret.add(new BetterBlockPos(0, y, z)); } return ret; @@ -276,24 +276,24 @@ public class NavigableSurfaceTest { return ret; } - private String reportAllFourWalls(NavigableSurface surface) { - int len = surface.bounds.sizeY * (surface.bounds.sizeX + surface.bounds.sizeZ) * 2; + private String reportAllFourWalls(CountingSurface surface) { + int len = surface.bounds().sizeY * (surface.bounds().sizeX + surface.bounds().sizeZ) * 2; StringBuilder report = new StringBuilder(len); - for (int y = surface.bounds.sizeY - 1; y >= 0; y--) { + for (int y = surface.bounds().sizeY - 1; y >= 0; y--) { // make a report of what all four walls look like - for (int x = 0; x < surface.bounds.sizeX - 1; x++) { + for (int x = 0; x < surface.bounds().sizeX - 1; x++) { report.append(surface.getBlock(new BetterBlockPos(x, y, 0)) ? 'X' : ' '); } report.append('|'); - for (int z = 0; z < surface.bounds.sizeZ - 1; z++) { - report.append(surface.getBlock(new BetterBlockPos(surface.bounds.sizeX - 1, y, z)) ? 'X' : ' '); + for (int z = 0; z < surface.bounds().sizeZ - 1; z++) { + report.append(surface.getBlock(new BetterBlockPos(surface.bounds().sizeX - 1, y, z)) ? 'X' : ' '); } report.append('|'); - for (int x = surface.bounds.sizeX - 1; x > 0; x--) { - report.append(surface.getBlock(new BetterBlockPos(x, y, surface.bounds.sizeZ - 1)) ? 'X' : ' '); + for (int x = surface.bounds().sizeX - 1; x > 0; x--) { + report.append(surface.getBlock(new BetterBlockPos(x, y, surface.bounds().sizeZ - 1)) ? 'X' : ' '); } report.append('|'); - for (int z = surface.bounds.sizeZ - 1; z > 0; z--) { + for (int z = surface.bounds().sizeZ - 1; z > 0; z--) { report.append(surface.getBlock(new BetterBlockPos(0, y, z)) ? 'X' : ' '); } report.append('\n'); @@ -309,7 +309,7 @@ public class NavigableSurfaceTest { // build a single wall, but, never place a block that disconnects the surface // (we expect to see a triangle) int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(0, 1, 1); // won't be involved in the wall (since z=1) List order = new ArrayList<>(); for (int y = 0; y < SZ; y++) { @@ -343,11 +343,11 @@ public class NavigableSurfaceTest { "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX\n"; assertEquals(shouldBe, reportAllFourWalls(surface)); - NavigableSurface surface2 = makeFlatSurface(SZ); + CountingSurface surface2 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface2, someOtherBlock, order, true, false); // this one also works in strict jump placement mode assertEquals(shouldBe, reportAllFourWalls(surface2)); - NavigableSurface surface3 = makeFlatSurface(SZ); + CountingSurface surface3 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface3, someOtherBlock, order, true, true); // sneak doesn't help either assertEquals(shouldBe, reportAllFourWalls(surface3)); } @@ -357,7 +357,7 @@ public class NavigableSurfaceTest { // build four walls, but, never place a block that disconnects the surface // (we expect to see a carved path for the player from bottom to top) int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = 0; y < SZ; y++) { @@ -398,7 +398,7 @@ public class NavigableSurfaceTest { "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX\n"; assertEquals(shouldBe, reportAllFourWalls(surface)); - NavigableSurface surface2 = makeFlatSurface(SZ); + CountingSurface surface2 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface2, someOtherBlock, order, true, false); String shouldBeWithJump = "" + "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXX | XX|XXXXXXXXXXXXXXXXXXX\n" + // if we're only allowed to jump place, the overhang is no longer possible (since it requires sneak side place) @@ -423,7 +423,7 @@ public class NavigableSurfaceTest { "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX\n"; assertEquals(shouldBeWithJump, reportAllFourWalls(surface2)); - NavigableSurface surface3 = makeFlatSurface(SZ); + CountingSurface surface3 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface3, someOtherBlock, order, true, true); assertEquals(shouldBe /* but if side place is allowed, we can make the full shape! */, reportAllFourWalls(surface3)); } @@ -431,7 +431,7 @@ public class NavigableSurfaceTest { @Test public void testCastleFourWallsLoopOrder() { int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = 0; y < SZ; y++) { @@ -471,7 +471,7 @@ public class NavigableSurfaceTest { // this creates a cool shape :) int SZ = 20; for (int heightTest = 0; heightTest < 3; heightTest++) { - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = SZ - 1 - heightTest; y >= 0; y--) { @@ -551,7 +551,7 @@ public class NavigableSurfaceTest { continue; } - NavigableSurface surface2 = makeFlatSurface(SZ); + CountingSurface surface2 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface2, someOtherBlock, order, true, false); String shouldBeV = "" + "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|X \n" + @@ -577,7 +577,7 @@ public class NavigableSurfaceTest { assertEquals(shouldBeV, reportAllFourWalls(surface2)); - NavigableSurface surface3 = makeFlatSurface(SZ); + CountingSurface surface3 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface3, someOtherBlock, order, true, true, 69); // PARTIAL FILL, purely to demonstrate the order String shouldBeStaircasePartial69 = "" + @@ -658,7 +658,7 @@ public class NavigableSurfaceTest { public void testCastleFourWallsTopToBottom() { // same as previous except in Z X iteration order, this causes some FUNKY shapes to appear and I think it's cool int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = SZ - 1; y >= 0; y--) { @@ -701,7 +701,7 @@ public class NavigableSurfaceTest { // waow, so cool! assertEquals(shouldBe, reportAllFourWalls(surface)); - NavigableSurface surface2 = makeFlatSurface(SZ); + CountingSurface surface2 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface2, someOtherBlock, order, true, false, 500); String shouldBeVPartial500 = "" + "XXXXXXXXXXXXX | | | \n" + // you can see how the iteration order causes it to fill in from both side, eventually causing a V in the middle @@ -774,7 +774,7 @@ public class NavigableSurfaceTest { "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX\n"; assertEquals(shouldBeV, reportAllFourWalls(surface2)); - NavigableSurface surface3 = makeFlatSurface(SZ); + CountingSurface surface3 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface3, someOtherBlock, order, true, true, 500); String shouldBeWeirdPartial500 = "" + "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXX XXXXXXXXXXXXX\n" + @@ -835,7 +835,7 @@ public class NavigableSurfaceTest { // just a small variant with no corner, so there's no wraparound // not that interesting int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = SZ - 1; y >= 0; y--) { @@ -879,7 +879,7 @@ public class NavigableSurfaceTest { "XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXX\n"; assertEquals(shouldBe, reportAllFourWalls(surface)); - NavigableSurface surface2 = makeFlatSurface(SZ); + CountingSurface surface2 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface2, someOtherBlock, order, true, false); String shouldBeV = "" + " XXXXXXXXXXXXXXXXXX|XXX | |XXXXXXXXXXXXXXXXXXX\n" + @@ -905,7 +905,7 @@ public class NavigableSurfaceTest { // ^ notice how the left column is gone assertEquals(shouldBeV, reportAllFourWalls(surface2)); - NavigableSurface surface3 = makeFlatSurface(SZ); + CountingSurface surface3 = makeFlatSurface(SZ); fillSurfaceInOrderMaintainingConnection(surface3, someOtherBlock, order, true, true); assertEquals(shouldBeV /* sneak doesn't help without loop around through {x=0 z=0} corner*/, reportAllFourWalls(surface3)); } @@ -917,7 +917,7 @@ public class NavigableSurfaceTest { // but also an interior ring at y=8, filled afterwards // because it's filled afterwards, it only allows for one extra block to be placed at y=9 int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int y = 0; y < SZ; y++) { @@ -975,7 +975,7 @@ public class NavigableSurfaceTest { // (we expect to see a zigzag cut out) // but also an interior ring at y=8, filled beforehand int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int x = 0; x < SZ; x++) { @@ -1033,7 +1033,7 @@ public class NavigableSurfaceTest { // (we expect to see a zigzag cut out) // but also an interior # shape at y=8, filled afterwards int SZ = 20; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(SZ / 2, 1, SZ / 2); // center of the courtyard List order = new ArrayList<>(); for (int x = 0; x < SZ; x++) { @@ -1112,7 +1112,7 @@ public class NavigableSurfaceTest { public void testFullCube() { int width = 10; int height = 30; - NavigableSurface surface = makeFlatSurface(width, height); + CountingSurface surface = makeFlatSurface(width, height); BetterBlockPos someOtherBlock = new BetterBlockPos(0, 1, width / 2); List order = new ArrayList<>(); for (int y = 0; y < height; y++) { @@ -1174,7 +1174,7 @@ public class NavigableSurfaceTest { @Test public void testFullCubeRandom() { int SZ = 10; - NavigableSurface surface = makeFlatSurface(SZ); + CountingSurface surface = makeFlatSurface(SZ); BetterBlockPos someOtherBlock = new BetterBlockPos(0, 1, 0); List order = new ArrayList<>(); for (int y = 0; y < SZ; y++) {