LiquidBounce icon indicating copy to clipboard operation
LiquidBounce copied to clipboard

[FEATURE]Delayed velocity for Legacy(forge 1.8.9)

Open MatrixU5er opened this issue 1 year ago • 4 comments

LiquidBounce Branch

Legacy

Describe your feature request.

delayed velocity can bypass any velocity , Allows the user to delay receiving knockbacks。And active for a short period of time. Good combat effect。 skid fdp

Additional context

/*

  • FDPClient Hacked Client
  • A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce.
  • https://github.com/SkidderMC/FDPClient/ */ package net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.other

import net.ccbluex.liquidbounce.event.PacketEvent import net.ccbluex.liquidbounce.event.UpdateEvent import net.ccbluex.liquidbounce.value.BoolValue import net.ccbluex.liquidbounce.value.IntegerValue import net.ccbluex.liquidbounce.features.module.modules.combat.velocitys.VelocityMode import net.ccbluex.liquidbounce.utils.timer.MSTimer import net.ccbluex.liquidbounce.utils.PacketUtils import net.ccbluex.liquidbounce.utils.BlinkUtils import net.minecraft.network.play.server.S12PacketEntityVelocity import net.minecraft.network.play.server.S32PacketConfirmTransaction import net.minecraft.network.Packet import net.minecraft.network.play.INetHandlerPlayClient import java.util.concurrent.LinkedBlockingQueue import java.util.* import kotlin.concurrent.schedule

class DelayedVelocity : VelocityMode("Delayed") {

private val delayValue = IntegerValue("Delayed-Delay", 300, 50, 1000)
private val blinkValue = BoolValue("Delayed-Blink", true)
private val blinkOutbound = BoolValue("Delayed-BlinkOutgoing", true).displayable { blinkValue.get() }
private val delayC0F = BoolValue("Delayed-DelayTransaction", true).displayable { !blinkValue.get() }

private var blink = false
private var veloTick = 0

private val delayTimer = MSTimer()
private val packets = LinkedBlockingQueue<Packet<INetHandlerPlayClient>>()


override fun onEnable() {
    packets.clear()
    blink = false
}

override fun onDisable() {
    clearPackets()
}

override fun onPacket(event: PacketEvent) {
    val packet = event.packet
    if (packet is S12PacketEntityVelocity && packet.entityID == mc.thePlayer.entityId) {
        if (blinkValue.get()) {
            if (blinkOutbound.get()) {
                BlinkUtils.setBlinkState(all = true)
            }
            blink = true
            delayTimer.reset()
        } else {
            event.cancelEvent()
            veloTick = mc.thePlayer.ticksExisted
            packets.add(packet as Packet<INetHandlerPlayClient>)
            queuePacket(delayValue.get().toLong())
        }
    }
    if (blink && blinkValue.get() && packet.javaClass.simpleName.startsWith("S", ignoreCase = true) && mc.thePlayer.ticksExisted > 10) {
        event.cancelEvent()
        packets.add(packet as Packet<INetHandlerPlayClient>)
    }
    
    if (!blinkValue.get() && delayC0F.get()) {
        if (packet is S32PacketConfirmTransaction && veloTick == mc.thePlayer.ticksExisted) {
            event.cancelEvent()
            packets.add(packet as Packet<INetHandlerPlayClient>)
            queuePacket(delayValue.get().toLong())
        }
    }
}

override fun onUpdate(event: UpdateEvent) {
    if (blink && blinkValue.get() && delayTimer.hasTimePassed(delayValue.get().toLong())) {
        clearPackets()
        blink = false
    }
}

private fun clearPackets() {
    if (blinkValue.get()) {
        while (!packets.isEmpty()) {
            PacketUtils.handlePacket(packets.take() as Packet<INetHandlerPlayClient?>)
        }
        if (blinkOutbound.get()) {
            BlinkUtils.setBlinkState(off = true, release = true)
        }
    }
}

private /*suspend*/ fun queuePacket(delayTime: Long) {
    Timer().schedule(delayTime) {
        PacketUtils.handlePacket(packets.poll() as Packet<INetHandlerPlayClient?> )
    }
}

}

MatrixU5er avatar Feb 05 '24 04:02 MatrixU5er

lb devs dont skid you silly

Might add it, but atleast I'm not gonna skid it from there, tho implement the same logic

EclipsesDev avatar Feb 17 '24 06:02 EclipsesDev

also which server/anticheat does this method bypasses? @MatrixU5er

EclipsesDev avatar Feb 17 '24 06:02 EclipsesDev

also which server/anticheat does this method bypasses? @MatrixU5er

like Karhu Grim matrix and more

MatrixU5er avatar Feb 17 '24 07:02 MatrixU5er