diff --git a/src/main/java/org/ultramine/server/UltramineServerModContainer.java b/src/main/java/org/ultramine/server/UltramineServerModContainer.java index 3c8bf26..5cd56b6 100644 --- a/src/main/java/org/ultramine/server/UltramineServerModContainer.java +++ b/src/main/java/org/ultramine/server/UltramineServerModContainer.java @@ -21,6 +21,7 @@ import org.ultramine.core.economy.service.EconomyRegistry; import org.ultramine.core.service.InjectService; import org.ultramine.core.service.ServiceManager; +import org.ultramine.server.chunk.AntiXRayService; import org.ultramine.server.chunk.ChunkGenerationQueue; import org.ultramine.server.chunk.ChunkProfiler; import org.ultramine.server.chunk.alloc.ChunkAllocService; @@ -111,6 +112,7 @@ try { services.register(ChunkAllocService.class, new UnsafeChunkAlloc(), 0); + services.register(AntiXRayService.class, new AntiXRayService.EmptyImpl(), 0); if(e.getSide().isServer()) { ConfigurationHandler.load(); diff --git a/src/main/java/org/ultramine/server/chunk/AntiXRayService.java b/src/main/java/org/ultramine/server/chunk/AntiXRayService.java new file mode 100644 index 0000000..9a7570a --- /dev/null +++ b/src/main/java/org/ultramine/server/chunk/AntiXRayService.java @@ -0,0 +1,26 @@ +package org.ultramine.server.chunk; + +import net.minecraft.world.chunk.Chunk; +import org.ultramine.core.service.Service; + +@Service +public interface AntiXRayService +{ + T prepareChunkSync(ChunkSnapshot chunkSnapshot, Chunk chunk); + + void prepareChunkAsync(ChunkSnapshot chunkSnapshot, T param); + + class EmptyImpl implements AntiXRayService + { + @Override + public Void prepareChunkSync(ChunkSnapshot chunkSnapshot, Chunk chunk) + { + return null; + } + + @Override + public void prepareChunkAsync(ChunkSnapshot chunkSnapshot, Void v) + { + } + } +} diff --git a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java index 01b7d1c..fb96078 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java @@ -18,6 +18,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.core.service.InjectService; import org.ultramine.server.WorldConstants; import org.ultramine.server.util.BlockFace; import org.ultramine.server.util.ChunkCoordComparator; @@ -43,6 +44,7 @@ { private static final Logger log = LogManager.getLogger(); private static final ExecutorService executor = Executors.newFixedThreadPool(1); + @InjectService private static AntiXRayService antiXRayService; private static final double MIN_RATE = 0.2d; private final EntityPlayerMP player; @@ -460,11 +462,13 @@ { private final ChunkIdStruct chunkId; private final ChunkSnapshot chunkSnapshot; - + private final Object antiXRayParam; + public CompressAndSendChunkTask(ChunkIdStruct chunkId) { this.chunkId = chunkId; this.chunkSnapshot = ChunkSnapshot.of(chunkId.chunk); // must be sync + this.antiXRayParam = antiXRayService.prepareChunkSync(this.chunkSnapshot, chunkId.chunk); } private boolean checkActual() @@ -488,6 +492,7 @@ return; } + antiXRayService.prepareChunkAsync(chunkSnapshot, antiXRayParam); S21PacketChunkData packet = S21PacketChunkData.makeForSend(chunkSnapshot); // may be async for chunk snapshot packet.deflate(); // chunkSnapshot released here