diff --git a/sources/src/main/java/io/akarin/api/IMixinChunk.java b/sources/src/main/java/io/akarin/api/IMixinChunk.java
new file mode 100644
index 000000000..c33b1579c
--- /dev/null
+++ b/sources/src/main/java/io/akarin/api/IMixinChunk.java
@@ -0,0 +1,9 @@
+package io.akarin.api;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public interface IMixinChunk {
+ AtomicInteger getPendingLightUpdates();
+
+ long getLightUpdateTime();
+}
\ No newline at end of file
diff --git a/sources/src/main/java/io/akarin/server/mixin/lighting/MixinChunkProviderServer.java b/sources/src/main/java/io/akarin/server/mixin/lighting/MixinChunkProviderServer.java
new file mode 100644
index 000000000..31a6ffa2d
--- /dev/null
+++ b/sources/src/main/java/io/akarin/server/mixin/lighting/MixinChunkProviderServer.java
@@ -0,0 +1,27 @@
+package io.akarin.server.mixin.lighting;
+
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+import io.akarin.api.IMixinChunk;
+import net.minecraft.server.ChunkProviderServer;
+import net.minecraft.server.WorldServer;
+
+@Mixin(value = ChunkProviderServer.class, remap = false, priority = 1001)
+public class MixinChunkProviderServer {
+ @Shadow @Final public WorldServer world;
+
+ @Redirect(method = "unloadChunks", at = @At(
+ value = "INVOKE",
+ target = "Lnet/minecraft/server/Chunk;isUnloading()Z"
+ ))
+ public boolean shouldUnload(IMixinChunk chunk) {
+ if (chunk.getPendingLightUpdates().get() > 0 || this.world.getTime() - chunk.getLightUpdateTime() < 20) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/sources/src/main/java/net/minecraft/server/EntityTracker.java b/sources/src/main/java/net/minecraft/server/EntityTracker.java
index 168bb75f7..ad48af80b 100644
--- a/sources/src/main/java/net/minecraft/server/EntityTracker.java
+++ b/sources/src/main/java/net/minecraft/server/EntityTracker.java
@@ -11,6 +11,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+/**
+ * Akarin Changes Note
+ *
+ * 1) Make entries-set concurrent
+ * 2) Add lock for entries-set operations
+ * @author cakoyo
+ */
public class EntityTracker {
private static final Logger a = LogManager.getLogger();