Skip to content

Commit 984933d

Browse files
committed
fix Search not clearing tracers properly when leaving the world
1 parent c843833 commit 984933d

22 files changed

Lines changed: 283 additions & 254 deletions

File tree

src/main/java/com/lambda/mixin/MinecraftClientMixin.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@
1919

2020
import com.lambda.core.TimerManager;
2121
import com.lambda.event.EventFlow;
22-
import com.lambda.event.events.ClientEvent;
23-
import com.lambda.event.events.GuiEvent;
24-
import com.lambda.event.events.InventoryEvent;
25-
import com.lambda.event.events.TickEvent;
22+
import com.lambda.event.events.*;
2623
import com.lambda.gui.DearImGui;
2724
import com.lambda.gui.components.ClickGuiLayout;
2825
import com.lambda.module.modules.movement.BetterFirework;
@@ -212,4 +209,9 @@ private void injectSetScreen(Screen screen, CallbackInfo ci) {
212209
var event = new GuiEvent.ScreenOpen(screen);
213210
if (EventFlow.post(event).isCanceled()) ci.cancel();
214211
}
212+
213+
@Inject(method = "disconnect(Lnet/minecraft/client/gui/screen/Screen;ZZ)V", at = @At("TAIL"))
214+
private void injectDisconnect(Screen disconnectionScreen, boolean transferring, boolean stopSounds, CallbackInfo ci) {
215+
EventFlow.post(new WorldEvent.Leave());
216+
}
215217
}

src/main/kotlin/com/lambda/event/events/WorldEvent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ import java.util.*
3737
sealed class WorldEvent {
3838
// ToDo: Add doc and determine if there's a better place for this event
3939
// Represents the player joining the world
40-
class Join() : Event
40+
class Join : Event
41+
42+
class Leave : Event
4143

4244
// ToDo: Maybe create a network event seal with some s2c events
4345
sealed class Player {

src/main/kotlin/com/lambda/graphics/mc/renderer/AbstractRenderer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.lambda.graphics.mc.renderer
1919

20-
import com.lambda.context.SafeContext
2120
import com.lambda.graphics.mc.RegionRenderer
2221
import com.lambda.graphics.outline.OutlineRenderer
2322
import com.lambda.graphics.outline.OutlineStyle
@@ -28,12 +27,12 @@ import com.mojang.blaze3d.systems.RenderSystem
2827
import com.mojang.blaze3d.textures.FilterMode
2928
import kotlin.collections.isNotEmpty
3029

31-
abstract class AbstractRenderer(val name: String, var depthTest: SafeContext.() -> Boolean) {
30+
abstract class AbstractRenderer(val name: String, var depthTest: () -> Boolean) {
3231
protected abstract fun getRendererTransforms(): List<Pair<RegionRenderer, GpuBufferSlice>>
3332

3433
protected abstract fun getScreenRenderers(): List<RegionRenderer>
3534

36-
fun SafeContext.render() {
35+
fun render() {
3736
val depth = depthTest()
3837
val chunks = getRendererTransforms()
3938
if (chunks.isEmpty()) return

src/main/kotlin/com/lambda/graphics/mc/renderer/ChunkedRenderer.kt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.lambda.event.events.TickEvent
2424
import com.lambda.event.events.WorldEvent
2525
import com.lambda.event.listener.SafeListener.Companion.listen
2626
import com.lambda.event.listener.SafeListener.Companion.listenConcurrently
27+
import com.lambda.event.listener.UnsafeListener.Companion.listenConcurrentlyUnsafe
2728
import com.lambda.event.listener.UnsafeListener.Companion.listenUnsafe
2829
import com.lambda.graphics.RenderMain
2930
import com.lambda.graphics.mc.RegionRenderer
@@ -45,9 +46,9 @@ import java.util.concurrent.ConcurrentLinkedDeque
4546
class ChunkedRenderer(
4647
owner: Any,
4748
name: String,
48-
depthTest: SafeContext.() -> Boolean,
49-
pauseUpdates: SafeContext.() -> Boolean,
50-
private val update: RenderBuilder.(ClientWorld, FastVector) -> Unit
49+
depthTest: () -> Boolean,
50+
pauseUpdates: () -> Boolean,
51+
private val update: RenderBuilder.(FastVector) -> Unit
5152
) : AbstractRenderer(name, depthTest) {
5253
private val chunkMap = ConcurrentHashMap<Long, ChunkData>()
5354

@@ -61,8 +62,9 @@ class ChunkedRenderer(
6162
private val uploadQueue = ConcurrentLinkedDeque<() -> Unit>()
6263

6364
init {
64-
owner.listen<WorldEvent.BlockUpdate.Client> { event ->
65+
owner.listenUnsafe<WorldEvent.BlockUpdate.Client> { event ->
6566
val pos = event.pos
67+
val world = mc.world ?: return@listenUnsafe
6668
world.getWorldChunk(pos)?.chunkData?.markDirty()
6769

6870
val xInChunk = pos.x and 15
@@ -76,23 +78,23 @@ class ChunkedRenderer(
7678

7779
owner.listenUnsafe<WorldEvent.ChunkEvent.Load> { event -> event.chunk.chunkData.markDirty() }
7880
owner.listenUnsafe<WorldEvent.ChunkEvent.Unload> { chunkMap.remove(it.chunk.chunkKey)?.clearData() }
79-
owner.listen<WorldEvent.Player.Leave> { rebuild() }
81+
owner.listenUnsafe<WorldEvent.Leave> { clear() }
8082

81-
owner.listenConcurrently<TickEvent.Pre> {
82-
if (pauseUpdates()) return@listenConcurrently
83+
owner.listenConcurrentlyUnsafe<TickEvent.Pre> {
84+
if (pauseUpdates()) return@listenConcurrentlyUnsafe
8385
val queueSize = rebuildQueue.size
8486
val polls = minOf(StyleEditor.rebuildsPerTick, queueSize)
8587
val depth = depthTest()
8688
repeat(polls) { rebuildQueue.poll()?.rebuild(depth) }
8789
}
8890

89-
owner.listen<TickEvent.Pre> {
91+
owner.listenUnsafe<TickEvent.Pre> {
9092
val polls = minOf(StyleEditor.uploadsPerTick, uploadQueue.size)
9193
repeat(polls) { uploadQueue.poll()?.invoke() }
9294
}
9395

94-
owner.listen<RenderEvent.RenderWorld> { render() }
95-
owner.listen<RenderEvent.RenderScreen> { renderScreen() }
96+
owner.listenUnsafe<RenderEvent.RenderWorld> { render() }
97+
owner.listenUnsafe<RenderEvent.RenderScreen> { renderScreen() }
9698
}
9799

98100
private fun getChunkKey(chunkX: Int, chunkZ: Int) =
@@ -170,7 +172,7 @@ class ChunkedRenderer(
170172
for (x in chunk.pos.startX..chunk.pos.endX) {
171173
for (z in chunk.pos.startZ..chunk.pos.endZ) {
172174
for (y in chunk.bottomY..chunk.height) {
173-
update(scope, chunk.world as? ClientWorld ?: continue, fastVectorOf(x, y, z))
175+
update(scope, fastVectorOf(x, y, z))
174176
}
175177
}
176178
}
@@ -184,9 +186,9 @@ class ChunkedRenderer(
184186
companion object {
185187
fun Any.chunkedRenderer(
186188
name: String,
187-
depthTest: SafeContext.() -> Boolean = { false },
188-
pauseUpdates: SafeContext.() -> Boolean = { false },
189-
update: RenderBuilder.(ClientWorld, FastVector) -> Unit
189+
depthTest: () -> Boolean = { false },
190+
pauseUpdates: () -> Boolean = { false },
191+
update: RenderBuilder.(FastVector) -> Unit
190192
) = ChunkedRenderer(this, name, depthTest, pauseUpdates, update).also { renderer ->
191193
(this as? Module)?.let { module ->
192194
module.onEnable { renderer.rebuild() }

src/main/kotlin/com/lambda/graphics/mc/renderer/ImmediateRenderer.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
package com.lambda.graphics.mc.renderer
1919

20+
import com.lambda.Lambda.mc
2021
import com.lambda.context.SafeContext
2122
import com.lambda.event.events.RenderEvent
2223
import com.lambda.event.listener.SafeListener.Companion.listen
24+
import com.lambda.event.listener.UnsafeListener.Companion.listenUnsafe
2325
import com.lambda.graphics.RenderMain
2426
import com.lambda.graphics.mc.RegionRenderer
2527
import com.lambda.graphics.mc.RenderBuilder
@@ -31,23 +33,22 @@ import org.joml.Vector4f
3133
class ImmediateRenderer(
3234
owner: Any,
3335
name: String,
34-
depthTest: SafeContext.() -> Boolean,
35-
update: RenderBuilder.(SafeContext) -> Unit
36+
depthTest: () -> Boolean,
37+
update: RenderBuilder.() -> Unit
3638
) : AbstractRenderer(name, depthTest) {
3739
private val renderer = RegionRenderer()
3840

3941
init {
40-
owner.listen<RenderEvent.PreRenderWorld> {
41-
val context = SafeContext.create() ?: return@listen
42-
val depth = depthTest(context)
42+
owner.listenUnsafe<RenderEvent.PreRenderWorld> {
43+
val depth = depthTest()
4344
val renderBuilder = RenderBuilder(mc.gameRenderer.camera.pos, depthTest = depth).also {
44-
it.update(context)
45+
it.update()
4546
}
4647
upload(renderBuilder)
4748
}
4849

49-
owner.listen<RenderEvent.RenderWorld> { render() }
50-
owner.listen<RenderEvent.RenderScreen> { renderScreen() }
50+
owner.listenUnsafe<RenderEvent.RenderWorld> { render() }
51+
owner.listenUnsafe<RenderEvent.RenderScreen> { renderScreen() }
5152
}
5253

5354
fun upload(renderBuilder: RenderBuilder) {
@@ -73,8 +74,8 @@ class ImmediateRenderer(
7374
companion object {
7475
fun Any.immediateRenderer(
7576
name: String,
76-
depthTest: SafeContext.() -> Boolean = { false },
77-
update: RenderBuilder.(SafeContext) -> Unit
77+
depthTest: () -> Boolean = { false },
78+
update: RenderBuilder.() -> Unit
7879
) = ImmediateRenderer(this, name, depthTest, update)
7980
}
8081
}

src/main/kotlin/com/lambda/graphics/mc/renderer/TickedRenderer.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.lambda.context.SafeContext
2222
import com.lambda.event.events.RenderEvent
2323
import com.lambda.event.events.TickEvent
2424
import com.lambda.event.listener.SafeListener.Companion.listen
25+
import com.lambda.event.listener.UnsafeListener.Companion.listenUnsafe
2526
import com.lambda.graphics.RenderMain
2627
import com.lambda.graphics.mc.RegionRenderer
2728
import com.lambda.graphics.mc.RenderBuilder
@@ -36,26 +37,26 @@ import org.joml.Vector4f
3637
class TickedRenderer(
3738
owner: Any,
3839
name: String,
39-
depthTest: SafeContext.() -> Boolean,
40-
update: RenderBuilder.(SafeContext) -> Unit
40+
depthTest: () -> Boolean,
41+
update: RenderBuilder.() -> Unit
4142
) : AbstractRenderer(name, depthTest) {
4243
private val renderer = RegionRenderer()
4344

4445
private var tickCameraPos: Vec3d? = null
4546

4647
init {
47-
owner.listen<TickEvent.Pre> {
48+
owner.listenUnsafe<TickEvent.Pre> {
4849
val depth = depthTest()
4950
clear()
5051
tickCameraPos = mc.gameRenderer.camera.pos
51-
val renderBuilder = RenderBuilder(tickCameraPos ?: return@listen, depthTest = depth).also {
52-
it.update(this)
52+
val renderBuilder = RenderBuilder(tickCameraPos ?: return@listenUnsafe, depthTest = depth).also {
53+
it.update()
5354
}
5455
upload(renderBuilder)
5556
}
5657

57-
owner.listen<RenderEvent.RenderWorld> { render() }
58-
owner.listen<RenderEvent.RenderScreen> { renderScreen() }
58+
owner.listenUnsafe<RenderEvent.RenderWorld> { render() }
59+
owner.listenUnsafe<RenderEvent.RenderScreen> { renderScreen() }
5960
}
6061

6162
fun clear() {
@@ -88,8 +89,8 @@ class TickedRenderer(
8889
companion object {
8990
fun Any.tickedRenderer(
9091
name: String,
91-
depthTest: SafeContext.() -> Boolean = { false },
92-
update: RenderBuilder.(SafeContext) -> Unit
92+
depthTest: () -> Boolean = { false },
93+
update: RenderBuilder.() -> Unit
9394
) = TickedRenderer(this, name, depthTest, update)
9495
}
9596
}

src/main/kotlin/com/lambda/interaction/managers/breaking/BreakManager.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ import com.lambda.interaction.managers.interacting.InteractManager
7272
import com.lambda.interaction.managers.rotating.RotationRequest
7373
import com.lambda.interaction.material.StackSelection
7474
import com.lambda.interaction.material.StackSelection.Companion.select
75+
import com.lambda.threading.runSafe
7576
import com.lambda.threading.runSafeAutomated
7677
import com.lambda.util.BlockUtils.blockState
7778
import com.lambda.util.BlockUtils.calcItemBlockBreakingDelta
@@ -224,8 +225,8 @@ object BreakManager : Manager<BreakRequest>(
224225
breakCooldown = 0
225226
}
226227

227-
immediateRenderer("BreakManager Immediate Renderer") { safeContext ->
228-
with(safeContext) {
228+
immediateRenderer("BreakManager Immediate Renderer") {
229+
runSafe {
229230
val activeStack = breakInfos
230231
.filterNotNull()
231232
.firstOrNull()?.swapStack ?: return@immediateRenderer

src/main/kotlin/com/lambda/module/modules/debug/BlockTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.lambda.module.modules.debug
2020
import com.lambda.graphics.mc.renderer.TickedRenderer.Companion.tickedRenderer
2121
import com.lambda.module.Module
2222
import com.lambda.module.tag.ModuleTag
23+
import com.lambda.threading.runSafe
2324
import com.lambda.util.ChatUtils.colors
2425
import com.lambda.util.world.blockSearch
2526
import net.minecraft.block.Blocks
@@ -48,8 +49,8 @@ object BlockTest : Module(
4849
private val outlineColor = Color(100, 150, 255, 51)
4950

5051
init {
51-
tickedRenderer("BlockTest Ticked Renderer") { safeContext ->
52-
with(safeContext) {
52+
tickedRenderer("BlockTest Ticked Renderer") {
53+
runSafe {
5354
blockSearch(range, step = step) { _, state ->
5455
state.isOf(Blocks.DIAMOND_BLOCK)
5556
}.forEach { (pos, state) ->

src/main/kotlin/com/lambda/module/modules/debug/RenderTest.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.lambda.graphics.mc.renderer.TickedRenderer.Companion.tickedRenderer
2222
import com.lambda.graphics.util.DynamicAABB.Companion.dynamicBox
2323
import com.lambda.module.Module
2424
import com.lambda.module.tag.ModuleTag
25+
import com.lambda.threading.runSafe
2526
import com.lambda.util.ChatUtils.colors
2627
import com.lambda.util.extension.tickDelta
2728
import com.lambda.util.math.setAlpha
@@ -46,8 +47,8 @@ object RenderTest : Module(
4647
private val filledColor = outlineColor.setAlpha(0.2)
4748

4849
init {
49-
immediateRenderer("RenderTest Immediate Renderer") { safeContext ->
50-
with(safeContext) {
50+
immediateRenderer("RenderTest Immediate Renderer") {
51+
runSafe {
5152
entitySearch<LivingEntity>(8.0)
5253
.forEach { entity ->
5354
box(entity.dynamicBox.box(mc.tickDelta) ?: return@forEach) {
@@ -57,9 +58,11 @@ object RenderTest : Module(
5758
}
5859
}
5960

60-
tickedRenderer("RenderTest Ticked Renderer") { safeContext ->
61-
box(Box.of(safeContext.player.pos, 0.3, 0.3, 0.3)) {
62-
colors(filledColor, outlineColor)
61+
tickedRenderer("RenderTest Ticked Renderer") {
62+
runSafe {
63+
box(Box.of(player.pos, 0.3, 0.3, 0.3)) {
64+
colors(filledColor, outlineColor)
65+
}
6366
}
6467
}
6568
}

src/main/kotlin/com/lambda/module/modules/debug/RendererTestModule.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ object ChunkedRendererTest : Module(
6262
var updated = false
6363

6464
init {
65-
chunkedRenderer("ChunkedRendererTest", depthTest = { false }) { world, pos ->
65+
chunkedRenderer("ChunkedRendererTest", depthTest = { false }) { pos ->
6666
runSafe {
6767
if (updated) return@chunkedRenderer
6868
if (player.chunkPos != ChunkPos(pos.toBlockPos())) return@chunkedRenderer
@@ -176,8 +176,8 @@ object TickedRendererTest : Module(
176176
private val throughWalls by setting("Through Walls", true)
177177

178178
init {
179-
tickedRenderer("TickedRendererTest", depthTest = { !throughWalls }) { safeContext ->
180-
with(safeContext) {
179+
tickedRenderer("TickedRendererTest", depthTest = { !throughWalls }) {
180+
runSafe {
181181
val startPos = lerp(mc.tickDelta, player.prevPos, player.pos)
182182
lineGradient(
183183
startPos,
@@ -282,8 +282,8 @@ object ImmediateRendererTest : Module(
282282
private val throughWalls by setting("Through Walls", true)
283283

284284
init {
285-
immediateRenderer("ImmediateRendererTest", depthTest = { !throughWalls }) { safeContext ->
286-
with(safeContext) {
285+
immediateRenderer("ImmediateRendererTest", depthTest = { !throughWalls }) {
286+
runSafe {
287287
val startPos = lerp(mc.tickDelta, player.prevPos, player.pos)
288288
lineGradient(
289289
startPos,

0 commit comments

Comments
 (0)