From fc676845518ed2d4039a256a8483c688023d05d7 Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 23 Dec 2024 00:37:16 +0800 Subject: [PATCH] feat(TargetRenderer): Ghost mode (#4976) --- .../utils/entity/EntityExtensions.kt | 2 + .../utils/render/TargetRenderer.kt | 144 +++++++++++++++++- .../resources/assets/liquidbounce/glow.png | Bin 0 -> 31853 bytes 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/liquidbounce/glow.png diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/EntityExtensions.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/EntityExtensions.kt index 0160ff9c58e..f2df9d3da47 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/EntityExtensions.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/EntityExtensions.kt @@ -134,6 +134,8 @@ val ClientPlayerEntity.directionYaw: Float val ClientPlayerEntity.isBlockAction: Boolean get() = isUsingItem && activeItem.useAction == UseAction.BLOCK +fun Entity.lastRenderPos() = Vec3d(this.lastRenderX, this.lastRenderY, this.lastRenderZ) + /** * Check if the player can step up by [height] blocks. * diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/render/TargetRenderer.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/render/TargetRenderer.kt index 442241cbeb9..3bb84fcdc78 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/render/TargetRenderer.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/render/TargetRenderer.kt @@ -18,6 +18,8 @@ */ package net.ccbluex.liquidbounce.utils.render +import com.mojang.blaze3d.platform.GlStateManager +import com.mojang.blaze3d.systems.RenderSystem import net.ccbluex.liquidbounce.config.types.Choice import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable import net.ccbluex.liquidbounce.config.types.ToggleableConfigurable @@ -27,18 +29,26 @@ import net.ccbluex.liquidbounce.render.engine.Color4b import net.ccbluex.liquidbounce.render.engine.Vec3 import net.ccbluex.liquidbounce.utils.entity.box import net.ccbluex.liquidbounce.utils.entity.interpolateCurrentPosition +import net.ccbluex.liquidbounce.utils.entity.lastRenderPos import net.ccbluex.liquidbounce.utils.math.plus import net.ccbluex.liquidbounce.utils.render.WorldToScreen.calculateScreenPos import net.minecraft.client.render.GameRenderer import net.minecraft.client.render.VertexFormat import net.minecraft.client.render.VertexFormats +import net.minecraft.client.util.math.MatrixStack import net.minecraft.entity.Entity import net.minecraft.entity.LivingEntity +import net.minecraft.util.Identifier import net.minecraft.util.math.Box +import net.minecraft.util.math.MathHelper +import net.minecraft.util.math.RotationAxis import net.minecraft.util.math.Vec3d +import java.awt.Color +import kotlin.math.cos import kotlin.math.min import kotlin.math.sin + /** * A target tracker to choose the best enemy to attack */ @@ -68,15 +78,147 @@ class WorldTargetRenderer(module: ClientModule) : TargetRenderer( module, "Mode", { glowingCircle }, - { arrayOf(legacy, circle, glowingCircle) } + { arrayOf(legacy, circle, glowingCircle, ghost) } ) + inner class Ghost : WorldTargetRenderAppearance("Ghost") { + + private val glow = Identifier.of("liquidbounce", "glow.png") + + private var lastTime = System.currentTimeMillis() + + override val parent: ChoiceConfigurable<*> + get() = appearance + + private val color by color("Color", Color4b(Color.BLUE.rgb, true)) + private var size by float("Size", 0.5f, 0.4f..0.7f) + private var length by int("Length", 25, 15..40) + + override fun render(env: WorldRenderEnvironment, entity: Entity, partialTicks: Float) { + RenderSystem.depthMask(false) + mc.gameRenderer.lightmapTextureManager.disable() + RenderSystem.blendFuncSeparate( + GlStateManager.SrcFactor.SRC_ALPHA, + GlStateManager.DstFactor.ONE, + GlStateManager.SrcFactor.ZERO, + GlStateManager.DstFactor.ONE + ) + env.matrixStack.push() + + + with(mc.gameRenderer.camera.pos) { + env.matrixStack.translate(-this.x, -this.y, -this.z) + } + + val interpolated = entity.pos.interpolate(entity.lastRenderPos(), partialTicks.toDouble()) + .add(0.0, 0.75, 0.0) + + with(interpolated) { + env.matrixStack.translate( + this.x + 0.2f, + this.y + 0.5f, + this.z + ) + } + + RenderSystem.setShaderTexture(0, glow) + + with(env) { + drawParticle( + { sin, cos -> translate(sin, cos, -cos) }, + { sin, cos -> translate(-sin, -cos, cos) } + ) + + drawParticle( + { sin, cos -> translate(-sin, sin, -cos) }, + { sin, cos -> translate(sin, -sin, cos) } + ) + + drawParticle( + { sin, cos -> translate(-sin, -sin, cos) }, + { sin, cos -> translate(sin, sin, -cos) } + ) + } + + RenderSystem.depthMask(false) + RenderSystem.defaultBlendFunc() + mc.gameRenderer.lightmapTextureManager.enable() + env.matrixStack.pop() + } + + private inline fun WorldRenderEnvironment.drawParticle( + translateBefore: MatrixStack.(Double, Double)->Unit, + translateAfter: MatrixStack.(Double, Double)->Unit + ) { + val radius = 0.67 + val distance = 10.0 + (length * 0.2) + val alphaFactor = 15 + + for (i in 0.. + vertex(matrix, 0.0f, -size, 0.0f) + .texture(0.0f, 0.0f) + .color(renderColor.toARGB()) + + vertex(matrix, -size, -size, 0.0f) + .texture(0.0f, 1.0f) + .color(renderColor.toARGB()) + + vertex(matrix, -size, 0.0f, 0.0f) + .texture(1.0f, 1.0f) + .color(renderColor.toARGB()) + + vertex(matrix, 0.0f, 0.0f, 0.0f) + .texture(1.0f, 0.0f) + .color(renderColor.toARGB()) + } + + with(matrixStack) { + translate(-size / 2.0, -size / 2.0, 0.0) + multiply(RotationAxis.POSITIVE_X.rotationDegrees(-mc.gameRenderer.camera.pitch)) + multiply(RotationAxis.POSITIVE_Y.rotationDegrees(mc.gameRenderer.camera.yaw)) + translate(size / 2.0, size / 2.0, 0.0) + translateAfter(sin, cos) + } + } + } + + private fun Vec3d.interpolate(start: Vec3d, multiple: Double) = + Vec3d( + this.x.interpolate(start.x, multiple), + this.y.interpolate(start.y, multiple), + this.z.interpolate(start.z, multiple), + ) + + private fun Double.interpolate(old: Double, scale: Double) = old + (this - old) * scale + } + inner class Legacy : WorldTargetRenderAppearance("Legacy") { override val parent: ChoiceConfigurable diff --git a/src/main/resources/assets/liquidbounce/glow.png b/src/main/resources/assets/liquidbounce/glow.png new file mode 100644 index 0000000000000000000000000000000000000000..0be84ecb7b1f8e7ee48787d1a58af2d67bf53435 GIT binary patch literal 31853 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

E*^uWQ%my-(*4ba7q6y& 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