2018-09-23 05:00:28 +00:00
|
|
|
/*
|
|
|
|
* This file is part of Baritone.
|
|
|
|
*
|
|
|
|
* Baritone is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Baritone is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* along with Baritone. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2018-09-23 21:23:23 +00:00
|
|
|
package baritone.pathing.movement;
|
2018-09-23 05:00:28 +00:00
|
|
|
|
|
|
|
import baritone.pathing.movement.movements.*;
|
|
|
|
import baritone.utils.pathing.BetterBlockPos;
|
2018-09-24 23:51:10 +00:00
|
|
|
import baritone.utils.pathing.MoveResult;
|
2018-09-23 05:00:28 +00:00
|
|
|
import net.minecraft.util.EnumFacing;
|
|
|
|
|
2018-09-23 21:23:23 +00:00
|
|
|
/**
|
|
|
|
* An enum of all possible movements attached to all possible directions they could be taken in
|
|
|
|
*
|
|
|
|
* @author leijurv
|
|
|
|
*/
|
2018-09-23 05:00:28 +00:00
|
|
|
public enum Moves {
|
2018-10-05 17:10:24 +00:00
|
|
|
DOWNWARD(0, -1, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementDownward(src, src.down());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementDownward.cost(context, x, y, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
PILLAR(0, +1, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementPillar(src, src.up());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementPillar.cost(context, x, y, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
TRAVERSE_NORTH(0, 0, -1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementTraverse(src, src.north());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementTraverse.cost(context, x, y, z, x, z - 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
TRAVERSE_SOUTH(0, 0, +1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementTraverse(src, src.south());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementTraverse.cost(context, x, y, z, x, z + 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
TRAVERSE_EAST(+1, 0, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementTraverse(src, src.east());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementTraverse.cost(context, x, y, z, x + 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
TRAVERSE_WEST(-1, 0, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementTraverse(src, src.west());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementTraverse.cost(context, x, y, z, x - 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
ASCEND_NORTH(0, +1, -1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementAscend(src, new BetterBlockPos(src.x, src.y + 1, src.z - 1));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementAscend.cost(context, x, y, z, x, z - 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
ASCEND_SOUTH(0, +1, +1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementAscend(src, new BetterBlockPos(src.x, src.y + 1, src.z + 1));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementAscend.cost(context, x, y, z, x, z + 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
ASCEND_EAST(+1, +1, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementAscend(src, new BetterBlockPos(src.x + 1, src.y + 1, src.z));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementAscend.cost(context, x, y, z, x + 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
ASCEND_WEST(-1, +1, 0) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementAscend(src, new BetterBlockPos(src.x - 1, src.y + 1, src.z));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementAscend.cost(context, x, y, z, x - 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DESCEND_EAST(+1, 0, 0, false, true) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
MoveResult res = apply(new CalculationContext(), src.x, src.y, src.z);
|
|
|
|
if (res.destY == src.y - 1) {
|
|
|
|
return new MovementDescend(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
} else {
|
|
|
|
return new MovementFall(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:50:25 +00:00
|
|
|
return MovementDescend.cost(context, x, y, z, x + 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DESCEND_WEST(-1, 0, 0, false, true) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
MoveResult res = apply(new CalculationContext(), src.x, src.y, src.z);
|
|
|
|
if (res.destY == src.y - 1) {
|
|
|
|
return new MovementDescend(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
} else {
|
|
|
|
return new MovementFall(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:50:25 +00:00
|
|
|
return MovementDescend.cost(context, x, y, z, x - 1, z);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DESCEND_NORTH(0, 0, -1, false, true) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
MoveResult res = apply(new CalculationContext(), src.x, src.y, src.z);
|
|
|
|
if (res.destY == src.y - 1) {
|
|
|
|
return new MovementDescend(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
} else {
|
|
|
|
return new MovementFall(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:50:25 +00:00
|
|
|
return MovementDescend.cost(context, x, y, z, x, z - 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DESCEND_SOUTH(0, 0, +1, false, true) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
MoveResult res = apply(new CalculationContext(), src.x, src.y, src.z);
|
|
|
|
if (res.destY == src.y - 1) {
|
|
|
|
return new MovementDescend(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
} else {
|
|
|
|
return new MovementFall(src, new BetterBlockPos(res.destX, res.destY, res.destZ));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:50:25 +00:00
|
|
|
return MovementDescend.cost(context, x, y, z, x, z + 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DIAGONAL_NORTHEAST(+1, 0, -1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementDiagonal(src, EnumFacing.NORTH, EnumFacing.EAST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementDiagonal.cost(context, x, y, z, x + 1, z - 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DIAGONAL_NORTHWEST(-1, 0, -1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementDiagonal(src, EnumFacing.NORTH, EnumFacing.WEST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementDiagonal.cost(context, x, y, z, x - 1, z - 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DIAGONAL_SOUTHEAST(+1, 0, +1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementDiagonal(src, EnumFacing.SOUTH, EnumFacing.EAST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementDiagonal.cost(context, x, y, z, x + 1, z + 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
DIAGONAL_SOUTHWEST(-1, 0, +1) {
|
2018-09-23 05:00:28 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 05:00:28 +00:00
|
|
|
return new MovementDiagonal(src, EnumFacing.SOUTH, EnumFacing.WEST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-10-05 17:17:58 +00:00
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
return MovementDiagonal.cost(context, x, y, z, x - 1, z + 1);
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|
|
|
|
},
|
2018-09-23 19:24:07 +00:00
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
PARKOUR_NORTH(0, 0, -4, true, false) {
|
2018-09-23 19:24:07 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 19:24:07 +00:00
|
|
|
return MovementParkour.cost(new CalculationContext(), src, EnumFacing.NORTH);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:55:35 +00:00
|
|
|
return MovementParkour.cost(context, x, y, z, EnumFacing.NORTH);
|
2018-09-23 19:24:07 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
PARKOUR_SOUTH(0, 0, +4, true, false) {
|
2018-09-23 19:24:07 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 19:24:07 +00:00
|
|
|
return MovementParkour.cost(new CalculationContext(), src, EnumFacing.SOUTH);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:55:35 +00:00
|
|
|
return MovementParkour.cost(context, x, y, z, EnumFacing.SOUTH);
|
2018-09-23 19:24:07 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
PARKOUR_EAST(+4, 0, 0, true, false) {
|
2018-09-23 19:24:07 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 19:24:07 +00:00
|
|
|
return MovementParkour.cost(new CalculationContext(), src, EnumFacing.EAST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:55:35 +00:00
|
|
|
return MovementParkour.cost(context, x, y, z, EnumFacing.EAST);
|
2018-09-23 19:24:07 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
PARKOUR_WEST(-4, 0, 0, true, false) {
|
2018-09-23 19:24:07 +00:00
|
|
|
@Override
|
2018-09-23 21:23:23 +00:00
|
|
|
public Movement apply0(BetterBlockPos src) {
|
2018-09-23 19:24:07 +00:00
|
|
|
return MovementParkour.cost(new CalculationContext(), src, EnumFacing.WEST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
2018-09-24 17:55:35 +00:00
|
|
|
return MovementParkour.cost(context, x, y, z, EnumFacing.WEST);
|
2018-09-23 19:24:07 +00:00
|
|
|
}
|
|
|
|
};
|
2018-09-23 05:00:28 +00:00
|
|
|
|
2018-09-23 19:24:07 +00:00
|
|
|
public final boolean dynamicXZ;
|
2018-10-05 17:10:24 +00:00
|
|
|
public final boolean dynamicY;
|
2018-09-23 19:24:07 +00:00
|
|
|
|
2018-09-23 15:52:03 +00:00
|
|
|
public final int xOffset;
|
2018-10-05 17:10:24 +00:00
|
|
|
public final int yOffset;
|
2018-09-23 15:52:03 +00:00
|
|
|
public final int zOffset;
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
Moves(int x, int y, int z, boolean dynamicXZ, boolean dynamicY) {
|
2018-09-23 15:52:03 +00:00
|
|
|
this.xOffset = x;
|
2018-10-05 17:10:24 +00:00
|
|
|
this.yOffset = y;
|
2018-09-23 15:52:03 +00:00
|
|
|
this.zOffset = z;
|
2018-09-23 19:24:07 +00:00
|
|
|
this.dynamicXZ = dynamicXZ;
|
2018-10-05 17:10:24 +00:00
|
|
|
this.dynamicY = dynamicY;
|
2018-09-23 19:24:07 +00:00
|
|
|
}
|
|
|
|
|
2018-10-05 17:10:24 +00:00
|
|
|
Moves(int x, int y, int z) {
|
|
|
|
this(x, y, z, false, false);
|
2018-09-23 15:52:03 +00:00
|
|
|
}
|
2018-09-23 21:23:23 +00:00
|
|
|
|
|
|
|
public abstract Movement apply0(BetterBlockPos src);
|
|
|
|
|
2018-10-05 17:17:58 +00:00
|
|
|
public MoveResult apply(CalculationContext context, int x, int y, int z) {
|
|
|
|
if (dynamicXZ || dynamicY) {
|
|
|
|
throw new UnsupportedOperationException();
|
|
|
|
}
|
|
|
|
return new MoveResult(x + xOffset, y + yOffset, z + zOffset, cost(context, x, y, z));
|
|
|
|
}
|
|
|
|
|
|
|
|
public double cost(CalculationContext context, int x, int y, int z) {
|
|
|
|
throw new UnsupportedOperationException();
|
|
|
|
}
|
2018-09-23 05:00:28 +00:00
|
|
|
}
|