From 99887f95e2138efc34bfc87fba66f7f3e6982321 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Mon, 2 Sep 2019 15:18:17 +0100 Subject: [PATCH] Copy loaded tile entity list before iterating client-side, fixes #205 --- .../wizardry/client/renderer/RenderArcaneLock.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java index cb2058f8..abab6a76 100644 --- a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java +++ b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java @@ -20,6 +20,9 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import org.lwjgl.opengl.GL11; +import java.util.ArrayList; +import java.util.List; + @Mod.EventBusSubscriber(Side.CLIENT) public class RenderArcaneLock { @@ -54,9 +57,14 @@ public class RenderArcaneLock { BufferBuilder buffer = tessellator.getBuffer(); buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - for(TileEntity tileentity : world.loadedTileEntityList){ + // Someone managed to get a CME here so let's just copy the list to be safe + // It's only cosmetic so if a tileentity somehow gets removed while we're rendering them it's not a big deal + List tileentities = new ArrayList<>(world.loadedTileEntityList); - if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= 64*64 && tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){ + for(TileEntity tileentity : tileentities){ + + if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared() + && tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){ Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos()));