Merge branch 'master' into builder
This commit is contained in:
commit
8ed2431f37
@ -25,8 +25,6 @@ Here are some links to help to get started:
|
|||||||
|
|
||||||
- [Installation](INSTALL.md)
|
- [Installation](INSTALL.md)
|
||||||
|
|
||||||
There's also some useful information down below
|
|
||||||
|
|
||||||
# Setup
|
# Setup
|
||||||
|
|
||||||
## Command Line
|
## Command Line
|
||||||
|
@ -208,7 +208,7 @@ public class ProguardTask extends BaritoneGradleTask {
|
|||||||
Objects.requireNonNull(extension);
|
Objects.requireNonNull(extension);
|
||||||
|
|
||||||
// for some reason cant use Class.forName
|
// for some reason cant use Class.forName
|
||||||
Class<?> class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass();
|
Class<?> class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); // <-- cursed
|
||||||
Field f_replacer = class_baseExtension.getDeclaredField("replacer");
|
Field f_replacer = class_baseExtension.getDeclaredField("replacer");
|
||||||
f_replacer.setAccessible(true);
|
f_replacer.setAccessible(true);
|
||||||
Object replacer = f_replacer.get(extension);
|
Object replacer = f_replacer.get(extension);
|
||||||
|
@ -127,6 +127,16 @@ public final class RotationUtils {
|
|||||||
return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2));
|
return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ctx Context for the viewing entity
|
||||||
|
* @param pos The target block position
|
||||||
|
* @return The optional rotation
|
||||||
|
* @see #reachable(EntityPlayerSP, BlockPos, double)
|
||||||
|
*/
|
||||||
|
public static Optional<Rotation> reachable(IPlayerContext ctx, BlockPos pos) {
|
||||||
|
return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if the specified entity is able to reach the center of any of the sides
|
* Determines if the specified entity is able to reach the center of any of the sides
|
||||||
* of the specified block. It first checks if the block center is reachable, and if so,
|
* of the specified block. It first checks if the block center is reachable, and if so,
|
||||||
|
@ -18,56 +18,77 @@
|
|||||||
package baritone.api.utils;
|
package baritone.api.utils;
|
||||||
|
|
||||||
import baritone.api.Settings;
|
import baritone.api.Settings;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.BufferedReader;
|
||||||
import java.io.FileOutputStream;
|
import java.io.BufferedWriter;
|
||||||
import java.util.*;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static net.minecraft.client.Minecraft.getMinecraft;
|
||||||
|
|
||||||
public class SettingsUtil {
|
public class SettingsUtil {
|
||||||
|
|
||||||
private static final File settingsFile = new File(new File(Minecraft.getMinecraft().gameDir, "baritone"), "settings.txt");
|
private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt");
|
||||||
|
private static final Pattern SETTING_PATTERN = Pattern.compile("^(?<setting>[^ ]+) +(?<value>[^ ]+)"); // 2 words separated by spaces
|
||||||
|
|
||||||
private static final Map<Class<?>, SettingsIO> map;
|
private static final Map<Class<?>, SettingsIO> map;
|
||||||
|
|
||||||
|
private static boolean isComment(String line) {
|
||||||
|
return line.startsWith("#") || line.startsWith("//");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void forEachLine(Path file, Consumer<String> consumer) throws IOException {
|
||||||
|
try (BufferedReader scan = Files.newBufferedReader(file)) {
|
||||||
|
String line;
|
||||||
|
while ((line = scan.readLine()) != null) {
|
||||||
|
if (line.isEmpty() || isComment(line)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
consumer.accept(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void readAndApply(Settings settings) {
|
public static void readAndApply(Settings settings) {
|
||||||
try (Scanner scan = new Scanner(settingsFile)) {
|
try {
|
||||||
while (scan.hasNextLine()) {
|
forEachLine(SETTINGS_PATH, line -> {
|
||||||
String line = scan.nextLine();
|
Matcher matcher = SETTING_PATTERN.matcher(line);
|
||||||
if (line.isEmpty()) {
|
if (!matcher.matches()) {
|
||||||
continue;
|
System.out.println("Invalid syntax in setting file: " + line);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (line.startsWith("#") || line.startsWith("//")) {
|
|
||||||
continue;
|
String settingName = matcher.group("setting").toLowerCase();
|
||||||
}
|
String settingValue = matcher.group("value");
|
||||||
int space = line.indexOf(" ");
|
|
||||||
if (space == -1) {
|
|
||||||
System.out.println("Skipping invalid line with no space: " + line);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String settingName = line.substring(0, space).trim().toLowerCase();
|
|
||||||
String settingValue = line.substring(space).trim();
|
|
||||||
try {
|
try {
|
||||||
parseAndApply(settings, settingName, settingValue);
|
parseAndApply(settings, settingName, settingValue);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
|
||||||
System.out.println("Unable to parse line " + line);
|
System.out.println("Unable to parse line " + line);
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (Exception ex) {
|
||||||
System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!");
|
System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!");
|
||||||
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized void save(Settings settings) {
|
public static synchronized void save(Settings settings) {
|
||||||
try (FileOutputStream out = new FileOutputStream(settingsFile)) {
|
try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) {
|
||||||
for (Settings.Setting setting : settings.allSettings) {
|
for (Settings.Setting setting : settings.allSettings) {
|
||||||
if (setting.get() == null) {
|
if (setting.get() == null) {
|
||||||
System.out.println("NULL SETTING?" + setting.getName());
|
System.out.println("NULL SETTING?" + setting.getName());
|
||||||
@ -83,11 +104,11 @@ public class SettingsUtil {
|
|||||||
if (io == null) {
|
if (io == null) {
|
||||||
throw new IllegalStateException("Missing " + setting.getValueClass() + " " + setting + " " + setting.getName());
|
throw new IllegalStateException("Missing " + setting.getValueClass() + " " + setting + " " + setting.getName());
|
||||||
}
|
}
|
||||||
out.write((setting.getName() + " " + io.toString.apply(setting.get()) + "\n").getBytes());
|
out.write(setting.getName() + " " + io.toString.apply(setting.get()) + "\n");
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
System.out.println("Exception thrown while saving Baritone settings!");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
System.out.println("Exception while saving Baritone settings!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,8 +179,8 @@ public final class CachedWorld implements ICachedWorld, Helper {
|
|||||||
if (region == null) {
|
if (region == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int distX = (region.getX() * 512 + 256) - pruneCenter.getX();
|
int distX = (region.getX() << 9 + 256) - pruneCenter.getX();
|
||||||
int distZ = (region.getZ() * 512 + 256) - pruneCenter.getZ();
|
int distZ = (region.getZ() << 9 + 256) - pruneCenter.getZ();
|
||||||
double dist = Math.sqrt(distX * distX + distZ * distZ);
|
double dist = Math.sqrt(distX * distX + distZ * distZ);
|
||||||
if (dist > 1024) {
|
if (dist > 1024) {
|
||||||
logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram");
|
logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram");
|
||||||
@ -215,7 +215,7 @@ public final class CachedWorld implements ICachedWorld, Helper {
|
|||||||
if (mostRecentlyModified == null) {
|
if (mostRecentlyModified == null) {
|
||||||
return new BlockPos(0, 0, 0);
|
return new BlockPos(0, 0, 0);
|
||||||
}
|
}
|
||||||
return new BlockPos(mostRecentlyModified.x * 16 + 8, 0, mostRecentlyModified.z * 16 + 8);
|
return new BlockPos(mostRecentlyModified.x << 4 + 8, 0, mostRecentlyModified.z << 4 + 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized List<CachedRegion> allRegions() {
|
private synchronized List<CachedRegion> allRegions() {
|
||||||
|
@ -132,7 +132,9 @@ class Path extends PathBase {
|
|||||||
Movement move = moves.apply0(context, src);
|
Movement move = moves.apply0(context, src);
|
||||||
if (move.getDest().equals(dest)) {
|
if (move.getDest().equals(dest)) {
|
||||||
// have to calculate the cost at calculation time so we can accurately judge whether a cost increase happened between cached calculation and real execution
|
// have to calculate the cost at calculation time so we can accurately judge whether a cost increase happened between cached calculation and real execution
|
||||||
move.override(cost);
|
// however, taking into account possible favoring that could skew the node cost, we really want the stricter limit of the two
|
||||||
|
// so we take the minimum of the path node cost difference, and the calculated cost
|
||||||
|
move.override(Math.min(move.calculateCost(context), cost));
|
||||||
return move;
|
return move;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@ import java.util.Optional;
|
|||||||
|
|
||||||
public abstract class Movement implements IMovement, MovementHelper {
|
public abstract class Movement implements IMovement, MovementHelper {
|
||||||
|
|
||||||
protected static final EnumFacing[] HORIZONTALS = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST};
|
|
||||||
protected static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN};
|
protected static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN};
|
||||||
|
|
||||||
protected final IBaritone baritone;
|
protected final IBaritone baritone;
|
||||||
@ -85,7 +84,7 @@ public abstract class Movement implements IMovement, MovementHelper {
|
|||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract double calculateCost(CalculationContext context);
|
public abstract double calculateCost(CalculationContext context);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double recalculateCost() {
|
public double recalculateCost() {
|
||||||
@ -125,9 +124,6 @@ public abstract class Movement implements IMovement, MovementHelper {
|
|||||||
rotation,
|
rotation,
|
||||||
currentState.getTarget().hasToForceRotations()));
|
currentState.getTarget().hasToForceRotations()));
|
||||||
|
|
||||||
// TODO: calculate movement inputs from latestState.getGoal().position
|
|
||||||
// latestState.getTarget().position.ifPresent(null); NULL CONSUMER REALLY SHOULDN'T BE THE FINAL THING YOU SHOULD REALLY REPLACE THIS WITH ALMOST ACTUALLY ANYTHING ELSE JUST PLEASE DON'T LEAVE IT AS IT IS THANK YOU KANYE
|
|
||||||
|
|
||||||
currentState.getInputStates().forEach((input, forced) -> {
|
currentState.getInputStates().forEach((input, forced) -> {
|
||||||
baritone.getInputOverrideHandler().setInputForceState(input, forced);
|
baritone.getInputOverrideHandler().setInputForceState(input, forced);
|
||||||
});
|
});
|
||||||
|
@ -52,7 +52,7 @@ public class MovementAscend extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
return cost(context, src.x, src.y, src.z, dest.x, dest.z);
|
return cost(context, src.x, src.y, src.z, dest.x, dest.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public class MovementDescend extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
MutableMoveResult result = new MutableMoveResult();
|
MutableMoveResult result = new MutableMoveResult();
|
||||||
cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
||||||
if (result.y != dest.y) {
|
if (result.y != dest.y) {
|
||||||
|
@ -54,7 +54,7 @@ public class MovementDiagonal extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
MutableMoveResult result = new MutableMoveResult();
|
MutableMoveResult result = new MutableMoveResult();
|
||||||
cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
||||||
if (result.y != dest.y) {
|
if (result.y != dest.y) {
|
||||||
|
@ -43,7 +43,7 @@ public class MovementDownward extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
return cost(context, src.x, src.y, src.z);
|
return cost(context, src.x, src.y, src.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ public class MovementFall extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
MutableMoveResult result = new MutableMoveResult();
|
MutableMoveResult result = new MutableMoveResult();
|
||||||
MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result);
|
||||||
if (result.y != dest.y) {
|
if (result.y != dest.y) {
|
||||||
|
@ -168,7 +168,7 @@ public class MovementParkour extends Movement {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
MutableMoveResult res = new MutableMoveResult();
|
MutableMoveResult res = new MutableMoveResult();
|
||||||
cost(context, src.x, src.y, src.z, direction, res);
|
cost(context, src.x, src.y, src.z, direction, res);
|
||||||
if (res.x != dest.x || res.z != dest.z) {
|
if (res.x != dest.x || res.z != dest.z) {
|
||||||
|
@ -42,7 +42,7 @@ public class MovementPillar extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
return cost(context, src.x, src.y, src.z);
|
return cost(context, src.x, src.y, src.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ public class MovementTraverse extends Movement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected double calculateCost(CalculationContext context) {
|
public double calculateCost(CalculationContext context) {
|
||||||
return cost(context, src.x, src.y, src.z, dest.x, dest.z);
|
return cost(context, src.x, src.y, src.z, dest.x, dest.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,6 @@ public class PathExecutor implements IPathExecutor, Helper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//System.out.println("Should be at " + whereShouldIBe + " actually am at " + whereAmI);
|
|
||||||
if (!Blocks.AIR.equals(BlockStateInterface.getBlock(ctx, whereAmI.down()))) {//do not skip if standing on air, because our position isn't stable to skip
|
if (!Blocks.AIR.equals(BlockStateInterface.getBlock(ctx, whereAmI.down()))) {//do not skip if standing on air, because our position isn't stable to skip
|
||||||
for (int i = 0; i < pathPosition - 1 && i < path.length(); i++) {//this happens for example when you lag out and get teleported back a couple blocks
|
for (int i = 0; i < pathPosition - 1 && i < path.length(); i++) {//this happens for example when you lag out and get teleported back a couple blocks
|
||||||
if (whereAmI.equals(path.positions().get(i))) {
|
if (whereAmI.equals(path.positions().get(i))) {
|
||||||
|
@ -57,7 +57,6 @@ public final class FollowProcess extends BaritoneProcessHelper implements IFollo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Goal towards(Entity following) {
|
private Goal towards(Entity following) {
|
||||||
// lol this is trashy but it works
|
|
||||||
BlockPos pos;
|
BlockPos pos;
|
||||||
if (Baritone.settings().followOffsetDistance.get() == 0) {
|
if (Baritone.settings().followOffsetDistance.get() == 0) {
|
||||||
pos = new BlockPos(following);
|
pos = new BlockPos(following);
|
||||||
|
@ -64,8 +64,7 @@ public class PathingControlManager implements IPathingControlManager {
|
|||||||
command = null;
|
command = null;
|
||||||
for (IBaritoneProcess proc : processes) {
|
for (IBaritoneProcess proc : processes) {
|
||||||
proc.onLostControl();
|
proc.onLostControl();
|
||||||
if (proc.isActive() && !proc.isTemporary()) { // it's okay for a temporary thing (like combat pause) to maintain control even if you say to cancel
|
if (proc.isActive() && !proc.isTemporary()) { // it's okay only for a temporary thing (like combat pause) to maintain control even if you say to cancel
|
||||||
// but not for a non temporary thing
|
|
||||||
throw new IllegalStateException(proc.displayName());
|
throw new IllegalStateException(proc.displayName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,7 +174,7 @@ public class PathingControlManager implements IPathingControlManager {
|
|||||||
boolean found = false;
|
boolean found = false;
|
||||||
boolean cancelOthers = false;
|
boolean cancelOthers = false;
|
||||||
PathingCommand exec = null;
|
PathingCommand exec = null;
|
||||||
for (int i = inContention.size() - 1; i >= 0; i--) { // truly a gamer moment
|
for (int i = inContention.size() - 1; i >= 0; --i) { // truly a gamer moment
|
||||||
IBaritoneProcess proc = inContention.get(i);
|
IBaritoneProcess proc = inContention.get(i);
|
||||||
if (found) {
|
if (found) {
|
||||||
if (cancelOthers) {
|
if (cancelOthers) {
|
||||||
|
@ -180,7 +180,7 @@ public class ToolSet {
|
|||||||
speed *= 0.09;
|
speed *= 0.09;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
speed *= 0.0027;
|
speed *= 0.0027; // you might think that 0.09*0.3 = 0.027 so that should be next, that would make too much sense. it's 0.0027.
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
speed *= 0.00081;
|
speed *= 0.00081;
|
||||||
|
@ -26,7 +26,7 @@ import net.minecraft.util.math.BlockPos;
|
|||||||
|
|
||||||
public abstract class PathBase implements IPath {
|
public abstract class PathBase implements IPath {
|
||||||
@Override
|
@Override
|
||||||
public PathBase cutoffAtLoadedChunks(Object bsi0) {
|
public PathBase cutoffAtLoadedChunks(Object bsi0) { // <-- cursed cursed cursed
|
||||||
BlockStateInterface bsi = (BlockStateInterface) bsi0;
|
BlockStateInterface bsi = (BlockStateInterface) bsi0;
|
||||||
for (int i = 0; i < positions().size(); i++) {
|
for (int i = 0; i < positions().size(); i++) {
|
||||||
BlockPos pos = positions().get(i);
|
BlockPos pos = positions().get(i);
|
||||||
|
Loading…
Reference in New Issue
Block a user