From a5b98857673a2753a396ae80e2a55511c1e8bc30 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 17 Jan 2019 12:22:36 -0800 Subject: [PATCH 1/5] not even used --- src/main/java/baritone/utils/BaritoneProcessHelper.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneProcessHelper.java b/src/main/java/baritone/utils/BaritoneProcessHelper.java index 4f3870c5..c5e13619 100644 --- a/src/main/java/baritone/utils/BaritoneProcessHelper.java +++ b/src/main/java/baritone/utils/BaritoneProcessHelper.java @@ -23,16 +23,10 @@ import baritone.api.utils.IPlayerContext; public abstract class BaritoneProcessHelper implements IBaritoneProcess, Helper { - public static final double DEFAULT_PRIORITY = 0; - protected final Baritone baritone; protected final IPlayerContext ctx; private final double priority; - public BaritoneProcessHelper(Baritone baritone) { - this(baritone, DEFAULT_PRIORITY); - } - public BaritoneProcessHelper(Baritone baritone, double priority) { this.baritone = baritone; this.ctx = baritone.getPlayerContext(); From d32c92cbde0b28f6bfaf142053a1e82be13a01ff Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 17 Jan 2019 18:01:05 -0600 Subject: [PATCH 2/5] Specificity time --- src/api/java/baritone/api/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 1b4f62e0..53690562 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -534,7 +534,7 @@ public class Settings { public Setting followOffsetDistance = new Setting<>(0D); /** - * The actual GoalNear is set in this direction from the entity you're following + * The actual GoalNear is set in this direction from the entity you're following. This value is in degrees. */ public Setting followOffsetDirection = new Setting<>(0F); From 69b1decbba34dcb3e5d0d8f0ef4ef5f5697edea8 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 17 Jan 2019 18:04:12 -0600 Subject: [PATCH 3/5] leftClickWorkaround is no longer applicable --- src/api/java/baritone/api/Settings.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 53690562..89716a38 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -450,11 +450,6 @@ public class Settings { */ public Setting prefix = new Setting<>(false); - /** - * {@code true}: can mine blocks when in inventory, chat, or tabbed away in ESC menu - */ - public Setting leftClickWorkaround = new Setting<>(true); - /** * Don't stop walking forward when you need to break blocks in your way */ From 979b8b2663d08466ab9eea0835d9cdbeb017d04a Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 17 Jan 2019 18:20:27 -0600 Subject: [PATCH 4/5] Remove associatedWith in process and some more javadoc changes --- .../api/pathing/calc/IPathingControlManager.java | 16 ++++++++++++++++ .../baritone/api/process/IBaritoneProcess.java | 14 ++++---------- .../baritone/utils/BaritoneProcessHelper.java | 5 ----- .../utils/player/PrimaryPlayerContext.java | 2 +- .../utils/player/PrimaryPlayerController.java | 2 ++ 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/api/java/baritone/api/pathing/calc/IPathingControlManager.java b/src/api/java/baritone/api/pathing/calc/IPathingControlManager.java index ffaa18b8..dc729748 100644 --- a/src/api/java/baritone/api/pathing/calc/IPathingControlManager.java +++ b/src/api/java/baritone/api/pathing/calc/IPathingControlManager.java @@ -22,10 +22,26 @@ import baritone.api.process.PathingCommand; import java.util.Optional; +/** + * @author leijurv + */ public interface IPathingControlManager { + + /** + * Registers a process with this pathing control manager. See {@link IBaritoneProcess} for more details. + * + * @param process The process + * @see IBaritoneProcess + */ void registerProcess(IBaritoneProcess process); + /** + * @return The most recent {@link IBaritoneProcess} that had control + */ Optional mostRecentInControl(); + /** + * @return The most recent pathing command executed + */ Optional mostRecentCommand(); } diff --git a/src/api/java/baritone/api/process/IBaritoneProcess.java b/src/api/java/baritone/api/process/IBaritoneProcess.java index db7588ab..c2eb2f49 100644 --- a/src/api/java/baritone/api/process/IBaritoneProcess.java +++ b/src/api/java/baritone/api/process/IBaritoneProcess.java @@ -17,7 +17,6 @@ package baritone.api.process; -import baritone.api.IBaritone; import baritone.api.behavior.IPathingBehavior; import baritone.api.event.events.PathEvent; @@ -25,8 +24,10 @@ import baritone.api.event.events.PathEvent; * A process that can control the PathingBehavior. *

* Differences between a baritone process and a behavior: - * Only one baritone process can be active at a time - * PathingBehavior can only be controlled by a process + *

    + *
  • Only one baritone process can be active at a time
  • + *
  • PathingBehavior can only be controlled by a process
  • + *
*

* That's it actually * @@ -83,13 +84,6 @@ public interface IBaritoneProcess { */ double priority(); - /** - * Returns which bot this process is associated with. (5000000iq forward thinking) - * - * @return The Bot associated with this process - */ - IBaritone associatedWith(); - /** * Returns a user-friendly name for this process. Suitable for a HUD. * diff --git a/src/main/java/baritone/utils/BaritoneProcessHelper.java b/src/main/java/baritone/utils/BaritoneProcessHelper.java index c5e13619..1a66eaa5 100644 --- a/src/main/java/baritone/utils/BaritoneProcessHelper.java +++ b/src/main/java/baritone/utils/BaritoneProcessHelper.java @@ -34,11 +34,6 @@ public abstract class BaritoneProcessHelper implements IBaritoneProcess, Helper baritone.getPathingControlManager().registerProcess(this); } - @Override - public Baritone associatedWith() { - return baritone; - } - @Override public boolean isTemporary() { return false; diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index f0d7ee01..1eefc91f 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -27,7 +27,7 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; /** - * Implementation of {@link IPlayerContext} that provides information about the local player. + * Implementation of {@link IPlayerContext} that provides information about the primary player. * * @author Brady * @since 11/12/2018 diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 7b998bb5..c0dc8798 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -27,6 +27,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; /** + * Implementation of {@link IPlayerController} that chains to the primary player controller's methods + * * @author Brady * @since 12/14/2018 */ From 20b03d00049dc3f4a75c8d8e9aa83eca1bd7ac55 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 18 Jan 2019 13:43:19 -0600 Subject: [PATCH 5/5] No more setSprinting --- .../api/event/events/SprintStateEvent.java | 42 +++++++++++++++++++ .../listener/AbstractGameEventListener.java | 3 ++ .../event/listener/IGameEventListener.java | 8 ++++ .../launch/mixins/MixinEntityPlayerSP.java | 16 +++++++ .../baritone/behavior/PathingBehavior.java | 12 ++++-- .../java/baritone/event/GameEventHandler.java | 5 +++ .../baritone/pathing/path/PathExecutor.java | 38 +++++++---------- 7 files changed, 97 insertions(+), 27 deletions(-) create mode 100644 src/api/java/baritone/api/event/events/SprintStateEvent.java diff --git a/src/api/java/baritone/api/event/events/SprintStateEvent.java b/src/api/java/baritone/api/event/events/SprintStateEvent.java new file mode 100644 index 00000000..e7b8d193 --- /dev/null +++ b/src/api/java/baritone/api/event/events/SprintStateEvent.java @@ -0,0 +1,42 @@ +/* + * 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 . + */ + +package baritone.api.event.events; + +import baritone.api.event.events.type.ManagedPlayerEvent; +import net.minecraft.client.entity.EntityPlayerSP; + +/** + * @author Brady + * @since 1/18/2019 + */ +public class SprintStateEvent extends ManagedPlayerEvent { + + private Boolean state; + + public SprintStateEvent(EntityPlayerSP player) { + super(player); + } + + public final void setState(boolean state) { + this.state = state; + } + + public final Boolean getState() { + return this.state; + } +} diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 135c29a7..71045768 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -57,6 +57,9 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override default void onPlayerRotationMove(RotationMoveEvent event) {} + @Override + default void onPlayerSprintState(SprintStateEvent event) {} + @Override default void onBlockInteract(BlockInteractEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 0572cbe9..dc471e5f 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -109,6 +109,14 @@ public interface IGameEventListener { */ void onPlayerRotationMove(RotationMoveEvent event); + /** + * Called whenever the sprint keybind state is checked in {@link EntityPlayerSP#onLivingUpdate} + * + * @param event The event + * @see EntityPlayerSP#onLivingUpdate() + */ + void onPlayerSprintState(SprintStateEvent event); + /** * Called when the local player interacts with a block, whether it is breaking or opening/placing. * diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 9c9509f0..2f87b72d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -21,8 +21,10 @@ import baritone.api.BaritoneAPI; import baritone.api.behavior.IPathingBehavior; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; +import baritone.api.event.events.SprintStateEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.PlayerCapabilities; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -87,4 +89,18 @@ public class MixinEntityPlayerSP { IPathingBehavior pathingBehavior = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getPathingBehavior(); return !pathingBehavior.isPathing() && capabilities.allowFlying; } + + @Redirect( + method = "onLivingUpdate", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/settings/KeyBinding.isKeyDown()Z" + ) + ) + private boolean isKeyDown(KeyBinding keyBinding) { + EntityPlayerSP self = (EntityPlayerSP) (Object) this; + SprintStateEvent event = new SprintStateEvent(self); + BaritoneAPI.getProvider().getBaritoneForPlayer(self).getGameEventHandler().onPlayerSprintState(event); + return event.getState() == null ? keyBinding.isKeyDown() : event.getState(); + } } diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 8c5fb8a4..92eb242e 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -19,10 +19,7 @@ package baritone.behavior; import baritone.Baritone; import baritone.api.behavior.IPathingBehavior; -import baritone.api.event.events.PathEvent; -import baritone.api.event.events.PlayerUpdateEvent; -import baritone.api.event.events.RenderEvent; -import baritone.api.event.events.TickEvent; +import baritone.api.event.events.*; import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalXZ; @@ -98,6 +95,13 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, dispatchEvents(); } + @Override + public void onPlayerSprintState(SprintStateEvent event) { + if (current != null) { + event.setState(current.isSprinting()); + } + } + private void tickPath() { if (pauseRequestedLastTick && safeToCancel) { pauseRequestedLastTick = false; diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index e85c46de..3b327002 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -121,6 +121,11 @@ public final class GameEventHandler implements IEventBus, Helper { listeners.forEach(l -> l.onPlayerRotationMove(event)); } + @Override + public void onPlayerSprintState(SprintStateEvent event) { + listeners.forEach(l -> l.onPlayerSprintState(event)); + } + @Override public void onBlockInteract(BlockInteractEvent event) { listeners.forEach(l -> l.onBlockInteract(event)); diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index cad144aa..ef856f42 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -79,6 +79,8 @@ public class PathExecutor implements IPathExecutor, Helper { private PathingBehavior behavior; private IPlayerContext ctx; + private boolean sprintNextTick; + public PathExecutor(PathingBehavior behavior, IPath path) { this.behavior = behavior; this.ctx = behavior.ctx; @@ -269,7 +271,7 @@ public class PathExecutor implements IPathExecutor, Helper { onTick(); return true; } else { - sprintIfRequested(); + sprintNextTick = shouldSprintNextTick(); ticksOnCurrent++; if (ticksOnCurrent > currentMovementOriginalCostEstimate + Baritone.settings().movementTimeoutTicks.get()) { // only cancel if the total time has exceeded the initial estimate @@ -371,21 +373,17 @@ public class PathExecutor implements IPathExecutor, Helper { return true; } - private void sprintIfRequested() { + private boolean shouldSprintNextTick() { // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint if (!new CalculationContext(behavior.baritone).canSprint) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); - ctx.player().setSprinting(false); - return; + return false; } // if the movement requested sprinting, then we're done if (behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT)) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); - if (!ctx.player().isSprinting()) { - ctx.player().setSprinting(true); - } - return; + return true; } // we'll take it from here, no need for minecraft to see we're holding down control and sprint for us @@ -397,30 +395,23 @@ public class PathExecutor implements IPathExecutor, Helper { if (((MovementDescend) current).safeMode()) { logDebug("Sprinting would be unsafe"); - ctx.player().setSprinting(false); - return; + return false; } IMovement next = path.movements().get(pathPosition + 1); if (next instanceof MovementAscend && current.getDirection().up().equals(next.getDirection().down())) { // a descend then an ascend in the same direction - if (!ctx.player().isSprinting()) { - ctx.player().setSprinting(true); - } pathPosition++; // okay to skip clearKeys and / or onChangeInPathPosition here since this isn't possible to repeat, since it's asymmetric logDebug("Skipping descend to straight ascend"); - return; + return true; } if (canSprintInto(ctx, current, next)) { if (ctx.playerFeet().equals(current.getDest())) { pathPosition++; onChangeInPathPosition(); } - if (!ctx.player().isSprinting()) { - ctx.player().setSprinting(true); - } - return; + return true; } //logDebug("Turning off sprinting " + movement + " " + next + " " + movement.getDirection() + " " + next.getDirection().down() + " " + next.getDirection().down().equals(movement.getDirection())); } @@ -430,14 +421,11 @@ public class PathExecutor implements IPathExecutor, Helper { BlockPos center = current.getSrc().up(); if (ctx.player().posY >= center.getY()) { // playerFeet adds 0.1251 to account for soul sand behavior.baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, false); - if (!ctx.player().isSprinting()) { - ctx.player().setSprinting(true); - } - return; + return true; } } } - ctx.player().setSprinting(false); + return false; } private static boolean canSprintInto(IPlayerContext ctx, IMovement current, IMovement next) { @@ -532,4 +520,8 @@ public class PathExecutor implements IPathExecutor, Helper { public Set toWalkInto() { return Collections.unmodifiableSet(toWalkInto); } + + public boolean isSprinting() { + return sprintNextTick; + } }