Skip to content

Commit ca42ee6

Browse files
Doogie13Avanatiker
authored andcommitted
LongJump Rewrite
1 parent 6e9f365 commit ca42ee6

File tree

1 file changed

+198
-0
lines changed
  • src/main/kotlin/com/lambda/client/module/modules/movement

1 file changed

+198
-0
lines changed
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
package com.lambda.client.module.modules.movement
2+
3+
import com.lambda.client.commons.interfaces.DisplayEnum
4+
import com.lambda.client.event.events.PacketEvent
5+
import com.lambda.client.event.events.PlayerMoveEvent
6+
import com.lambda.client.module.Category
7+
import com.lambda.client.module.Module
8+
import com.lambda.client.util.BaritoneUtils
9+
import com.lambda.client.util.MovementUtils.applySpeedPotionEffects
10+
import com.lambda.client.util.MovementUtils.calcMoveYaw
11+
import com.lambda.client.util.MovementUtils.isInputting
12+
import com.lambda.client.util.threads.safeListener
13+
import net.minecraft.network.play.server.SPacketPlayerPosLook
14+
import net.minecraftforge.fml.common.gameevent.TickEvent
15+
import kotlin.math.cos
16+
import kotlin.math.hypot
17+
import kotlin.math.sin
18+
19+
20+
/**
21+
* @author Doogie13
22+
* @since 17/03/2023
23+
*/
24+
object LongJump : Module(
25+
name = "LongJump",
26+
description = "Allows you to abuse velocity to jump further",
27+
category = Category.MOVEMENT
28+
) {
29+
30+
private val mode by setting("Mode", Mode.STANDARD, description = "How to boost your motion")
31+
private var speed by setting("Speed", 3.8, 0.0..10.0, 0.001, description = "How much to boost your initial motion")
32+
33+
private val virtue by setting("Glide", false, description = "Glide along the ground after jumping") // reasonably major 2014 exploit, works on UpdatedNCP in 2023
34+
35+
enum class Mode(override val displayName: String) : DisplayEnum {
36+
STANDARD("Standard"),
37+
UPDATED("UpdatedNCP")
38+
}
39+
40+
private var currentSpeed = .2873
41+
private var strafePhase = StandardPhase.HEAD_START
42+
private var lastDistance = 0.0
43+
private var jumpTick = 0
44+
45+
init {
46+
47+
onEnable {
48+
strafePhase = StandardPhase.HEAD_START
49+
currentSpeed = .2873
50+
lastDistance = 0.0
51+
jumpTick = 0
52+
}
53+
54+
safeListener<PacketEvent.Receive> {
55+
if (it.packet is SPacketPlayerPosLook) {
56+
currentSpeed = .0
57+
disable()
58+
}
59+
}
60+
61+
safeListener<TickEvent.ClientTickEvent> {
62+
63+
if (it.phase != TickEvent.Phase.START)
64+
return@safeListener
65+
66+
lastDistance = hypot(player.posX - player.lastTickPosX, player.posZ - player.lastTickPosZ)
67+
68+
}
69+
70+
safeListener<PlayerMoveEvent> {
71+
72+
val base = applySpeedPotionEffects(.2873)
73+
val adjSpeed = speed * base // this seems to be what future uses so its what people are expecting
74+
val yaw = calcMoveYaw()
75+
76+
if (player.capabilities.isFlying
77+
|| player.isElytraFlying
78+
|| BaritoneUtils.isPathing
79+
|| !isInputting) {
80+
strafePhase = StandardPhase.HEAD_START
81+
return@safeListener
82+
}
83+
84+
when (mode) {
85+
86+
Mode.STANDARD -> {
87+
88+
when (strafePhase) {
89+
90+
StandardPhase.HEAD_START -> {
91+
if (!player.onGround) {
92+
strafePhase = StandardPhase.SLOWDOWN
93+
return@safeListener
94+
}
95+
currentSpeed = adjSpeed / 2.149
96+
strafePhase = StandardPhase.ACCELERATING
97+
}
98+
99+
StandardPhase.ACCELERATING -> {
100+
currentSpeed = adjSpeed
101+
player.motionY = .424 // slightly higher than normal which is good for LJ
102+
strafePhase = StandardPhase.SLOWDOWN
103+
}
104+
105+
StandardPhase.SLOWDOWN -> {
106+
currentSpeed -= .66 * base
107+
strafePhase = StandardPhase.FALLING
108+
}
109+
110+
StandardPhase.FALLING -> {
111+
112+
if (player.onGround) {
113+
strafePhase = StandardPhase.ACCELERATING
114+
return@safeListener
115+
}
116+
117+
currentSpeed = lastDistance - lastDistance / 159
118+
}
119+
120+
}
121+
122+
it.x = -sin(yaw) * currentSpeed
123+
it.z = cos(yaw) * currentSpeed
124+
125+
if (
126+
virtue
127+
&& isInputting
128+
&& world.collidesWithAnyBlock(player.entityBoundingBox.shrink(0.0625).expand(0.0, -0.55, 0.0))
129+
&& player.motionY < 0
130+
&& currentSpeed > .29
131+
&& strafePhase == StandardPhase.FALLING
132+
) {
133+
it.y = -1e-7
134+
}
135+
136+
}
137+
138+
Mode.UPDATED -> {
139+
140+
// we cannot spam this on UpdatedNCP
141+
if (jumpTick > 1 && player.onGround) {
142+
disable()
143+
return@safeListener
144+
}
145+
146+
if (player.onGround) {
147+
player.jump()
148+
it.x = -sin(yaw) * base
149+
it.z = cos(yaw) * base
150+
jumpTick = 1
151+
return@safeListener
152+
}
153+
154+
if (++jumpTick == 2) {
155+
it.x = -sin(yaw) * adjSpeed
156+
it.z = cos(yaw) * adjSpeed
157+
return@safeListener
158+
}
159+
160+
if (jumpTick < 8) {
161+
val newSpeed = lastDistance - lastDistance / 159
162+
it.x = -sin(yaw) * newSpeed
163+
it.z = cos(yaw) * newSpeed
164+
}
165+
166+
if (
167+
virtue
168+
&& isInputting
169+
&& world.collidesWithAnyBlock(player.entityBoundingBox.shrink(0.0625).expand(0.0, -0.55, 0.0))
170+
&& player.motionY < 0
171+
&& currentSpeed > .29
172+
) {
173+
it.y = -1e-7
174+
}
175+
176+
}
177+
178+
}
179+
180+
}
181+
182+
}
183+
184+
private enum class StandardPhase {
185+
// slide along the ground slower to bypass
186+
HEAD_START,
187+
188+
// to jump and accelerate
189+
ACCELERATING,
190+
191+
// to fall to the ground
192+
SLOWDOWN,
193+
194+
// to slowly fall to the ground
195+
FALLING
196+
}
197+
198+
}

0 commit comments

Comments
 (0)