diff --git a/README.md b/README.md index 66357bfa..6bffdc24 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,6 @@ Here are some links to help to get started: - [Installation](INSTALL.md) -There's also some useful information down below - # Setup ## Command Line diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 235b0d31..351ded3a 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -208,7 +208,7 @@ public class ProguardTask extends BaritoneGradleTask { Objects.requireNonNull(extension); // 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"); f_replacer.setAccessible(true); Object replacer = f_replacer.get(extension); diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0649ff10..9352b7fe 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -127,6 +127,16 @@ public final class RotationUtils { 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 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 * of the specified block. It first checks if the block center is reachable, and if so, diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 4d13d027..07b4cd98 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -18,56 +18,77 @@ package baritone.api.utils; import baritone.api.Settings; -import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import java.awt.*; -import java.io.File; -import java.io.FileOutputStream; -import java.util.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +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.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import static net.minecraft.client.Minecraft.getMinecraft; + 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("^(?[^ ]+) +(?[^ ]+)"); // 2 words separated by spaces private static final Map, SettingsIO> map; + private static boolean isComment(String line) { + return line.startsWith("#") || line.startsWith("//"); + } + + private static void forEachLine(Path file, Consumer 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) { - try (Scanner scan = new Scanner(settingsFile)) { - while (scan.hasNextLine()) { - String line = scan.nextLine(); - if (line.isEmpty()) { - continue; + try { + forEachLine(SETTINGS_PATH, line -> { + Matcher matcher = SETTING_PATTERN.matcher(line); + if (!matcher.matches()) { + System.out.println("Invalid syntax in setting file: " + line); + return; } - if (line.startsWith("#") || line.startsWith("//")) { - continue; - } - 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(); + + String settingName = matcher.group("setting").toLowerCase(); + String settingValue = matcher.group("value"); try { parseAndApply(settings, settingName, settingValue); } catch (Exception ex) { - ex.printStackTrace(); System.out.println("Unable to parse line " + line); + ex.printStackTrace(); } - } + }); } catch (Exception ex) { - ex.printStackTrace(); 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) { - try (FileOutputStream out = new FileOutputStream(settingsFile)) { + try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) { for (Settings.Setting setting : settings.allSettings) { if (setting.get() == null) { System.out.println("NULL SETTING?" + setting.getName()); @@ -83,11 +104,11 @@ public class SettingsUtil { if (io == null) { 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) { + System.out.println("Exception thrown while saving Baritone settings!"); ex.printStackTrace(); - System.out.println("Exception while saving Baritone settings!"); } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index e9caddfe..b604ce48 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -179,8 +179,8 @@ public final class CachedWorld implements ICachedWorld, Helper { if (region == null) { continue; } - int distX = (region.getX() * 512 + 256) - pruneCenter.getX(); - int distZ = (region.getZ() * 512 + 256) - pruneCenter.getZ(); + int distX = (region.getX() << 9 + 256) - pruneCenter.getX(); + int distZ = (region.getZ() << 9 + 256) - pruneCenter.getZ(); double dist = Math.sqrt(distX * distX + distZ * distZ); if (dist > 1024) { logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); @@ -215,7 +215,7 @@ public final class CachedWorld implements ICachedWorld, Helper { if (mostRecentlyModified == null) { 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 allRegions() { diff --git a/src/main/java/baritone/pathing/calc/Path.java b/src/main/java/baritone/pathing/calc/Path.java index 0b5b2cc7..37441743 100644 --- a/src/main/java/baritone/pathing/calc/Path.java +++ b/src/main/java/baritone/pathing/calc/Path.java @@ -132,7 +132,9 @@ class Path extends PathBase { Movement move = moves.apply0(context, src); 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 - 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; } } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 3754d831..2db8bf8d 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -34,7 +34,6 @@ import java.util.Optional; 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 final IBaritone baritone; @@ -85,7 +84,7 @@ public abstract class Movement implements IMovement, MovementHelper { return cost; } - protected abstract double calculateCost(CalculationContext context); + public abstract double calculateCost(CalculationContext context); @Override public double recalculateCost() { @@ -125,9 +124,6 @@ public abstract class Movement implements IMovement, MovementHelper { rotation, 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) -> { baritone.getInputOverrideHandler().setInputForceState(input, forced); }); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 1faa5cf5..7da7ad15 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -52,7 +52,7 @@ public class MovementAscend extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z, dest.x, dest.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 800346a1..051be99d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -52,7 +52,7 @@ public class MovementDescend extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f2aeebbb..a47fc263 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -54,7 +54,7 @@ public class MovementDiagonal extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 81b257e7..2bec8fcf 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -43,7 +43,7 @@ public class MovementDownward extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 90b44c14..6442d7d9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -54,7 +54,7 @@ public class MovementFall extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 09bdd73a..7c4ca19a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -168,7 +168,7 @@ public class MovementParkour extends Movement { @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult res = new MutableMoveResult(); cost(context, src.x, src.y, src.z, direction, res); if (res.x != dest.x || res.z != dest.z) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 81303be7..dd93eeed 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -42,7 +42,7 @@ public class MovementPillar extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index b2fd416b..9f7c0fdf 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -60,7 +60,7 @@ public class MovementTraverse extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z, dest.x, dest.z); } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index ec71ef48..8d841e46 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -110,7 +110,6 @@ public class PathExecutor implements IPathExecutor, Helper { 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 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))) { diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 4c9c1263..3d25c076 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -57,7 +57,6 @@ public final class FollowProcess extends BaritoneProcessHelper implements IFollo } private Goal towards(Entity following) { - // lol this is trashy but it works BlockPos pos; if (Baritone.settings().followOffsetDistance.get() == 0) { pos = new BlockPos(following); diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 97685ac0..1368658b 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -64,8 +64,7 @@ public class PathingControlManager implements IPathingControlManager { command = null; for (IBaritoneProcess proc : processes) { 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 - // but not for a non temporary thing + 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 throw new IllegalStateException(proc.displayName()); } } @@ -175,7 +174,7 @@ public class PathingControlManager implements IPathingControlManager { boolean found = false; boolean cancelOthers = false; 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); if (found) { if (cancelOthers) { diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 880517a0..0aa02afd 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -180,7 +180,7 @@ public class ToolSet { speed *= 0.09; break; 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; default: speed *= 0.00081; diff --git a/src/main/java/baritone/utils/pathing/PathBase.java b/src/main/java/baritone/utils/pathing/PathBase.java index 3fbc95ca..04fe9872 100644 --- a/src/main/java/baritone/utils/pathing/PathBase.java +++ b/src/main/java/baritone/utils/pathing/PathBase.java @@ -26,7 +26,7 @@ import net.minecraft.util.math.BlockPos; public abstract class PathBase implements IPath { @Override - public PathBase cutoffAtLoadedChunks(Object bsi0) { + public PathBase cutoffAtLoadedChunks(Object bsi0) { // <-- cursed cursed cursed BlockStateInterface bsi = (BlockStateInterface) bsi0; for (int i = 0; i < positions().size(); i++) { BlockPos pos = positions().get(i);