7
7
8
8
import it .unimi .dsi .fastutil .longs .Long2ObjectMap ;
9
9
import it .unimi .dsi .fastutil .longs .Long2ObjectOpenHashMap ;
10
+ import it .unimi .dsi .fastutil .objects .ReferenceOpenHashSet ;
10
11
import meteordevelopment .meteorclient .events .render .Render3DEvent ;
11
12
import meteordevelopment .meteorclient .events .world .BlockUpdateEvent ;
12
13
import meteordevelopment .meteorclient .events .world .ChunkDataEvent ;
16
17
import meteordevelopment .meteorclient .systems .modules .Categories ;
17
18
import meteordevelopment .meteorclient .systems .modules .Module ;
18
19
import meteordevelopment .meteorclient .utils .Utils ;
19
- import meteordevelopment .meteorclient .utils .misc .UnorderedArrayList ;
20
- import meteordevelopment .meteorclient .utils .network .MeteorExecutor ;
21
20
import meteordevelopment .meteorclient .utils .player .PlayerUtils ;
22
21
import meteordevelopment .meteorclient .utils .render .color .RainbowColors ;
23
22
import meteordevelopment .meteorclient .utils .render .color .SettingColor ;
31
30
import java .util .Iterator ;
32
31
import java .util .List ;
33
32
import java .util .Map ;
33
+ import java .util .Set ;
34
+ import java .util .concurrent .ExecutorService ;
35
+ import java .util .concurrent .Executors ;
34
36
35
37
public class BlockESP extends Module {
36
38
private final SettingGroup sgGeneral = settings .getDefaultGroup ();
@@ -78,7 +80,8 @@ public class BlockESP extends Module {
78
80
private final BlockPos .Mutable blockPos = new BlockPos .Mutable ();
79
81
80
82
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 ();
82
85
83
86
private Dimension lastDimension ;
84
87
@@ -157,7 +160,7 @@ private void onChunkData(ChunkDataEvent event) {
157
160
}
158
161
159
162
private void searchChunk (Chunk chunk ) {
160
- MeteorExecutor . execute (() -> {
163
+ workerThread . submit (() -> {
161
164
if (!isActive ()) return ;
162
165
ESPChunk schunk = ESPChunk .searchChunk (chunk , blocks .get ());
163
166
@@ -191,7 +194,7 @@ private void onBlockUpdate(BlockUpdateEvent event) {
191
194
boolean removed = !added && !blocks .get ().contains (event .newState .getBlock ()) && blocks .get ().contains (event .oldState .getBlock ());
192
195
193
196
if (added || removed ) {
194
- MeteorExecutor . execute (() -> {
197
+ workerThread . submit (() -> {
195
198
synchronized (chunks ) {
196
199
ESPChunk chunk = chunks .get (key );
197
200
@@ -238,7 +241,7 @@ private void onRender(Render3DEvent event) {
238
241
ESPChunk chunk = it .next ();
239
242
240
243
if (chunk .shouldBeDeleted ()) {
241
- MeteorExecutor . execute (() -> {
244
+ workerThread . submit (() -> {
242
245
for (ESPBlock block : chunk .blocks .values ()) {
243
246
block .group .remove (block , false );
244
247
block .loaded = false ;
@@ -251,13 +254,15 @@ private void onRender(Render3DEvent event) {
251
254
}
252
255
253
256
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 );
259
259
}
260
260
}
261
261
}
262
262
}
263
+
264
+ @ Override
265
+ public String getInfoString () {
266
+ return "%s groups" .formatted (groups .size ());
267
+ }
263
268
}
0 commit comments