Skip to content

Commit 496b22e

Browse files
committed
Control Baritones rotations
1 parent f0efe5c commit 496b22e

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828

2929
// Baritone
3030
modImplementation("baritone-api:baritone-api:1.10.2")
31+
modImplementation("baritone-api:baritone-unoptimized-fabric:1.10.2")
3132
}
3233

3334
// Avoid nested jars
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.lambda.mixin.baritone;
2+
3+
import baritone.Baritone;
4+
import baritone.api.utils.Rotation;
5+
import baritone.utils.player.BaritonePlayerContext;
6+
import com.lambda.interaction.RotationManager;
7+
import com.lambda.util.BaritoneUtils;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
14+
15+
@Mixin(value = BaritonePlayerContext.class, remap = false) // fix compileJava warning
16+
public class MixinBaritonePlayerContext {
17+
@Shadow @Final private Baritone baritone;
18+
19+
// Let baritone know the actual rotation
20+
@Inject(method = "playerRotations", at = @At("HEAD"), cancellable = true, remap = false)
21+
void syncRotationWithBaritone(CallbackInfoReturnable<Rotation> cir) {
22+
if (baritone != BaritoneUtils.getPrimary()) return;
23+
24+
RotationManager rm = RotationManager.INSTANCE;
25+
cir.setReturnValue(new Rotation((float) rm.getCurrentRotation().getYaw(), (float) rm.getCurrentRotation().getPitch()));
26+
}
27+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.lambda.mixin.baritone;
2+
3+
import baritone.api.event.events.PlayerUpdateEvent;
4+
import baritone.api.event.events.RotationMoveEvent;
5+
import baritone.api.utils.Rotation;
6+
import baritone.behavior.LookBehavior;
7+
import com.lambda.interaction.RotationManager;
8+
import com.lambda.util.BaritoneUtils;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
@Mixin(LookBehavior.class)
15+
public class MixinLookBehavior {
16+
// Redirect baritone's rotations into our rotation engine
17+
@Inject(method = "updateTarget", at = @At("HEAD"), remap = false, cancellable = true)
18+
void onTargetUpdate(Rotation rotation, boolean blockInteract, CallbackInfo ci) {
19+
LookBehavior instance = ((LookBehavior) (Object) this);
20+
if (instance.baritone != BaritoneUtils.getPrimary()) return;
21+
22+
RotationManager.BaritoneProcessor.handleBaritoneRotation(rotation.getYaw(), rotation.getPitch());
23+
ci.cancel();
24+
}
25+
26+
@Inject(method = "onPlayerUpdate", at = @At("HEAD"), remap = false, cancellable = true)
27+
void onUpdate(PlayerUpdateEvent event, CallbackInfo ci) {
28+
LookBehavior instance = ((LookBehavior) (Object) this);
29+
if (instance.baritone != BaritoneUtils.getPrimary()) return;
30+
31+
ci.cancel();
32+
}
33+
34+
@Inject(method = "onPlayerRotationMove", at = @At("HEAD"), remap = false, cancellable = true)
35+
void onMovementUpdate(RotationMoveEvent event, CallbackInfo ci) {
36+
LookBehavior instance = ((LookBehavior) (Object) this);
37+
if (instance.baritone != BaritoneUtils.getPrimary()) return;
38+
39+
ci.cancel();
40+
}
41+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.lambda.util
2+
3+
import baritone.api.BaritoneAPI
4+
import baritone.api.IBaritone
5+
import baritone.api.Settings
6+
7+
object BaritoneUtils {
8+
private val baritone = BaritoneAPI.getProvider()
9+
val settings: Settings = BaritoneAPI.getSettings()
10+
@JvmStatic val primary: IBaritone = baritone.primaryBaritone
11+
12+
val isPathing: Boolean
13+
get() = primary.pathingBehavior.isPathing
14+
15+
val isActive: Boolean
16+
get() = primary.customGoalProcess.isActive || primary.pathingBehavior.isPathing || primary.pathingControlManager.mostRecentInControl().orElse(null)?.isActive == true
17+
18+
fun cancel() = primary.pathingBehavior.cancelEverything()
19+
}

common/src/main/resources/lambda.mixins.common.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
"client": [
77
"ClientConnectionMixin",
88
"MinecraftClientMixin",
9+
"baritone.MixinLookBehavior",
10+
"baritone.MixinBaritonePlayerContext",
911
"entity.ClientPlayerEntityMixin",
1012
"entity.EntityMixin",
1113
"entity.LivingEntityMixin",

0 commit comments

Comments
 (0)