Skip to content

Commit a69e0c9

Browse files
committed
F3 Debug info and rotation improvements
1 parent 1f7e881 commit a69e0c9

File tree

22 files changed

+119
-88
lines changed

22 files changed

+119
-88
lines changed
Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package com.lambda.mixin;
22

3-
import com.lambda.Lambda;
3+
import com.lambda.util.DebugInfoHud;
44
import net.minecraft.client.gui.hud.DebugHud;
5-
import net.minecraft.util.Formatting;
6-
import net.minecraft.util.hit.BlockHitResult;
7-
import net.minecraft.util.hit.EntityHitResult;
8-
import net.minecraft.util.hit.HitResult;
95
import org.spongepowered.asm.mixin.Mixin;
106
import org.spongepowered.asm.mixin.injection.At;
117
import org.spongepowered.asm.mixin.injection.Inject;
@@ -17,22 +13,6 @@
1713
public class DebugHudMixin {
1814
@Inject(method = "getRightText", at = @At(value = "TAIL"))
1915
private void onGetRightText(CallbackInfoReturnable<List<String>> cir) {
20-
if (Lambda.getMc().crosshairTarget == null) return;
21-
HitResult hitResult = Lambda.getMc().crosshairTarget;
22-
List<String> list = cir.getReturnValue();
23-
24-
list.add("");
25-
list.add(Formatting.UNDERLINE + "Lambda");
26-
list.add("Hitpos: " + hitResult.getPos());
27-
list.add("Type: " + hitResult.getType());
28-
29-
if (hitResult instanceof BlockHitResult blockHitResult) {
30-
list.add("Side: " + blockHitResult.getSide());
31-
list.add("Blockpos: " + blockHitResult.getBlockPos());
32-
}
33-
34-
if (hitResult instanceof EntityHitResult entityHitResult) {
35-
list.add("Entity: " + entityHitResult.getEntity().getName().getString());
36-
}
16+
DebugInfoHud.addDebugInfo(cir.getReturnValue());
3717
}
3818
}

common/src/main/java/com/lambda/mixin/MinecraftClientMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ boolean injectMultiActon(ClientPlayerInteractionManager instance) {
5151
void injectFastPlace(CallbackInfo ci) {
5252
if (!Interact.INSTANCE.isEnabled()) return;
5353

54-
Lambda.INSTANCE.getMc().itemUseCooldown = Interact.getPlaceDelay();
54+
Lambda.getMc().itemUseCooldown = Interact.getPlaceDelay();
5555
}
5656
}

common/src/main/kotlin/com/lambda/command/CommandManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ object CommandManager : Configurable(LambdaConfig), Loadable {
2929

3030
val prefix by setting("prefix", ';')
3131

32-
private val commands = mutableSetOf<LambdaCommand>()
32+
val commands = mutableSetOf<LambdaCommand>()
3333
private val dispatcher by lazy { CommandDispatcher<CommandSource>() }
3434
private const val ERROR_PADDING = 10
3535

common/src/main/kotlin/com/lambda/config/InteractionSettings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lambda.config
22

3-
import com.lambda.manager.interaction.InteractionConfig
3+
import com.lambda.interaction.InteractionConfig
44
import com.lambda.util.world.raycast.RayCastMask
55

66
class InteractionSettings(

common/src/main/kotlin/com/lambda/config/RotationSettings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lambda.config
22

3-
import com.lambda.manager.rotation.IRotationConfig
4-
import com.lambda.manager.rotation.RotationMode
3+
import com.lambda.interaction.rotation.IRotationConfig
4+
import com.lambda.interaction.rotation.RotationMode
55
import kotlin.random.Random
66

77
class RotationSettings(

common/src/main/kotlin/com/lambda/config/serializer/KeyCodeSerializer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.google.gson.*
44
import com.lambda.util.KeyCode
55
import java.lang.reflect.Type
66

7+
// ToDo: Use key lookup table to store actual key names
78
object KeyCodeSerializer : JsonSerializer<KeyCode>, JsonDeserializer<KeyCode> {
89
override fun serialize(
910
src: KeyCode?,

common/src/main/kotlin/com/lambda/event/events/PlayerPacketEvent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.lambda.event.events
33
import com.lambda.event.Event
44
import com.lambda.event.cancellable.Cancellable
55
import com.lambda.event.cancellable.ICancellable
6-
import com.lambda.manager.rotation.Rotation
6+
import com.lambda.interaction.rotation.Rotation
77
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket
88
import net.minecraft.util.math.Vec3d
99

common/src/main/kotlin/com/lambda/event/events/RotationEvent.kt

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@ import com.lambda.event.Event
66
import com.lambda.event.cancellable.Cancellable
77
import com.lambda.event.cancellable.ICancellable
88
import com.lambda.manager.RotationManager
9-
import com.lambda.manager.interaction.InteractionConfig
10-
import com.lambda.manager.rotation.IRotationConfig
11-
import com.lambda.manager.rotation.Rotation
12-
import com.lambda.manager.rotation.Rotation.Companion.distance
13-
import com.lambda.manager.rotation.Rotation.Companion.rotationTo
14-
import com.lambda.manager.interaction.VisibilityChecker.scanVisibleSurfaces
9+
import com.lambda.interaction.InteractionConfig
10+
import com.lambda.interaction.rotation.IRotationConfig
11+
import com.lambda.interaction.rotation.Rotation
12+
import com.lambda.interaction.rotation.Rotation.Companion.distance
13+
import com.lambda.interaction.rotation.Rotation.Companion.rotationTo
14+
import com.lambda.interaction.VisibilityChecker.scanVisibleSurfaces
15+
import com.lambda.module.modules.RotationTest
1516
import com.lambda.threading.runSafe
1617
import com.lambda.util.math.VecUtils.distSq
1718
import com.lambda.util.world.raycast.RayCastUtils.blockResult
1819
import com.lambda.util.world.raycast.RayCastUtils.entityResult
1920
import net.minecraft.entity.LivingEntity
21+
import net.minecraft.util.Hand
2022
import net.minecraft.util.hit.HitResult
2123
import net.minecraft.util.math.BlockPos
2224
import net.minecraft.util.math.Box
@@ -35,14 +37,17 @@ abstract class RotationEvent : Event {
3537
}
3638
}
3739

38-
fun SafeContext.lookAt(
40+
private fun SafeContext.lookAt(
3941
rotationConfig: IRotationConfig,
4042
interact: InteractionConfig,
4143
boxes: List<Box>,
4244
priority: Int = 0,
45+
sides: Set<Direction> = emptySet(),
4346
hitCheck: HitResult.() -> Boolean,
4447
) {
45-
if (boxes.any { it.contains(player.eyePos) }) {
48+
val eye = player.getCameraPosVec(mc.tickDelta)
49+
50+
if (boxes.any { it.contains(eye) }) {
4651
stay(priority, rotationConfig)
4752
return
4853
}
@@ -51,7 +56,7 @@ abstract class RotationEvent : Event {
5156
val currentCast = currentRotation.rayCast(
5257
interact.reach,
5358
interact.rayCastMask,
54-
player.eyePos
59+
eye
5560
)
5661
val check = currentCast?.let { it.hitCheck() } ?: false
5762

@@ -67,15 +72,15 @@ abstract class RotationEvent : Event {
6772
var rotationDist = 0.0
6873

6974
boxes.forEach { box ->
70-
scanVisibleSurfaces(box, interact.resolution) { vec ->
71-
if (player.eyePos distSq vec > reachSq) return@scanVisibleSurfaces
75+
scanVisibleSurfaces(box, sides, interact.resolution) { vec ->
76+
if (eye distSq vec > reachSq) return@scanVisibleSurfaces
7277

73-
val newRotation = player.eyePos.rotationTo(vec)
78+
val newRotation = eye.rotationTo(vec)
7479

7580
val cast = newRotation.rayCast(
7681
interact.reach,
7782
interact.rayCastMask,
78-
player.eyePos
83+
eye
7984
) ?: return@scanVisibleSurfaces
8085
if (!cast.hitCheck()) return@scanVisibleSurfaces
8186

@@ -110,15 +115,15 @@ abstract class RotationEvent : Event {
110115
rotationConfig: IRotationConfig,
111116
interactionConfig: InteractionConfig,
112117
blockPos: BlockPos,
113-
side: Direction,
118+
sides: Set<Direction>,
114119
priority: Int = 0,
115120
) {
116121
runSafe {
117122
val state = world.getBlockState(blockPos)
118123
val voxelShape = state.getOutlineShape(world, blockPos)
119124
val boundingBoxes = voxelShape.boundingBoxes.map { it.offset(blockPos) }
120-
lookAt(rotationConfig, interactionConfig, boundingBoxes, priority) {
121-
blockResult?.blockPos == blockPos && blockResult?.side == side
125+
lookAt(rotationConfig, interactionConfig, boundingBoxes, priority, sides) {
126+
blockResult?.blockPos == blockPos && blockResult?.side in sides
122127
}
123128
}
124129
}

common/src/main/kotlin/com/lambda/manager/interaction/InteractionConfig.kt renamed to common/src/main/kotlin/com/lambda/interaction/InteractionConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.lambda.manager.interaction
1+
package com.lambda.interaction
22

33
import com.lambda.util.world.raycast.RayCastMask
44

common/src/main/kotlin/com/lambda/manager/interaction/VisibilityChecker.kt renamed to common/src/main/kotlin/com/lambda/interaction/VisibilityChecker.kt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,31 @@
1-
package com.lambda.manager.interaction
1+
package com.lambda.interaction
22

33
import com.lambda.context.SafeContext
44
import com.lambda.util.primitives.extension.component6
55
import net.minecraft.util.math.*
66
import java.util.*
77

88
object VisibilityChecker {
9-
inline fun SafeContext.scanVisibleSurfaces(box: Box, resolution: Int, check: (Vec3d) -> Unit) {
10-
val shrunk = box.expand(-0.05)
11-
getVisibleSides(box).forEach { side ->
12-
val (minX, minY, minZ, maxX, maxY, maxZ) = shrunk.bounds(side)
13-
val stepX = (maxX - minX) / resolution
14-
val stepY = (maxY - minY) / resolution
15-
val stepZ = (maxZ - minZ) / resolution
16-
for (i in 0 .. resolution) {
17-
val x = if (stepX != 0.0) minX + stepX * i else minX
18-
for (j in 0 .. resolution) {
19-
val y = if (stepY != 0.0) minY + stepY * j else minY
20-
val z = if (stepZ != 0.0) minZ + stepZ * ((if (stepX != 0.0) j else i)) else minZ
21-
check(Vec3d(x, y, z))
9+
inline fun SafeContext.scanVisibleSurfaces(box: Box, sides: Set<Direction>, resolution: Int, check: (Vec3d) -> Unit) {
10+
val shrunk = box.expand(-0.005)
11+
getVisibleSides(box)
12+
.forEach { side ->
13+
if (sides.isNotEmpty() && side !in sides) {
14+
return@forEach
15+
}
16+
val (minX, minY, minZ, maxX, maxY, maxZ) = shrunk.bounds(side)
17+
val stepX = (maxX - minX) / resolution
18+
val stepY = (maxY - minY) / resolution
19+
val stepZ = (maxZ - minZ) / resolution
20+
for (i in 0 .. resolution) {
21+
val x = if (stepX != 0.0) minX + stepX * i else minX
22+
for (j in 0 .. resolution) {
23+
val y = if (stepY != 0.0) minY + stepY * j else minY
24+
val z = if (stepZ != 0.0) minZ + stepZ * ((if (stepX != 0.0) j else i)) else minZ
25+
check(Vec3d(x, y, z))
26+
}
2227
}
2328
}
24-
}
2529
}
2630

2731
fun Box.bounds(side: Direction) =
@@ -59,7 +63,6 @@ object VisibilityChecker {
5963
diff > limit -> {
6064
add(positiveSide)
6165
}
62-
else -> {}
6366
}
6467
}
6568
}

0 commit comments

Comments
 (0)