geforkt von Mirrors/Paper
526795bacd
* Update patches to handle vineflower decompiler * update patches again to handle inlined simple lambdas * update vf again and re-apply/rebuild patches * update patches after removal of verify-merges flag * fix compile issue * remove maven local * fix some issues * address more issues * fix collision patch * use paperweight release * more fixes * update fineflower and fix patches again * add missing comment descriptor --------- Co-authored-by: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
51 Zeilen
2.3 KiB
Diff
51 Zeilen
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Wed, 9 Aug 2023 14:00:40 -0700
|
|
Subject: [PATCH] Remove UpgradeData neighbour ticks outside of range
|
|
|
|
The lists are only supposed to contain ticks for the 1 radius
|
|
neighbours of the chunk.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
index ae52f9a04221efed322bc3dc76ac0d56738ffba7..25c1abaeb916781f810d580a4d388d4d3adad75a 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
@@ -100,6 +100,25 @@ public class UpgradeData {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - filter out relocated neighbour ticks
|
|
+ // The lists are only supposed to contain ticks for the 1 radius neighbours of the chunk
|
|
+ private static <T> void filterTickList(int chunkX, int chunkZ, List<SavedTick<T>> ticks) {
|
|
+ for (java.util.Iterator<SavedTick<T>> iterator = ticks.iterator(); iterator.hasNext();) {
|
|
+ SavedTick<T> tick = iterator.next();
|
|
+ BlockPos tickPos = tick.pos();
|
|
+ int tickCX = tickPos.getX() >> 4;
|
|
+ int tickCZ = tickPos.getZ() >> 4;
|
|
+
|
|
+ int dist = Math.max(Math.abs(chunkX - tickCX), Math.abs(chunkZ - tickCZ));
|
|
+
|
|
+ if (dist != 1) {
|
|
+ LOGGER.warn("Neighbour tick '" + tick + "' serialized in chunk (" + chunkX + "," + chunkZ + ") is too far (" + tickCX + "," + tickCZ + ")");
|
|
+ iterator.remove();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Paper end - filter out relocated neighbour ticks
|
|
+
|
|
public void upgrade(LevelChunk chunk) {
|
|
this.upgradeInside(chunk);
|
|
|
|
@@ -107,6 +126,11 @@ public class UpgradeData {
|
|
upgradeSides(chunk, direction8);
|
|
}
|
|
|
|
+ // Paper start - filter out relocated neighbour ticks
|
|
+ filterTickList(chunk.locX, chunk.locZ, this.neighborBlockTicks);
|
|
+ filterTickList(chunk.locX, chunk.locZ, this.neighborFluidTicks);
|
|
+ // Paper end - filter out relocated neighbour ticks
|
|
+
|
|
Level level = chunk.getLevel();
|
|
this.neighborBlockTicks.forEach(tick -> {
|
|
Block block = tick.type() == Blocks.AIR ? level.getBlockState(tick.pos()).getBlock() : tick.type();
|