mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 16:34:44 +01:00
6e71f41536
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 65247583f SPIGOT-7857: Improve ItemMeta block data deserialization 05d80500d SPIGOT-7857: Fix spurious internal NBT tag when deserializing BlockStateMeta cebb58e9a SPIGOT-7804: Fix written book serialization efcdd5d38 SPIGOT-7794: Cancelling InventoryItemMoveEvent destroys items b568ba572 SPIGOT-7789: Fix NPE in CraftMetaFirework applyToItem f057cf449 Remove outdated build delay Spigot Changes: f6a48054 SPIGOT-7835: Fix issue with custom hopper settings bb63b137 Rebuild patches e1142b4d Rebuild patches
40 lines
2.3 KiB
Diff
40 lines
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Martijn Muijsers <martijnmuijsers@live.nl>
|
|
Date: Mon, 21 Aug 2023 21:05:09 +0200
|
|
Subject: [PATCH] Optimize nearest structure border iteration
|
|
|
|
Getting the nearest generated structure contains a nested set of loops that
|
|
iterates over all chunks at a specific chessboard distance. It does this by
|
|
iterating over the entire square of chunks within that distance, and checking
|
|
if the coordinates are at exactly the right distance to be on the border.
|
|
|
|
This patch optimizes the iteration by only iterating over the border chunks.
|
|
This evaluated chunks are the same, and in the same order, as before, to
|
|
ensure that the returned found structure (which may for example be a buried
|
|
treasure that will be marked on a treasure map) is the same as in vanilla.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
index c4972e5767488878f7929226258c41c1cc30a47f..c9cd18ce79a6ee7297a8fd14f4dbe712570b3ced 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
@@ -266,12 +266,15 @@ public abstract class ChunkGenerator {
|
|
int i1 = placement.spacing();
|
|
|
|
for (int j1 = -radius; j1 <= radius; ++j1) {
|
|
- boolean flag1 = j1 == -radius || j1 == radius;
|
|
+ // Paper start - Perf: iterate over border chunks instead of entire square chunk area
|
|
+ boolean flag1 = j1 == -radius || j1 == radius; final boolean onBorderAlongZAxis = flag1; // Paper - OBFHELPER
|
|
|
|
- for (int k1 = -radius; k1 <= radius; ++k1) {
|
|
- boolean flag2 = k1 == -radius || k1 == radius;
|
|
+ for (int k1 = -radius; k1 <= radius; k1 += onBorderAlongZAxis ? 1 : radius * 2) {
|
|
+ // boolean flag2 = k1 == -radius || k1 == radius;
|
|
|
|
- if (flag1 || flag2) {
|
|
+ // if (flag1 || flag2) {
|
|
+ if (true) {
|
|
+ // Paper end - Perf: iterate over border chunks instead of entire square chunk area
|
|
int l1 = centerChunkX + i1 * j1;
|
|
int i2 = centerChunkZ + i1 * k1;
|
|
ChunkPos chunkcoordintpair = placement.getPotentialStructureChunk(seed, l1, i2);
|