mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-11-27 05:05:14 +01:00
339da44a99
We went thru a bunch of effort for this fix, but its finally been patched. In the meantime I ported jellysquid's latest changes to entity collisions which also work completely fine. Thanks to Simon ( @smonnnn ) who is also going to be the co-author of this commit cuz he was the one to properly implement the problematic patch . These changes should lower your mspt. Fixes #165 Fixes #178 Co-authored-by: Simon L <slooij1@gmail.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 1d02880e5818d22c13d67d3f44844a2cca51c164..13f541390040d07229de0fbb1cfa4bcfe7d0794f 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
|
|
}
|