[WIP] Sponge Async Lighting v2 - ChunkProviderServer

This commit is contained in:
Sotr
2018-06-10 21:22:54 +08:00
parent 8a3ddb716e
commit 69e6cc1fea
3 changed files with 43 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
package io.akarin.api;
import java.util.concurrent.atomic.AtomicInteger;
public interface IMixinChunk {
AtomicInteger getPendingLightUpdates();
long getLightUpdateTime();
}

View File

@@ -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;
}
}

View File

@@ -11,6 +11,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* <b>Akarin Changes Note</b><br>
* <br>
* 1) Make entries-set concurrent<br>
* 2) Add lock for entries-set operations<br>
* @author cakoyo
*/
public class EntityTracker {
private static final Logger a = LogManager.getLogger();