package net.ccbluex.liquidbounce.features.module.modules.misc
import net.ccbluex.liquidbounce.event.EventTarget
import net.ccbluex.liquidbounce.event.PacketEvent
import net.ccbluex.liquidbounce.event.UpdateEvent
import net.ccbluex.liquidbounce.event.WorldEvent
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.features.module.ModuleCategory
import net.ccbluex.liquidbounce.features.module.ModuleInfo
import net.ccbluex.liquidbounce.value.ListValue
import net.minecraft.network.Packet
import net.minecraft.network.play.client.*
import net.minecraft.network.play.client.C03PacketPlayer.C06PacketPlayerPosLook
import org.apache.commons.lang3.ObjectUtils.mode
@ModuleInfo(name = "Disabler", description = "Disable Some Anticheat By Rilshrink ", category = ModuleCategory.MISC)
class Disabler : Module() {
    private val Mode = ListValue("AimMode", arrayOf("Lunar", "Kauri", "OnlyMC", "HazelMC", "Verus Combat"), "Lunar")
    var KeepAlives = ArrayList<Packet<*>>()
    var Transactions = ArrayList<Packet<*>>()
    var currentTrans = 0;
    fun reset(){
        currentTrans = 0;
        KeepAlives.clear();
        Transactions.clear();
    }
    @EventTarget
    fun onWorld(event: WorldEvent) {
        reset()
    }
    
    @EventTarget
    fun onPacket(event: PacketEvent) {
        val packet = event.packet
        when (Mode.get()) {
            "Kauri" -> if (packet is C0FPacketConfirmTransaction) {
                event.cancelEvent()
            }
            "Verus Combat" -> if (packet is C0FPacketConfirmTransaction) {
                if (currentTrans++ > 0) event.cancelEvent()
            } else if (packet is C0BPacketEntityAction) {
                event.cancelEvent()
            }
            "Lunar", "OnlyMC" -> {
                if (packet is C0FPacketConfirmTransaction) {
                    Transactions.add(packet)
                    event.cancelEvent()
                }
                if (packet is C00PacketKeepAlive) {
                    //Temporary until I can figure out how to packet.key -= 1337;
                    KeepAlives.add(packet)
                    event.cancelEvent()
                }
                if (packet is C03PacketPlayer) {
                    mc.thePlayer.sendQueue.addToSendQueue(C0CPacketInput())
                }
            }
            "HazelMC" -> {
                if (packet is C0FPacketConfirmTransaction) {
                    Transactions.add(packet)
                    event.cancelEvent()
                }
                if (packet is C00PacketKeepAlive) {
                    KeepAlives.add(packet)
                    event.cancelEvent()
                }
                if (packet is C03PacketPlayer) {
                    mc.thePlayer.sendQueue.addToSendQueue(C0CPacketInput())
                }
            }
        }
    }
    @EventTarget
    fun onUpdate(event: UpdateEvent) {
        when (Mode.get()) {
            "OnlyMC", "Lunar" -> {
                if (mc.thePlayer.ticksExisted % 120 == 0 && Transactions.size > currentTrans) {
                    mc.thePlayer.sendQueue.addToSendQueue(Transactions.get(currentTrans++))
                }
                if (mc.thePlayer.ticksExisted % 120 == 0) {
                    var i = 0
                    while (i < KeepAlives.size) {
                        val packet = KeepAlives[i]
                        if (packet != null) {
                            mc.thePlayer.sendQueue.addToSendQueue(packet)
                        }
                        i++
                    }
                    KeepAlives.clear()
                }
                if (mc.thePlayer.ticksExisted % 25 == 0) {
                    mc.thePlayer.sendQueue.addToSendQueue(C06PacketPlayerPosLook(mc.thePlayer.posX, mc.thePlayer.posY + 21, mc.thePlayer.posZ, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, true))
                }
                if (mc.thePlayer.ticksExisted % 300 == 0) {
                    reset()
                }
            }
            "HazelMC" -> {
                mc.thePlayer.sendQueue.addToSendQueue(C00PacketKeepAlive(0))
                if (Transactions.size > currentTrans) {
                    mc.thePlayer.sendQueue.addToSendQueue(Transactions.get(currentTrans++))
                }
                if (mc.thePlayer.ticksExisted % 100 == 0) {
                    var i = 0
                    while (i < KeepAlives.size) {
                        val packet = KeepAlives[i]
                        if (packet != null) {
                            mc.thePlayer.sendQueue.addToSendQueue(packet)
                        }
                        i++
                    }
                    KeepAlives.clear()
                }
            }
        }
    }
    override fun onEnable() {
    }
    override fun onDisable() {
        reset();
    }
}
try this