allow some break and fall
This commit is contained in:
parent
a311829605
commit
2bf09cc5a3
@ -217,12 +217,21 @@ public interface MovementHelper extends ActionCosts, Helper {
|
|||||||
|
|
||||||
static Movement generateMovementFallOrDescend(BlockPos pos, EnumFacing direction, CalculationContext calcContext) {
|
static Movement generateMovementFallOrDescend(BlockPos pos, EnumFacing direction, CalculationContext calcContext) {
|
||||||
BlockPos dest = pos.offset(direction);
|
BlockPos dest = pos.offset(direction);
|
||||||
for (int i = 0; i < 4; i++) {
|
// A
|
||||||
if (!(BlockStateInterface.get(dest.down(i - 1)).getBlock() instanceof BlockAir)) {
|
//SA
|
||||||
//if any of these four aren't air, that means that a fall N isn't possible
|
// B
|
||||||
//so try a movementdescend
|
// B
|
||||||
|
// C
|
||||||
|
// D
|
||||||
|
//if S is where you start, both of B need to be air for a movementfall
|
||||||
|
//A is plausibly breakable by either descend or fall
|
||||||
|
//C, D, etc determine the length of the fall
|
||||||
|
for (int i = 1; i < 3; i++) {
|
||||||
|
if (!canWalkThrough(dest.down(i))) {
|
||||||
|
//if any of these two (B in the diagram) aren't air
|
||||||
|
//have to do a descend, because fall is impossible
|
||||||
|
|
||||||
//if all four of them are air, a movementdescend isn't possible anyway
|
//this doesn't guarantee descend is possible, it just guarantees fall is impossible
|
||||||
return new MovementDescend(pos, dest.down()); // standard move out by 1 and descend by 1
|
return new MovementDescend(pos, dest.down()); // standard move out by 1 and descend by 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,10 +50,17 @@ public class MovementFall extends Movement {
|
|||||||
if (!BlockStateInterface.isWater(dest) && src.getY() - dest.getY() > 3) {
|
if (!BlockStateInterface.isWater(dest) && src.getY() - dest.getY() > 3) {
|
||||||
placeBucketCost = ActionCosts.PLACE_ONE_BLOCK_COST;
|
placeBucketCost = ActionCosts.PLACE_ONE_BLOCK_COST;
|
||||||
}
|
}
|
||||||
if (getTotalHardnessOfBlocksToBreak(context.getToolSet()) != 0) {
|
double frontTwo = MovementHelper.getMiningDurationTicks(context.getToolSet(), positionsToBreak[0]) + MovementHelper.getMiningDurationTicks(context.getToolSet(), positionsToBreak[1]);
|
||||||
|
if (frontTwo >= COST_INF) {
|
||||||
return COST_INF;
|
return COST_INF;
|
||||||
}
|
}
|
||||||
return WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[positionsToBreak.length - 1] + placeBucketCost;
|
for (int i = 2; i < positionsToBreak.length; i++) {
|
||||||
|
if (MovementHelper.getMiningDurationTicks(context.getToolSet(), positionsToBreak[i]) > 0) {
|
||||||
|
//can't break while falling
|
||||||
|
return COST_INF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[positionsToBreak.length - 1] + placeBucketCost + frontTwo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user