From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: JellySquid Date: Thu, 20 Aug 2020 17:25:11 +0300 Subject: [PATCH] lithium MixinChunkSection Original code by JellySquid, licensed under LGPLv3 you can find the original code on https://github.com/jellysquid3/lithium-fabric/ (Yarn mappings) diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java index 5541531223456d9890dee154fec058314d56f256..c1f992b2ebac9819085bec74bc40ca3b5384c741 100644 --- a/src/main/java/net/minecraft/server/BlockBase.java +++ b/src/main/java/net/minecraft/server/BlockBase.java @@ -345,6 +345,8 @@ public abstract class BlockBase { } // Tuinity end + public final boolean shapeExceedsCubeUncached() { return this.a == null || this.a.c; } // Yatopia - uncached shapeExceedsCube due to collisions stuff + // Tuinity start protected boolean isTicking; protected Fluid fluid; diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java index cebd808e273dbdb88feb16920dd7a2f60390b34f..d210ac3d5775491e9beb885dde608f5e8fda8eb2 100644 --- a/src/main/java/net/minecraft/server/ChunkSection.java +++ b/src/main/java/net/minecraft/server/ChunkSection.java @@ -4,7 +4,7 @@ import java.util.function.Predicate; import com.destroystokyo.paper.antixray.ChunkPacketInfo; // Paper - Anti-Xray - Add chunk packet info import javax.annotation.Nullable; -public class ChunkSection { +public class ChunkSection implements me.jellysquid.mods.lithium.common.entity.movement.ChunkAwareBlockCollisionSweeper.OversizedBlocksCounter { // Yatopia public static final DataPalette GLOBAL_PALETTE = new DataPaletteGlobal<>(Block.REGISTRY_ID, Blocks.AIR.getBlockData()); final int yPos; // Paper - private -> package-private @@ -12,6 +12,7 @@ public class ChunkSection { short tickingBlockCount; // Paper - private -> package-private private short e; final DataPaletteBlock blockIds; // Paper - package-private + private short oversizedBlockCount = 0; // Yatopia final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper @@ -67,6 +68,7 @@ public class ChunkSection { if (!iblockdata1.isAir()) { --this.nonEmptyBlockCount; + if (iblockdata1.shapeExceedsCubeUncached()) this.oversizedBlockCount--; // Yatopia if (iblockdata1.isTicking()) { --this.tickingBlockCount; // Paper start @@ -81,6 +83,7 @@ public class ChunkSection { if (!iblockdata.isAir()) { ++this.nonEmptyBlockCount; + if (iblockdata.shapeExceedsCubeUncached()) this.oversizedBlockCount++; // Yatopia if (iblockdata.isTicking()) { ++this.tickingBlockCount; // Paper start @@ -126,10 +129,12 @@ public class ChunkSection { // Paper start this.tickingList.clear(); // Paper end + this.oversizedBlockCount = 0; // Yatopia this.nonEmptyBlockCount = 0; this.tickingBlockCount = 0; this.e = 0; this.blockIds.forEachLocation((iblockdata, location) -> { // Paper + if (iblockdata.shapeExceedsCubeUncached()) this.oversizedBlockCount += location; // Yatopia Fluid fluid = iblockdata.getFluid(); if (!iblockdata.isAir()) { @@ -173,4 +178,11 @@ public class ChunkSection { public boolean a(Predicate predicate) { return this.blockIds.contains(predicate); } + + // Yatopia start + @Override + public boolean hasOversizedBlocks() { + return this.oversizedBlockCount > 0; + } + // Yatopia end }