mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2025-01-10 18:37:48 +01:00
0a19056af0
Fixes bad performance out of the box for production. Apparently there's another issue which is thinkering our minds up, it is that after certain amount of time the gc just can't keep up. We're investigating into this, but until it is fixed - this is gonna be a stable build Co-authored-by: Mykyta Komarn <nkomarn@hotmail.com>
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 100afe2000c981c6837b98436bd53add96e17a29..fb083996c10f553d7eff629a815b11eb7f0bf42c 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
|
|
}
|