Skip to content

Commit 64dc704

Browse files
committed
make dynamic lights thread safe
1 parent 664c299 commit 64dc704

2 files changed

Lines changed: 10 additions & 72 deletions

File tree

src/main/java/com/falsepattern/falsetweaks/modules/dynlights/base/DynamicLights.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import java.util.concurrent.locks.ReentrantReadWriteLock;
1313

1414
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
15+
16+
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
17+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
1518
import lombok.val;
1619
import net.minecraft.block.Block;
1720
import net.minecraft.client.Minecraft;
@@ -36,7 +39,8 @@
3639
public class DynamicLights implements DynamicLightsDriver {
3740
public static final DynamicLights INSTANCE = new DynamicLights(false);
3841
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);
4044
private static final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
4145

4246
private static long timeUpdateMs = 0L;
@@ -115,11 +119,8 @@ public void update(RenderGlobal renderGlobal) {
115119
val lock = busyWaitWriteLock();
116120
try {
117121
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()) {
123124
dynamicLight.update(renderGlobal);
124125
}
125126
}
@@ -183,10 +184,7 @@ private double getLightLevel(int x, int y, int z) {
183184
double lightLevelMax = 0.0;
184185
val lock = busyWaitReadLock();
185186
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()) {
190188
if (!DynamicLightsDrivers.isDynamicHandLight(forWorld) && dynamicLight.getEntity() == rve) {
191189
continue;
192190
}
@@ -304,14 +302,11 @@ public int getLightLevel(Entity entity) {
304302
public void removeLights(RenderGlobal renderGlobal) {
305303
val lock = busyWaitWriteLock();
306304
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()) {
311306
dynamicLight.updateLitChunks(renderGlobal);
312307
}
313308

314-
dynamicLights.clear();
309+
mapDynamicLights.clear();
315310
} finally {
316311
lock.unlock();
317312
}

src/main/java/com/falsepattern/falsetweaks/modules/dynlights/base/DynamicLightsMap.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)