[Kotlin] HackerDetector
-
DETECT SIGMA HATARS
code below...
package net.ccbluex.liquidbounce.features.module.modules.player import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.event.PacketEvent 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.utils.EntityUtils import net.ccbluex.liquidbounce.utils.timer.MSTimer import net.ccbluex.liquidbounce.value.BoolValue import net.ccbluex.liquidbounce.value.IntegerValue import net.minecraft.client.Minecraft import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.network.play.server.S0BPacketAnimation import net.minecraft.network.play.server.S14PacketEntity import net.minecraft.network.play.server.S18PacketEntityTeleport import net.minecraft.network.play.server.S19PacketEntityStatus import net.minecraft.potion.Potion import net.minecraft.util.AxisAlignedBB import kotlin.math.abs import kotlin.math.atan2 import kotlin.math.pow import kotlin.math.sqrt @ModuleInfo(name = "HackerDetector", description = "Detect SIGMA Hackers.", category = ModuleCategory.PLAYER) class HackerDetector : Module() { private val GRAVITY_FRICTION = 0.9800000190734863 private val combatCheck=BoolValue("Combat",true) private val movementCheck=BoolValue("Movement",true) private val debugMode=BoolValue("Debug",false) private val report=BoolValue("AutoReport",true) private val vlValue=IntegerValue("VL",300,100,500) private val datas=HashMap<EntityPlayer,HackerData>() private val hackers=ArrayList<String>() // @EventTarget // fun onUpdate(event: UpdateEvent){ // //this takes a bit time so we do it async // if(movementCheck.get()) { // Thread { checkMove() }.start() // } // } @EventTarget fun onPacket(event: PacketEvent){ if(event.packet is S19PacketEntityStatus){ val packet=event.packet if(combatCheck.get()&&packet.opCode.toInt()==2){ Thread { checkCombatHurt(packet.getEntity(mc.theWorld)) }.start() } }else if(event.packet is S0BPacketAnimation){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityID) if(entity !is EntityPlayer||packet.animationType!=0) return val data=datas[entity] ?: return data.tempAps++ }else if(movementCheck.get()){ if(event.packet is S18PacketEntityTeleport){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityId) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() }else if(event.packet is S14PacketEntity){ val packet=event.packet val entity=packet.getEntity(mc.theWorld) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() } } } override fun onEnable() { datas.clear() hackers.clear() } @EventTarget fun onWorld(event: WorldEvent){ datas.clear() } fun isHacker(entity: EntityLivingBase):Boolean{ if(entity !is EntityPlayer) return false return hackers.contains(entity.name) } //onupdate // private fun checkMove(){ // for(entity in mc.theWorld.loadedEntityList){ // if(entity !is EntityPlayer) continue // checkPlayer(entity) // } // } private fun checkPlayer(player: EntityPlayer){ if(player.equals(mc.thePlayer)||EntityUtils.isFriend(player)) return if(datas[player]==null) datas[player] = HackerData(player) val data=datas[player] ?: return data.update() if(data.aliveTicks<20) return //settings var minAirTicks = 10 if(player.isPotionActive(Potion.jump)){ minAirTicks+=player.getActivePotionEffect(Potion.jump).amplifier*3 } val maxMotionY = 0.47 //for strict check u can change this to 0.42 val maxOffset = 0.07 var passed=true if(player.hurtTime>0){ //velocity if (player.hurtResistantTime in 7..11 && player.prevPosX == player.posX && player.posZ == player.lastTickPosZ && !mc.theWorld.checkBlockCollision(player.entityBoundingBox.expand(0.05, 0.0, 0.05))) { flag("velocity",50,data,"NO KNOCKBACK") } if (player.hurtResistantTime in 7..11 && player.lastTickPosY == player.posY) { flag("velocity",50,data,"NO KNOCKBACK") } return } //phase // if(mc.theWorld.checkBlockCollision(player.entityBoundingBox)){ // flag("phase",50,data,"COLLIDE") // passed=false // } //killaura from jigsaw if (data.aps >= 10) { flag("killaura",30,data,"HIGH APS(aps=${data.aps})") passed=false } if (data.aps > 2 && data.aps == data.preAps && data.aps != 0) { flag("killaura",30,data,"STRANGE APS(aps=${data.aps})") passed=false } if (abs(player.rotationYaw - player.prevRotationYaw) > 50 && player.swingProgress != 0F && data.aps >= 3) { flag("killaura",30,data,"YAW RATE(aps=${data.aps},yawRot=${abs(player.rotationYaw - player.prevRotationYaw)})") passed=false } //flight if(player.ridingEntity==null&&data.airTicks>(minAirTicks/2)){ if (abs(data.motionY - data.lastMotionY) < (if(data.airTicks >= 115){1E-3}else{5E-3})){ flag("fly",20,data,"GLIDE(diff=${abs(data.motionY - data.lastMotionY)})") passed=false } if(data.motionY > maxMotionY){ flag("fly",20,data,"YAXIS(motY=${data.motionY})") passed=false } if(data.airTicks > minAirTicks&&data.motionY>0){ flag("fly",30,data,"YAXIS(motY=${data.motionY})") passed=false } //gravity check from ACR // val gravitatedY = (data.lastMotionY - 0.08) * GRAVITY_FRICTION // val offset = abs(gravitatedY - data.motionY) // if (offset > maxOffset) { // flag("fly",15,data,"GRAVITY(offset=$offset)") // passed=false // } } //speed val distanceXZ=abs(data.motionXZ) if(data.airTicks==0){ //onGround var limit = 0.37 if(data.groundTicks < 5) limit += 0.1 if(player.isBlocking) limit *= 0.45 if(player.isSneaking) limit *= 0.68 if(player.isPotionActive(Potion.moveSpeed)){ //server will send real player potionData?i hope that limit += player.getActivePotionEffect(Potion.moveSpeed).amplifier limit *= 1.5 } if (distanceXZ > limit) { flag("speed",20,data,"GROUND SPEED(speed=$distanceXZ,limit=$limit)") } }else{ val multiplier = 0.985 var predict = 0.36 * multiplier.pow(data.airTicks + 1) if (data.airTicks >= 115) predict = 0.08.coerceAtLeast(predict); var limit=0.05 if(player.isPotionActive(Potion.moveSpeed)){ predict += player.getActivePotionEffect(Potion.moveSpeed).amplifier * 0.05 limit *= 1.2 } if(player.isPotionActive(Potion.jump)) { predict += player.getActivePotionEffect(Potion.jump).amplifier * 0.05 } if(player.isBlocking) predict *= 0.7 if (distanceXZ - predict > limit) { flag("speed",20,data,"AIR SPEED(speed=$distanceXZ,limit=$limit,predict=$predict)") } } // if (abs(data.motionX) > 0.42 // || abs(data.motionZ) > 0.42){ // flag("speed",30,data,"HIGH SPEED") // passed=false // } // if (player.isBlocking && (abs(data.motionX) > 0.2 || abs(data.motionZ) > 0.2)) { // flag("speed",30,data,"HIGH SPEED(BLOCKING)") //blocking is just noslow lol // passed=false // } //reduce vl if(passed){ data.vl-=1 } } private fun flag(type: String,vl: Int,data: HackerData,msg: String){ if(!data.useHacks.contains(type)) data.useHacks.add(type) //display debug message if(debugMode.get()){ chat("§f${data.player.name} §euse §2$type §7$msg §c${data.vl}+${vl}") } data.vl+=vl if(data.vl>vlValue.get()){ var use="" for(typ in data.useHacks){ use+="§a$typ§2," } use=use.substring(0,use.length-3) chat("§f${data.player.name} §eusing hack $use") data.vl=-vlValue.get() //autoreport only redesky val name=data.player.name if(report.get()&&!hackers.contains(name)){ mc.thePlayer.sendChatMessage("/reportar $name") hackers.add(name) } } } private fun checkCombatHurt(entity: Entity){ if(entity !is EntityLivingBase) return var attacker:EntityPlayer?=null var attackerCount=0 for(worldEntity in mc.theWorld.loadedEntityList){ if(worldEntity !is EntityPlayer||worldEntity.getDistanceToEntity(entity)>7||worldEntity.equals(entity)) continue attackerCount++ attacker=worldEntity } //multi attacker may cause false result if(attackerCount!=1) return if(attacker!! == entity||EntityUtils.isFriend(attacker)) return //i and my friend is hacker lol val data=datas[attacker] ?: return //reach check val reach=attacker.getDistanceToEntity(entity) if(reach>3.7){ flag("killaura",70,data,"(reach=$reach)") } //aim check val yawDiff=calculateYawDifference(attacker,entity) if(yawDiff>50){ flag("killaura",100,data,"(yawDiff=$yawDiff)") } } private fun calculateYawDifference(from: EntityLivingBase, to: EntityLivingBase): Double { val x = to.posX - from.posX val z = to.posZ - from.posZ return if (x == 0.0 && z == 0.0) { from.rotationYaw.toDouble() } else { val theta = atan2(-x, z) val yaw=Math.toDegrees((theta + 6.283185307179586) % 6.283185307179586) abs(180 - abs(abs(yaw - from.rotationYaw) - 180)); } } } class HackerData(val player:EntityPlayer){ var aliveTicks=0 // Ticks in air var airTicks = 0 // Ticks on ground var groundTicks = 0 // motion of the movement var motionX = 0.0 var motionY = 0.0 var motionZ = 0.0 var motionXZ = 0.0 // Previous motion of the movement var lastMotionX = 0.0 var lastMotionY = 0.0 var lastMotionZ = 0.0 var lastMotionXZ = 0.0 // combat check var aps = 0 var preAps = 0 var tempAps = 0 private val apsTimer=MSTimer() var vl=0 var useHacks=ArrayList<String>() fun update(){ aliveTicks++ if (apsTimer.hasTimePassed(1000)) { preAps = aps; aps = tempAps; tempAps = 0; } if(calculateGround()){ groundTicks++ airTicks=0 }else{ airTicks++ groundTicks=0 } this.lastMotionX = this.motionX this.lastMotionY = this.motionY this.lastMotionZ = this.motionZ this.lastMotionXZ = this.motionXZ this.motionX = player.posX-player.prevPosX this.motionY = player.posY-player.prevPosY this.motionZ = player.posZ-player.prevPosZ this.motionXZ = sqrt(motionX*motionX + motionZ*motionZ) } private fun calculateGround(): Boolean { val playerBoundingBox = player.entityBoundingBox val blockHeight = 1 val customBox = AxisAlignedBB(playerBoundingBox.maxX, player.posY-blockHeight, playerBoundingBox.maxZ, playerBoundingBox.minX, player.posY, playerBoundingBox.minZ) return Minecraft.getMinecraft().theWorld.checkBlockCollision(customBox) } } -
DETECT SIGMA HATARS
code below...
package net.ccbluex.liquidbounce.features.module.modules.player import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.event.PacketEvent 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.utils.EntityUtils import net.ccbluex.liquidbounce.utils.timer.MSTimer import net.ccbluex.liquidbounce.value.BoolValue import net.ccbluex.liquidbounce.value.IntegerValue import net.minecraft.client.Minecraft import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.network.play.server.S0BPacketAnimation import net.minecraft.network.play.server.S14PacketEntity import net.minecraft.network.play.server.S18PacketEntityTeleport import net.minecraft.network.play.server.S19PacketEntityStatus import net.minecraft.potion.Potion import net.minecraft.util.AxisAlignedBB import kotlin.math.abs import kotlin.math.atan2 import kotlin.math.pow import kotlin.math.sqrt @ModuleInfo(name = "HackerDetector", description = "Detect SIGMA Hackers.", category = ModuleCategory.PLAYER) class HackerDetector : Module() { private val GRAVITY_FRICTION = 0.9800000190734863 private val combatCheck=BoolValue("Combat",true) private val movementCheck=BoolValue("Movement",true) private val debugMode=BoolValue("Debug",false) private val report=BoolValue("AutoReport",true) private val vlValue=IntegerValue("VL",300,100,500) private val datas=HashMap<EntityPlayer,HackerData>() private val hackers=ArrayList<String>() // @EventTarget // fun onUpdate(event: UpdateEvent){ // //this takes a bit time so we do it async // if(movementCheck.get()) { // Thread { checkMove() }.start() // } // } @EventTarget fun onPacket(event: PacketEvent){ if(event.packet is S19PacketEntityStatus){ val packet=event.packet if(combatCheck.get()&&packet.opCode.toInt()==2){ Thread { checkCombatHurt(packet.getEntity(mc.theWorld)) }.start() } }else if(event.packet is S0BPacketAnimation){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityID) if(entity !is EntityPlayer||packet.animationType!=0) return val data=datas[entity] ?: return data.tempAps++ }else if(movementCheck.get()){ if(event.packet is S18PacketEntityTeleport){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityId) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() }else if(event.packet is S14PacketEntity){ val packet=event.packet val entity=packet.getEntity(mc.theWorld) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() } } } override fun onEnable() { datas.clear() hackers.clear() } @EventTarget fun onWorld(event: WorldEvent){ datas.clear() } fun isHacker(entity: EntityLivingBase):Boolean{ if(entity !is EntityPlayer) return false return hackers.contains(entity.name) } //onupdate // private fun checkMove(){ // for(entity in mc.theWorld.loadedEntityList){ // if(entity !is EntityPlayer) continue // checkPlayer(entity) // } // } private fun checkPlayer(player: EntityPlayer){ if(player.equals(mc.thePlayer)||EntityUtils.isFriend(player)) return if(datas[player]==null) datas[player] = HackerData(player) val data=datas[player] ?: return data.update() if(data.aliveTicks<20) return //settings var minAirTicks = 10 if(player.isPotionActive(Potion.jump)){ minAirTicks+=player.getActivePotionEffect(Potion.jump).amplifier*3 } val maxMotionY = 0.47 //for strict check u can change this to 0.42 val maxOffset = 0.07 var passed=true if(player.hurtTime>0){ //velocity if (player.hurtResistantTime in 7..11 && player.prevPosX == player.posX && player.posZ == player.lastTickPosZ && !mc.theWorld.checkBlockCollision(player.entityBoundingBox.expand(0.05, 0.0, 0.05))) { flag("velocity",50,data,"NO KNOCKBACK") } if (player.hurtResistantTime in 7..11 && player.lastTickPosY == player.posY) { flag("velocity",50,data,"NO KNOCKBACK") } return } //phase // if(mc.theWorld.checkBlockCollision(player.entityBoundingBox)){ // flag("phase",50,data,"COLLIDE") // passed=false // } //killaura from jigsaw if (data.aps >= 10) { flag("killaura",30,data,"HIGH APS(aps=${data.aps})") passed=false } if (data.aps > 2 && data.aps == data.preAps && data.aps != 0) { flag("killaura",30,data,"STRANGE APS(aps=${data.aps})") passed=false } if (abs(player.rotationYaw - player.prevRotationYaw) > 50 && player.swingProgress != 0F && data.aps >= 3) { flag("killaura",30,data,"YAW RATE(aps=${data.aps},yawRot=${abs(player.rotationYaw - player.prevRotationYaw)})") passed=false } //flight if(player.ridingEntity==null&&data.airTicks>(minAirTicks/2)){ if (abs(data.motionY - data.lastMotionY) < (if(data.airTicks >= 115){1E-3}else{5E-3})){ flag("fly",20,data,"GLIDE(diff=${abs(data.motionY - data.lastMotionY)})") passed=false } if(data.motionY > maxMotionY){ flag("fly",20,data,"YAXIS(motY=${data.motionY})") passed=false } if(data.airTicks > minAirTicks&&data.motionY>0){ flag("fly",30,data,"YAXIS(motY=${data.motionY})") passed=false } //gravity check from ACR // val gravitatedY = (data.lastMotionY - 0.08) * GRAVITY_FRICTION // val offset = abs(gravitatedY - data.motionY) // if (offset > maxOffset) { // flag("fly",15,data,"GRAVITY(offset=$offset)") // passed=false // } } //speed val distanceXZ=abs(data.motionXZ) if(data.airTicks==0){ //onGround var limit = 0.37 if(data.groundTicks < 5) limit += 0.1 if(player.isBlocking) limit *= 0.45 if(player.isSneaking) limit *= 0.68 if(player.isPotionActive(Potion.moveSpeed)){ //server will send real player potionData?i hope that limit += player.getActivePotionEffect(Potion.moveSpeed).amplifier limit *= 1.5 } if (distanceXZ > limit) { flag("speed",20,data,"GROUND SPEED(speed=$distanceXZ,limit=$limit)") } }else{ val multiplier = 0.985 var predict = 0.36 * multiplier.pow(data.airTicks + 1) if (data.airTicks >= 115) predict = 0.08.coerceAtLeast(predict); var limit=0.05 if(player.isPotionActive(Potion.moveSpeed)){ predict += player.getActivePotionEffect(Potion.moveSpeed).amplifier * 0.05 limit *= 1.2 } if(player.isPotionActive(Potion.jump)) { predict += player.getActivePotionEffect(Potion.jump).amplifier * 0.05 } if(player.isBlocking) predict *= 0.7 if (distanceXZ - predict > limit) { flag("speed",20,data,"AIR SPEED(speed=$distanceXZ,limit=$limit,predict=$predict)") } } // if (abs(data.motionX) > 0.42 // || abs(data.motionZ) > 0.42){ // flag("speed",30,data,"HIGH SPEED") // passed=false // } // if (player.isBlocking && (abs(data.motionX) > 0.2 || abs(data.motionZ) > 0.2)) { // flag("speed",30,data,"HIGH SPEED(BLOCKING)") //blocking is just noslow lol // passed=false // } //reduce vl if(passed){ data.vl-=1 } } private fun flag(type: String,vl: Int,data: HackerData,msg: String){ if(!data.useHacks.contains(type)) data.useHacks.add(type) //display debug message if(debugMode.get()){ chat("§f${data.player.name} §euse §2$type §7$msg §c${data.vl}+${vl}") } data.vl+=vl if(data.vl>vlValue.get()){ var use="" for(typ in data.useHacks){ use+="§a$typ§2," } use=use.substring(0,use.length-3) chat("§f${data.player.name} §eusing hack $use") data.vl=-vlValue.get() //autoreport only redesky val name=data.player.name if(report.get()&&!hackers.contains(name)){ mc.thePlayer.sendChatMessage("/reportar $name") hackers.add(name) } } } private fun checkCombatHurt(entity: Entity){ if(entity !is EntityLivingBase) return var attacker:EntityPlayer?=null var attackerCount=0 for(worldEntity in mc.theWorld.loadedEntityList){ if(worldEntity !is EntityPlayer||worldEntity.getDistanceToEntity(entity)>7||worldEntity.equals(entity)) continue attackerCount++ attacker=worldEntity } //multi attacker may cause false result if(attackerCount!=1) return if(attacker!! == entity||EntityUtils.isFriend(attacker)) return //i and my friend is hacker lol val data=datas[attacker] ?: return //reach check val reach=attacker.getDistanceToEntity(entity) if(reach>3.7){ flag("killaura",70,data,"(reach=$reach)") } //aim check val yawDiff=calculateYawDifference(attacker,entity) if(yawDiff>50){ flag("killaura",100,data,"(yawDiff=$yawDiff)") } } private fun calculateYawDifference(from: EntityLivingBase, to: EntityLivingBase): Double { val x = to.posX - from.posX val z = to.posZ - from.posZ return if (x == 0.0 && z == 0.0) { from.rotationYaw.toDouble() } else { val theta = atan2(-x, z) val yaw=Math.toDegrees((theta + 6.283185307179586) % 6.283185307179586) abs(180 - abs(abs(yaw - from.rotationYaw) - 180)); } } } class HackerData(val player:EntityPlayer){ var aliveTicks=0 // Ticks in air var airTicks = 0 // Ticks on ground var groundTicks = 0 // motion of the movement var motionX = 0.0 var motionY = 0.0 var motionZ = 0.0 var motionXZ = 0.0 // Previous motion of the movement var lastMotionX = 0.0 var lastMotionY = 0.0 var lastMotionZ = 0.0 var lastMotionXZ = 0.0 // combat check var aps = 0 var preAps = 0 var tempAps = 0 private val apsTimer=MSTimer() var vl=0 var useHacks=ArrayList<String>() fun update(){ aliveTicks++ if (apsTimer.hasTimePassed(1000)) { preAps = aps; aps = tempAps; tempAps = 0; } if(calculateGround()){ groundTicks++ airTicks=0 }else{ airTicks++ groundTicks=0 } this.lastMotionX = this.motionX this.lastMotionY = this.motionY this.lastMotionZ = this.motionZ this.lastMotionXZ = this.motionXZ this.motionX = player.posX-player.prevPosX this.motionY = player.posY-player.prevPosY this.motionZ = player.posZ-player.prevPosZ this.motionXZ = sqrt(motionX*motionX + motionZ*motionZ) } private fun calculateGround(): Boolean { val playerBoundingBox = player.entityBoundingBox val blockHeight = 1 val customBox = AxisAlignedBB(playerBoundingBox.maxX, player.posY-blockHeight, playerBoundingBox.maxZ, playerBoundingBox.minX, player.posY, playerBoundingBox.minZ) return Minecraft.getMinecraft().theWorld.checkBlockCollision(customBox) } }@qwq-liulihaocai YEEES SIGMA ANTICHEET NO MORA SIGMA HATARS!!
-
Hi hackerman
(i know you are hackerman feat: an fdp user) -
Hi hackerman
(i know you are hackerman feat: an fdp user)@advanced-skidder said in [Kotlin] HackerDetector:
Hi hackerman
(i know you are hackerman feat: an fdp user)you are mega retarded hackerman is dumb asf
-
@advanced-skidder said in [Kotlin] HackerDetector:
Hi hackerman
(i know you are hackerman feat: an fdp user)you are mega retarded hackerman is dumb asf
@chocopiexd

sure? -
@chocopiexd

sure?@advanced-skidder said in [Kotlin] HackerDetector:
@chocopiexd

sure?liulihaocai 100% isn't hackerman
-
Hi hackerman
(i know you are hackerman feat: an fdp user)@advanced-skidder yes thats definitely me
-
@advanced-skidder yes thats definitely me
@hackerman POG
-
HATAR DETECTOR EZ
-
DETECT SIGMA HATARS
code below...
package net.ccbluex.liquidbounce.features.module.modules.player import net.ccbluex.liquidbounce.event.EventTarget import net.ccbluex.liquidbounce.event.PacketEvent 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.utils.EntityUtils import net.ccbluex.liquidbounce.utils.timer.MSTimer import net.ccbluex.liquidbounce.value.BoolValue import net.ccbluex.liquidbounce.value.IntegerValue import net.minecraft.client.Minecraft import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.network.play.server.S0BPacketAnimation import net.minecraft.network.play.server.S14PacketEntity import net.minecraft.network.play.server.S18PacketEntityTeleport import net.minecraft.network.play.server.S19PacketEntityStatus import net.minecraft.potion.Potion import net.minecraft.util.AxisAlignedBB import kotlin.math.abs import kotlin.math.atan2 import kotlin.math.pow import kotlin.math.sqrt @ModuleInfo(name = "HackerDetector", description = "Detect SIGMA Hackers.", category = ModuleCategory.PLAYER) class HackerDetector : Module() { private val GRAVITY_FRICTION = 0.9800000190734863 private val combatCheck=BoolValue("Combat",true) private val movementCheck=BoolValue("Movement",true) private val debugMode=BoolValue("Debug",false) private val report=BoolValue("AutoReport",true) private val vlValue=IntegerValue("VL",300,100,500) private val datas=HashMap<EntityPlayer,HackerData>() private val hackers=ArrayList<String>() // @EventTarget // fun onUpdate(event: UpdateEvent){ // //this takes a bit time so we do it async // if(movementCheck.get()) { // Thread { checkMove() }.start() // } // } @EventTarget fun onPacket(event: PacketEvent){ if(event.packet is S19PacketEntityStatus){ val packet=event.packet if(combatCheck.get()&&packet.opCode.toInt()==2){ Thread { checkCombatHurt(packet.getEntity(mc.theWorld)) }.start() } }else if(event.packet is S0BPacketAnimation){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityID) if(entity !is EntityPlayer||packet.animationType!=0) return val data=datas[entity] ?: return data.tempAps++ }else if(movementCheck.get()){ if(event.packet is S18PacketEntityTeleport){ val packet=event.packet val entity=mc.theWorld.getEntityByID(packet.entityId) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() }else if(event.packet is S14PacketEntity){ val packet=event.packet val entity=packet.getEntity(mc.theWorld) if(entity !is EntityPlayer) return Thread{ checkPlayer(entity) }.start() } } } override fun onEnable() { datas.clear() hackers.clear() } @EventTarget fun onWorld(event: WorldEvent){ datas.clear() } fun isHacker(entity: EntityLivingBase):Boolean{ if(entity !is EntityPlayer) return false return hackers.contains(entity.name) } //onupdate // private fun checkMove(){ // for(entity in mc.theWorld.loadedEntityList){ // if(entity !is EntityPlayer) continue // checkPlayer(entity) // } // } private fun checkPlayer(player: EntityPlayer){ if(player.equals(mc.thePlayer)||EntityUtils.isFriend(player)) return if(datas[player]==null) datas[player] = HackerData(player) val data=datas[player] ?: return data.update() if(data.aliveTicks<20) return //settings var minAirTicks = 10 if(player.isPotionActive(Potion.jump)){ minAirTicks+=player.getActivePotionEffect(Potion.jump).amplifier*3 } val maxMotionY = 0.47 //for strict check u can change this to 0.42 val maxOffset = 0.07 var passed=true if(player.hurtTime>0){ //velocity if (player.hurtResistantTime in 7..11 && player.prevPosX == player.posX && player.posZ == player.lastTickPosZ && !mc.theWorld.checkBlockCollision(player.entityBoundingBox.expand(0.05, 0.0, 0.05))) { flag("velocity",50,data,"NO KNOCKBACK") } if (player.hurtResistantTime in 7..11 && player.lastTickPosY == player.posY) { flag("velocity",50,data,"NO KNOCKBACK") } return } //phase // if(mc.theWorld.checkBlockCollision(player.entityBoundingBox)){ // flag("phase",50,data,"COLLIDE") // passed=false // } //killaura from jigsaw if (data.aps >= 10) { flag("killaura",30,data,"HIGH APS(aps=${data.aps})") passed=false } if (data.aps > 2 && data.aps == data.preAps && data.aps != 0) { flag("killaura",30,data,"STRANGE APS(aps=${data.aps})") passed=false } if (abs(player.rotationYaw - player.prevRotationYaw) > 50 && player.swingProgress != 0F && data.aps >= 3) { flag("killaura",30,data,"YAW RATE(aps=${data.aps},yawRot=${abs(player.rotationYaw - player.prevRotationYaw)})") passed=false } //flight if(player.ridingEntity==null&&data.airTicks>(minAirTicks/2)){ if (abs(data.motionY - data.lastMotionY) < (if(data.airTicks >= 115){1E-3}else{5E-3})){ flag("fly",20,data,"GLIDE(diff=${abs(data.motionY - data.lastMotionY)})") passed=false } if(data.motionY > maxMotionY){ flag("fly",20,data,"YAXIS(motY=${data.motionY})") passed=false } if(data.airTicks > minAirTicks&&data.motionY>0){ flag("fly",30,data,"YAXIS(motY=${data.motionY})") passed=false } //gravity check from ACR // val gravitatedY = (data.lastMotionY - 0.08) * GRAVITY_FRICTION // val offset = abs(gravitatedY - data.motionY) // if (offset > maxOffset) { // flag("fly",15,data,"GRAVITY(offset=$offset)") // passed=false // } } //speed val distanceXZ=abs(data.motionXZ) if(data.airTicks==0){ //onGround var limit = 0.37 if(data.groundTicks < 5) limit += 0.1 if(player.isBlocking) limit *= 0.45 if(player.isSneaking) limit *= 0.68 if(player.isPotionActive(Potion.moveSpeed)){ //server will send real player potionData?i hope that limit += player.getActivePotionEffect(Potion.moveSpeed).amplifier limit *= 1.5 } if (distanceXZ > limit) { flag("speed",20,data,"GROUND SPEED(speed=$distanceXZ,limit=$limit)") } }else{ val multiplier = 0.985 var predict = 0.36 * multiplier.pow(data.airTicks + 1) if (data.airTicks >= 115) predict = 0.08.coerceAtLeast(predict); var limit=0.05 if(player.isPotionActive(Potion.moveSpeed)){ predict += player.getActivePotionEffect(Potion.moveSpeed).amplifier * 0.05 limit *= 1.2 } if(player.isPotionActive(Potion.jump)) { predict += player.getActivePotionEffect(Potion.jump).amplifier * 0.05 } if(player.isBlocking) predict *= 0.7 if (distanceXZ - predict > limit) { flag("speed",20,data,"AIR SPEED(speed=$distanceXZ,limit=$limit,predict=$predict)") } } // if (abs(data.motionX) > 0.42 // || abs(data.motionZ) > 0.42){ // flag("speed",30,data,"HIGH SPEED") // passed=false // } // if (player.isBlocking && (abs(data.motionX) > 0.2 || abs(data.motionZ) > 0.2)) { // flag("speed",30,data,"HIGH SPEED(BLOCKING)") //blocking is just noslow lol // passed=false // } //reduce vl if(passed){ data.vl-=1 } } private fun flag(type: String,vl: Int,data: HackerData,msg: String){ if(!data.useHacks.contains(type)) data.useHacks.add(type) //display debug message if(debugMode.get()){ chat("§f${data.player.name} §euse §2$type §7$msg §c${data.vl}+${vl}") } data.vl+=vl if(data.vl>vlValue.get()){ var use="" for(typ in data.useHacks){ use+="§a$typ§2," } use=use.substring(0,use.length-3) chat("§f${data.player.name} §eusing hack $use") data.vl=-vlValue.get() //autoreport only redesky val name=data.player.name if(report.get()&&!hackers.contains(name)){ mc.thePlayer.sendChatMessage("/reportar $name") hackers.add(name) } } } private fun checkCombatHurt(entity: Entity){ if(entity !is EntityLivingBase) return var attacker:EntityPlayer?=null var attackerCount=0 for(worldEntity in mc.theWorld.loadedEntityList){ if(worldEntity !is EntityPlayer||worldEntity.getDistanceToEntity(entity)>7||worldEntity.equals(entity)) continue attackerCount++ attacker=worldEntity } //multi attacker may cause false result if(attackerCount!=1) return if(attacker!! == entity||EntityUtils.isFriend(attacker)) return //i and my friend is hacker lol val data=datas[attacker] ?: return //reach check val reach=attacker.getDistanceToEntity(entity) if(reach>3.7){ flag("killaura",70,data,"(reach=$reach)") } //aim check val yawDiff=calculateYawDifference(attacker,entity) if(yawDiff>50){ flag("killaura",100,data,"(yawDiff=$yawDiff)") } } private fun calculateYawDifference(from: EntityLivingBase, to: EntityLivingBase): Double { val x = to.posX - from.posX val z = to.posZ - from.posZ return if (x == 0.0 && z == 0.0) { from.rotationYaw.toDouble() } else { val theta = atan2(-x, z) val yaw=Math.toDegrees((theta + 6.283185307179586) % 6.283185307179586) abs(180 - abs(abs(yaw - from.rotationYaw) - 180)); } } } class HackerData(val player:EntityPlayer){ var aliveTicks=0 // Ticks in air var airTicks = 0 // Ticks on ground var groundTicks = 0 // motion of the movement var motionX = 0.0 var motionY = 0.0 var motionZ = 0.0 var motionXZ = 0.0 // Previous motion of the movement var lastMotionX = 0.0 var lastMotionY = 0.0 var lastMotionZ = 0.0 var lastMotionXZ = 0.0 // combat check var aps = 0 var preAps = 0 var tempAps = 0 private val apsTimer=MSTimer() var vl=0 var useHacks=ArrayList<String>() fun update(){ aliveTicks++ if (apsTimer.hasTimePassed(1000)) { preAps = aps; aps = tempAps; tempAps = 0; } if(calculateGround()){ groundTicks++ airTicks=0 }else{ airTicks++ groundTicks=0 } this.lastMotionX = this.motionX this.lastMotionY = this.motionY this.lastMotionZ = this.motionZ this.lastMotionXZ = this.motionXZ this.motionX = player.posX-player.prevPosX this.motionY = player.posY-player.prevPosY this.motionZ = player.posZ-player.prevPosZ this.motionXZ = sqrt(motionX*motionX + motionZ*motionZ) } private fun calculateGround(): Boolean { val playerBoundingBox = player.entityBoundingBox val blockHeight = 1 val customBox = AxisAlignedBB(playerBoundingBox.maxX, player.posY-blockHeight, playerBoundingBox.maxZ, playerBoundingBox.minX, player.posY, playerBoundingBox.minZ) return Minecraft.getMinecraft().theWorld.checkBlockCollision(customBox) } }@qwq-liulihaocai YES ANTIHATAR RELEASED OMG
-
@qwq-liulihaocai YES ANTIHATAR RELEASED OMG
@ender1355 no
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login