Skip to content

Commit 95e4cf2

Browse files
committed
feat(noSlow) added modes OnlyGround, OnlyMove, AntiSwitchItem, AAC4, OldIntave, Medusa, HypixelNew, SpamItemChange, SpamPlace, SpamEmptyPlace, Matrix, GrimAC
1 parent 0ba4c0f commit 95e4cf2

1 file changed

Lines changed: 255 additions & 4 deletions

File tree

  • src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement

src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/NoSlow.kt

Lines changed: 255 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@ import net.ccbluex.liquidbounce.utils.inventory.InventoryUtils
1616
import net.ccbluex.liquidbounce.utils.inventory.SilentHotbar
1717
import net.ccbluex.liquidbounce.utils.movement.MovementUtils
1818
import net.ccbluex.liquidbounce.utils.movement.MovementUtils.hasMotion
19+
import net.ccbluex.liquidbounce.utils.timing.MSTimer
1920
import net.ccbluex.liquidbounce.utils.timing.TickTimer
2021
import net.minecraft.item.*
22+
import net.minecraft.network.Packet
2123
import net.minecraft.network.handshake.client.C00Handshake
2224
import net.minecraft.network.play.client.*
2325
import net.minecraft.network.play.client.C07PacketPlayerDigging.Action.DROP_ITEM
2426
import net.minecraft.network.play.client.C07PacketPlayerDigging.Action.RELEASE_USE_ITEM
2527
import net.minecraft.network.play.server.S08PacketPlayerPosLook
28+
import net.minecraft.network.play.server.S09PacketHeldItemChange
2629
import net.minecraft.network.play.server.S12PacketEntityVelocity
2730
import net.minecraft.network.play.server.S27PacketExplosion
2831
import net.minecraft.network.play.server.S2FPacketSetSlot
@@ -37,18 +40,37 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
3740

3841
private val swordMode by choices(
3942
"SwordMode",
40-
arrayOf("None", "NCP", "UpdatedNCP", "AAC5", "SwitchItem", "InvalidC08", "Blink", "Grim2371"),
43+
arrayOf(
44+
"None", "NCP", "UpdatedNCP", "AAC4", "AAC5", "SwitchItem", "InvalidC08",
45+
"Blink", "Grim2371", "OldIntave", "Medusa", "HypixelNew", "SpamItemChange",
46+
"SpamPlace", "SpamEmptyPlace", "Matrix", "GrimAC"
47+
),
4148
"None"
4249
)
4350

4451
private val reblinkTicks by int("ReblinkTicks", 10, 1..20) { swordMode == "Blink" }
52+
private val antiSwitchItem by boolean("AntiSwitchItem", false)
53+
private val onlyGround by boolean("OnlyGround", false)
54+
private val onlyMove by boolean("OnlyMove", false)
55+
private val aac4C07 by boolean("AAC4-C07", true) {
56+
swordMode == "AAC4" || consumeMode == "AAC4" || bowPacket == "AAC4"
57+
}
58+
private val aac4C08 by boolean("AAC4-C08", true) {
59+
swordMode == "AAC4" || consumeMode == "AAC4" || bowPacket == "AAC4"
60+
}
61+
private val aac4OnGround by boolean("AAC4-OnGround", true) {
62+
swordMode == "AAC4" || consumeMode == "AAC4" || bowPacket == "AAC4"
63+
}
4564

4665
private val blockForwardMultiplier by float("BlockForwardMultiplier", 1f, 0.2F..1f)
4766
private val blockStrafeMultiplier by float("BlockStrafeMultiplier", 1f, 0.2F..1f)
4867

4968
private val consumeMode by choices(
5069
"ConsumeMode",
51-
arrayOf("None", "UpdatedNCP", "AAC5", "SwitchItem", "InvalidC08", "Intave", "Drop", "Grim2371"),
70+
arrayOf(
71+
"None", "UpdatedNCP", "AAC4", "AAC5", "SwitchItem", "InvalidC08", "Intave",
72+
"Drop", "Grim2371", "HypixelNew", "SpamItemChange", "SpamPlace", "SpamEmptyPlace", "Medusa"
73+
),
5274
"None"
5375
)
5476

@@ -65,7 +87,10 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
6587

6688
private val bowPacket by choices(
6789
"BowMode",
68-
arrayOf("None", "UpdatedNCP", "AAC5", "SwitchItem", "InvalidC08", "Grim2371"),
90+
arrayOf(
91+
"None", "UpdatedNCP", "AAC4", "AAC5", "SwitchItem", "InvalidC08",
92+
"Grim2371", "HypixelNew", "SpamItemChange", "SpamPlace", "SpamEmptyPlace", "Medusa"
93+
),
6994
"None"
7095
)
7196

@@ -101,9 +126,15 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
101126
private var hasDropped = false
102127

103128
private val BlinkTimer = TickTimer()
129+
private val aac4Timer = MSTimer()
130+
private val matrixBufferTimer = MSTimer()
104131

105132
private var grim2371DoNotSlow = false
106133
private val grim2371Timer = TickTimer()
134+
private val matrixPacketBuffer = mutableListOf<Packet<*>>()
135+
private var matrixBuffering = false
136+
private var lastBlockingState = false
137+
private var medusaCanStopSprint = true
107138

108139
override fun onDisable() {
109140
shouldSwap = false
@@ -113,14 +144,18 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
113144
grim2371DoNotSlow = false
114145
grim2371Timer.reset()
115146
pendingFlagApplyPacket = false
147+
matrixPacketBuffer.clear()
148+
matrixBuffering = false
149+
lastBlockingState = false
150+
medusaCanStopSprint = true
116151
}
117152

118153
val onMotion = handler<MotionEvent> { event ->
119154
val player = mc.thePlayer ?: return@handler
120155
val heldItem = player.heldItem ?: return@handler
121156
val isUsingItem = usingItemFunc()
122157

123-
if (!hasMotion && !shouldSwap)
158+
if ((!hasMotion && !shouldSwap) || !shouldHandleNoSlow(player))
124159
return@handler
125160

126161
if (event.eventState == EventState.PRE && isUsingItem) {
@@ -210,6 +245,9 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
210245
consumeDrinkOnly && (heldItem.item is ItemPotion || heldItem.item is ItemBucketMilk))
211246
) {
212247
when (consumeMode.lowercase()) {
248+
"aac4" ->
249+
handleAAC4Packet(event, heldItem)
250+
213251
"aac5" ->
214252
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, heldItem, 0f, 0f, 0f))
215253

@@ -239,12 +277,36 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
239277
sendPacket(C07PacketPlayerDigging(RELEASE_USE_ITEM, BlockPos.ORIGIN, EnumFacing.UP))
240278
}
241279
}
280+
281+
"hypixelnew" -> {
282+
if (InventoryUtils.hasSpaceInInventory() && event.eventState == EventState.PRE && player.ticksExisted % 3 != 0) {
283+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
284+
}
285+
}
286+
287+
"spamitemchange" ->
288+
if (event.eventState == EventState.PRE) {
289+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem))
290+
}
291+
292+
"spamplace" ->
293+
if (event.eventState == EventState.PRE) {
294+
sendPacket(C08PacketPlayerBlockPlacement(heldItem))
295+
}
296+
297+
"spamemptyplace" ->
298+
if (event.eventState == EventState.PRE) {
299+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
300+
}
242301
}
243302
}
244303
}
245304

246305
if (heldItem.item is ItemBow && (isUsingItem || shouldSwap)) {
247306
when (bowPacket.lowercase()) {
307+
"aac4" ->
308+
handleAAC4Packet(event, heldItem)
309+
248310
"aac5" ->
249311
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, heldItem, 0f, 0f, 0f))
250312

@@ -268,6 +330,27 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
268330
}
269331
}
270332
}
333+
334+
"hypixelnew" -> {
335+
if (InventoryUtils.hasSpaceInInventory() && event.eventState == EventState.PRE && player.ticksExisted % 3 != 0) {
336+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
337+
}
338+
}
339+
340+
"spamitemchange" ->
341+
if (event.eventState == EventState.PRE) {
342+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem))
343+
}
344+
345+
"spamplace" ->
346+
if (event.eventState == EventState.PRE) {
347+
sendPacket(C08PacketPlayerBlockPlacement(heldItem))
348+
}
349+
350+
"spamemptyplace" ->
351+
if (event.eventState == EventState.PRE) {
352+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
353+
}
271354
}
272355
}
273356

@@ -288,6 +371,9 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
288371
else -> return@handler
289372
}
290373

374+
"aac4" ->
375+
handleAAC4Packet(event, heldItem)
376+
291377
"updatedncp" ->
292378
if (event.eventState == EventState.POST) {
293379
sendPacket(C08PacketPlayerBlockPlacement(BlockPos.ORIGIN, 255, heldItem, 0f, 0f, 0f))
@@ -313,10 +399,89 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
313399
}
314400
}
315401
}
402+
403+
"oldintave" -> {
404+
if (event.eventState == EventState.PRE) {
405+
sendPacket(C09PacketHeldItemChange((player.inventory.currentItem + 1) % 9))
406+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem))
407+
}
408+
409+
if (event.eventState == EventState.POST) {
410+
sendPacket(C08PacketPlayerBlockPlacement(player.inventoryContainer.getSlot(player.inventory.currentItem + 36).stack))
411+
}
412+
}
413+
414+
"hypixelnew" -> {
415+
if (InventoryUtils.hasSpaceInInventory() && event.eventState == EventState.PRE && player.ticksExisted % 3 != 0) {
416+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
417+
}
418+
}
419+
420+
"spamitemchange" ->
421+
if (event.eventState == EventState.PRE) {
422+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem))
423+
}
424+
425+
"spamplace" ->
426+
if (event.eventState == EventState.PRE) {
427+
sendPacket(C08PacketPlayerBlockPlacement(heldItem))
428+
}
429+
430+
"spamemptyplace" ->
431+
if (event.eventState == EventState.PRE) {
432+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, null, 0f, 0f, 0f))
433+
}
316434
}
317435
}
318436
}
319437

438+
val onUpdate = handler<UpdateEvent> {
439+
val player = mc.thePlayer ?: return@handler
440+
val blockingSword = isBlockingSword()
441+
442+
if ((swordMode == "Matrix" || swordMode == "GrimAC") && (lastBlockingState || blockingSword)) {
443+
if (matrixBufferTimer.hasTimePassed(230L) && matrixBuffering) {
444+
matrixBuffering = false
445+
446+
if (swordMode == "GrimAC") {
447+
sendPacket(C09PacketHeldItemChange((player.inventory.currentItem + 1) % 9), false)
448+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem), false)
449+
} else {
450+
sendPacket(C07PacketPlayerDigging(RELEASE_USE_ITEM, BlockPos(-1, -1, -1), EnumFacing.DOWN), false)
451+
}
452+
453+
if (matrixPacketBuffer.isNotEmpty()) {
454+
var canAttack = false
455+
456+
for (queuedPacket in matrixPacketBuffer) {
457+
if (queuedPacket is C03PacketPlayer) {
458+
canAttack = true
459+
}
460+
461+
if (!((queuedPacket is C02PacketUseEntity || queuedPacket is C0APacketAnimation) && !canAttack)) {
462+
sendPacket(queuedPacket, false)
463+
}
464+
}
465+
466+
matrixPacketBuffer.clear()
467+
}
468+
}
469+
470+
if (!matrixBuffering) {
471+
lastBlockingState = blockingSword
472+
if (!blockingSword) {
473+
return@handler
474+
}
475+
476+
sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 255, player.inventory.getCurrentItem(), 0f, 0f, 0f), false)
477+
matrixBuffering = true
478+
matrixBufferTimer.reset()
479+
}
480+
} else {
481+
lastBlockingState = false
482+
}
483+
}
484+
320485
val onPacket = handler<PacketEvent> { event ->
321486
val packet = event.packet
322487
val player = mc.thePlayer ?: return@handler
@@ -391,6 +556,41 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
391556
}
392557
}
393558

559+
if (antiSwitchItem && packet is S09PacketHeldItemChange && event.eventType == EventState.RECEIVE && usingItemFunc()) {
560+
event.cancelEvent()
561+
sendPacket(C09PacketHeldItemChange(packet.heldItemHotbarIndex), false)
562+
sendPacket(C09PacketHeldItemChange(player.inventory.currentItem), false)
563+
return@handler
564+
}
565+
566+
if (!shouldHandleNoSlow(player)) {
567+
return@handler
568+
}
569+
570+
if (isMedusaActive()) {
571+
if (medusaCanStopSprint) {
572+
sendPacket(C0BPacketEntityAction(player, C0BPacketEntityAction.Action.STOP_SPRINTING), false)
573+
medusaCanStopSprint = false
574+
}
575+
} else {
576+
medusaCanStopSprint = true
577+
}
578+
579+
if ((swordMode == "Matrix" || swordMode == "GrimAC") && matrixBuffering && event.eventType == EventState.SEND) {
580+
if ((packet is C07PacketPlayerDigging || packet is C08PacketPlayerBlockPlacement) && isBlockingSword()) {
581+
event.cancelEvent()
582+
return@handler
583+
}
584+
585+
if (packet is C03PacketPlayer || packet is C0APacketAnimation || packet is C0BPacketEntityAction ||
586+
packet is C02PacketUseEntity || packet is C07PacketPlayerDigging || packet is C08PacketPlayerBlockPlacement
587+
) {
588+
matrixPacketBuffer += packet
589+
event.cancelEvent()
590+
return@handler
591+
}
592+
}
593+
394594
if (event.isCancelled || shouldSwap)
395595
return@handler
396596

@@ -490,8 +690,13 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
490690
}
491691

492692
val onSlowDown = handler<SlowDownEvent> { event ->
693+
val player = mc.thePlayer ?: return@handler
493694
val heldItem = mc.thePlayer.heldItem?.item
494695

696+
if (!shouldHandleNoSlow(player)) {
697+
return@handler
698+
}
699+
495700
if ((swordMode == "Grim2371" && heldItem is ItemSword) ||
496701
(consumeMode == "Grim2371" && (heldItem is ItemFood || heldItem is ItemPotion || heldItem is ItemBucketMilk)) ||
497702
(bowPacket == "Grim2371" && heldItem is ItemBow)) {
@@ -534,6 +739,52 @@ object NoSlow : Module("NoSlow", Category.MOVEMENT, Category.SubCategory.MOVEMEN
534739
fun usingItemFunc() =
535740
mc.thePlayer?.heldItem != null && (mc.thePlayer.isUsingItem || (mc.thePlayer.heldItem?.item is ItemSword && KillAura.blockStatus) || isUNCPBlocking())
536741

742+
private fun shouldHandleNoSlow(player: net.minecraft.client.entity.EntityPlayerSP): Boolean {
743+
if (onlyMove && !player.isMoving) {
744+
return false
745+
}
746+
747+
if (onlyGround && !player.onGround) {
748+
return false
749+
}
750+
751+
return true
752+
}
753+
754+
private fun handleAAC4Packet(event: MotionEvent, heldItem: ItemStack) {
755+
val player = mc.thePlayer ?: return
756+
757+
if (aac4OnGround && !player.onGround) {
758+
return
759+
}
760+
761+
if (aac4C07 && event.eventState == EventState.PRE && aac4Timer.hasTimePassed(80L)) {
762+
sendPacket(C07PacketPlayerDigging(RELEASE_USE_ITEM, BlockPos(-1, -1, -1), EnumFacing.DOWN))
763+
}
764+
765+
if (aac4C08 && event.eventState == EventState.POST && aac4Timer.hasTimePassed(80L)) {
766+
sendPacket(C08PacketPlayerBlockPlacement(heldItem))
767+
aac4Timer.reset()
768+
}
769+
}
770+
771+
private fun isBlockingSword(): Boolean {
772+
val player = mc.thePlayer ?: return false
773+
return (player.isUsingItem || KillAura.blockStatus) && player.heldItem?.item is ItemSword
774+
}
775+
776+
private fun isMedusaActive(): Boolean {
777+
val player = mc.thePlayer ?: return false
778+
val item = player.heldItem?.item ?: return false
779+
780+
return when (item) {
781+
is ItemSword -> swordMode == "Medusa" && usingItemFunc()
782+
is ItemBow -> bowPacket == "Medusa" && usingItemFunc()
783+
is ItemFood, is ItemPotion, is ItemBucketMilk -> consumeMode == "Medusa" && usingItemFunc()
784+
else -> false
785+
}
786+
}
787+
537788
private fun updateSlot() {
538789
SilentHotbar.selectSlotSilently(this, (SilentHotbar.currentSlot + 1) % 9, immediate = true)
539790
SilentHotbar.resetSlot(this, true)

0 commit comments

Comments
 (0)