mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-12-02 23:53:50 +01:00
d065d41c0e
Apparently caused issues we werent aware of. Unfortunately there's no way to improve it without blocking the main thread.
84 lines
3.8 KiB
Diff
84 lines
3.8 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 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<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
|
|
}
|