From d28cf7cad45ebde4f1fea8bd032e1a8a0bef0881 Mon Sep 17 00:00:00 2001 From: Algent Date: Mon, 3 Aug 2026 17:22:27 +0200 Subject: [PATCH] Avoid structure snapshots while rendering --- src/main/scala/mrtjp/relocation/movement.scala | 7 +++---- src/main/scala/mrtjp/relocation/renders.scala | 10 ++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/scala/mrtjp/relocation/movement.scala b/src/main/scala/mrtjp/relocation/movement.scala index 4b1a36a..cbef5f1 100644 --- a/src/main/scala/mrtjp/relocation/movement.scala +++ b/src/main/scala/mrtjp/relocation/movement.scala @@ -356,11 +356,10 @@ class WorldStructs { numStructs = 0 } - def foreachStruct(f: BlockStruct => Unit) { - val arr = synchronized { java.util.Arrays.copyOf(structsArr, numStructs) } + def foreachStruct(f: BlockStruct => Unit) = synchronized { var i = 0 - while (i < arr.length) { - f(arr(i)) + while (i < numStructs) { + f(structsArr(i)) i += 1 } } diff --git a/src/main/scala/mrtjp/relocation/renders.scala b/src/main/scala/mrtjp/relocation/renders.scala index f56904a..c36c833 100644 --- a/src/main/scala/mrtjp/relocation/renders.scala +++ b/src/main/scala/mrtjp/relocation/renders.scala @@ -30,6 +30,11 @@ object MovingRenderer { private var frame = 0.0f private var renderBlocks: RenderBlocks = null + private val renderStruct: BlockStruct => Unit = { s => + for (b <- s.preMoveBlocks) + render(b.x, b.y, b.z, renderPos(s, frame)) + } + private def mc = Minecraft.getMinecraft private def world = mc.theWorld @@ -101,10 +106,7 @@ object MovingRenderer { renderBlocks.renderAllFaces = true } - MovementManager2.getWorldStructs(world).foreachStruct { s => - for (b <- s.preMoveBlocks) - render(b.x, b.y, b.z, renderPos(s, frame)) - } + MovementManager2.getWorldStructs(world).foreachStruct(renderStruct) } def onTick() = {