[WIP] Sponge Async Lighting v2 - ChunkProviderServer
This commit is contained in:
9
sources/src/main/java/io/akarin/api/IMixinChunk.java
Normal file
9
sources/src/main/java/io/akarin/api/IMixinChunk.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package io.akarin.api;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
public interface IMixinChunk {
|
||||||
|
AtomicInteger getPendingLightUpdates();
|
||||||
|
|
||||||
|
long getLightUpdateTime();
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
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 {
|
public class EntityTracker {
|
||||||
|
|
||||||
private static final Logger a = LogManager.getLogger();
|
private static final Logger a = LogManager.getLogger();
|
||||||
|
|||||||
Reference in New Issue
Block a user