From 6b0fb1721bced0de9a33bb021bb96456c5b4d1f1 Mon Sep 17 00:00:00 2001 From: scorbett123 <50634068+scorbett123@users.noreply.github.com> Date: Thu, 14 Jul 2022 17:18:02 +0100 Subject: [PATCH] These should be all the suggested changes for the caching of can walk through block states --- .../pathing/movement/MovementHelper.java | 16 +++++++++++----- .../movement/movements/MovementPillar.java | 2 +- .../pathing/precompute/PrecomputedData.java | 1 + src/main/java/baritone/process/MineProcess.java | 3 ++- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b710d7f68..58a166535 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -30,6 +30,7 @@ import baritone.utils.ToolSet; import net.minecraft.block.*; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -98,10 +99,12 @@ public interface MovementHelper extends ActionCosts, Helper { return context.precomputedData.canWalkThrough(context.bsi, x, y, z, context.get(x, y, z)); } - static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { - Optional canWalkOn = canWalkThroughBlockState(state); - return canWalkOn.orElseGet(() -> canWalkThroughPosition(bsi, x, y, z, state)); + Optional canWalkThrough = canWalkThroughBlockState(state); + if (canWalkThrough.isPresent()) { + return canWalkThrough.get(); + } + return canWalkThroughPosition(bsi, x, y, z, state); } static Optional canWalkThroughBlockState(IBlockState state) { @@ -342,7 +345,10 @@ public interface MovementHelper extends ActionCosts, Helper { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Optional canWalkOn = canWalkOnBlockState(state); - return canWalkOn.orElseGet(() -> canWalkOnPosition(bsi, x, y, z, state)); + if (canWalkOn.isPresent()) { + return canWalkOn.get(); + } + return canWalkOnPosition(bsi, x, y, z, state); } static Optional canWalkOnBlockState(IBlockState state) { @@ -463,7 +469,7 @@ public interface MovementHelper extends ActionCosts, Helper { static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, IBlockState state, boolean includeFalling) { Block block = state.getBlock(); - if (!canWalkThrough(context.bsi, x, y, z, state)) { + if (!canWalkThrough(context, x, y, z, state)) { if (block instanceof BlockLiquid) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index bcd420ecc..73731aacd 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -120,7 +120,7 @@ public class MovementPillar extends Movement { } } // this is commented because it may have had a purpose, but it's very unclear what it was. it's from the minebot era. - //if (!context.precomputedData.canWalkOn(chkPos, check) || context.precomputedData.canWalkThrough(chkPos, check)) {//if the block above where we want to break is not a full block, don't do it + //if (!MovementHelper.canWalkOn(context, chkPos, check) || MovementHelper.canWalkThrough(context, chkPos, check)) {//if the block above where we want to break is not a full block, don't do it // TODO why does canWalkThrough mean this action is COST_INF? // BlockFalling makes sense, and !canWalkOn deals with weird cases like if it were lava // but I don't understand why canWalkThrough makes it impossible diff --git a/src/main/java/baritone/pathing/precompute/PrecomputedData.java b/src/main/java/baritone/pathing/precompute/PrecomputedData.java index 3a0faced6..01eb6dfca 100644 --- a/src/main/java/baritone/pathing/precompute/PrecomputedData.java +++ b/src/main/java/baritone/pathing/precompute/PrecomputedData.java @@ -24,6 +24,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 988089347..586c57627 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -28,6 +28,7 @@ import baritone.cache.CachedChunk; import baritone.cache.WorldScanner; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; +import baritone.pathing.precompute.PrecomputedData; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.Block; @@ -111,7 +112,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain - CalculationContext context = new CalculationContext(baritone, true, null); // Precomputed data should never be used on this calculation context + CalculationContext context = new CalculationContext(baritone, true, new PrecomputedData()); Baritone.getExecutor().execute(() -> rescan(curr, context)); } if (Baritone.settings().legitMine.value) {