diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java index 1e8485f9b2..3763cf98c9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java @@ -7,6 +7,7 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.BlockUpdateEvent; import meteordevelopment.meteorclient.events.world.ChunkDataEvent; @@ -16,8 +17,6 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.Utils; -import meteordevelopment.meteorclient.utils.misc.UnorderedArrayList; -import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import meteordevelopment.meteorclient.utils.player.PlayerUtils; import meteordevelopment.meteorclient.utils.render.color.RainbowColors; import meteordevelopment.meteorclient.utils.render.color.SettingColor; @@ -31,6 +30,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class BlockESP extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -78,7 +80,8 @@ public class BlockESP extends Module { private final BlockPos.Mutable blockPos = new BlockPos.Mutable(); private final Long2ObjectMap chunks = new Long2ObjectOpenHashMap<>(); - private final List groups = new UnorderedArrayList<>(); + private final Set groups = new ReferenceOpenHashSet<>(); + private final ExecutorService workerThread = Executors.newSingleThreadExecutor(); private Dimension lastDimension; @@ -157,7 +160,7 @@ private void onChunkData(ChunkDataEvent event) { } private void searchChunk(Chunk chunk) { - MeteorExecutor.execute(() -> { + workerThread.submit(() -> { if (!isActive()) return; ESPChunk schunk = ESPChunk.searchChunk(chunk, blocks.get()); @@ -191,7 +194,7 @@ private void onBlockUpdate(BlockUpdateEvent event) { boolean removed = !added && !blocks.get().contains(event.newState.getBlock()) && blocks.get().contains(event.oldState.getBlock()); if (added || removed) { - MeteorExecutor.execute(() -> { + workerThread.submit(() -> { synchronized (chunks) { ESPChunk chunk = chunks.get(key); @@ -238,7 +241,7 @@ private void onRender(Render3DEvent event) { ESPChunk chunk = it.next(); if (chunk.shouldBeDeleted()) { - MeteorExecutor.execute(() -> { + workerThread.submit(() -> { for (ESPBlock block : chunk.blocks.values()) { block.group.remove(block, false); block.loaded = false; @@ -251,13 +254,15 @@ private void onRender(Render3DEvent event) { } if (tracers.get()) { - for (Iterator it = groups.iterator(); it.hasNext();) { - ESPGroup group = it.next(); - - if (group.blocks.isEmpty()) it.remove(); - else group.render(event); + for (ESPGroup group : groups) { + group.render(event); } } } } + + @Override + public String getInfoString() { + return "%s groups".formatted(groups.size()); + } }