
Description
Describe the bypass and how to replicate it
/*
- LiquidBounce Hacked Client
- A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge.
- https://github.com/CCBlueX/LiquidBounce/
*/
package net.ccbluex.liquidbounce.features.module.modules.combat
import net.ccbluex.liquidbounce.Arctic
import net.ccbluex.liquidbounce.api.enums.EnchantmentType
import net.ccbluex.liquidbounce.api.minecraft.client.entity.IEntityLivingBase
import net.ccbluex.liquidbounce.event.EventTarget
import net.ccbluex.liquidbounce.event.UpdateEvent
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.injection.backend.unwrap
import net.ccbluex.liquidbounce.utils.ClientUtils
import net.ccbluex.liquidbounce.utils.item.ItemUtils
import net.ccbluex.liquidbounce.value.BoolValue
import net.ccbluex.liquidbounce.value.ListValue
import net.minecraft.entity.player.EntityPlayer
@ModuleInfo(name = "ArmorBreaker", category = ModuleCategory.COMBAT, description = "BreakArmor")
class ArmorBreaker : Module() {
private val modeValue = ListValue("Mode", arrayOf("Grim"), "Grim")
private val debug = BoolValue("Debug", true)
private val switch = BoolValue("switch", true)
private var docriArmorBreaker = false
private var target: IEntityLivingBase? = null
// private val onlyattackblockingplayer = BoolValue("OnlyAttackBlockingPlayer", true)
@EventTarget
fun onUpdate(update: UpdateEvent) {
val aura = Arctic.moduleManager[KillAura::class.java] as KillAura
val thePlayer = mc.thePlayer ?: return
// if (aura.target==null && aura.state && mc2.player.ticksExisted%19==0)
// mc.netHandler.addToSendQueue(classProvider.createCPacketHeldItemChange(mc.thePlayer!!.inventory.currentItem))
if (!aura.state) return
target = aura.target
/*val weaponSlots = (0 .. 8)
.mapNotNull { slot -> thePlayer.inventory.getStackInSlot(slot)?.let { Pair(slot, it) } }
.filter { (slot, stack) -> !classProvider.isItemAxe(stack.item) }
.sortedBy { (slot, stack) ->
val attribute = stack.getAttributeModifier("generic.attackDamage").first()
val baseDamage = attribute.amount
val enchantmentDamage = ItemUtils.getEnchantment(stack, classProvider.getEnchantmentEnum(EnchantmentType.SHARPNESS)) * 1.25
baseDamage + enchantmentDamage
}
神秘原因排序不报错但是不执行只能使用lowiq切换物品
*/
docriArmorBreaker = (target!!.unwrap() is EntityPlayer && target!!.unwrap().isHandActive && !mc.gameSettings.keyBindUseItem.pressed )
if (switch.get()){
val (weaponSlot, _) = (0..8)
.map { Pair(it, thePlayer.inventory.getStackInSlot(it)) }
.filter { it.second != null && classProvider.isItemSword(it.second?.item) }
.maxBy {
it.second!!.getAttributeModifier("generic.attackDamage")
.first().amount + 1.25 * ItemUtils.getEnchantment(
it.second,
classProvider.getEnchantmentEnum(EnchantmentType.SHARPNESS)
)
} ?: return
if (/*aura.swingcounts<21 && */target!!.unwrap() is EntityPlayer && target!!.unwrap().isHandActive) {
if (target!!.hurtTime <= 1) {
mc.netHandler.addToSendQueue(classProvider.createCPacketHeldItemChange((8)))
if (debug.get())
ClientUtils.displayChatMessage("§aBreak Armor Succeed")
}
if (target!!.hurtTime == 9) {
val (weaponSlot2, _) = (0..8)
.map { Pair(it, thePlayer.inventory.getStackInSlot(it)) }
.filter { it.second != null && classProvider.isItemSword(it.second?.item) }
.minBy {
it.second!!.getAttributeModifier("generic.attackDamage")
.first().amount + 1.25 * ItemUtils.getEnchantment(
it.second,
classProvider.getEnchantmentEnum(EnchantmentType.SHARPNESS)
)
} ?: return
mc.netHandler.addToSendQueue(classProvider.createCPacketHeldItemChange((weaponSlot2)))
if (debug.get())
ClientUtils.displayChatMessage("§aStart Breaking Armor")
}
if (target!!.hurtTime in 2..8) {
mc.netHandler.addToSendQueue(classProvider.createCPacketHeldItemChange((weaponSlot)))
if (debug.get())
ClientUtils.displayChatMessage("§aBreak Armor Succeed")
}
}else{
if (aura.target!=null) {
thePlayer.inventory.currentItem = weaponSlot
mc.netHandler.addToSendQueue(classProvider.createCPacketHeldItemChange((weaponSlot)))
mc.playerController.updateController()
}
}
}else{
val (weaponSlot, _) = (0..8)
.map { Pair(it, thePlayer.inventory.getStackInSlot(it)) }
.filter { it.second != null && classProvider.isItemSword(it.second?.item) }
.maxBy {
it.second!!.getAttributeModifier("generic.attackDamage")
.first().amount + 1.25 * ItemUtils.getEnchantment(
it.second,
classProvider.getEnchantmentEnum(EnchantmentType.SHARPNESS)
)
} ?: return
if (aura.target!=null) {
thePlayer.inventory.currentItem = weaponSlot
mc.playerController.updateController()
}
}
}
override val tag: String
get() = modeValue.get()
}
Grim version
grimac-2.3.61.jar
Server version
1.8.8
Plugins
ViaVersion-4.9.2.jar grimac-2.3.61.jar