helpers and optimizations
This commit is contained in:
		| @@ -3,11 +3,11 @@ package baritone.bot.pathing.calc; | ||||
|  | ||||
| //import baritone.Baritone; | ||||
|  | ||||
| import baritone.bot.pathing.openset.BinaryHeapOpenSet; | ||||
| import baritone.bot.pathing.openset.IOpenSet; | ||||
| import baritone.bot.pathing.goals.Goal; | ||||
| import baritone.bot.pathing.movement.ActionCosts; | ||||
| import baritone.bot.pathing.movement.Movement; | ||||
| import baritone.bot.pathing.openset.BinaryHeapOpenSet; | ||||
| import baritone.bot.pathing.openset.IOpenSet; | ||||
| import baritone.bot.utils.ToolSet; | ||||
| import net.minecraft.client.Minecraft; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| @@ -72,6 +72,10 @@ public class AStarPathFinder extends AbstractNodeCostSearch { | ||||
|             //long constructEnd = System.nanoTime(); | ||||
|             //System.out.println(constructEnd - constructStart); | ||||
|             for (Movement movementToGetToNeighbor : possibleMovements) { | ||||
|                 if (Minecraft.getMinecraft().world.getChunk(movementToGetToNeighbor.getDest()) instanceof EmptyChunk) { | ||||
|                     numEmptyChunk++; | ||||
|                     continue; | ||||
|                 } | ||||
|                 //long costStart = System.nanoTime(); | ||||
|                 // TODO cache cost | ||||
|                 double actionCost = movementToGetToNeighbor.calculateCost(ts); | ||||
| @@ -80,10 +84,6 @@ public class AStarPathFinder extends AbstractNodeCostSearch { | ||||
|                 if (actionCost >= ActionCosts.COST_INF) { | ||||
|                     continue; | ||||
|                 } | ||||
|                 if (Minecraft.getMinecraft().world.getChunk(movementToGetToNeighbor.getDest()) instanceof EmptyChunk) { | ||||
|                     numEmptyChunk++; | ||||
|                     continue; | ||||
|                 } | ||||
|                 PathNode neighbor = getNodeAtPosition(movementToGetToNeighbor.getDest()); | ||||
|                 double tentativeCost = currentNode.cost + actionCost; | ||||
|                 if (tentativeCost < neighbor.cost) { | ||||
|   | ||||
| @@ -1,19 +1,22 @@ | ||||
| package baritone.bot.pathing.movement; | ||||
|  | ||||
| import baritone.bot.utils.BlockStateInterface; | ||||
| import baritone.bot.utils.Helper; | ||||
| import baritone.bot.utils.ToolSet; | ||||
| import net.minecraft.block.*; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.client.Minecraft; | ||||
| import net.minecraft.entity.Entity; | ||||
| import net.minecraft.init.Blocks; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
|  | ||||
| /** | ||||
|  * Static helpers for cost calculation | ||||
|  * | ||||
|  * @author leijurv | ||||
|  */ | ||||
| public interface MovementHelper extends ActionCosts { | ||||
| public interface MovementHelper extends ActionCosts, Helper { | ||||
|  | ||||
|     Block waterFlowing = Blocks.FLOWING_WATER; | ||||
|     Block waterStill = Blocks.WATER; | ||||
| @@ -84,8 +87,7 @@ public interface MovementHelper extends ActionCosts { | ||||
|      * @param pos | ||||
|      * @return | ||||
|      */ | ||||
|     static boolean canWalkThrough(BlockPos pos) { | ||||
|         IBlockState state = BlockStateInterface.get(pos); | ||||
|     static boolean canWalkThrough(BlockPos pos, IBlockState state) { | ||||
|         Block block = state.getBlock(); | ||||
|         if (block instanceof BlockLilyPad || block instanceof BlockFire) {//you can't actually walk through a lilypad from the side, and you shouldn't walk through fire | ||||
|             return false; | ||||
| @@ -129,8 +131,8 @@ public interface MovementHelper extends ActionCosts { | ||||
|         return BlockStateInterface.get(pos).getBlock() instanceof BlockFalling; | ||||
|     } | ||||
|  | ||||
|     static double getHardness(ToolSet ts, IBlockState block, BlockPos position) { | ||||
|         if (!block.equals(Blocks.AIR) && !canWalkThrough(position)) { | ||||
|     static double getMiningDurationTicks(ToolSet ts, IBlockState block, BlockPos position) { | ||||
|         if (!block.equals(Blocks.AIR) && !canWalkThrough(position, block)) { | ||||
|             if (avoidBreaking(position)) { | ||||
|                 return COST_INF; | ||||
|             } | ||||
| @@ -142,4 +144,65 @@ public interface MovementHelper extends ActionCosts { | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * The currently highlighted block. | ||||
|      * Updated once a tick by Minecraft. | ||||
|      * | ||||
|      * @return the position of the highlighted block, or null if no block is highlighted | ||||
|      */ | ||||
|     static BlockPos whatAmILookingAt() { | ||||
|         if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) { | ||||
|             return mc.objectMouseOver.getBlockPos(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * The entity the player is currently looking at | ||||
|      * | ||||
|      * @return the entity object, or null if the player isn't looking at an entity | ||||
|      */ | ||||
|     static Entity whatEntityAmILookingAt() { | ||||
|         Minecraft mc = Minecraft.getMinecraft(); | ||||
|         if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.ENTITY) { | ||||
|             return mc.objectMouseOver.entityHit; | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * AutoTool | ||||
|      */ | ||||
|     static void switchToBestTool() { | ||||
|         BlockPos pos = whatAmILookingAt(); | ||||
|         if (pos == null) { | ||||
|             return; | ||||
|         } | ||||
|         IBlockState state = BlockStateInterface.get(pos); | ||||
|         if (state.getBlock().equals(Blocks.AIR)) { | ||||
|             return; | ||||
|         } | ||||
|         switchToBestToolFor(state); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * AutoTool for a specific block | ||||
|      * | ||||
|      * @param b the blockstate to mine | ||||
|      */ | ||||
|     static void switchToBestToolFor(IBlockState b) { | ||||
|         switchToBestToolFor(b, new ToolSet()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * AutoTool for a specific block with precomputed ToolSet data | ||||
|      * | ||||
|      * @param b  the blockstate to mine | ||||
|      * @param ts previously calculated ToolSet | ||||
|      */ | ||||
|     static void switchToBestToolFor(IBlockState b, ToolSet ts) { | ||||
|         Minecraft.getMinecraft().player.inventory.currentItem = ts.getBestSlot(b); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,6 @@ import net.minecraft.block.BlockVine; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
|  | ||||
| /** | ||||
|  * | ||||
|  * @author leijurv | ||||
|  */ | ||||
| public class ActionDescend extends ActionPlaceOrBreak { | ||||
| @@ -33,6 +32,6 @@ public class ActionDescend extends ActionPlaceOrBreak { | ||||
|     @Override | ||||
|     protected boolean tick0() {//basically just hold down W until we are where we want to be | ||||
|         MovementManager.moveTowardsBlock(to); | ||||
|         return Baritone.playerFeet.equals(to); | ||||
|         return Baritone.playerFeet.equals(to); // TODO wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,6 +28,6 @@ public class ActionDescendThree extends ActionPlaceOrBreak { | ||||
|     @Override | ||||
|     protected boolean tick0() {//basically just hold down W until we are where we want to be | ||||
|         MovementManager.moveTowardsBlock(to); | ||||
|         return Baritone.playerFeet.equals(to); | ||||
|         return Baritone.playerFeet.equals(to); // TODO wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -6,7 +6,6 @@ import baritone.util.ToolSet; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
|  | ||||
| /** | ||||
|  * | ||||
|  * @author leijurv | ||||
|  */ | ||||
| public class ActionDescendTwo extends ActionPlaceOrBreak { | ||||
| @@ -29,6 +28,6 @@ public class ActionDescendTwo extends ActionPlaceOrBreak { | ||||
|     @Override | ||||
|     protected boolean tick0() {//basically just hold down W until we are where we want to be | ||||
|         MovementManager.moveTowardsBlock(to); | ||||
|         return Baritone.playerFeet.equals(to); | ||||
|         return Baritone.playerFeet.equals(to); // TODO wait until we're actually on the ground before saying we're done because sometimes we continue to fall if the next action starts immediately | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user