Read `serverRotation` from packet and invalidate on world load

This commit is contained in:
Brady 2023-06-12 12:11:50 -05:00
parent bb36ebfc0c
commit 1d5ee079b4
No known key found for this signature in database
GPG Key ID: 73A788379A197567
1 changed files with 21 additions and 9 deletions

View File

@ -20,11 +20,13 @@ package baritone.behavior;
import baritone.Baritone;
import baritone.api.Settings;
import baritone.api.behavior.ILookBehavior;
import baritone.api.event.events.PacketEvent;
import baritone.api.event.events.PlayerUpdateEvent;
import baritone.api.event.events.RotationMoveEvent;
import baritone.api.event.events.type.EventState;
import baritone.api.event.events.WorldEvent;
import baritone.api.utils.IPlayerContext;
import baritone.api.utils.Rotation;
import net.minecraft.network.play.client.CPacketPlayer;
public final class LookBehavior extends Behavior implements ILookBehavior {
@ -56,17 +58,9 @@ public final class LookBehavior extends Behavior implements ILookBehavior {
@Override
public void onPlayerUpdate(PlayerUpdateEvent event) {
// Capture the player rotation before it's reset to determine the rotation the server knows
// Alternatively, this could be done with a packet event... Maybe that's a better idea.
if (event.getState() == EventState.POST) {
this.serverRotation = new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch);
}
// There's nothing left to be done if there isn't a set target
if (this.target == null) {
return;
}
switch (event.getState()) {
case PRE: {
switch (this.target.mode) {
@ -111,6 +105,24 @@ public final class LookBehavior extends Behavior implements ILookBehavior {
}
}
@Override
public void onSendPacket(PacketEvent event) {
if (!(event.getPacket() instanceof CPacketPlayer)) {
return;
}
final CPacketPlayer packet = (CPacketPlayer) event.getPacket();
if (packet instanceof CPacketPlayer.Rotation || packet instanceof CPacketPlayer.PositionRotation) {
this.serverRotation = new Rotation(packet.getYaw(0.0f), packet.getPitch(0.0f));
}
}
@Override
public void onWorldEvent(WorldEvent event) {
this.serverRotation = null;
this.target = null;
}
public void pig() {
if (this.target != null) {
ctx.player().rotationYaw = this.target.rotation.getYaw();