Merge branch 'master' into builder

This commit is contained in:
Leijurv 2019-01-08 14:56:48 -08:00
commit 8ed2431f37
No known key found for this signature in database
GPG Key ID: 44A3EA646EADAC6A
20 changed files with 77 additions and 53 deletions

View File

@ -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

View File

@ -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);

View File

@ -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,

View File

@ -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!");
} }
} }

View File

@ -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() {

View File

@ -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;
} }
} }

View File

@ -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);
}); });

View File

@ -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);
} }

View File

@ -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) {

View File

@ -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) {

View File

@ -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);
} }

View File

@ -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) {

View File

@ -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) {

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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))) {

View File

@ -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);

View File

@ -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) {

View File

@ -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;

View File

@ -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);