Simplify fall logic and move methods
This commit is contained in:
parent
8b63a3adad
commit
e30405c0ca
@ -1,6 +1,8 @@
|
|||||||
package baritone.bot.pathing.movement;
|
package baritone.bot.pathing.movement;
|
||||||
|
|
||||||
import baritone.bot.behavior.impl.LookBehaviorUtils;
|
import baritone.bot.behavior.impl.LookBehaviorUtils;
|
||||||
|
import baritone.bot.pathing.movement.movements.MovementDescend;
|
||||||
|
import baritone.bot.pathing.movement.movements.MovementFall;
|
||||||
import baritone.bot.utils.BlockStateInterface;
|
import baritone.bot.utils.BlockStateInterface;
|
||||||
import baritone.bot.utils.Helper;
|
import baritone.bot.utils.Helper;
|
||||||
import baritone.bot.utils.ToolSet;
|
import baritone.bot.utils.ToolSet;
|
||||||
@ -12,6 +14,7 @@ import net.minecraft.entity.Entity;
|
|||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.NonNullList;
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
@ -177,6 +180,41 @@ public interface MovementHelper extends ActionCosts, Helper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Movement generateMovementFallOrDescend(BlockPos pos, EnumFacing direction) {
|
||||||
|
BlockPos dest = pos.offset(direction);
|
||||||
|
BlockPos destUp = dest.up();
|
||||||
|
BlockPos destDown = dest.down();
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
if (!(BlockStateInterface.get(destUp.down(i)).getBlock() instanceof BlockAir)) {
|
||||||
|
//if any of these four aren't air, that means that a fall N isn't possible
|
||||||
|
//so try a movementdescend
|
||||||
|
|
||||||
|
//if all four of them are air, a movementdescend isn't possible anyway
|
||||||
|
return new MovementDescend(pos, destDown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// we're clear for a fall 2
|
||||||
|
// let's see how far we can fall
|
||||||
|
for (int fallHeight = 3; true; fallHeight++) {
|
||||||
|
BlockPos onto = dest.down(fallHeight);
|
||||||
|
if (onto.getY() <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
IBlockState fallOn = BlockStateInterface.get(onto);
|
||||||
|
if (fallOn.getBlock() instanceof BlockAir) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (BlockStateInterface.isWater(fallOn.getBlock())) {
|
||||||
|
return new MovementFall(pos, onto);
|
||||||
|
}
|
||||||
|
if (MovementHelper.canWalkOn(onto)) {
|
||||||
|
return new MovementFall(pos, onto);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
static boolean hasthrowaway() {
|
static boolean hasthrowaway() {
|
||||||
EntityPlayerSP p = Minecraft.getMinecraft().player;
|
EntityPlayerSP p = Minecraft.getMinecraft().player;
|
||||||
NonNullList<ItemStack> inv = p.inventory.mainInventory;
|
NonNullList<ItemStack> inv = p.inventory.mainInventory;
|
||||||
|
@ -40,41 +40,6 @@ public class MovementFall extends Movement {
|
|||||||
super(src, dest, MovementFall.buildPositionsToBreak(src, dest), new BlockPos[]{dest.down()});
|
super(src, dest, MovementFall.buildPositionsToBreak(src, dest), new BlockPos[]{dest.down()});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Movement generateMovementFallOrDescend(BlockPos pos, EnumFacing direction) {
|
|
||||||
BlockPos dest = pos.offset(direction);
|
|
||||||
BlockPos destUp = dest.up();
|
|
||||||
BlockPos destDown = dest.down();
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
if (!(BlockStateInterface.get(destUp.down(i)).getBlock() instanceof BlockAir)) {
|
|
||||||
//if any of these four aren't air, that means that a fall N isn't possible
|
|
||||||
//so try a movementdescend
|
|
||||||
|
|
||||||
//if all four of them are air, a movementdescend isn't possible anyway
|
|
||||||
return new MovementDescend(pos, destDown);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// we're clear for a fall 2
|
|
||||||
// let's see how far we can fall
|
|
||||||
for (int fallHeight = 3; true; fallHeight++) {
|
|
||||||
BlockPos onto = dest.down(fallHeight);
|
|
||||||
if (onto.getY() <= 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
IBlockState fallOn = BlockStateInterface.get(onto);
|
|
||||||
if (fallOn.getBlock() instanceof BlockAir) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (BlockStateInterface.isWater(fallOn.getBlock())) {
|
|
||||||
return new MovementFall(pos, onto);
|
|
||||||
}
|
|
||||||
if (MovementHelper.canWalkOn(onto)) {
|
|
||||||
return new MovementFall(pos, onto);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(ToolSet ts) {
|
protected double calculateCost(ToolSet ts) {
|
||||||
if (!MovementHelper.canWalkOn(positionsToPlace[0])) {
|
if (!MovementHelper.canWalkOn(positionsToPlace[0])) {
|
||||||
@ -104,16 +69,10 @@ public class MovementFall extends Movement {
|
|||||||
state.setStatus(MovementStatus.RUNNING);
|
state.setStatus(MovementStatus.RUNNING);
|
||||||
case RUNNING:
|
case RUNNING:
|
||||||
BlockPos playerFeet = playerFeet();
|
BlockPos playerFeet = playerFeet();
|
||||||
if (src.getY() - dest.getY() > 3 && !BlockStateInterface.isWater(dest) && !player().inventory.hasItemStack(new ItemStack(new ItemBucket(Blocks.WATER)))) {
|
|
||||||
return state.setStatus(MovementStatus.UNREACHABLE);
|
|
||||||
}
|
|
||||||
if (playerFeet.equals(dest) && (player().posY - playerFeet.getY() < 0.01 || BlockStateInterface.isWater(dest)))
|
|
||||||
return state.setStatus(MovementStatus.SUCCESS);
|
|
||||||
Vec3d destCenter = Utils.calcCenterFromCoords(dest, world());
|
|
||||||
if (Math.abs(player().posX - destCenter.x) > 0.2 || Math.abs(player().posZ - destCenter.z) > 0.2) {
|
|
||||||
state.setInput(InputOverrideHandler.Input.MOVE_FORWARD, true);
|
|
||||||
}
|
|
||||||
if (!BlockStateInterface.isWater(dest) && src.getY() - dest.getY() > 3) {
|
if (!BlockStateInterface.isWater(dest) && src.getY() - dest.getY() > 3) {
|
||||||
|
if(!player().inventory.hasItemStack(new ItemStack(new ItemBucket(Blocks.WATER)))) {
|
||||||
|
state.setStatus(MovementStatus.UNREACHABLE);
|
||||||
|
}
|
||||||
LookBehaviorUtils.reachable(dest).ifPresent(rotation ->
|
LookBehaviorUtils.reachable(dest).ifPresent(rotation ->
|
||||||
state.setInput(InputOverrideHandler.Input.CLICK_RIGHT, true)
|
state.setInput(InputOverrideHandler.Input.CLICK_RIGHT, true)
|
||||||
.setTarget(new MovementTarget(rotation))
|
.setTarget(new MovementTarget(rotation))
|
||||||
@ -122,6 +81,12 @@ public class MovementFall extends Movement {
|
|||||||
Rotation rotationToBlock = Utils.calcRotationFromVec3d(playerHead(), Utils.calcCenterFromCoords(dest, world()));
|
Rotation rotationToBlock = Utils.calcRotationFromVec3d(playerHead(), Utils.calcCenterFromCoords(dest, world()));
|
||||||
state.setTarget(new MovementTarget(rotationToBlock));
|
state.setTarget(new MovementTarget(rotationToBlock));
|
||||||
}
|
}
|
||||||
|
if (playerFeet.equals(dest) && (player().posY - playerFeet.getY() < 0.01 || BlockStateInterface.isWater(dest)))
|
||||||
|
return state.setStatus(MovementStatus.SUCCESS);
|
||||||
|
Vec3d destCenter = Utils.calcCenterFromCoords(dest, world());
|
||||||
|
if (Math.abs(player().posX - destCenter.x) > 0.2 || Math.abs(player().posZ - destCenter.z) > 0.2) {
|
||||||
|
state.setInput(InputOverrideHandler.Input.MOVE_FORWARD, true);
|
||||||
|
}
|
||||||
return state;
|
return state;
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
|
Loading…
Reference in New Issue
Block a user