diff --git a/src/main/java/baritone/bot/behavior/impl/LookBehavior.java b/src/main/java/baritone/bot/behavior/impl/LookBehavior.java index 016df45e..36fc0e33 100644 --- a/src/main/java/baritone/bot/behavior/impl/LookBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/LookBehavior.java @@ -18,6 +18,8 @@ package baritone.bot.behavior.impl; import baritone.bot.behavior.Behavior; +import baritone.bot.event.events.PlayerUpdateEvent; +import baritone.bot.event.events.type.EventState; import baritone.bot.utils.Rotation; public class LookBehavior extends Behavior { @@ -39,8 +41,8 @@ public class LookBehavior extends Behavior { } @Override - public void onPlayerUpdate() { - if (target != null) { + public void onPlayerUpdate(PlayerUpdateEvent event) { + if (event.getState() == EventState.PRE && target != null) { player().rotationYaw = target.getFirst(); float oldPitch = player().rotationPitch; float desiredPitch = target.getSecond(); diff --git a/src/main/java/baritone/bot/behavior/impl/MemoryBehavior.java b/src/main/java/baritone/bot/behavior/impl/MemoryBehavior.java index 5803fb78..33ca56f1 100644 --- a/src/main/java/baritone/bot/behavior/impl/MemoryBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/MemoryBehavior.java @@ -2,6 +2,8 @@ package baritone.bot.behavior.impl; import baritone.bot.behavior.Behavior; import baritone.bot.event.events.PacketEvent; +import baritone.bot.event.events.PlayerUpdateEvent; +import baritone.bot.event.events.type.EventState; import net.minecraft.item.ItemStack; import net.minecraft.network.Packet; import net.minecraft.network.play.client.CPacketCloseWindow; @@ -35,8 +37,9 @@ public class MemoryBehavior extends Behavior { private final Map rememberedInventories = new HashMap<>(); @Override - public void onPlayerUpdate() { - updateInventory(); + public void onPlayerUpdate(PlayerUpdateEvent event) { + if (event.getState() == EventState.PRE) + updateInventory(); } @Override diff --git a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java index 55b27b0d..324028db 100644 --- a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java @@ -19,6 +19,7 @@ package baritone.bot.behavior.impl; import baritone.bot.Baritone; import baritone.bot.behavior.Behavior; +import baritone.bot.event.events.PlayerUpdateEvent; import baritone.bot.event.events.RenderEvent; import baritone.bot.event.events.TickEvent; import baritone.bot.pathing.calc.AStarPathFinder; @@ -53,6 +54,8 @@ public class PathingBehavior extends Behavior { private final Object pathPlanLock = new Object(); + private boolean lastAutoJump; + @Override public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { @@ -132,6 +135,21 @@ public class PathingBehavior extends Behavior { } } + @Override + public void onPlayerUpdate(PlayerUpdateEvent event) { + if (current != null) { + switch (event.getState()) { + case PRE: + lastAutoJump = mc.gameSettings.autoJump; + mc.gameSettings.autoJump = false; + break; + case POST: + mc.gameSettings.autoJump = lastAutoJump; + break; + } + } + } + public Optional ticksRemainingInSegment() { if (current == null) { return Optional.empty(); diff --git a/src/main/java/baritone/bot/event/GameEventHandler.java b/src/main/java/baritone/bot/event/GameEventHandler.java index 7beeb3d6..b6f365e9 100644 --- a/src/main/java/baritone/bot/event/GameEventHandler.java +++ b/src/main/java/baritone/bot/event/GameEventHandler.java @@ -69,8 +69,8 @@ public final class GameEventHandler implements IGameEventListener, Helper { } @Override - public final void onPlayerUpdate() { - dispatch(IGameEventListener::onPlayerUpdate); + public final void onPlayerUpdate(PlayerUpdateEvent event) { + dispatch(listener -> listener.onPlayerUpdate(event)); } @Override diff --git a/src/main/java/baritone/bot/event/events/PlayerUpdateEvent.java b/src/main/java/baritone/bot/event/events/PlayerUpdateEvent.java new file mode 100644 index 00000000..1046c060 --- /dev/null +++ b/src/main/java/baritone/bot/event/events/PlayerUpdateEvent.java @@ -0,0 +1,44 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Baritone. If not, see . + */ + +package baritone.bot.event.events; + +import baritone.bot.event.events.type.EventState; + +/** + * @author Brady + * @since 8/21/2018 + */ +public final class PlayerUpdateEvent { + + /** + * The state of the event + */ + private final EventState state; + + public PlayerUpdateEvent(EventState state) { + this.state = state; + } + + /** + * @return The state of the event + */ + public final EventState getState() { + return this.state; + } + +} diff --git a/src/main/java/baritone/bot/event/listener/AbstractGameEventListener.java b/src/main/java/baritone/bot/event/listener/AbstractGameEventListener.java index a3e4251d..09534fdc 100644 --- a/src/main/java/baritone/bot/event/listener/AbstractGameEventListener.java +++ b/src/main/java/baritone/bot/event/listener/AbstractGameEventListener.java @@ -52,7 +52,7 @@ public interface AbstractGameEventListener extends IGameEventListener { default void onTick(TickEvent event) {} @Override - default void onPlayerUpdate() {} + default void onPlayerUpdate(PlayerUpdateEvent event) {} @Override default void onProcessKeyBinds() {} diff --git a/src/main/java/baritone/bot/event/listener/IGameEventListener.java b/src/main/java/baritone/bot/event/listener/IGameEventListener.java index d2b0cd28..31b549fc 100644 --- a/src/main/java/baritone/bot/event/listener/IGameEventListener.java +++ b/src/main/java/baritone/bot/event/listener/IGameEventListener.java @@ -63,7 +63,7 @@ public interface IGameEventListener { * Run once per game tick from before the player rotation is sent to the server. * @see EntityPlayerSP#onUpdate() */ - void onPlayerUpdate(); + void onPlayerUpdate(PlayerUpdateEvent event); /** * Run once per game tick from before keybinds are processed. diff --git a/src/main/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/main/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 1ecb6d57..16849798 100644 --- a/src/main/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/main/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -19,6 +19,8 @@ package baritone.launch.mixins; import baritone.bot.Baritone; import baritone.bot.event.events.ChatEvent; +import baritone.bot.event.events.PlayerUpdateEvent; +import baritone.bot.event.events.type.EventState; import net.minecraft.client.entity.EntityPlayerSP; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -53,7 +55,20 @@ public class MixinEntityPlayerSP { by = -3 ) ) - private void onUpdate(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(); + private void onPreUpdate(CallbackInfo ci) { + Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.PRE)); + } + + @Inject( + method = "onUpdate", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/entity/EntityPlayerSP.onUpdateWalkingPlayer()V", + shift = At.Shift.BY, + by = 2 + ) + ) + private void onPostUpdate(CallbackInfo ci) { + Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent(EventState.POST)); } } diff --git a/src/main/resources/mixins.baritone.json b/src/main/resources/mixins.baritone.json index 72f7d4dc..86521c33 100755 --- a/src/main/resources/mixins.baritone.json +++ b/src/main/resources/mixins.baritone.json @@ -4,6 +4,9 @@ "refmap": "mixins.client.refmap.json", "compatibilityLevel": "JAVA_8", "verbose": false, + "injectors": { + "maxShiftBy": 2 + }, "client": [ "MixinEntityPlayerSP", "MixinEntityRenderer",