From 1abc34b4548bd5c0a1b897d5dce22f6b1ab3f291 Mon Sep 17 00:00:00 2001 From: cryptite Date: Fri, 15 Mar 2024 08:51:56 -0500 Subject: [PATCH] Improve map-saving performance --- patches/api/0009-Smooth-Teleports.patch | 4 ++-- patches/api/0010-AntiXray-Bypass.patch | 4 ++-- ...-Set-BlockData-without-light-updates.patch | 6 +++--- ...03-Add-BlockDestroyedByNeighborEvent.patch | 6 +++--- patches/server/0039-Shared-Data-Storage.patch | 8 ++++---- .../0043-Improve-map-saving-performance.patch | 19 +++++++++++++++++++ 6 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 patches/server/0043-Improve-map-saving-performance.patch diff --git a/patches/api/0009-Smooth-Teleports.patch b/patches/api/0009-Smooth-Teleports.patch index 70d69a70e..1c3287734 100644 --- a/patches/api/0009-Smooth-Teleports.patch +++ b/patches/api/0009-Smooth-Teleports.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Smooth Teleports diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 254a02ddb5dc867c9dd6c2086791f7ab94247fd3..69b7524859ec51f879cbb9d13f3ab9cec7549562 100644 +index c6cb4f17469a8f2e60dd3e28d41402851ce5fb21..7548f66864cd797d3dc51b91c6cf4a99cede4d34 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3550,6 +3550,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3574,6 +3574,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM String getClientBrandName(); // Paper end diff --git a/patches/api/0010-AntiXray-Bypass.patch b/patches/api/0010-AntiXray-Bypass.patch index 7d6f7b305..e1ec8c68c 100644 --- a/patches/api/0010-AntiXray-Bypass.patch +++ b/patches/api/0010-AntiXray-Bypass.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AntiXray Bypass diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 69b7524859ec51f879cbb9d13f3ab9cec7549562..23098a702f2073577d1ccec9f4cc4105cd24d668 100644 +index 7548f66864cd797d3dc51b91c6cf4a99cede4d34..d1920e61d3c9afb1d99379bfb9849adad2c8c06f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3058,6 +3058,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3082,6 +3082,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ public void spawnParticle(@NotNull Particle particle, @NotNull Location location, int count, double offsetX, double offsetY, double offsetZ, double extra); diff --git a/patches/server/0002-Set-BlockData-without-light-updates.patch b/patches/server/0002-Set-BlockData-without-light-updates.patch index 9fad0b1de..38e7b2148 100644 --- a/patches/server/0002-Set-BlockData-without-light-updates.patch +++ b/patches/server/0002-Set-BlockData-without-light-updates.patch @@ -27,10 +27,10 @@ index 5ece375eaf6bcc61864997a389bb5e24625e4505..2d61315c9ab87a216e235f1586618b11 return false; } else { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index f476ba6c97944bdffae5aacae2e285d17541f46e..6f88d46662f9a63927f654e256257f30dc1b5f1e 100644 +index bc89f9e90af3d69872a58c47a4c2545ba91b6ba5..a67bf805d7a078192987dbeb80af7d29df236d38 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -896,12 +896,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -905,12 +905,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } @Override @@ -46,7 +46,7 @@ index f476ba6c97944bdffae5aacae2e285d17541f46e..6f88d46662f9a63927f654e256257f30 // CraftBukkit start - tree generation if (this.captureTreeGeneration) { // Paper start - Protect Bedrock and End Portal/Frames from being destroyed -@@ -1097,7 +1097,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1106,7 +1106,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { iblockdata.getBlock().popExperience((ServerLevel) this, pos, xp, breakingEntity); // Paper - Properly handle xp dropping; custom amount } diff --git a/patches/server/0003-Add-BlockDestroyedByNeighborEvent.patch b/patches/server/0003-Add-BlockDestroyedByNeighborEvent.patch index a515d2193..ba8ca57cc 100644 --- a/patches/server/0003-Add-BlockDestroyedByNeighborEvent.patch +++ b/patches/server/0003-Add-BlockDestroyedByNeighborEvent.patch @@ -37,7 +37,7 @@ index 1ad126d992d95062a3db08374db7a927f23a0cac..7648e43a77b06b9f4a31b216824cdd9c if (!(item instanceof BucketItem/* || item instanceof SolidBucketItem*/)) { // if not bucket // Paper - Fix cancelled powdered snow bucket placement world.captureBlockStates = true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6f88d46662f9a63927f654e256257f30dc1b5f1e..ef887fa0089cec0e4543b9c1cec1e48bc2d5cc61 100644 +index a67bf805d7a078192987dbeb80af7d29df236d38..5cdadd4cf103af239a46aeb82b7d56f37672ded3 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -181,6 +181,27 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -68,7 +68,7 @@ index 6f88d46662f9a63927f654e256257f30dc1b5f1e..ef887fa0089cec0e4543b9c1cec1e48b // Paper start - fix and optimise world upgrading // copied from below public static ResourceKey getDimensionKey(DimensionType manager) { -@@ -1046,6 +1067,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1055,6 +1076,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (!this.preventPoiUpdated) { this.onBlockStateChange(blockposition, iblockdata1, iblockdata2); } @@ -76,7 +76,7 @@ index 6f88d46662f9a63927f654e256257f30dc1b5f1e..ef887fa0089cec0e4543b9c1cec1e48b // CraftBukkit end } } -@@ -1067,6 +1089,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1076,6 +1098,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (iblockdata.isAir()) { return false; } else { diff --git a/patches/server/0039-Shared-Data-Storage.patch b/patches/server/0039-Shared-Data-Storage.patch index 4ba8bfb61..bd7f714af 100644 --- a/patches/server/0039-Shared-Data-Storage.patch +++ b/patches/server/0039-Shared-Data-Storage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shared Data Storage diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index a6f58b3457b7477015c5c6d969e7d83017dd3fa1..7f2070bd2d7eb7f0256a96df00103d20c45e65a0 100644 +index b53b6cc4463675096b061b3b65f14a4695c742e2..6100d75e5d9184fd4ec79ffbd00cea0d637e5073 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -331,6 +331,7 @@ public class GlobalConfiguration extends ConfigurationPart { +@@ -333,6 +333,7 @@ public class GlobalConfiguration extends ConfigurationPart { public boolean useDimensionTypeForCustomSpawners = false; public boolean strictAdvancementDimensionCheck = false; public IntOr.Default compressionLevel = IntOr.Default.USE_DEFAULT; @@ -17,7 +17,7 @@ index a6f58b3457b7477015c5c6d969e7d83017dd3fa1..7f2070bd2d7eb7f0256a96df00103d20 public BlockUpdates blockUpdates; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 48eaa18bec43e88020047d1ffe57b84146793d6f..3fe8c1f92673400e40dbea4c101256384cad26f6 100644 +index 268bebac970646a9d697ec31ea5c89b9f583618f..59db2872229b4229f959bf227d1a2cf54c208ce8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2,6 +2,7 @@ package net.minecraft.server; @@ -83,7 +83,7 @@ index 48eaa18bec43e88020047d1ffe57b84146793d6f..3fe8c1f92673400e40dbea4c10125638 this.isSaving = false; } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index f033f530eef10177c349f2673bb3ee8ebdb1d30b..ebd5fe9f64672b01e3981c19aa9464e8f20dbc03 100644 +index 21f54a4a3de169ede1687324009aea3f9d986db4..4e5bdf47beab8477fd5278fc4c9ff162ad835d12 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -2116,7 +2116,7 @@ public class ServerLevel extends Level implements WorldGenLevel { diff --git a/patches/server/0043-Improve-map-saving-performance.patch b/patches/server/0043-Improve-map-saving-performance.patch new file mode 100644 index 000000000..cab83b6fa --- /dev/null +++ b/patches/server/0043-Improve-map-saving-performance.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: cryptite +Date: Fri, 15 Mar 2024 08:51:06 -0500 +Subject: [PATCH] Improve map-saving performance + + +diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +index 45269115e63cfc3bd7dc740a5694e2cc7c35bcb1..c09e6d89b1595ce26c3489ca9e84a7c2bdf80286 100644 +--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java ++++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +@@ -331,7 +331,7 @@ public class MapItemSavedData extends SavedData { + --this.trackedDecorationCount; + } + +- this.setDecorationsDirty(); ++ if (mapicon != null) this.setDecorationsDirty(); // Paper - We should not be dirtying this over unless there was mutation. + } + + public static void addTargetDecoration(ItemStack stack, BlockPos pos, String id, MapDecoration.Type type) {