Yatopia/patches/server/0036-lithium-MixinChunkSection.patch
Ivan Pekov 9aa38226e4
Updated Upstream and Sidestream(s) (Tuinity/Purpur)
Upstream/An Sidestream has released updates that appears to apply and compile correctly
This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing.

Tuinity Changes:
988e550 Updated Upstream (Paper)

Purpur Changes:
ea7a301 Fix lag
424607f Updated Upstream (Paper)
2020-10-13 14:15:28 +03:00

84 lines
3.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: JellySquid <jellysquid+atwork@protonmail.com>
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 00bf3ceae4f341277c6442d8555537d9a6066bcd..344b23dfe54df6dee5e2d6bf1bbbe4a9d1da87c4 100644
--- a/src/main/java/net/minecraft/server/BlockBase.java
+++ b/src/main/java/net/minecraft/server/BlockBase.java
@@ -350,6 +350,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
+
public void a() {
this.fluid = this.getBlock().d(this.p()); // Paper - moved from getFluid()
this.isTicking = this.getBlock().isTicking(this.p()); // Paper - moved from isTicking()
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<IBlockData> 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<IBlockData> 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<IBlockData> predicate) {
return this.blockIds.contains(predicate);
}
+
+ // Yatopia start
+ @Override
+ public boolean hasOversizedBlocks() {
+ return this.oversizedBlockCount > 0;
+ }
+ // Yatopia end
}