Skip to content

Commit 98f787d

Browse files
committed
raycast ElytraFly obstacle passer based on collider rather than outline to avoid triggering over blocks like torches and signs
1 parent 41182e2 commit 98f787d

4 files changed

Lines changed: 14 additions & 7 deletions

File tree

src/main/kotlin/com/lambda/interaction/managers/inventory/InventoryRequest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class InventoryRequest private constructor(
5757
@DslMarker
5858
private annotation class InvRequestDsl
5959

60+
@Suppress("unused")
6061
@InvRequestDsl
6162
class InvRequestBuilder(val settleForLess: Boolean, val mustPerform: Boolean) {
6263
val actions = mutableListOf<InventoryAction>()

src/main/kotlin/com/lambda/interaction/managers/rotating/Rotation.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.lambda.interaction.managers.rotating
1919

2020
import com.lambda.threading.runSafe
21+
import com.lambda.util.BlockUtils.fluids
2122
import com.lambda.util.math.MathUtils.toDegree
2223
import com.lambda.util.math.MathUtils.toRadian
2324
import com.lambda.util.math.plus
@@ -29,6 +30,7 @@ import net.minecraft.util.math.Box
2930
import net.minecraft.util.math.Direction
3031
import net.minecraft.util.math.MathHelper.wrapDegrees
3132
import net.minecraft.util.math.Vec3d
33+
import net.minecraft.world.RaycastContext
3234
import kotlin.math.abs
3335
import kotlin.math.atan2
3436
import kotlin.math.cos
@@ -63,10 +65,11 @@ data class Rotation(val yaw: Double, val pitch: Double) {
6365
fun rayCast(
6466
reach: Double,
6567
eye: Vec3d? = null,
66-
fluids: Boolean = false,
6768
mask: InteractionMask = InteractionMask.Both,
69+
shapeType: RaycastContext.ShapeType = RaycastContext.ShapeType.OUTLINE,
70+
fluidHandling: RaycastContext.FluidHandling = RaycastContext.FluidHandling.NONE
6871
) = runSafe {
69-
rayCast(eye ?: player.eyePos, vector, reach, mask, fluids)
72+
rayCast(eye ?: player.eyePos, vector, reach, mask, shapeType, fluidHandling)
7073
}
7174

7275
fun castBox(

src/main/kotlin/com/lambda/module/modules/movement/ElytraFly.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket
6161
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket
6262
import net.minecraft.sound.SoundEvents
6363
import net.minecraft.util.math.Vec3d
64+
import net.minecraft.world.RaycastContext
6465
import java.lang.Math.toDegrees
6566
import java.lang.Math.toRadians
6667
import kotlin.math.abs
@@ -296,7 +297,8 @@ object ElytraFly : Module(
296297
this,
297298
direction,
298299
obstacleLookAhead.toDouble(),
299-
InteractionMask.Block
300+
InteractionMask.Block,
301+
RaycastContext.ShapeType.COLLIDER
300302
)?.blockResult != null
301303

302304
private fun Vec3d.findClosestPointOnLine(snappedDirection: Vec3d): Vec3d {

src/main/kotlin/com/lambda/util/world/raycast/RayCastUtils.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.lambda.util.world.raycast
2020
import com.lambda.Lambda.mc
2121
import com.lambda.context.SafeContext
2222
import com.lambda.interaction.managers.rotating.Rotation
23+
import com.lambda.util.BlockUtils.fluids
2324
import com.lambda.util.math.distSq
2425
import net.minecraft.client.network.ClientPlayerEntity
2526
import net.minecraft.entity.Entity
@@ -42,16 +43,16 @@ object RayCastUtils {
4243
direction: Vec3d,
4344
reach: Double,
4445
mask: InteractionMask,
45-
fluids: Boolean = false,
46+
shapeType: RaycastContext.ShapeType = RaycastContext.ShapeType.OUTLINE,
47+
fluidHandling: RaycastContext.FluidHandling = RaycastContext.FluidHandling.NONE,
4648
): HitResult? {
4749
val vec = direction.multiply(reach)
4850
val point = start.add(vec)
4951

5052
val block = run {
5153
if (!mask.block) return@run null
5254

53-
val fluidHandling = if (fluids) RaycastContext.FluidHandling.ANY else RaycastContext.FluidHandling.NONE
54-
val context = RaycastContext(start, point, RaycastContext.ShapeType.OUTLINE, fluidHandling, player)
55+
val context = RaycastContext(start, point, shapeType, fluidHandling, player)
5556
val result = world.raycast(context)
5657

5758
result?.blockResult
@@ -72,7 +73,7 @@ object RayCastUtils {
7273
// ToDo: Should rather move player hitbox down and check collision
7374
fun SafeContext.distanceToGround(maxDist: Double = 100.0): Double {
7475
val pos = player.pos.add(0.0, 0.1, 0.0)
75-
val cast = Rotation.DOWN.rayCast(maxDist, pos, false, InteractionMask.Block) ?: return maxDist
76+
val cast = Rotation.DOWN.rayCast(maxDist, pos, InteractionMask.Block) ?: return maxDist
7677

7778
return max(0.0, pos.y - cast.pos.y)
7879
}

0 commit comments

Comments
 (0)