Skip to content

Commit

Permalink
Fixed Blink module issues. (CCBlueX#776)
Browse files Browse the repository at this point in the history
* Fixed Blink module issues.

* Add the priority parameter back

* Fixed ESP module interpolation not being smooth.

* Fixed ESP color modes having wrong mode parent
  • Loading branch information
mems01 authored Jul 1, 2022
1 parent 4200cff commit 554148d
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ import net.ccbluex.liquidbounce.render.utils.rainbow
import net.ccbluex.liquidbounce.utils.client.chat
import net.ccbluex.liquidbounce.utils.client.notification
import net.ccbluex.liquidbounce.utils.client.regular
import net.ccbluex.liquidbounce.utils.math.times
import net.minecraft.client.network.OtherClientPlayerEntity
import net.minecraft.entity.Entity
import net.minecraft.network.Packet
import net.minecraft.network.packet.c2s.play.*
import net.minecraft.util.math.Vec3d
import java.util.*
import java.util.concurrent.LinkedBlockingQueue
import java.util.concurrent.atomic.AtomicInteger

Expand All @@ -46,10 +48,12 @@ import java.util.concurrent.atomic.AtomicInteger
*/

object ModuleBlink : Module("Blink", Category.PLAYER) {
private val pulse by boolean("Pulse", false)
private object Pulse : ToggleableConfigurable(this, "Pulse", false) {
val delay by int("Delay", 20, 10..100)
}

private val dummy by boolean("Dummy", false)
private val ambush by boolean("Ambush", false)
private val delay by int("Delay", 20, 10..100)

private object BreadcrumbsOption : ToggleableConfigurable(this, "Breadcrumbs", false) {
val breadcrumbscolor by color("BreadcrumbsColor", Color4b(255, 179, 72, 255))
Expand All @@ -62,32 +66,39 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {

private val packets = LinkedBlockingQueue<Packet<*>>()
private var startPos: Vec3d? = null
private var fakeplayer: OtherClientPlayerEntity? = null
private var fakePlayer: OtherClientPlayerEntity? = null
private var disablelogger = false
private val positions = mutableListOf<Double>()

private var positionPackets = AtomicInteger(0)

init {
tree(Pulse)
tree(BreadcrumbsOption)
tree(AutoResetOption)
}

override fun enable() {
if (ModuleBadWifi.enabled) {
this.enabled = false
enabled = false // Doesn't disable the module for some reason

notification("Compatibility error", "Blink is incompatible with BadWIFI", NotificationEvent.Severity.ERROR)
return
}

if (!pulse && dummy) {
val faker = OtherClientPlayerEntity(world, player.gameProfile)
if (!Pulse.enabled && dummy) {
val clone = OtherClientPlayerEntity(world, player.gameProfile)

faker.headYaw = player.headYaw
faker.copyPositionAndRotation(player)
world.addEntity(faker.id, faker)
clone.headYaw = player.headYaw
clone.copyPositionAndRotation(player)
/**
* A different UUID has to be set, to avoid [fakePlayer] from being invisible to [player]
* @see net.minecraft.world.entity.EntityIndex.add
*/
clone.uuid = UUID.randomUUID()
world.addEntity(clone.id, clone)

fakeplayer = faker
fakePlayer = clone
}

startPos = player.pos
Expand All @@ -102,7 +113,7 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {
if (BreadcrumbsOption.enabled) {
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER,
ModuleBreadcrumbs.createBreadcrumbsRenderTask(color, this.positions, it.tickDelta)
ModuleBreadcrumbs.createBreadcrumbsRenderTask(color, positions, it.tickDelta)
)
}
}
Expand All @@ -117,52 +128,48 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {

blink()

removeFakePlayer()
removeClone()
}

private fun removeFakePlayer() {
val faker = this.fakeplayer
private fun removeClone() {
val clone = fakePlayer ?: return

if (faker != null) {
world.removeEntity(faker.id, Entity.RemovalReason.UNLOADED_TO_CHUNK)

this.fakeplayer = null
}
world.removeEntity(clone.id, Entity.RemovalReason.DISCARDED)
fakePlayer = null
}

val packetHandler = handler<PacketEvent>(priority = -1) { event ->
if (mc.player == null || disablelogger || event.origin != TransferOrigin.SEND) {
return@handler
}

if (ambush && event.packet is PlayerInteractEntityC2SPacket) {
val packet = event.packet

if (ambush && packet is PlayerInteractEntityC2SPacket) {
enabled = false

return@handler
}

if (event.packet is PlayerMoveC2SPacket || event.packet is PlayerInteractBlockC2SPacket ||
event.packet is HandSwingC2SPacket ||
event.packet is PlayerActionC2SPacket || event.packet is PlayerInteractEntityC2SPacket
) {
if (event.packet is PlayerMoveC2SPacket && !event.packet.changePosition) {
if (packet is PlayerMoveC2SPacket || packet is PlayerInteractBlockC2SPacket || packet is HandSwingC2SPacket || packet is PlayerActionC2SPacket || packet is PlayerInteractEntityC2SPacket) {
if (packet is PlayerMoveC2SPacket && !packet.changePosition) {
return@handler
}

if (event.packet is PlayerMoveC2SPacket) {
if (packet is PlayerMoveC2SPacket) {
positionPackets.getAndIncrement()
synchronized(positions) { positions.addAll(listOf(event.packet.x, event.packet.y, event.packet.z)) }
synchronized(positions) { positions.addAll(listOf(packet.x, packet.y, packet.z)) }
}

event.cancelEvent()

packets.add(event.packet)
packets.add(packet)
}
}

val repeatable = repeatable {
if (pulse) {
wait(delay)
if (Pulse.enabled) {
wait(Pulse.delay)
blink()
}
}
Expand Down Expand Up @@ -196,13 +203,13 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {
}

private fun reset() {
this.packets.clear()
packets.clear()
synchronized(positions) { positions.clear() }
positionPackets.set(0)

val start = startPos!!
val start = startPos ?: return

player.setPos(start.x, start.y, start.z)
player.setPosition(start)

player.prevX = start.x
player.prevY = start.y
Expand All @@ -211,7 +218,7 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {
player.lastRenderY = start.y
player.lastRenderZ = start.z

player.setVelocity(0.0, 0.0, 0.0)
player.velocity.times(0.0)

player.updatePositionAndAngles(start.x, start.y, start.z, player.yaw, player.pitch)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ object ModuleBreadcrumbs : Module("Breadcrumbs", Category.RENDER) {
internal fun createBreadcrumbsRenderTask(color: Color4b, positions: List<Double>, tickDelta: Float): RenderTask {
val vertexFormat = PositionColorVertexFormat()

vertexFormat.initBuffer(this.positions.size + 1)
vertexFormat.initBuffer(positions.size + 2)

for (i in 0 until positions.size / 3) {
vertexFormat.putVertex {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.render.engine.RenderEngine
import net.ccbluex.liquidbounce.render.engine.Vec3
import net.ccbluex.liquidbounce.render.engine.memory.PositionColorVertexFormat
import net.ccbluex.liquidbounce.render.engine.memory.putVertex
import net.ccbluex.liquidbounce.render.utils.ColorUtils
import net.ccbluex.liquidbounce.render.utils.drawBoxNew
import net.ccbluex.liquidbounce.render.utils.drawBoxOutlineNew
import net.ccbluex.liquidbounce.render.utils.rainbow
import net.ccbluex.liquidbounce.utils.combat.shouldBeShown
import net.ccbluex.liquidbounce.utils.entity.interpolateCurrentPosition
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedOutlineRenderTask
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedRenderTask
import net.minecraft.entity.Entity
Expand All @@ -56,19 +56,18 @@ object ModuleESP : Module("ESP", Category.RENDER) {

private val modes = choices("Mode", OutlineMode, arrayOf(OutlineMode, BoxMode))

private val colorMods = choices("ColorMode", ColorMode, arrayOf(ColorMode, RainbowMode))

private object ColorMode : Choice("Static") {
private val colorModes = choices("ColorMode", StaticMode, arrayOf(StaticMode, RainbowMode))

private object StaticMode : Choice("Static") {
override val parent: ChoiceConfigurable
get() = modes
get() = colorModes

val color by color("Color", Color4b.WHITE)
}

private object RainbowMode : Choice("Rainbow") {
override val parent: ChoiceConfigurable
get() = modes
get() = colorModes
}

val teamColor by boolean("TeamColor", true)
Expand All @@ -89,12 +88,7 @@ object ModuleESP : Module("ESP", Category.RENDER) {
val d = dimensions.width.toDouble() / 2.0

Box(
-d,
0.0,
-d,
d,
dimensions.height.toDouble(),
d
-d, 0.0, -d, d, dimensions.height.toDouble(), d
)
}

Expand All @@ -106,11 +100,7 @@ object ModuleESP : Module("ESP", Category.RENDER) {
val outlineInstanceBuffer = PositionColorVertexFormat().apply { initBuffer(it.value.size) }

for (entity in it.value) {
val pos = Vec3(
entity.x + (entity.x - entity.lastRenderX) * event.tickDelta,
entity.y + (entity.y - entity.lastRenderY) * event.tickDelta,
entity.z + (entity.z - entity.lastRenderZ) * event.tickDelta
)
val pos = entity.interpolateCurrentPosition(event.tickDelta)

val color = getColor(entity) ?: base

Expand All @@ -121,8 +111,14 @@ object ModuleESP : Module("ESP", Category.RENDER) {
outlineInstanceBuffer.putVertex { this.position = pos; this.color = outlineColor }
}

RenderEngine.enqueueForRendering(RenderEngine.CAMERA_VIEW_LAYER_WITHOUT_BOBBING, espBoxInstancedRenderTask(instanceBuffer, box.first, box.second))
RenderEngine.enqueueForRendering(RenderEngine.CAMERA_VIEW_LAYER_WITHOUT_BOBBING, espBoxInstancedOutlineRenderTask(outlineInstanceBuffer, boxOutline.first, boxOutline.second))
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER_WITHOUT_BOBBING,
espBoxInstancedRenderTask(instanceBuffer, box.first, box.second)
)
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER_WITHOUT_BOBBING,
espBoxInstancedOutlineRenderTask(outlineInstanceBuffer, boxOutline.first, boxOutline.second)
)
}
}

Expand All @@ -136,7 +132,7 @@ object ModuleESP : Module("ESP", Category.RENDER) {
}

fun getBaseColor(): Color4b {
return if (RainbowMode.isActive) rainbow() else ColorMode.color
return if (RainbowMode.isActive) rainbow() else StaticMode.color
}

fun getColor(entity: Entity): Color4b? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.render.engine.RenderEngine
import net.ccbluex.liquidbounce.render.engine.Vec3
import net.ccbluex.liquidbounce.render.engine.memory.PositionColorVertexFormat
import net.ccbluex.liquidbounce.render.engine.memory.putVertex
import net.ccbluex.liquidbounce.render.utils.drawBoxNew
import net.ccbluex.liquidbounce.render.utils.drawBoxOutlineNew
import net.ccbluex.liquidbounce.render.utils.rainbow
import net.ccbluex.liquidbounce.utils.entity.interpolateCurrentPosition
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedOutlineRenderTask
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedRenderTask
import net.minecraft.entity.ItemEntity
Expand Down Expand Up @@ -77,19 +77,14 @@ object ModuleItemESP : Module("ItemESP", Category.RENDER) {
instanceBufferOutline.initBuffer(filtered.size)

for (entity in filtered) {
val pos = Vec3(
entity.lastRenderX + (entity.x - entity.lastRenderX) * event.tickDelta,
entity.lastRenderY + (entity.y - entity.lastRenderY) * event.tickDelta,
entity.lastRenderZ + (entity.z - entity.lastRenderZ) * event.tickDelta
)
val pos = entity.interpolateCurrentPosition(event.tickDelta)

instanceBuffer.putVertex { this.position = pos; this.color = baseColor }
instanceBufferOutline.putVertex { this.position = pos; this.color = outlineColor }
}

RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER,
espBoxInstancedRenderTask(instanceBuffer, box.first, box.second)
RenderEngine.CAMERA_VIEW_LAYER, espBoxInstancedRenderTask(instanceBuffer, box.first, box.second)
)
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import net.ccbluex.liquidbounce.render.engine.memory.putVertex
import net.ccbluex.liquidbounce.render.shaders.ColoredPrimitiveShader
import net.ccbluex.liquidbounce.render.utils.rainbow
import net.ccbluex.liquidbounce.utils.combat.shouldBeShown
import net.ccbluex.liquidbounce.utils.entity.interpolateCurrentPosition
import net.minecraft.entity.Entity
import net.minecraft.entity.player.PlayerEntity
import java.awt.Color
Expand All @@ -46,15 +47,7 @@ import kotlin.math.sqrt

object ModuleTraces : Module("Traces", Category.RENDER) {

private val modes = choices(
"ColorMode",
DistanceColor,
arrayOf(
DistanceColor,
StaticColor,
RainbowColor
)
)
private val modes = choices("ColorMode", DistanceColor, arrayOf(DistanceColor, StaticColor, RainbowColor))

private object DistanceColor : Choice("Distance") {

Expand All @@ -79,6 +72,8 @@ object ModuleTraces : Module("Traces", Category.RENDER) {
}

val renderHandler = handler<EngineRenderEvent> { event ->
val player = mc.player ?: return@handler

val useDistanceColor = DistanceColor.isActive

val baseColor = when {
Expand All @@ -91,7 +86,6 @@ object ModuleTraces : Module("Traces", Category.RENDER) {
(if (DistanceColor.useViewDistance) mc.options.viewDistance.toFloat() else DistanceColor.customViewDistance) * 16 * sqrt(
2.0
)
val player = mc.player!!
val filteredEntities = world.entities.filter(this::shouldRenderTrace)
val camera = mc.gameRenderer.camera

Expand All @@ -114,24 +108,20 @@ object ModuleTraces : Module("Traces", Category.RENDER) {
val color = if (useDistanceColor) {
Color4b(
Color.getHSBColor(
(dist.coerceAtMost(viewDistance) / viewDistance).toFloat() * (120.0f / 360.0f),
1.0f,
1.0f
(dist.coerceAtMost(viewDistance) / viewDistance).toFloat() * (120.0f / 360.0f), 1.0f, 1.0f
)
)
} else if (entity is PlayerEntity && FriendManager.isFriend(entity.toString())) {
Color4b(0, 0, 255)
} else {
baseColor!!
baseColor ?: return@handler
}

val x = (entity.lastRenderX + (entity.x - entity.lastRenderX) * event.tickDelta)
val y = (entity.lastRenderY + (entity.y - entity.lastRenderY) * event.tickDelta)
val z = (entity.lastRenderZ + (entity.z - entity.lastRenderZ) * event.tickDelta)
val pos = entity.interpolateCurrentPosition(event.tickDelta)

val v0 = vertexFormat.putVertex { this.position = eyeVector; this.color = color }
val v1 = vertexFormat.putVertex { this.position = Vec3(x, y, z); this.color = color }
val v2 = vertexFormat.putVertex { this.position = Vec3(x, y + entity.height, z); this.color = color }
val v1 = vertexFormat.putVertex { this.position = pos; this.color = color }
val v2 = vertexFormat.putVertex { this.position = pos.add(Vec3(0f, entity.height, 0f)); this.color = color }

indexBuffer.index(v0)
indexBuffer.index(v1)
Expand Down

0 comments on commit 554148d

Please sign in to comment.