|
12 | 12 | import java.util.concurrent.locks.ReentrantReadWriteLock; |
13 | 13 |
|
14 | 14 | import cpw.mods.fml.common.eventhandler.SubscribeEvent; |
| 15 | + |
| 16 | +import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; |
| 17 | +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; |
15 | 18 | import lombok.val; |
16 | 19 | import net.minecraft.block.Block; |
17 | 20 | import net.minecraft.client.Minecraft; |
|
36 | 39 | public class DynamicLights implements DynamicLightsDriver { |
37 | 40 | public static final DynamicLights INSTANCE = new DynamicLights(false); |
38 | 41 | private static final DynamicLights FOR_WORLD = new DynamicLights(true); |
39 | | - private static final DynamicLightsMap mapDynamicLights = new DynamicLightsMap(); |
| 42 | + |
| 43 | + private static final Int2ObjectMap<DynamicLight> mapDynamicLights = new Int2ObjectArrayMap<>(1024); |
40 | 44 | private static final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); |
41 | 45 |
|
42 | 46 | private static long timeUpdateMs = 0L; |
@@ -115,11 +119,8 @@ public void update(RenderGlobal renderGlobal) { |
115 | 119 | val lock = busyWaitWriteLock(); |
116 | 120 | try { |
117 | 121 | updateMapDynamicLights(renderGlobal); |
118 | | - if (mapDynamicLights.size() > 0) { |
119 | | - List<DynamicLight> dynamicLights = mapDynamicLights.valueList(); |
120 | | - |
121 | | - for(int i = 0; i < dynamicLights.size(); ++i) { |
122 | | - DynamicLight dynamicLight = (DynamicLight)dynamicLights.get(i); |
| 122 | + if (!mapDynamicLights.isEmpty()) { |
| 123 | + for (val dynamicLight : mapDynamicLights.values()) { |
123 | 124 | dynamicLight.update(renderGlobal); |
124 | 125 | } |
125 | 126 | } |
@@ -183,10 +184,7 @@ private double getLightLevel(int x, int y, int z) { |
183 | 184 | double lightLevelMax = 0.0; |
184 | 185 | val lock = busyWaitReadLock(); |
185 | 186 | try { |
186 | | - List<DynamicLight> dynamicLights = mapDynamicLights.valueList(); |
187 | | - |
188 | | - for(int i = 0; i < dynamicLights.size(); ++i) { |
189 | | - DynamicLight dynamicLight = dynamicLights.get(i); |
| 187 | + for (val dynamicLight: mapDynamicLights.values()) { |
190 | 188 | if (!DynamicLightsDrivers.isDynamicHandLight(forWorld) && dynamicLight.getEntity() == rve) { |
191 | 189 | continue; |
192 | 190 | } |
@@ -304,14 +302,11 @@ public int getLightLevel(Entity entity) { |
304 | 302 | public void removeLights(RenderGlobal renderGlobal) { |
305 | 303 | val lock = busyWaitWriteLock(); |
306 | 304 | try { |
307 | | - List<DynamicLight> dynamicLights = mapDynamicLights.valueList(); |
308 | | - |
309 | | - for(int i = 0; i < dynamicLights.size(); ++i) { |
310 | | - DynamicLight dynamicLight = (DynamicLight)dynamicLights.get(i); |
| 305 | + for (val dynamicLight: mapDynamicLights.values()) { |
311 | 306 | dynamicLight.updateLitChunks(renderGlobal); |
312 | 307 | } |
313 | 308 |
|
314 | | - dynamicLights.clear(); |
| 309 | + mapDynamicLights.clear(); |
315 | 310 | } finally { |
316 | 311 | lock.unlock(); |
317 | 312 | } |
|
0 commit comments