Skip to content

Commit d4b3fb8

Browse files
authored
Fix lag spike when enabling block esp (#5001)
1 parent a08abdd commit d4b3fb8

File tree

1 file changed

+16
-11
lines changed
  • src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp

1 file changed

+16
-11
lines changed

src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java

+16-11
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
99
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
10+
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
1011
import meteordevelopment.meteorclient.events.render.Render3DEvent;
1112
import meteordevelopment.meteorclient.events.world.BlockUpdateEvent;
1213
import meteordevelopment.meteorclient.events.world.ChunkDataEvent;
@@ -16,8 +17,6 @@
1617
import meteordevelopment.meteorclient.systems.modules.Categories;
1718
import meteordevelopment.meteorclient.systems.modules.Module;
1819
import meteordevelopment.meteorclient.utils.Utils;
19-
import meteordevelopment.meteorclient.utils.misc.UnorderedArrayList;
20-
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
2120
import meteordevelopment.meteorclient.utils.player.PlayerUtils;
2221
import meteordevelopment.meteorclient.utils.render.color.RainbowColors;
2322
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
@@ -31,6 +30,9 @@
3130
import java.util.Iterator;
3231
import java.util.List;
3332
import java.util.Map;
33+
import java.util.Set;
34+
import java.util.concurrent.ExecutorService;
35+
import java.util.concurrent.Executors;
3436

3537
public class BlockESP extends Module {
3638
private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -78,7 +80,8 @@ public class BlockESP extends Module {
7880
private final BlockPos.Mutable blockPos = new BlockPos.Mutable();
7981

8082
private final Long2ObjectMap<ESPChunk> chunks = new Long2ObjectOpenHashMap<>();
81-
private final List<ESPGroup> groups = new UnorderedArrayList<>();
83+
private final Set<ESPGroup> groups = new ReferenceOpenHashSet<>();
84+
private final ExecutorService workerThread = Executors.newSingleThreadExecutor();
8285

8386
private Dimension lastDimension;
8487

@@ -157,7 +160,7 @@ private void onChunkData(ChunkDataEvent event) {
157160
}
158161

159162
private void searchChunk(Chunk chunk) {
160-
MeteorExecutor.execute(() -> {
163+
workerThread.submit(() -> {
161164
if (!isActive()) return;
162165
ESPChunk schunk = ESPChunk.searchChunk(chunk, blocks.get());
163166

@@ -191,7 +194,7 @@ private void onBlockUpdate(BlockUpdateEvent event) {
191194
boolean removed = !added && !blocks.get().contains(event.newState.getBlock()) && blocks.get().contains(event.oldState.getBlock());
192195

193196
if (added || removed) {
194-
MeteorExecutor.execute(() -> {
197+
workerThread.submit(() -> {
195198
synchronized (chunks) {
196199
ESPChunk chunk = chunks.get(key);
197200

@@ -238,7 +241,7 @@ private void onRender(Render3DEvent event) {
238241
ESPChunk chunk = it.next();
239242

240243
if (chunk.shouldBeDeleted()) {
241-
MeteorExecutor.execute(() -> {
244+
workerThread.submit(() -> {
242245
for (ESPBlock block : chunk.blocks.values()) {
243246
block.group.remove(block, false);
244247
block.loaded = false;
@@ -251,13 +254,15 @@ private void onRender(Render3DEvent event) {
251254
}
252255

253256
if (tracers.get()) {
254-
for (Iterator<ESPGroup> it = groups.iterator(); it.hasNext();) {
255-
ESPGroup group = it.next();
256-
257-
if (group.blocks.isEmpty()) it.remove();
258-
else group.render(event);
257+
for (ESPGroup group : groups) {
258+
group.render(event);
259259
}
260260
}
261261
}
262262
}
263+
264+
@Override
265+
public String getInfoString() {
266+
return "%s groups".formatted(groups.size());
267+
}
263268
}

0 commit comments

Comments
 (0)