Skip to content

Commit f181bd4

Browse files
committed
Baritone movement fix, surface scan for rotation dsl
1 parent 6bd7d89 commit f181bd4

File tree

6 files changed

+57
-11
lines changed

6 files changed

+57
-11
lines changed

common/src/main/kotlin/com/lambda/interaction/construction/simulation/BuildSimulator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ object BuildSimulator {
291291
eye,
292292
blockHit,
293293
RotationRequest(
294-
lookAtBlock(blockHit.blockPos, setOf(blockHit.side), interact), rotation
294+
lookAtBlock(blockHit.blockPos, setOf(blockHit.side), config = interact), rotation
295295
),
296296
eye.distanceTo(blockHit.pos),
297297
resultState,

common/src/main/kotlin/com/lambda/interaction/request/rotation/RotationManager.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ import com.lambda.Lambda
2121
import com.lambda.context.SafeContext
2222
import com.lambda.core.Loadable
2323
import com.lambda.event.EventFlow.post
24-
import com.lambda.event.events.ConnectionEvent
25-
import com.lambda.event.events.PacketEvent
26-
import com.lambda.event.events.PlayerPacketEvent
27-
import com.lambda.event.events.RotationEvent
24+
import com.lambda.event.events.*
2825
import com.lambda.event.listener.SafeListener.Companion.listen
2926
import com.lambda.event.listener.UnsafeListener.Companion.listenUnsafe
3027
import com.lambda.interaction.request.RequestHandler
@@ -197,7 +194,13 @@ object RotationManager : RequestHandler<RotationRequest>(), Loadable {
197194

198195
@JvmStatic
199196
fun handleBaritoneRotation(yaw: Float, pitch: Float) {
200-
lookAt(Rotation(yaw, pitch)).requestBy(Baritone.rotation)
197+
baritoneContext = lookAt(Rotation(yaw, pitch)).requestBy(Baritone.rotation)
198+
}
199+
200+
init {
201+
listenUnsafe<TickEvent.Pre> {
202+
baritoneContext = null
203+
}
201204
}
202205

203206
@JvmStatic

common/src/main/kotlin/com/lambda/interaction/request/rotation/visibilty/RotationTargets.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.lambda.interaction.request.rotation.visibilty
1919

2020
import com.lambda.config.groups.InteractionConfig
2121
import com.lambda.context.SafeContext
22+
import com.lambda.interaction.construction.verify.SurfaceScan
2223
import com.lambda.interaction.request.rotation.Rotation
2324
import com.lambda.interaction.request.rotation.Rotation.Companion.dist
2425
import com.lambda.interaction.request.rotation.RotationManager
@@ -75,7 +76,7 @@ fun lookAtHit(
7576
config: InteractionConfig = TaskFlowModule.interact,
7677
): RotationTarget? {
7778
return when (hit) {
78-
is BlockHitResult -> lookAtBlock(hit.blockPos, setOf(hit.side), config)
79+
is BlockHitResult -> lookAtBlock(hit.blockPos, setOf(hit.side), SurfaceScan.DEFAULT, config)
7980
is EntityHitResult -> lookAtEntity(hit.entity as? LivingEntity ?: return null, config)
8081
else -> null
8182
}
@@ -101,6 +102,7 @@ fun lookAtEntity(
101102
config.attackReach,
102103
player.eyePos,
103104
ALL_SIDES,
105+
SurfaceScan.DEFAULT,
104106
InteractionMask.ENTITY,
105107
config
106108
) { requestedHit.verifyHit(hit) }?.targetRotation
@@ -119,6 +121,7 @@ fun lookAtEntity(
119121
fun lookAtBlock(
120122
pos: BlockPos,
121123
sides: Set<Direction> = ALL_SIDES,
124+
surfaceScan: SurfaceScan = SurfaceScan.DEFAULT,
122125
config: InteractionConfig = TaskFlowModule.interact,
123126
): RotationTarget {
124127
val requestedHit = blockHit(pos, sides, config.interactReach)
@@ -129,6 +132,7 @@ fun lookAtBlock(
129132
config.interactReach,
130133
player.eyePos,
131134
sides,
135+
surfaceScan,
132136
InteractionMask.BLOCK,
133137
config
134138
) { requestedHit.verifyHit(hit) }?.targetRotation

common/src/main/kotlin/com/lambda/interaction/request/rotation/visibilty/VisibilityChecker.kt

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ package com.lambda.interaction.request.rotation.visibilty
2020
import com.lambda.config.groups.InteractionConfig
2121
import com.lambda.config.groups.InteractionSettings
2222
import com.lambda.context.SafeContext
23+
import com.lambda.interaction.construction.processing.PreprocessingStep
2324
import com.lambda.interaction.construction.verify.ScanMode
2425
import com.lambda.interaction.construction.verify.SurfaceScan
2526
import com.lambda.interaction.request.rotation.*
2627
import com.lambda.interaction.request.rotation.Rotation.Companion.rotationTo
2728
import com.lambda.util.extension.component6
2829
import com.lambda.util.math.distSq
2930
import com.lambda.util.world.raycast.InteractionMask
31+
import net.minecraft.entity.LivingEntity
3032
import net.minecraft.util.hit.EntityHitResult
3133
import net.minecraft.util.hit.HitResult
3234
import net.minecraft.util.math.Box
@@ -58,6 +60,7 @@ object VisibilityChecker {
5860
reach: Double,
5961
eye: Vec3d,
6062
sides: Set<Direction>,
63+
scan: SurfaceScan,
6164
targetType: InteractionMask,
6265
interaction: InteractionConfig,
6366
verify: CheckedHit.() -> Boolean
@@ -71,7 +74,7 @@ object VisibilityChecker {
7174
}
7275

7376
return interaction.pointSelection.select(
74-
collectHitsFor(boxes, reach, eye, sides, SurfaceScan.DEFAULT, targetType, interaction, verify)
77+
collectHitsFor(boxes, reach, eye, sides, scan, targetType, interaction, verify)
7578
)
7679
}
7780

@@ -119,6 +122,38 @@ object VisibilityChecker {
119122
}
120123
}
121124

125+
private fun SafeContext.collectHitsInternal(
126+
boxes: List<Box>,
127+
reach: Double,
128+
eye: Vec3d,
129+
sides: Set<Direction>,
130+
scan: SurfaceScan,
131+
targetType: InteractionMask,
132+
entity: LivingEntity?,
133+
interaction: InteractionConfig,
134+
verify: CheckedHit.() -> Boolean,
135+
) = mutableListOf<CheckedHit>().apply {
136+
val reachSq = interaction.scanReach.pow(2)
137+
138+
boxes.forEach { box ->
139+
val visible = visibleSides(box, eye, interaction.checkSideVisibility)
140+
141+
scanSurfaces(box, visible.intersect(sides), interaction.resolution, scan) { _, vec ->
142+
if (eye distSq vec > reachSq) return@scanSurfaces
143+
144+
val newRotation = eye.rotationTo(vec)
145+
146+
val mask = if (interaction.strictRayCast || entity == null) InteractionMask.BOTH else targetType
147+
val hit = newRotation.rayCast(reach, eye, mask = mask) ?: return@scanSurfaces
148+
149+
val checked = CheckedHit(hit, newRotation, reach)
150+
if (!checked.verify()) return@scanSurfaces
151+
152+
add(checked)
153+
}
154+
}
155+
}
156+
122157
/**
123158
* Scans the surfaces of a given box, optionally excluding specific sides,
124159
* and executes a callback for each point calculated based on the scanning parameters.
@@ -243,5 +278,9 @@ object VisibilityChecker {
243278

244279
val ALL_SIDES = Direction.entries.toSet()
245280

246-
class CheckedHit(val hit: HitResult, val targetRotation: Rotation, val reach: Double)
281+
class CheckedHit(
282+
val hit: HitResult,
283+
val targetRotation: Rotation,
284+
val reach: Double
285+
)
247286
}

common/src/main/kotlin/com/lambda/task/tasks/BreakBlock.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class BreakBlock @Ta5kBuilder constructor(
100100
} ?: BaritoneUtils.cancel()
101101

102102
if (rotate && !ctx.instantBreak && state == State.BREAKING) {
103-
lookAtBlock(blockPos, sides, interact).let {
103+
lookAtBlock(blockPos, sides, config = interact).let {
104104
if (it.requestBy(rotation).done) {
105105
hitBlock(ctx.result.side)
106106
}

common/src/main/kotlin/com/lambda/task/tasks/OpenContainer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class OpenContainer @Ta5kBuilder constructor(
8383
listen<TickEvent.Pre> {
8484
if (state != State.SCOPING) return@listen
8585

86-
val target = lookAtBlock(blockPos, sides, interact)
86+
val target = lookAtBlock(blockPos, sides, config = interact)
8787
if (rotate && !target.requestBy(rotation).done) return@listen
8888

8989
val hitResult = target.hit?.hitIfValid()?.blockResult ?: return@listen

0 commit comments

Comments
 (0)