Skip to content

Commit 8a0cb5b

Browse files
committed
got something working ish but i hate it in many, many ways
1 parent bc883f8 commit 8a0cb5b

File tree

14 files changed

+220
-71
lines changed

14 files changed

+220
-71
lines changed

common/src/main/kotlin/com/lambda/interaction/PlayerPacketManager.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,7 @@ object PlayerPacketManager {
135135
}
136136

137137
// Update the server rotation in RotationManager
138-
with (RotationManager) {
139-
prevServerRotation = serverRotation
140-
serverRotation = new.rotation/*.fixSensitivity(prevServerRotation)*/
141-
activeRequest?.let { request ->
142-
request.matchesServerRot = request.done
143-
}
144-
}
138+
RotationManager.onRotationSend()
145139

146140
PlayerPacketEvent.Post().post()
147141
}

common/src/main/kotlin/com/lambda/interaction/construction/context/BreakContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ data class BreakContext(
8585
}
8686

8787
fun requestDependencies(request: BreakRequest): Boolean {
88-
val hotbarRequest = request.hotbar.request(HotbarRequest(hotbarIndex, request.hotbar))
88+
val hotbarRequest = request.hotbar.request(HotbarRequest(hotbarIndex, request.hotbar), false)
8989
return hotbarRequest.done
9090
}
9191
}

common/src/main/kotlin/com/lambda/interaction/construction/context/PlaceContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ data class PlaceContext(
8181
override fun shouldRotate(config: BuildConfig) = config.placing.rotate
8282

8383
fun requestDependencies(request: PlaceRequest): Boolean {
84-
val hotbarRequest = request.hotbar.request(HotbarRequest(hotbarIndex, request.hotbar))
84+
val hotbarRequest = request.hotbar.request(HotbarRequest(hotbarIndex, request.hotbar), false)
8585
val validRotation = if (request.build.placing.rotate) {
8686
request.rotation.request(rotation, false).done && !currentDirIsInvalid
8787
} else true

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

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ import com.lambda.interaction.request.rotation.Rotation.Companion.rotationTo
4040
import com.lambda.interaction.request.rotation.RotationConfig
4141
import com.lambda.interaction.request.rotation.RotationManager
4242
import com.lambda.interaction.request.rotation.RotationRequest
43+
import com.lambda.interaction.request.rotation.visibilty.PlaceDirection
4344
import com.lambda.interaction.request.rotation.visibilty.VisibilityChecker.CheckedHit
4445
import com.lambda.interaction.request.rotation.visibilty.VisibilityChecker.getVisibleSurfaces
4546
import com.lambda.interaction.request.rotation.visibilty.VisibilityChecker.scanSurfaces
4647
import com.lambda.interaction.request.rotation.visibilty.lookAt
4748
import com.lambda.interaction.request.rotation.visibilty.lookAtBlock
49+
import com.lambda.interaction.request.rotation.visibilty.lookInDirection
4850
import com.lambda.module.modules.client.TaskFlowModule
4951
import com.lambda.threading.runSafe
5052
import com.lambda.util.BlockUtils
@@ -59,7 +61,6 @@ import com.lambda.util.math.distSq
5961
import com.lambda.util.player.SlotUtils.hotbar
6062
import com.lambda.util.player.copyPlayer
6163
import com.lambda.util.player.gamemode
62-
import com.lambda.util.player.placementRotations
6364
import com.lambda.util.world.raycast.RayCastUtils.blockResult
6465
import net.minecraft.block.BlockState
6566
import net.minecraft.block.OperatorBlock
@@ -294,7 +295,7 @@ object BuildSimulator {
294295
}
295296

296297
lateinit var resultState: BlockState
297-
var rot = player.rotation
298+
var rot = RotationManager.serverRotation
298299

299300
val simulatePlaceState = placeState@ {
300301
resultState = blockItem.getPlacementState(context)
@@ -309,43 +310,44 @@ object BuildSimulator {
309310
}
310311
}
311312

312-
var currentDirIsInvalid = false
313-
simulatePlaceState()?.let { basePlaceResult ->
313+
val currentDirIsInvalid = simulatePlaceState()?.let { basePlaceResult ->
314314
if (!place.rotate) {
315315
acc.add(basePlaceResult)
316316
return@forEach
317317
}
318-
319-
currentDirIsInvalid = true
320-
}
321-
322-
if (place.rotateForPlace && !place.axisRotate) {
323-
fakePlayer.rotation = checkedHit.targetRotation
324-
simulatePlaceState()?.let { rotatedPlaceResult ->
325-
acc.add(rotatedPlaceResult)
326-
return@forEach
318+
true
319+
} ?: false
320+
321+
if (place.rotateForPlace) run rotate@ {
322+
if (!place.axisRotate) {
323+
fakePlayer.rotation = checkedHit.targetRotation
324+
simulatePlaceState()?.let { rotatedPlaceResult ->
325+
acc.add(rotatedPlaceResult)
326+
return@forEach
327+
}
328+
rot = fakePlayer.rotation
329+
return@rotate
327330
}
328-
rot = checkedHit.targetRotation
329-
}
330331

331-
if (place.axisRotate && currentDirIsInvalid) run axisRotations@ {
332-
placementRotations.forEachIndexed direction@ { index, angle ->
333-
fakePlayer.rotation = angle
334-
when (val placeResult = simulatePlaceState()) {
335-
is PlaceResult.BlockedByEntity -> {
336-
acc.add(placeResult)
337-
return@forEach
338-
}
339-
340-
is PlaceResult.NoIntegrity -> {
341-
if (index != placementRotations.lastIndex) return@direction
342-
acc.add(placeResult)
343-
return@forEach
344-
}
345-
346-
else -> {
347-
rot = angle
348-
return@axisRotations
332+
if (currentDirIsInvalid) {
333+
PlaceDirection.entries.asReversed().forEachIndexed direction@ { index, direction ->
334+
fakePlayer.rotation = direction.rotation
335+
when (val placeResult = simulatePlaceState()) {
336+
is PlaceResult.BlockedByEntity -> {
337+
acc.add(placeResult)
338+
return@forEach
339+
}
340+
341+
is PlaceResult.NoIntegrity -> {
342+
if (index != PlaceDirection.entries.lastIndex) return@direction
343+
acc.add(placeResult)
344+
return@forEach
345+
}
346+
347+
else -> {
348+
rot = fakePlayer.rotation
349+
return@rotate
350+
}
349351
}
350352
}
351353
}
@@ -355,10 +357,14 @@ object BuildSimulator {
355357
val hitBlock = blockState(blockHit.blockPos).block
356358
val shouldSneak = hitBlock::class in BlockUtils.interactionBlocks
357359

360+
val rotationRequest = if (place.axisRotate) {
361+
lookInDirection(PlaceDirection.fromRotation(rot))
362+
} else lookAt(rot, 0.001)
363+
358364
val placeContext = PlaceContext(
359365
eye,
360366
blockHit,
361-
RotationRequest(lookAt(rot, 0.001), rotation),
367+
RotationRequest(rotationRequest, rotation),
362368
eye.distanceTo(blockHit.pos),
363369
resultState,
364370
blockState(blockHit.blockPos.offset(blockHit.side)),

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ import net.minecraft.entity.Entity
3030
import net.minecraft.util.math.Box
3131
import net.minecraft.util.math.Direction
3232
import net.minecraft.util.math.MathHelper
33+
import net.minecraft.util.math.MathHelper.wrapDegrees
3334
import net.minecraft.util.math.Vec3d
34-
import kotlin.math.*
35+
import kotlin.math.abs
36+
import kotlin.math.atan2
37+
import kotlin.math.cos
38+
import kotlin.math.hypot
39+
import kotlin.math.sin
3540

3641
data class Rotation(val yaw: Double, val pitch: Double) {
3742
constructor(yaw: Float, pitch: Float) : this(yaw.toDouble(), pitch.toDouble())
@@ -91,7 +96,7 @@ data class Rotation(val yaw: Double, val pitch: Double) {
9196
val UP = Rotation(0.0, -90.0)
9297
val Direction.rotation get() = Rotation(yaw.toDouble(), 0.0)
9398
var Entity.rotation
94-
get() = Rotation(yaw, pitch)
99+
get() = Rotation(wrapDegrees(yaw), wrapDegrees(pitch))
95100
set(value) {
96101
yaw = value.yawF
97102
pitch = value.pitchF

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@
1717

1818
package com.lambda.interaction.request.rotation
1919

20-
import com.lambda.Lambda
20+
import com.lambda.Lambda.mc
2121
import com.lambda.config.groups.TickStage
2222
import com.lambda.context.SafeContext
2323
import com.lambda.core.Loadable
2424
import com.lambda.event.Event
2525
import com.lambda.event.EventFlow.post
2626
import com.lambda.event.events.ConnectionEvent
27+
import com.lambda.event.events.PacketEvent
2728
import com.lambda.event.events.RotationEvent
2829
import com.lambda.event.events.TickEvent
2930
import com.lambda.event.events.UpdateManagerEvent
@@ -34,13 +35,15 @@ import com.lambda.interaction.request.RequestHandler
3435
import com.lambda.interaction.request.rotation.Rotation.Companion.slerp
3536
import com.lambda.interaction.request.rotation.visibilty.lookAt
3637
import com.lambda.module.modules.client.Baritone
38+
import com.lambda.threading.runGameScheduled
3739
import com.lambda.threading.runSafe
3840
import com.lambda.util.extension.partialTicks
3941
import com.lambda.util.extension.rotation
4042
import com.lambda.util.math.MathUtils.toRadian
4143
import com.lambda.util.math.Vec2d
4244
import com.lambda.util.math.lerp
4345
import net.minecraft.client.input.Input
46+
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket
4447
import kotlin.math.cos
4548
import kotlin.math.round
4649
import kotlin.math.sign
@@ -76,6 +79,15 @@ object RotationManager : RequestHandler<RotationRequest>(
7679
changedThisTick = false
7780
}
7881

82+
listen<PacketEvent.Receive.Post> { event ->
83+
val packet = event.packet
84+
if (packet !is PlayerPositionLookS2CPacket) return@listen
85+
86+
runGameScheduled {
87+
reset(Rotation(packet.yaw, packet.pitch))
88+
}
89+
}
90+
7991
listenUnsafe<ConnectionEvent.Connect.Pre> {
8092
reset(Rotation.ZERO)
8193
}
@@ -99,12 +111,6 @@ object RotationManager : RequestHandler<RotationRequest>(
99111
updateActiveRotation()
100112
}
101113

102-
// Handle LOCK mode
103-
if (activeRequest?.mode == RotationMode.Lock) {
104-
player.yaw = serverRotation.yawF
105-
player.pitch = serverRotation.pitchF
106-
}
107-
108114
// Tick and reset the context
109115
activeRequest?.let {
110116
if (--it.keepTicks > 0) return@let
@@ -113,6 +119,17 @@ object RotationManager : RequestHandler<RotationRequest>(
113119
}
114120
}
115121

122+
fun onRotationSend() {
123+
prevServerRotation = serverRotation
124+
serverRotation = activeRotation/*.fixSensitivity(prevServerRotation)*/
125+
126+
// Handle LOCK mode
127+
if (activeRequest?.mode == RotationMode.Lock) {
128+
mc.player?.yaw = serverRotation.yawF
129+
mc.player?.pitch = serverRotation.pitchF
130+
}
131+
}
132+
116133
private fun SafeContext.updateActiveRotation() {
117134
activeRotation = activeRequest?.let { request ->
118135
val rotationTo = if (request.keepTicks >= 0)
@@ -136,7 +153,7 @@ object RotationManager : RequestHandler<RotationRequest>(
136153

137154
private val smoothRotation
138155
get() =
139-
lerp(Lambda.mc.partialTicks, prevServerRotation, serverRotation)
156+
lerp(mc.partialTicks, prevServerRotation, serverRotation)
140157

141158
@JvmStatic
142159
val lockRotation

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ data class RotationRequest(
3333
val speedMultiplier: Double = 1.0
3434
) : Request(prio, rot) {
3535
var age = 0
36-
var matchesServerRot = false
3736

3837
constructor(
3938
target: RotationTarget,

0 commit comments

Comments
 (0)