Skip to content

Commit

Permalink
Use minecraft render system (#1142)
Browse files Browse the repository at this point in the history
Rewrite all render-related modules that made use of our own Render Engine to use the Minecraft Render System.

Added RenderShortcuts.kt file containing various rendering functions to simplify the process. The file includes functions to create a RenderEnvironment and modify it with withPosition and withColor functions. The RenderEnvironment can then be used to draw lines, boxes, outlined boxes, and solid boxes using the provided functions.

**Rewritten:**
- KillAura
- ESP
- BlockESP
- StorageESP
- HoleESP
- ItemESP
- Blink
- Tracers
- Breadcrumbs
- AutoDodge
- Rotations

**WIP:**
- Trajectories (Needs more work)
- NameTags (Disabled for now)

fixes #668
  • Loading branch information
1zun4 committed Jul 12, 2023
1 parent eebf273 commit e99c92a
Show file tree
Hide file tree
Showing 29 changed files with 730 additions and 482 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import net.ccbluex.liquidbounce.event.EventManager;
import net.ccbluex.liquidbounce.event.GameRenderEvent;
import net.ccbluex.liquidbounce.event.ScreenRenderEvent;
import net.ccbluex.liquidbounce.event.WorldRenderEvent;
import net.ccbluex.liquidbounce.features.module.modules.fun.ModuleDankBobbing;
import net.ccbluex.liquidbounce.features.module.modules.player.ModuleReach;
import net.ccbluex.liquidbounce.features.module.modules.render.ModuleFreeCam;
Expand All @@ -41,6 +42,7 @@
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import org.joml.Vector3f;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand Down Expand Up @@ -78,6 +80,18 @@ public void hookGameRender(CallbackInfo callbackInfo) {
EventManager.INSTANCE.callEvent(new GameRenderEvent());
}

/**
* Hook world render event
*/
@Inject(method = "renderWorld", at = @At(value = "FIELD",
target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z",
opcode = Opcodes.GETFIELD,
ordinal = 0))
public void hookWorldRender(float partialTicks, long finishTimeNano, MatrixStack matrixStack,
final CallbackInfo callbackInfo) {
EventManager.INSTANCE.callEvent(new WorldRenderEvent(matrixStack, partialTicks));
}

/**
* Hook screen render event
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ object EventManager {
ChunkUnloadEvent::class,
WorldDisconnectEvent::class,
GameRenderEvent::class,
WorldRenderEvent::class,
EngineRenderEvent::class,
OverlayRenderEvent::class,
ScreenRenderEvent::class,
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/net/ccbluex/liquidbounce/event/Events.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.screen.Screen
import net.minecraft.client.option.KeyBinding
import net.minecraft.client.util.InputUtil
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.entity.Entity
import net.minecraft.entity.MovementType
import net.minecraft.network.packet.Packet
Expand Down Expand Up @@ -58,6 +59,9 @@ class WorldDisconnectEvent : Event()
@Nameable("gameRender")
class GameRenderEvent : Event()

@Nameable("worldRender")
class WorldRenderEvent(val matrixStack: MatrixStack, val partialTicks: Float) : Event()

@Nameable("engineRender")
class EngineRenderEvent(val tickDelta: Float) : Event()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ object ModuleManager : Listenable, Iterable<Module> by modules {
ModuleItemESP,
ModuleMobOwners,
ModuleMurderMystery,
ModuleNametags,
// ModuleNametags,
ModuleNoBob,
ModuleNoFov,
ModuleNoHurtCam,
Expand All @@ -188,7 +188,7 @@ object ModuleManager : Listenable, Iterable<Module> by modules {
ModuleQuickPerspectiveSwap,
ModuleRotations,
ModuleStorageESP,
ModuleTraces,
ModuleTracers,
ModuleTrajectories,
ModuleTrueSight,
ModuleXRay,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,9 @@ import net.ccbluex.liquidbounce.event.*
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.features.module.modules.combat.ModuleKillAura.RaycastMode.*
import net.ccbluex.liquidbounce.render.*
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.aiming.*
import net.ccbluex.liquidbounce.utils.client.MC_1_8
Expand All @@ -43,8 +39,6 @@ import net.ccbluex.liquidbounce.utils.combat.findEnemy
import net.ccbluex.liquidbounce.utils.combat.shouldBeAttacked
import net.ccbluex.liquidbounce.utils.entity.*
import net.ccbluex.liquidbounce.utils.item.openInventorySilently
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedOutlineRenderTask
import net.ccbluex.liquidbounce.utils.render.espBoxInstancedRenderTask
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
import net.minecraft.client.gui.screen.ingame.InventoryScreen
import net.minecraft.enchantment.EnchantmentHelper
Expand Down Expand Up @@ -185,56 +179,45 @@ object ModuleKillAura : Module("KillAura", Category.COMBAT) {
failedHits.clear()
}

private var failedHits: ArrayList<MutablePair<Vec3d, Long>> = arrayListOf()
private var failedHits = arrayListOf<MutablePair<Vec3d, Long>>()

val renderHandler = handler<WorldRenderEvent> { event ->
val matrixStack = event.matrixStack

val renderHandler = handler<EngineRenderEvent> { event ->
if (failedHits.isEmpty() || (!NotifyWhenFail.enabled || !NotifyWhenFail.Box.isActive)) {
failedHits.clear()
return@handler
}

failedHits.forEach { it.setRight(it.getRight() + 1) }

failedHits = failedHits.filter { it.right <= boxFadeSeconds } as ArrayList<MutablePair<Vec3d, Long>>

val box = drawBoxNew(Box(0.0, 0.0, 0.0, 0.05, 0.05, 0.05), Color4b.WHITE)

val boxOutline = drawBoxOutlineNew(Box(0.0, 0.0, 0.0, 0.05, 0.05, 0.05), Color4b.WHITE)

val base = if (NotifyWhenFail.Box.colorRainbow) rainbow() else NotifyWhenFail.Box.color

val markedBlocks = failedHits

val instanceBuffer = PositionColorVertexFormat()
val instanceBufferOutline = PositionColorVertexFormat()
val base = if (NotifyWhenFail.Box.colorRainbow) rainbow() else NotifyWhenFail.Box.color

instanceBuffer.initBuffer(markedBlocks.size)
instanceBufferOutline.initBuffer(markedBlocks.size)
val box = Box(0.0, 0.0, 0.0, 0.05, 0.05, 0.05)

for ((pos, opacity) in markedBlocks) {
val pos3 = Vec3(pos.x, pos.y, pos.z)
renderEnvironment(matrixStack) {
for ((pos, opacity) in markedBlocks) {
val vec3 = Vec3(pos)

val fade = (255 + (0 - 255) * opacity.toDouble() / boxFadeSeconds.toDouble()).toInt()
val fade = (255 + (0 - 255) * opacity.toDouble() / boxFadeSeconds.toDouble()).toInt()

val baseColor = Color4b(base.r, base.g, base.b, fade)
val outlineColor = Color4b(base.r, base.g, base.b, fade)
val baseColor = base.alpha(fade)
val outlineColor = base.alpha(fade)

instanceBuffer.putVertex {
this.position = pos3; this.color = baseColor
}
withPosition(vec3) {
withColor(baseColor) {
drawSolidBox(box)
}

instanceBufferOutline.putVertex {
this.position = pos3; this.color = outlineColor
withColor(outlineColor) {
drawOutlinedBox(box)
}
}
}
}

RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER, espBoxInstancedRenderTask(instanceBuffer, box.first, box.second)
)
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER,
espBoxInstancedOutlineRenderTask(instanceBufferOutline, boxOutline.first, boxOutline.second)
)
}

val rotationUpdateHandler = handler<PlayerNetworkMovementTickEvent> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@

package net.ccbluex.liquidbounce.features.module.modules.movement

import net.ccbluex.liquidbounce.event.EngineRenderEvent
import net.ccbluex.liquidbounce.event.MovementInputEvent
import net.ccbluex.liquidbounce.event.WorldRenderEvent
import net.ccbluex.liquidbounce.event.handler
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.render.engine.*
import net.ccbluex.liquidbounce.render.engine.memory.PositionColorVertexFormat
import net.ccbluex.liquidbounce.render.engine.memory.putVertex
import net.ccbluex.liquidbounce.render.shaders.SmoothLineShader
import net.ccbluex.liquidbounce.render.drawLineStrip
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.render.engine.Vec3
import net.ccbluex.liquidbounce.render.renderEnvironment
import net.ccbluex.liquidbounce.render.withColor
import net.ccbluex.liquidbounce.utils.entity.SimulatedArrow
import net.ccbluex.liquidbounce.utils.entity.SimulatedPlayer
import net.ccbluex.liquidbounce.utils.extensions.toDegrees
Expand Down Expand Up @@ -134,13 +135,9 @@ object ModuleAutoDodge : Module("AutoDodge", Category.COMBAT) {
}

val lastPos = arrow.pos
val hitResult = arrow.tick()

val a = arrow.tick()

// if (a != null)
// println()

// positions.addAll(listOf(arrow.pos.x, arrow.pos.y, arrow.pos.z))
positions.addAll(listOf(arrow.pos.x, arrow.pos.y, arrow.pos.z))

val playerHitBox = Box(-0.3, 0.0, -0.3, 0.3, 1.8, 0.3).expand(0.3).offset(simulatedPlayer.pos)

Expand All @@ -157,25 +154,21 @@ object ModuleAutoDodge : Module("AutoDodge", Category.COMBAT) {

data class HitInfo(val hitPos: Vec3d, val prevArrowPos: Vec3d, val arrowVelocity: Vec3d)

private val onEngineRender = handler<EngineRenderEvent> { event ->
synchronized(positions) {
val vertexFormat = PositionColorVertexFormat()

vertexFormat.initBuffer(this.positions.size)
// todo: fix when multiple arrows are shot, it will show odd lines
private val renderHandler = handler<WorldRenderEvent> { event ->
val matrixStack = event.matrixStack

synchronized(positions) {
val lines = mutableListOf<Vec3>()
for (i in 0 until positions.size / 3) {
vertexFormat.putVertex {
this.position = Vec3(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2])
this.color = Color4b.WHITE
}
lines += Vec3(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2])
}

val renderTask = VertexFormatRenderTask(vertexFormat, PrimitiveType.LineStrip, SmoothLineShader, state = GlRenderState(lineWidth = 2.0f, lineSmooth = true), shaderData = SmoothLineShader.SmoothLineShaderUniforms(2.0f))

RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER_WITHOUT_BOBBING,
renderTask
)
renderEnvironment(matrixStack) {
withColor(Color4b.WHITE) {
drawLineStrip(*lines.toTypedArray())
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ import net.ccbluex.liquidbounce.event.*
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.Module
import net.ccbluex.liquidbounce.features.module.modules.combat.ModuleBadWifi
import net.ccbluex.liquidbounce.features.module.modules.render.ModuleBreadcrumbs
import net.ccbluex.liquidbounce.features.module.modules.render.ModuleBreadcrumbs.makeLines
import net.ccbluex.liquidbounce.render.drawLineStrip
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.render.engine.RenderEngine
import net.ccbluex.liquidbounce.render.renderEnvironment
import net.ccbluex.liquidbounce.render.utils.rainbow
import net.ccbluex.liquidbounce.utils.client.chat
import net.ccbluex.liquidbounce.render.withColor
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
Expand Down Expand Up @@ -106,15 +106,17 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {
positionPackets.set(0)
}

val renderHandler = handler<EngineRenderEvent> {
val renderHandler = handler<WorldRenderEvent> { event ->
val matrixStack = event.matrixStack
val color = if (BreadcrumbsOption.breadcrumbsrainbow) rainbow() else BreadcrumbsOption.breadcrumbscolor

synchronized(positions) {
if (BreadcrumbsOption.enabled) {
RenderEngine.enqueueForRendering(
RenderEngine.CAMERA_VIEW_LAYER,
ModuleBreadcrumbs.createBreadcrumbsRenderTask(color, positions, it.tickDelta)
)
renderEnvironment(matrixStack) {
withColor(color) {
drawLineStrip(*makeLines(color, positions, event.partialTicks))
}
}
}
}
}
Expand All @@ -124,10 +126,7 @@ object ModuleBlink : Module("Blink", Category.PLAYER) {
return
}

chat(regular(positionPackets.toString()))

blink()

removeClone()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ object ModuleChestStealer : Module("ChestStealer", Category.PLAYER) {
private var lastSlot = 0
private val timer = Chronometer()

val repeatable = handler<GameRenderEvent> {
val repeatable = handler<WorldRenderEvent> {
if (!timer.hasElapsed()) {
return@handler
}
Expand Down
Loading

0 comments on commit e99c92a

Please sign in to comment.