Some clean ups

This commit is contained in:
Brady 2019-06-06 04:15:43 -05:00
parent f0210f7c5f
commit 4c4bc8058b
No known key found for this signature in database
GPG Key ID: 73A788379A197567
5 changed files with 18 additions and 16 deletions

View File

@ -86,8 +86,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch {
if (slowPath) { if (slowPath) {
try { try {
Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value); Thread.sleep(Baritone.settings().slowPathTimeDelayMS.value);
} catch (InterruptedException ex) { } catch (InterruptedException ignored) {}
}
} }
PathNode currentNode = openSet.removeLowest(); PathNode currentNode = openSet.removeLowest();
mostRecentConsidered = currentNode; mostRecentConsidered = currentNode;

View File

@ -96,7 +96,7 @@ class Path extends PathBase {
} }
PathNode current = end; PathNode current = end;
LinkedList<BetterBlockPos> tempPath = new LinkedList<>(); LinkedList<BetterBlockPos> tempPath = new LinkedList<>();
LinkedList<PathNode> tempNodes = new LinkedList(); LinkedList<PathNode> tempNodes = new LinkedList<>();
// Repeatedly inserting to the beginning of an arraylist is O(n^2) // Repeatedly inserting to the beginning of an arraylist is O(n^2)
// Instead, do it into a linked list, then convert at the end // Instead, do it into a linked list, then convert at the end
while (current != null) { while (current != null) {

View File

@ -64,10 +64,13 @@ public class Avoidance {
double mobSpawnerCoeff = Baritone.settings().mobSpawnerAvoidanceCoefficient.value; double mobSpawnerCoeff = Baritone.settings().mobSpawnerAvoidanceCoefficient.value;
double mobCoeff = Baritone.settings().mobAvoidanceCoefficient.value; double mobCoeff = Baritone.settings().mobAvoidanceCoefficient.value;
if (mobSpawnerCoeff != 1.0D) { if (mobSpawnerCoeff != 1.0D) {
ctx.worldData().getCachedWorld().getLocationsOf("mob_spawner", 1, ctx.playerFeet().x, ctx.playerFeet().z, 2).forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); ctx.worldData().getCachedWorld().getLocationsOf("mob_spawner", 1, ctx.playerFeet().x, ctx.playerFeet().z, 2)
.forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value)));
} }
if (mobCoeff != 1.0D) { if (mobCoeff != 1.0D) {
ctx.world().loadedEntityList.stream().filter(entity -> entity instanceof EntityMob).forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); ctx.world().loadedEntityList.stream()
.filter(entity -> entity instanceof EntityMob)
.forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value)));
} }
return res; return res;
} }

View File

@ -51,7 +51,7 @@ public class SegmentedCalculator {
private Optional<IPath> doCalc() { private Optional<IPath> doCalc() {
Optional<IPath> soFar = Optional.empty(); Optional<IPath> soFar = Optional.empty();
while (true) { while (true) {
PathCalculationResult result = segment(soFar); PathCalculationResult result = segment(soFar.orElse(null));
switch (result.getType()) { switch (result.getType()) {
case SUCCESS_SEGMENT: case SUCCESS_SEGMENT:
case SUCCESS_TO_GOAL: case SUCCESS_TO_GOAL:
@ -62,8 +62,8 @@ public class SegmentedCalculator {
default: // CANCELLATION and null should not be possible, nothing else has access to this, so it can't have been canceled default: // CANCELLATION and null should not be possible, nothing else has access to this, so it can't have been canceled
throw new IllegalStateException(); throw new IllegalStateException();
} }
IPath segment = result.getPath().get(); // path calculation result type is SUCCESS_SEGMENT, so the path must be present IPath segment = result.getPath().orElseThrow(IllegalStateException::new); // path calculation result type is SUCCESS_SEGMENT, so the path must be present
IPath combined = soFar.map(previous -> (IPath) SplicedPath.trySplice(previous, segment, true).get()).orElse(segment); IPath combined = soFar.map(previous -> (IPath) SplicedPath.trySplice(previous, segment, true).orElseThrow(IllegalStateException::new)).orElse(segment);
loadAdjacent(combined.getDest().getX(), combined.getDest().getZ()); loadAdjacent(combined.getDest().getX(), combined.getDest().getZ());
soFar = Optional.of(combined); soFar = Optional.of(combined);
if (result.getType() == PathCalculationResult.Type.SUCCESS_TO_GOAL) { if (result.getType() == PathCalculationResult.Type.SUCCESS_TO_GOAL) {
@ -85,9 +85,9 @@ public class SegmentedCalculator {
} }
} }
private PathCalculationResult segment(Optional<IPath> previous) { private PathCalculationResult segment(IPath previous) {
BetterBlockPos segmentStart = previous.map(IPath::getDest).orElse(start); // <-- e p i c BetterBlockPos segmentStart = previous != null ? previous.getDest() : start;
AbstractNodeCostSearch search = new AStarPathFinder(segmentStart.x, segmentStart.y, segmentStart.z, goal, new Favoring(previous.orElse(null), context), context); // this is on another thread, so cannot include mob avoidances. AbstractNodeCostSearch search = new AStarPathFinder(segmentStart.x, segmentStart.y, segmentStart.z, goal, new Favoring(previous, context), context); // this is on another thread, so cannot include mob avoidances.
return search.calculate(Baritone.settings().primaryTimeoutMS.value, Baritone.settings().failureTimeoutMS.value); // use normal time settings, not the plan ahead settings, so as to not overwhelm the computer return search.calculate(Baritone.settings().primaryTimeoutMS.value, Baritone.settings().failureTimeoutMS.value); // use normal time settings, not the plan ahead settings, so as to not overwhelm the computer
} }

View File

@ -50,14 +50,14 @@ public class OpenSetsTest {
return testSizes; return testSizes;
} }
private static void removeAndTest(int amount, IOpenSet[] test, Optional<Collection<PathNode>> mustContain) { private static void removeAndTest(int amount, IOpenSet[] test, Collection<PathNode> mustContain) {
double[][] results = new double[test.length][amount]; double[][] results = new double[test.length][amount];
for (int i = 0; i < test.length; i++) { for (int i = 0; i < test.length; i++) {
long before = System.nanoTime() / 1000000L; long before = System.nanoTime() / 1000000L;
for (int j = 0; j < amount; j++) { for (int j = 0; j < amount; j++) {
PathNode pn = test[i].removeLowest(); PathNode pn = test[i].removeLowest();
if (mustContain.isPresent() && !mustContain.get().contains(pn)) { if (mustContain != null && !mustContain.contains(pn)) {
throw new IllegalStateException(mustContain.get() + " " + pn); throw new IllegalStateException(mustContain + " " + pn);
} }
results[i][j] = pn.combinedCost; results[i][j] = pn.combinedCost;
} }
@ -131,7 +131,7 @@ public class OpenSetsTest {
System.out.println("Removal round 1"); System.out.println("Removal round 1");
// remove a quarter of the nodes and verify that they are indeed the size/4 lowest ones // remove a quarter of the nodes and verify that they are indeed the size/4 lowest ones
removeAndTest(size / 4, test, Optional.of(lowestQuarter)); removeAndTest(size / 4, test, lowestQuarter);
// none of them should be empty (sanity check) // none of them should be empty (sanity check)
for (IOpenSet set : test) { for (IOpenSet set : test) {
@ -160,7 +160,7 @@ public class OpenSetsTest {
System.out.println("Removal round 2"); System.out.println("Removal round 2");
// remove the remaining 3/4 // remove the remaining 3/4
removeAndTest(size - size / 4, test, Optional.empty()); removeAndTest(size - size / 4, test, null);
// every set should now be empty // every set should now be empty
for (IOpenSet set : test) { for (IOpenSet set : test) {