First commit
This commit is contained in:
141
pathfinding/actions/ActionPillar.java
Normal file
141
pathfinding/actions/ActionPillar.java
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package baritone.pathfinding.actions;
|
||||
|
||||
import baritone.ui.LookManager;
|
||||
import baritone.Baritone;
|
||||
import baritone.movement.MovementManager;
|
||||
import baritone.util.Out;
|
||||
import baritone.util.ToolSet;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockFalling;
|
||||
import net.minecraft.block.BlockLadder;
|
||||
import net.minecraft.block.BlockVine;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author leijurv
|
||||
*/
|
||||
public class ActionPillar extends ActionPlaceOrBreak {
|
||||
public ActionPillar(BlockPos start) {
|
||||
super(start, start.up(), new BlockPos[]{start.up(2)}, new BlockPos[]{start});
|
||||
}
|
||||
@Override
|
||||
protected double calculateCost(ToolSet ts) {
|
||||
Block fromDown = Minecraft.getMinecraft().world.getBlockState(from).getBlock();
|
||||
boolean ladder = fromDown instanceof BlockLadder || fromDown instanceof BlockVine;
|
||||
if (!ladder) {
|
||||
Block d = Minecraft.getMinecraft().world.getBlockState(from.down()).getBlock();
|
||||
if (d instanceof BlockLadder || d instanceof BlockVine) {
|
||||
return COST_INF;
|
||||
}
|
||||
}
|
||||
if ((!Baritone.hasThrowaway && !ladder) || !Baritone.allowVerticalMotion) {
|
||||
return COST_INF;
|
||||
}
|
||||
if (fromDown instanceof BlockVine) {
|
||||
if (getAgainst(from) == null) {
|
||||
return COST_INF;
|
||||
}
|
||||
}
|
||||
double hardness = getTotalHardnessOfBlocksToBreak(ts);
|
||||
if (hardness != 0) {
|
||||
Block tmp = Minecraft.getMinecraft().world.getBlockState(from.up(2)).getBlock();
|
||||
if (tmp instanceof BlockLadder || tmp instanceof BlockVine) {
|
||||
hardness = 0;
|
||||
} else if (!canWalkOn(from.up(3)) || canWalkThrough(from.up(3)) || Minecraft.getMinecraft().world.getBlockState(from.up(3)).getBlock() instanceof BlockFalling) {//if the block above where we want to break is not a full block, don't do it
|
||||
return COST_INF;
|
||||
}
|
||||
}
|
||||
if (isLiquid(from) || isLiquid(from.down())) {//can't pillar on water or in water
|
||||
return COST_INF;
|
||||
}
|
||||
if (ladder) {
|
||||
return LADDER_UP_ONE_COST + hardness;
|
||||
} else {
|
||||
return JUMP_ONE_BLOCK_COST + PLACE_ONE_BLOCK_COST + hardness;
|
||||
}
|
||||
}
|
||||
int numTicks = 0;
|
||||
public BlockPos getAgainst(BlockPos vine) {
|
||||
if (Minecraft.getMinecraft().world.getBlockState(vine.north()).getBlock().isBlockNormalCube()) {
|
||||
return vine.north();
|
||||
}
|
||||
if (Minecraft.getMinecraft().world.getBlockState(vine.south()).getBlock().isBlockNormalCube()) {
|
||||
return vine.south();
|
||||
}
|
||||
if (Minecraft.getMinecraft().world.getBlockState(vine.east()).getBlock().isBlockNormalCube()) {
|
||||
return vine.east();
|
||||
}
|
||||
if (Minecraft.getMinecraft().world.getBlockState(vine.west()).getBlock().isBlockNormalCube()) {
|
||||
return vine.west();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
protected boolean tick0() {
|
||||
IBlockState fromDown = Minecraft.getMinecraft().world.getBlockState(from);
|
||||
boolean ladder = fromDown.getBlock() instanceof BlockLadder || fromDown.getBlock() instanceof BlockVine;
|
||||
boolean vine = fromDown.getBlock() instanceof BlockVine;
|
||||
if (!ladder && !LookManager.lookAtBlock(positionsToPlace[0], true)) {
|
||||
return false;
|
||||
}
|
||||
EntityPlayerSP thePlayer = Minecraft.getMinecraft().player;
|
||||
boolean blockIsThere = canWalkOn(from) || ladder;
|
||||
if (ladder) {
|
||||
BlockPos against = vine ? getAgainst(from) : from.offset(fromDown.getValue(BlockLadder.FACING).getOpposite());
|
||||
if (against == null) {
|
||||
Out.gui("Unable to climb vines", Out.Mode.Standard);
|
||||
return false;
|
||||
}
|
||||
if (thePlayer.getPosition0().equals(against.up()) || thePlayer.getPosition0().equals(to)) {
|
||||
return true;
|
||||
}
|
||||
/*if (thePlayer.getPosition0().getX() != from.getX() || thePlayer.getPosition0().getZ() != from.getZ()) {
|
||||
Baritone.moveTowardsBlock(from);
|
||||
}*/
|
||||
MovementManager.moveTowardsBlock(against);
|
||||
return false;
|
||||
} else {
|
||||
if (!switchtothrowaway(true)) {//get ready to place a throwaway block
|
||||
return false;
|
||||
}
|
||||
numTicks++;
|
||||
MovementManager.jumping = thePlayer.posY < to.getY(); //if our Y coordinate is above our goal, stop jumping
|
||||
MovementManager.sneak = true;
|
||||
//otherwise jump
|
||||
if (numTicks > 40) {
|
||||
double diffX = thePlayer.posX - (to.getX() + 0.5);
|
||||
double diffZ = thePlayer.posZ - (to.getZ() + 0.5);
|
||||
double dist = Math.sqrt(diffX * diffX + diffZ * diffZ);
|
||||
if (dist > 0.17) {//why 0.17? because it seemed like a good number, that's why
|
||||
MovementManager.forward = true;//if it's been more than forty ticks of trying to jump and we aren't done yet, go forward, maybe we are stuck
|
||||
}
|
||||
}
|
||||
if (!blockIsThere) {
|
||||
Out.log("Block not there yet");
|
||||
Block fr = Minecraft.getMinecraft().world.getBlockState(from).getBlock();
|
||||
if (!(Baritone.isAir(from) || fr.isReplaceable(Minecraft.getMinecraft().world, from))) {
|
||||
MovementManager.isLeftClick = true;
|
||||
blockIsThere = false;
|
||||
} else if (Minecraft.getMinecraft().player.isSneaking()) {
|
||||
Minecraft.getMinecraft().rightClickMouse();//constantly right click
|
||||
}
|
||||
}
|
||||
}
|
||||
BlockPos whereAmI = new BlockPos(thePlayer.posX, thePlayer.posY, thePlayer.posZ);
|
||||
if (whereAmI.equals(to) && blockIsThere) {//if we are at our goal and the block below us is placed
|
||||
Out.log("Done pillaring to " + to);
|
||||
MovementManager.jumping = false;//stop jumping
|
||||
return true;//we are done
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user