diff --git a/build-data/paper.at b/build-data/paper.at index cf8a486b8..5fcbdc259 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -268,3 +268,6 @@ public net.minecraft.world.level.NaturalSpawner SPAWNING_CATEGORIES # Optimize isValidLocation public net.minecraft.world.level.chunk.LevelChunkSection states + +# Player.setPlayerProfile API +public-f net.minecraft.world.entity.player.Player gameProfile diff --git a/patches/api/0006-Timings-v2.patch b/patches/api/0006-Timings-v2.patch index 5e8b707b9..5cc53cf04 100644 --- a/patches/api/0006-Timings-v2.patch +++ b/patches/api/0006-Timings-v2.patch @@ -3377,10 +3377,10 @@ index 2a145d851ce30360aa39549745bd87590c034584..00000000000000000000000000000000 - // Spigot end -} diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 7fb4a190e24064a3bcf7d3c9f80bdae557995532..dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb 100644 +index 306e5366d0f07974fa8a344e8a7954b6f7a1ac6f..50fae417ecab61c867a0d2c5299aedf056ff1bec 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1426,7 +1426,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1459,7 +1459,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @Nullable UUID sender, @NotNull net.md_5.bungee.api.chat.BaseComponent... components) { throw new UnsupportedOperationException("Not supported yet."); diff --git a/patches/api/0008-Adventure.patch b/patches/api/0008-Adventure.patch index 64ecd9016..e13b43bce 100644 --- a/patches/api/0008-Adventure.patch +++ b/patches/api/0008-Adventure.patch @@ -1549,7 +1549,7 @@ index 25a6f9313a1953def7470e411b53016f2ca14bef..10cb6088c4618f228c757f4e592b44ed + // Paper end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde7625897d3781d 100644 +index 50fae417ecab61c867a0d2c5299aedf056ff1bec..4d0df67160a3f846cc645a1766305c64d186a43f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -34,7 +34,28 @@ import org.jetbrains.annotations.Nullable; @@ -1845,7 +1845,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor, boolean hasGlowingText) throws IllegalArgumentException; /** -@@ -1017,7 +1188,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1050,7 +1221,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * * @param title Title text * @param subtitle Subtitle text @@ -1854,7 +1854,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 */ @Deprecated public void sendTitle(@Nullable String title, @Nullable String subtitle); -@@ -1036,7 +1207,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1069,7 +1240,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param fadeIn time in ticks for titles to fade in. Defaults to 10. * @param stay time in ticks for titles to stay. Defaults to 70. * @param fadeOut time in ticks for titles to fade out. Defaults to 20. @@ -1864,7 +1864,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public void sendTitle(@Nullable String title, @Nullable String subtitle, int fadeIn, int stay, int fadeOut); /** -@@ -1263,6 +1436,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1296,6 +1469,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ public int getClientViewDistance(); @@ -1879,7 +1879,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 /** * Gets the player's estimated ping in milliseconds. * -@@ -1288,8 +1469,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1321,8 +1502,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * they wish. * * @return the player's locale @@ -1890,7 +1890,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public String getLocale(); /** -@@ -1322,6 +1505,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1355,6 +1538,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ public boolean isAllowingServerListings(); @@ -1905,7 +1905,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 // Spigot start public class Spigot extends Entity.Spigot { -@@ -1376,11 +1567,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1409,11 +1600,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM throw new UnsupportedOperationException("Not supported yet."); } @@ -1919,7 +1919,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 @Override public void sendMessage(@NotNull net.md_5.bungee.api.chat.BaseComponent... components) { throw new UnsupportedOperationException("Not supported yet."); -@@ -1391,7 +1584,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1424,7 +1617,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * * @param position the screen position * @param component the components to send @@ -1929,7 +1929,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @NotNull net.md_5.bungee.api.chat.BaseComponent component) { throw new UnsupportedOperationException("Not supported yet."); } -@@ -1401,7 +1596,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1434,7 +1629,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * * @param position the screen position * @param components the components to send @@ -1939,7 +1939,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @NotNull net.md_5.bungee.api.chat.BaseComponent... components) { throw new UnsupportedOperationException("Not supported yet."); } -@@ -1412,7 +1609,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1445,7 +1642,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param position the screen position * @param sender the sender of the message * @param component the components to send @@ -1949,7 +1949,7 @@ index dcc40efd20b07cd2bc423c7fdb4f9d0adb91adcb..87e06fb630e3aabe62e21323fde76258 public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @Nullable UUID sender, @NotNull net.md_5.bungee.api.chat.BaseComponent component) { throw new UnsupportedOperationException("Not supported yet."); } -@@ -1423,7 +1622,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1456,7 +1655,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param position the screen position * @param sender the sender of the message * @param components the components to send diff --git a/patches/api/0009-Player-affects-spawning-API.patch b/patches/api/0009-Player-affects-spawning-API.patch index a2d094d22..6ef722422 100644 --- a/patches/api/0009-Player-affects-spawning-API.patch +++ b/patches/api/0009-Player-affects-spawning-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player affects spawning API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 1140c29cffaac3c25f7d2591e5d635d070206041..6ec4b1408dbbe31f0f06e72d81f142e57b1d5cee 100644 +index 4d0df67160a3f846cc645a1766305c64d186a43f..eeabecac8920d98c0575d2fbf813ce93bf314f3b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1475,6 +1475,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1508,6 +1508,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Deprecated // Paper public String getLocale(); diff --git a/patches/api/0014-Add-view-distance-API.patch b/patches/api/0014-Add-view-distance-API.patch index 950a31e27..fff87a9bf 100644 --- a/patches/api/0014-Add-view-distance-API.patch +++ b/patches/api/0014-Add-view-distance-API.patch @@ -65,10 +65,10 @@ index c58b1885662c6a234ffee75995051c9750c1a512..7b1fb280a86ab44756fc233b085f878d public class Spigot { diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 6ec4b1408dbbe31f0f06e72d81f142e57b1d5cee..08979f50d125a62d05389da86f08f5ac77e48b11 100644 +index eeabecac8920d98c0575d2fbf813ce93bf314f3b..017872f119721dffb72cffa9f916c1243428b885 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1489,6 +1489,62 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1522,6 +1522,62 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param affects Whether the player can affect mob spawning */ public void setAffectsSpawning(boolean affects); diff --git a/patches/api/0025-Complete-resource-pack-API.patch b/patches/api/0025-Complete-resource-pack-API.patch index f3b67e721..8563f53d2 100644 --- a/patches/api/0025-Complete-resource-pack-API.patch +++ b/patches/api/0025-Complete-resource-pack-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Complete resource pack API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index e9883273d547c15ffde9a7feafd7abb00b0eb6dd..7816aa9fa7f64a9e24acfaba0c9b5e721559f97f 100644 +index d03b4193b3ba1a1a6378fb297e69e4b183f31a03..ad246bc21e9877b70b4e3687d8ae8bcd013b80e3 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1217,7 +1217,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1250,7 +1250,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @throws IllegalArgumentException Thrown if the URL is null. * @throws IllegalArgumentException Thrown if the URL is too long. The * length restriction is an implementation specific arbitrary value. @@ -18,7 +18,7 @@ index e9883273d547c15ffde9a7feafd7abb00b0eb6dd..7816aa9fa7f64a9e24acfaba0c9b5e72 public void setResourcePack(@NotNull String url); /** -@@ -1745,6 +1747,124 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1778,6 +1780,124 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM default net.kyori.adventure.text.event.HoverEvent asHoverEvent(final @NotNull java.util.function.UnaryOperator op) { return net.kyori.adventure.text.event.HoverEvent.showEntity(op.apply(net.kyori.adventure.text.event.HoverEvent.ShowEntity.of(this.getType().getKey(), this.getUniqueId(), this.displayName()))); } diff --git a/patches/api/0045-Add-String-based-Action-Bar-API.patch b/patches/api/0045-Add-String-based-Action-Bar-API.patch index a3d4dc027..24993f522 100644 --- a/patches/api/0045-Add-String-based-Action-Bar-API.patch +++ b/patches/api/0045-Add-String-based-Action-Bar-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add String based Action Bar API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 7816aa9fa7f64a9e24acfaba0c9b5e721559f97f..1022fa402b8235ba130cf2122b8a64f9aeacbfdf 100644 +index ad246bc21e9877b70b4e3687d8ae8bcd013b80e3..757e92e11752e8c244b46a75d5265fa3f11d5a79 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3,6 +3,7 @@ package org.bukkit.entity; @@ -68,7 +68,7 @@ index 7816aa9fa7f64a9e24acfaba0c9b5e721559f97f..1022fa402b8235ba130cf2122b8a64f9 public default void sendMessage(net.md_5.bungee.api.ChatMessageType position, net.md_5.bungee.api.chat.BaseComponent... components) { spigot().sendMessage(position, components); } -@@ -1936,6 +1972,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1969,6 +2005,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM /** * Sends the component to the specified screen position of this player * @@ -76,7 +76,7 @@ index 7816aa9fa7f64a9e24acfaba0c9b5e721559f97f..1022fa402b8235ba130cf2122b8a64f9 * @param position the screen position * @param component the components to send * @deprecated use {@code sendMessage} methods that accept {@link net.kyori.adventure.text.Component} -@@ -1948,6 +1985,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1981,6 +2018,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM /** * Sends an array of components as a single message to the specified screen position of this player * diff --git a/patches/api/0091-Player.setPlayerProfile-API.patch b/patches/api/0091-Player.setPlayerProfile-API.patch index f2be4afdf..39c7c7e5d 100644 --- a/patches/api/0091-Player.setPlayerProfile-API.patch +++ b/patches/api/0091-Player.setPlayerProfile-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Player.setPlayerProfile API This can be useful for changing name or skins after a player has logged in. diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index b6e0014013906b12644d172d4e534ead5fb55a69..6c5ef41b4ba2754918efe98ef1fa41c8797b3399 100644 +index fbb7cf6575a129b22fca2eb8ef950e446946ca50..7edb56a95d214f56556e4e83d843879f946d61a2 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -4,6 +4,7 @@ import java.net.InetSocketAddress; @@ -17,7 +17,7 @@ index b6e0014013906b12644d172d4e534ead5fb55a69..6c5ef41b4ba2754918efe98ef1fa41c8 import org.bukkit.DyeColor; import org.bukkit.Effect; import org.bukkit.GameMode; -@@ -1922,6 +1923,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1955,6 +1956,20 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * was {@link org.bukkit.event.player.PlayerResourcePackStatusEvent.Status#SUCCESSFULLY_LOADED} */ boolean hasResourcePack(); diff --git a/patches/api/0149-Expose-attack-cooldown-methods-for-Player.patch b/patches/api/0149-Expose-attack-cooldown-methods-for-Player.patch index 355d9c82c..9e94ffb5c 100644 --- a/patches/api/0149-Expose-attack-cooldown-methods-for-Player.patch +++ b/patches/api/0149-Expose-attack-cooldown-methods-for-Player.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose attack cooldown methods for Player diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 11db3d8cc6e3410d7c6a950afed5eb8257dd86ee..37e315587de286b848ef9b70580335db0e1c72a1 100644 +index e6695d006bdf09f63b35e52b6575ba9d7c5bb4c7..0ca16994a5475c685ce06cf14cc965150d239a70 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2097,6 +2097,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2130,6 +2130,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param profile The new profile to use */ void setPlayerProfile(@NotNull PlayerProfile profile); diff --git a/patches/api/0196-Add-Player-Client-Options-API.patch b/patches/api/0196-Add-Player-Client-Options-API.patch index f0e4718c5..dd7bb590a 100644 --- a/patches/api/0196-Add-Player-Client-Options-API.patch +++ b/patches/api/0196-Add-Player-Client-Options-API.patch @@ -193,7 +193,7 @@ index 0000000000000000000000000000000000000000..f7f171c4ee0b8339b2f8fbe82442d65f + } +} diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 37e315587de286b848ef9b70580335db0e1c72a1..cac22060c3c439b63320d01fc09e3d5ab845c9f7 100644 +index 0ca16994a5475c685ce06cf14cc965150d239a70..8e5e7f172818471354f32bcc12289d2e47c03065 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -2,6 +2,7 @@ package org.bukkit.entity; @@ -204,7 +204,7 @@ index 37e315587de286b848ef9b70580335db0e1c72a1..cac22060c3c439b63320d01fc09e3d5a import com.destroystokyo.paper.Title; // Paper import net.kyori.adventure.text.Component; import com.destroystokyo.paper.profile.PlayerProfile; // Paper -@@ -2117,6 +2118,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2150,6 +2151,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Reset the cooldown counter to 0, effectively starting the cooldown period. */ void resetCooldown(); diff --git a/patches/api/0220-Brand-support.patch b/patches/api/0220-Brand-support.patch index 5c4c98712..699018426 100644 --- a/patches/api/0220-Brand-support.patch +++ b/patches/api/0220-Brand-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Brand support diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index cac22060c3c439b63320d01fc09e3d5ab845c9f7..8c26d06de2c9c3016fd066f072e8d1a128c0e126 100644 +index 8e5e7f172818471354f32bcc12289d2e47c03065..2656b92a09ea27485436c33915a57df2c072afc7 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2252,6 +2252,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2285,6 +2285,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM // Paper end } diff --git a/patches/api/0229-Player-elytra-boost-API.patch b/patches/api/0229-Player-elytra-boost-API.patch index f3ceeb552..3631436ee 100644 --- a/patches/api/0229-Player-elytra-boost-API.patch +++ b/patches/api/0229-Player-elytra-boost-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player elytra boost API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 8c26d06de2c9c3016fd066f072e8d1a128c0e126..3436728d46e3189452772ac794bbb0e2d2d8a8d1 100644 +index 2656b92a09ea27485436c33915a57df2c072afc7..85b1f27ebe66e2ffeec5446b201efe3ec0136ccc 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2124,6 +2124,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2157,6 +2157,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ @NotNull T getClientOption(@NotNull ClientOption option); diff --git a/patches/api/0257-Add-sendOpLevel-API.patch b/patches/api/0257-Add-sendOpLevel-API.patch index 5ce2fed4f..b40e4ed12 100644 --- a/patches/api/0257-Add-sendOpLevel-API.patch +++ b/patches/api/0257-Add-sendOpLevel-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add sendOpLevel API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 3436728d46e3189452772ac794bbb0e2d2d8a8d1..dce258e323e79ce61c42be5d4eae3116f25f22b3 100644 +index 85b1f27ebe66e2ffeec5446b201efe3ec0136ccc..310c66059c068f523d09bbb3f4218ca40085543c 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2137,6 +2137,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2170,6 +2170,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ @Nullable Firework boostElytra(@NotNull ItemStack firework); diff --git a/patches/server/0001-Setup-Gradle-project.patch b/patches/server/0001-Setup-Gradle-project.patch index ec2ff1417..261df75a3 100644 --- a/patches/server/0001-Setup-Gradle-project.patch +++ b/patches/server/0001-Setup-Gradle-project.patch @@ -178,7 +178,7 @@ index 0000000000000000000000000000000000000000..139f377673414e1d0213129549e94934 +} diff --git a/pom.xml b/pom.xml deleted file mode 100644 -index 64c25fbe8293fd0a963d48c5816ba80dfbb6d412..0000000000000000000000000000000000000000 +index bfdc67dc0956979f0b54fb68c7f213676875f97d..0000000000000000000000000000000000000000 --- a/pom.xml +++ /dev/null @@ -1,540 +0,0 @@ @@ -640,7 +640,7 @@ index 64c25fbe8293fd0a963d48c5816ba80dfbb6d412..00000000000000000000000000000000 - 3.1.2 - - -- process-classes +- test-compile - - check - diff --git a/patches/server/0006-MC-Utils.patch b/patches/server/0006-MC-Utils.patch index 26e59b60d..0a5bbfc2a 100644 --- a/patches/server/0006-MC-Utils.patch +++ b/patches/server/0006-MC-Utils.patch @@ -5306,7 +5306,7 @@ index 40dd2077f26a2c1fa15f21861204faa53748140e..45de5e508540b4ba622985d530f1aada + // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index f0480cde59d81e6648b730092818dfa39d27202a..163c185f8ef72f5739b75f9768ebb4135dd3aaae 100644 +index fa2ff0d8e7f6015200dded40335fe6245d9c6bcf..e4d2771e86a0de4ea8bd08ca5811ce7a2e38c7d1 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -59,6 +59,7 @@ import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket; @@ -5498,7 +5498,7 @@ index ef87c37633cee4ab438f1991144188ade1c4e65f..19d3802becd353e130b785f8286e595e protected void purgeStaleTickets() { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index bdc774e3fbb949290fbc94c4b0cbc8f2c09f5bd8..8509bf94f64c6b761ee38e39278d12fcedeeff75 100644 +index d672c467267ef4d96184e104c35d0379116880db..566c32a71054479257b7fba981507fa2559aa9e6 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -48,6 +48,8 @@ import net.minecraft.world.level.storage.LevelData; @@ -5905,7 +5905,7 @@ index bdc774e3fbb949290fbc94c4b0cbc8f2c09f5bd8..8509bf94f64c6b761ee38e39278d12fc while (iterator1.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 718cfd07e2449657e402ba1c26b4a13b82c4e5d5..8a6d3ea7fd43a6a25e904227f005a452956f7d9e 100644 +index 38467827b01cba97d1ae29e67e7776b8b332f74d..d3beb7624daace9b6180a6721033a77df4faee04 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -9,6 +9,7 @@ import it.unimi.dsi.fastutil.longs.LongSet; @@ -6518,7 +6518,7 @@ index 0cb0b6143e3307e546c78ecda2c35ac31a8a7001..a3f44e3a44b2ec21ef41f6d598b42844 public boolean useShapeForLightOcclusion() { diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -index aeceb5106dd5af79236cfb724c7837448897138d..7cceac53e445fe199f59a619a69a96ef97ae50b5 100644 +index b44f4defb19554cecd75e839812cd2fca79a98b1..f529776a40744e18043b0e4a0df8873e6b920387 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java @@ -58,7 +58,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom @@ -6530,8 +6530,8 @@ index aeceb5106dd5af79236cfb724c7837448897138d..7cceac53e445fe199f59a619a69a96ef private long inhabitedTime; /** @deprecated */ @Nullable -@@ -78,7 +78,8 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom - protected final LevelChunkSection[] sections; +@@ -83,7 +83,8 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom + // CraftBukkit end public ChunkAccess(ChunkPos pos, UpgradeData upgradeData, LevelHeightAccessor heightLimitView, Registry biome, long inhabitedTime, @Nullable LevelChunkSection[] sectionArrayInitializer, @Nullable BlendingData blendingData) { - this.chunkPos = pos; @@ -6541,7 +6541,7 @@ index aeceb5106dd5af79236cfb724c7837448897138d..7cceac53e445fe199f59a619a69a96ef this.levelHeightAccessor = heightLimitView; this.sections = new LevelChunkSection[heightLimitView.getSectionsCount()]; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e7ca0d388 100644 +index 6d58f8baf53ac828da7097ff0140da2cf6dfe682..b61d9592f4a7e0e5c65cb9f317f2d1f3370311a4 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -24,6 +24,7 @@ import net.minecraft.nbt.CompoundTag; @@ -6552,8 +6552,8 @@ index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.entity.Entity; -@@ -126,6 +127,110 @@ public class LevelChunk extends ChunkAccess { - public final org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(LevelChunk.DATA_TYPE_REGISTRY); +@@ -124,6 +125,110 @@ public class LevelChunk extends ChunkAccess { + // CraftBukkit end + // Paper start @@ -6663,7 +6663,7 @@ index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e public LevelChunk(ServerLevel world, ProtoChunk protoChunk, @Nullable LevelChunk.PostLoadProcessor entityLoader) { this(world, protoChunk.getPos(), protoChunk.getUpgradeData(), protoChunk.unpackBlockTicks(), protoChunk.unpackFluidTicks(), protoChunk.getInhabitedTime(), protoChunk.getSections(), entityLoader, protoChunk.getBlendingData()); Iterator iterator = protoChunk.getBlockEntities().values().iterator(); -@@ -224,6 +329,18 @@ public class LevelChunk extends ChunkAccess { +@@ -226,6 +331,18 @@ public class LevelChunk extends ChunkAccess { } } @@ -6682,7 +6682,7 @@ index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e @Override public FluidState getFluidState(BlockPos pos) { return this.getFluidState(pos.getX(), pos.getY(), pos.getZ()); -@@ -345,6 +462,7 @@ public class LevelChunk extends ChunkAccess { +@@ -347,6 +464,7 @@ public class LevelChunk extends ChunkAccess { return this.getBlockEntity(pos, LevelChunk.EntityCreationType.CHECK); } @@ -6690,7 +6690,7 @@ index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e @Nullable public BlockEntity getBlockEntity(BlockPos pos, LevelChunk.EntityCreationType creationType) { // CraftBukkit start -@@ -514,7 +632,25 @@ public class LevelChunk extends ChunkAccess { +@@ -516,7 +634,25 @@ public class LevelChunk extends ChunkAccess { // CraftBukkit start public void loadCallback() { @@ -6716,7 +6716,7 @@ index 903b0298e9b30c85f95ed86e89955a58face6824..e8be9a1ae4b0b4ebb35b6feec5b41e6e if (server != null) { /* * If it's a new world, the first few chunks are generated inside -@@ -553,6 +689,22 @@ public class LevelChunk extends ChunkAccess { +@@ -555,6 +691,22 @@ public class LevelChunk extends ChunkAccess { server.getPluginManager().callEvent(unloadEvent); // note: saving can be prevented, but not forced if no saving is actually required this.mustNotSave = !unloadEvent.isSaveChunk(); diff --git a/patches/server/0010-Timings-v2.patch b/patches/server/0010-Timings-v2.patch index 0aec243d6..ab7a76667 100644 --- a/patches/server/0010-Timings-v2.patch +++ b/patches/server/0010-Timings-v2.patch @@ -1041,7 +1041,7 @@ index 4dd57007af218ba1c0e666117a49939c5884f2c6..a6cb949b6f048455acc50c897fdd93d3 } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 163c185f8ef72f5739b75f9768ebb4135dd3aaae..76fbb1bf99f7374129c04a3f1517c2abf97ba232 100644 +index e4d2771e86a0de4ea8bd08ca5811ce7a2e38c7d1..c8ba2eec9b1c07c9aba3d69d4f4501f1010de4e2 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -1,8 +1,10 @@ @@ -1125,7 +1125,7 @@ index 163c185f8ef72f5739b75f9768ebb4135dd3aaae..76fbb1bf99f7374129c04a3f1517c2ab } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 8509bf94f64c6b761ee38e39278d12fcedeeff75..5be81f72e01cf4f3d5f99b48b8c8a0d7df78f93b 100644 +index 566c32a71054479257b7fba981507fa2559aa9e6..109d6638d8fe035498bd717c180c9143ff00e0ad 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -528,13 +528,15 @@ public class ServerChunkCache extends ChunkSource { @@ -1217,7 +1217,7 @@ index 8509bf94f64c6b761ee38e39278d12fcedeeff75..5be81f72e01cf4f3d5f99b48b8c8a0d7 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8a6d3ea7fd43a6a25e904227f005a452956f7d9e..4dbac963fe8c006f75d47871a0545dd9b241b7eb 100644 +index d3beb7624daace9b6180a6721033a77df4faee04..9584f09f44445d91ee259f2a50b1fecf718e18dc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1,6 +1,8 @@ @@ -1388,7 +1388,7 @@ index 0251908052d6221dc9fdab38ff8cfb3b7be8d28b..7f9b560a415eec4008d0fdcfa427c3df // this.server.getCommands().performCommand(this.player.createCommandSourceStack(), s); // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 966291f62b8a57be28f47d6e5643bbcda57827c6..6ea948d9a7e20a389f445836f8ab40986f05fcd2 100644 +index 287a9b9827be0cf556aa5b1091e3520212ac7ba1..30a0335d1debaac45701149d243de05e4d71c3c1 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,5 +1,6 @@ @@ -1667,10 +1667,10 @@ index 23f0a89b01d02a5757a90f0232cafa8e1cd7cf85..53830d4f51365973092194ab38344ad1 private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); public CraftPersistentDataContainer persistentDataContainer; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index a26306c6077da40c719c2ef2e17f00c230c886d1..bd0d36822cbfb4005d280f8721b6ba0aafa370b4 100644 +index b61d9592f4a7e0e5c65cb9f317f2d1f3370311a4..a1c6225e57555c4bc736ceec7b6e915829a1e718 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -660,6 +660,7 @@ public class LevelChunk extends ChunkAccess { +@@ -662,6 +662,7 @@ public class LevelChunk extends ChunkAccess { server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkLoadEvent(this.bukkitChunk, this.needsDecoration)); if (this.needsDecoration) { @@ -1678,7 +1678,7 @@ index a26306c6077da40c719c2ef2e17f00c230c886d1..bd0d36822cbfb4005d280f8721b6ba0a this.needsDecoration = false; java.util.Random random = new java.util.Random(); random.setSeed(this.level.getSeed()); -@@ -679,6 +680,7 @@ public class LevelChunk extends ChunkAccess { +@@ -681,6 +682,7 @@ public class LevelChunk extends ChunkAccess { } } server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(this.bukkitChunk)); @@ -1687,10 +1687,10 @@ index a26306c6077da40c719c2ef2e17f00c230c886d1..bd0d36822cbfb4005d280f8721b6ba0a } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index e7f17f682346e083dab4944cc014b39f9d3a98de..d3051e8bdec40cc00326c6ab4ab08e56065c1f56 100644 +index ed639dbb4ea94839390778654c7dd0437bac41ac..1729af83b979e35a585c8d049b14dc23ddf23803 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -@@ -481,13 +481,10 @@ public class ChunkSerializer { +@@ -488,13 +488,10 @@ public class ChunkSerializer { ListTag nbttaglist1 = ChunkSerializer.getListOfCompoundsOrNull(nbt, "block_entities"); return nbttaglist == null && nbttaglist1 == null ? null : (chunk) -> { @@ -1704,14 +1704,14 @@ index e7f17f682346e083dab4944cc014b39f9d3a98de..d3051e8bdec40cc00326c6ab4ab08e56 if (nbttaglist1 != null) { for (int i = 0; i < nbttaglist1.size(); ++i) { CompoundTag nbttagcompound1 = nbttaglist1.getCompound(i); -@@ -505,7 +502,6 @@ public class ChunkSerializer { +@@ -512,7 +509,6 @@ public class ChunkSerializer { } } } - world.timings.syncChunkLoadTileEntitiesTimer.stopTiming(); // Spigot - // CraftBukkit start - load chunk persistent data from nbt - net.minecraft.nbt.Tag persistentBase = nbt.get("ChunkBukkitValues"); + }; + } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 0cd31f82fcaab925db6dcada3e9b42a48fe04c67..734fbbd27dc3bfed223ea03f246ebfb87a46225a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1918,10 +1918,10 @@ index b0ffa23faf62629043dfd613315eaf9c5fcc2cfe..00000000000000000000000000000000 - } -} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9a2ddc3bbbe0d974945b76f11a73386362a621b3..2b4ed77d537dc31df20d45538aca4ef360e747ee 100644 +index ccc3ee7666a974f4da74ffd4a396b714df58d591..005242fdd36821b8a4753d8d64e6070b53452f06 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1833,6 +1833,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1858,6 +1858,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { packet.components = components; CraftPlayer.this.getHandle().connection.send(packet); } diff --git a/patches/server/0012-Adventure.patch b/patches/server/0012-Adventure.patch index 8bc41b471..3fbeeec31 100644 --- a/patches/server/0012-Adventure.patch +++ b/patches/server/0012-Adventure.patch @@ -1485,7 +1485,7 @@ index c9a8d64ef23def0ad8e986a97c34331b8d54c205..2b24a41587fbe1fba70a0ab42d3dc333 @Override diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 6ea948d9a7e20a389f445836f8ab40986f05fcd2..1cfeaeeddbc97e28f51c79ab3082a5d387daaead 100644 +index 30a0335d1debaac45701149d243de05e4d71c3c1..bb8d5d43ebbba51ea3a82d2607d6c5647154a469 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; @@ -2363,7 +2363,7 @@ index 446fdca49a5a6999626a7ee3a1d5c168b15a09dd..f9863e138994f6c7a7975a852f106faa public boolean isOp() { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 2b4ed77d537dc31df20d45538aca4ef360e747ee..68a071ccfc16e3b840658b3bab01a0182d8cb271 100644 +index 005242fdd36821b8a4753d8d64e6070b53452f06..b83978957c867084decd3cd63e5ea03880f304b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -251,14 +251,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -2528,7 +2528,7 @@ index 2b4ed77d537dc31df20d45538aca4ef360e747ee..68a071ccfc16e3b840658b3bab01a018 } @Override -@@ -1701,6 +1765,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1722,6 +1786,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return (this.getHandle().clientViewDistance == null) ? Bukkit.getViewDistance() : this.getHandle().clientViewDistance; } @@ -2541,7 +2541,7 @@ index 2b4ed77d537dc31df20d45538aca4ef360e747ee..68a071ccfc16e3b840658b3bab01a018 @Override public int getPing() { return this.getHandle().latency; -@@ -1741,6 +1811,194 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1762,6 +1832,194 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().allowsListing(); } diff --git a/patches/server/0023-Player-affects-spawning-API.patch b/patches/server/0023-Player-affects-spawning-API.patch index 87d21e39a..977dd489a 100644 --- a/patches/server/0023-Player-affects-spawning-API.patch +++ b/patches/server/0023-Player-affects-spawning-API.patch @@ -47,7 +47,7 @@ index 53106d7bbfeaaf52bbe69471e70670412e8bdfd3..195cdae3f3a9fe8ecab2895a6000f6f8 return false; } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d149ecefb0ee379f3fa7e64e4d70bdd23adbd49b..5d37c82bd5cd20aa2d452f0214f3303768e36a3d 100644 +index b4e500a383d893b8de4ac800d035b581cd150af7..4d9b7fbb35d0c8f4fbb43b77a2e11a919614ab56 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -174,6 +174,9 @@ public abstract class Player extends LivingEntity { @@ -117,10 +117,10 @@ index c65d1dc6eb0c1fc7c4a91faf0f1c6f26b3c2a76e..0dc46471f7247e5d36c3896a0c874730 for(Player player : this.players()) { if (EntitySelector.NO_SPECTATORS.test(player) && EntitySelector.LIVING_ENTITY_STILL_ALIVE.test(player)) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 68a071ccfc16e3b840658b3bab01a0182d8cb271..4aa8ec18b0eeae23f9913878111af538e29d4f5b 100644 +index b83978957c867084decd3cd63e5ea03880f304b5..27eb934e762fb67dd69804d463e00a99e4431b16 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1779,8 +1779,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1800,8 +1800,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public String getLocale() { return this.getHandle().locale; diff --git a/patches/server/0024-Remove-invalid-mob-spawner-tile-entities.patch b/patches/server/0024-Remove-invalid-mob-spawner-tile-entities.patch index 00dc0b69a..4603fa730 100644 --- a/patches/server/0024-Remove-invalid-mob-spawner-tile-entities.patch +++ b/patches/server/0024-Remove-invalid-mob-spawner-tile-entities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove invalid mob spawner tile entities diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index bd0d36822cbfb4005d280f8721b6ba0aafa370b4..fc6324aae881358dbf74caa70cd84ca5f566c701 100644 +index a1c6225e57555c4bc736ceec7b6e915829a1e718..3830d0ef2936d37199a45035401efd6e19efdfa8 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -542,6 +542,11 @@ public class LevelChunk extends ChunkAccess { +@@ -544,6 +544,11 @@ public class LevelChunk extends ChunkAccess { } // CraftBukkit start diff --git a/patches/server/0026-Only-refresh-abilities-if-needed.patch b/patches/server/0026-Only-refresh-abilities-if-needed.patch index ee1200e9a..a35bb25c3 100644 --- a/patches/server/0026-Only-refresh-abilities-if-needed.patch +++ b/patches/server/0026-Only-refresh-abilities-if-needed.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Only refresh abilities if needed diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 4aa8ec18b0eeae23f9913878111af538e29d4f5b..a41590739e22feb4aebfd7192ebd1f77868dc07c 100644 +index 27eb934e762fb67dd69804d463e00a99e4431b16..4fb53ca63cc4f5fbb58266d5c76821039036bb85 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1448,12 +1448,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1469,12 +1469,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setFlying(boolean value) { diff --git a/patches/server/0028-Prevent-tile-entity-and-entity-crashes.patch b/patches/server/0028-Prevent-tile-entity-and-entity-crashes.patch index 78cdae51d..89b65d4ce 100644 --- a/patches/server/0028-Prevent-tile-entity-and-entity-crashes.patch +++ b/patches/server/0028-Prevent-tile-entity-and-entity-crashes.patch @@ -44,10 +44,10 @@ index 53830d4f51365973092194ab38344ad13e84470a..a1bfe449cc2a9155ac1b8e68882e630c } } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index fc6324aae881358dbf74caa70cd84ca5f566c701..5c77901cb6f3c9096b16f061a75341c2c9d466a9 100644 +index 3830d0ef2936d37199a45035401efd6e19efdfa8..8dda77880d42cf1b648324d945eb065681b59c33 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -1030,11 +1030,11 @@ public class LevelChunk extends ChunkAccess { +@@ -1032,11 +1032,11 @@ public class LevelChunk extends ChunkAccess { gameprofilerfiller.pop(); } catch (Throwable throwable) { diff --git a/patches/server/0039-Implement-PlayerLocaleChangeEvent.patch b/patches/server/0039-Implement-PlayerLocaleChangeEvent.patch index 2028cad1b..fdeac43ca 100644 --- a/patches/server/0039-Implement-PlayerLocaleChangeEvent.patch +++ b/patches/server/0039-Implement-PlayerLocaleChangeEvent.patch @@ -30,10 +30,10 @@ index 88b6be62678fc09b5a39db28c6d71cc31b16dbcd..352bfe795aea26307de9c998d67a43af this.locale = packet.language; // Paper start diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a41590739e22feb4aebfd7192ebd1f77868dc07c..2766b773ed255e3172ed52a3fb37d18f6f46999b 100644 +index 4fb53ca63cc4f5fbb58266d5c76821039036bb85..acce8810b2aeb991f738396830cfb2fd8c2ad1fe 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1779,8 +1779,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1800,8 +1800,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public String getLocale() { diff --git a/patches/server/0056-Add-exception-reporting-event.patch b/patches/server/0056-Add-exception-reporting-event.patch index ac130b204..58e9cd780 100644 --- a/patches/server/0056-Add-exception-reporting-event.patch +++ b/patches/server/0056-Add-exception-reporting-event.patch @@ -49,7 +49,7 @@ index 0000000000000000000000000000000000000000..f699ce18ca044f813e194ef2786b7ea8 + } +} diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 76fbb1bf99f7374129c04a3f1517c2abf97ba232..e302204e49bbab7a90090d99890b3072dbd4e7d1 100644 +index c8ba2eec9b1c07c9aba3d69d4f4501f1010de4e2..13038723347cdbada65611d9de542d35d94084a0 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -957,6 +957,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -151,7 +151,7 @@ index 81b61b6cc1e99328d4d339ca32895d1268c88ca7..28a7c53d98450cc79bee953411a18f50 } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 5c77901cb6f3c9096b16f061a75341c2c9d466a9..3bfc47869ad378ae2c1e506fd6af479353689507 100644 +index 8dda77880d42cf1b648324d945eb065681b59c33..049a2496e89a879c5b46f1e23d945a7c9461bafc 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -1,6 +1,7 @@ @@ -162,7 +162,7 @@ index 5c77901cb6f3c9096b16f061a75341c2c9d466a9..3bfc47869ad378ae2c1e506fd6af4793 import com.google.common.collect.Maps; import com.google.common.collect.UnmodifiableIterator; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -@@ -548,10 +549,15 @@ public class LevelChunk extends ChunkAccess { +@@ -550,10 +551,15 @@ public class LevelChunk extends ChunkAccess { this.removeBlockEntity(blockEntity.getBlockPos()); // Paper end } else { @@ -182,7 +182,7 @@ index 5c77901cb6f3c9096b16f061a75341c2c9d466a9..3bfc47869ad378ae2c1e506fd6af4793 // CraftBukkit end } } -@@ -1033,6 +1039,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1035,6 +1041,7 @@ public class LevelChunk extends ChunkAccess { // Paper start - Prevent tile entity and entity crashes final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); net.minecraft.server.MinecraftServer.LOGGER.error(msg, throwable); diff --git a/patches/server/0061-Complete-resource-pack-API.patch b/patches/server/0061-Complete-resource-pack-API.patch index 45ceb4c3b..97564d4fd 100644 --- a/patches/server/0061-Complete-resource-pack-API.patch +++ b/patches/server/0061-Complete-resource-pack-API.patch @@ -23,7 +23,7 @@ index 38909ef14fcfd4b93d83512f4cacbe2c3fe431a1..76e34fb4bb6b3d194e155bec30d36887 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index fe6ce60db2afee9a078e45ebb76c15ddeca8b9b4..7fa9227d2336eb0987d3b5a19edf35345decbcf9 100644 +index a0cfb8a2bb7a73caba7b8697aa0c7241a99ed5fc..6510cf916281f1f6f3a4902e7988283027586adf 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -133,6 +133,7 @@ import org.bukkit.metadata.MetadataValue; @@ -45,7 +45,7 @@ index fe6ce60db2afee9a078e45ebb76c15ddeca8b9b4..7fa9227d2336eb0987d3b5a19edf3534 public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); -@@ -1919,6 +1924,45 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1940,6 +1945,45 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean getAffectsSpawning() { return this.getHandle().affectsSpawning; } diff --git a/patches/server/0069-handle-NaN-health-absorb-values-and-repair-bad-data.patch b/patches/server/0069-handle-NaN-health-absorb-values-and-repair-bad-data.patch index 77773d7b3..707222d00 100644 --- a/patches/server/0069-handle-NaN-health-absorb-values-and-repair-bad-data.patch +++ b/patches/server/0069-handle-NaN-health-absorb-values-and-repair-bad-data.patch @@ -44,10 +44,10 @@ index 76da306041b61f6c93e6f58f580054af7dfc234e..2277b06e3e13a1abb469064d5b23495a } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7fa9227d2336eb0987d3b5a19edf35345decbcf9..a7047fa93b0fe08fb62f9b0984bcd3af9217c95f 100644 +index 6510cf916281f1f6f3a4902e7988283027586adf..9101f179b16a3761c17042059aa4cd983c3350e9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1724,6 +1724,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1745,6 +1745,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void setRealHealth(double health) { diff --git a/patches/server/0072-Optimize-isValidLocation-getType-and-getBlockData-fo.patch b/patches/server/0072-Optimize-isValidLocation-getType-and-getBlockData-fo.patch index c5924d32d..c9fd89d60 100644 --- a/patches/server/0072-Optimize-isValidLocation-getType-and-getBlockData-fo.patch +++ b/patches/server/0072-Optimize-isValidLocation-getType-and-getBlockData-fo.patch @@ -46,10 +46,10 @@ index de1bb9ecb8891b66b2c469f2ee52b9eee9d7ddea..7ee958e6a4f16780aa746ce0eb8cb8ee public static boolean isInSpawnableBounds(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -index 7cceac53e445fe199f59a619a69a96ef97ae50b5..04b58d6aec04cc98777f88c2bcc9a820c5fd2f57 100644 +index f529776a40744e18043b0e4a0df8873e6b920387..96dc50a24821016e53dfeac344c0e61f110a5a53 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -@@ -114,6 +114,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom +@@ -120,6 +120,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom return GameEventDispatcher.NOOP; } @@ -90,10 +90,10 @@ index ef74f37cae96e61d5648fce7bbd793fb67ba9e4a..7c5b3acd299c5b021bd20f17ff0b89c8 @Override public FluidState getFluidState(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 3bfc47869ad378ae2c1e506fd6af479353689507..e305f2839b1bea2a3c1938542c1157b0179aa4bc 100644 +index 049a2496e89a879c5b46f1e23d945a7c9461bafc..051ca5ac3bb9f66e921eaf49b1ee16b93b7daaa2 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -287,12 +287,28 @@ public class LevelChunk extends ChunkAccess { +@@ -289,12 +289,28 @@ public class LevelChunk extends ChunkAccess { }); } diff --git a/patches/server/0075-Configurable-Chunk-Inhabited-Time.patch b/patches/server/0075-Configurable-Chunk-Inhabited-Time.patch index dbf3d172e..5b4f51914 100644 --- a/patches/server/0075-Configurable-Chunk-Inhabited-Time.patch +++ b/patches/server/0075-Configurable-Chunk-Inhabited-Time.patch @@ -30,10 +30,10 @@ index aa8cd5965632626e4cbd4952acf9b349f79b2b1c..e7534ed3f995be64c99399ab76e98086 + } } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 6e998ca50d07e1ecb0cd0639b81cc07e8be71cb8..e641779c58b503c88cb533a45a3614f45c4b8fa3 100644 +index 051ca5ac3bb9f66e921eaf49b1ee16b93b7daaa2..a9a14062a94b18b553a10b30de0cda7354ae4b7d 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -280,6 +280,13 @@ public class LevelChunk extends ChunkAccess { +@@ -282,6 +282,13 @@ public class LevelChunk extends ChunkAccess { return new ChunkAccess.TicksToSave(this.blockTicks, this.fluidTicks); } diff --git a/patches/server/0108-Option-to-remove-corrupt-tile-entities.patch b/patches/server/0108-Option-to-remove-corrupt-tile-entities.patch index 4951088e1..7a9b695de 100644 --- a/patches/server/0108-Option-to-remove-corrupt-tile-entities.patch +++ b/patches/server/0108-Option-to-remove-corrupt-tile-entities.patch @@ -19,19 +19,19 @@ index d7734fbc6b684b14bc32c94e65947fb41aae126a..80345730b8ccc11d3d0833485d25b03f + } } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 5ff0475c08fe3e1a48358ddbf112345a985caad7..2cc323734a49d82104046f4f02eb224458c151b4 100644 +index a9a14062a94b18b553a10b30de0cda7354ae4b7d..a009122a8ea9dc2b04a178248f20ef01886e832b 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -261,7 +261,7 @@ public class LevelChunk extends ChunkAccess { +@@ -259,7 +259,7 @@ public class LevelChunk extends ChunkAccess { } this.setLightCorrect(protoChunk.isLightCorrect()); - this.unsaved = true; + this.setUnsaved(true); this.needsDecoration = true; // CraftBukkit - } - -@@ -580,6 +580,12 @@ public class LevelChunk extends ChunkAccess { + // CraftBukkit start + this.persistentDataContainer = protoChunk.persistentDataContainer; // SPIGOT-6814: copy PDC to account for 1.17 to 1.18 chunk upgrading. +@@ -582,6 +582,12 @@ public class LevelChunk extends ChunkAccess { "Chunk coordinates: " + (this.chunkPos.x * 16) + "," + (this.chunkPos.z * 16)); e.printStackTrace(); ServerInternalException.reportInternalException(e); diff --git a/patches/server/0167-API-to-get-a-BlockState-without-a-snapshot.patch b/patches/server/0167-API-to-get-a-BlockState-without-a-snapshot.patch index 4a1f8a615..2c9a426b2 100644 --- a/patches/server/0167-API-to-get-a-BlockState-without-a-snapshot.patch +++ b/patches/server/0167-API-to-get-a-BlockState-without-a-snapshot.patch @@ -109,17 +109,19 @@ index aa544f8be7d1db6fc6618d38efc40221afe85618..b98d442a8c749c59aff43189c3904ff4 public void refreshSnapshot() { diff --git a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java -index ddd7b63f0452042baa3fca04bb9fbdb42fcecbfd..b638351581fa09c488425a2318b782a5812140ce 100644 +index e2cb421132471ceb3db236cffea88585fbe3593a..af37bf2b8ef1c06e541fb42d15afdd9833ba93a4 100644 --- a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java -@@ -155,4 +155,10 @@ public final class CraftPersistentDataContainer implements PersistentDataContain - public Map serialize() { +@@ -172,6 +172,12 @@ public final class CraftPersistentDataContainer implements PersistentDataContain return (Map) CraftNBTTagConfigSerializer.serialize(this.toTagCompound()); } -+ + + // Paper start + public void clear() { + this.customDataTags.clear(); + } + // Paper end - } ++ + @FunctionalInterface + public interface Callback { + void onValueChange(); diff --git a/patches/server/0183-Player.setPlayerProfile-API.patch b/patches/server/0183-Player.setPlayerProfile-API.patch index 54aa815cd..87d60bb42 100644 --- a/patches/server/0183-Player.setPlayerProfile-API.patch +++ b/patches/server/0183-Player.setPlayerProfile-API.patch @@ -25,21 +25,8 @@ index 00ef714294b6cce5fec7613eed4ba228a48e3e11..67b300574655854249c1f7440f56a6e8 playerName = gameProfile.getName(); uniqueId = gameProfile.getId(); // Paper end -diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index a182c78c3718a6b8f56578c5e6b35ce5742046fe..85b50297d92c45872942effb770d0e85d864681e 100644 ---- a/src/main/java/net/minecraft/world/entity/player/Player.java -+++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -171,7 +171,7 @@ public abstract class Player extends LivingEntity { - protected int enchantmentSeed; - protected final float defaultFlySpeed = 0.02F; - private int lastLevelUpTime; -- private final GameProfile gameProfile; -+ public GameProfile gameProfile; // Paper - private->public - private boolean reducedDebugInfo; - private ItemStack lastItemInMainHand; - private final ItemCooldowns cooldowns; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f9964ef85a7162a5aed81041accf3ae1528c5144..b91ac44543d8bf52551b822f57c4992e951b81bd 100644 +index 853d6b7e329240b701854256419bea0d4fc4bd67..a440c8b56e21abab7774486d35dc64c454aa1a2b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -71,6 +71,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; @@ -50,45 +37,45 @@ index f9964ef85a7162a5aed81041accf3ae1528c5144..b91ac44543d8bf52551b822f57c4992e import net.minecraft.world.level.block.entity.SignBlockEntity; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; -@@ -1352,8 +1353,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.hiddenPlayers.put(player.getUniqueId(), hidingPlugins); +@@ -1357,8 +1358,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + this.hiddenEntities.put(entity.getUniqueId(), hidingPlugins); - // Remove this player from the hidden player's EntityTrackerEntry -- ChunkMap tracker = ((ServerLevel) entity.level).getChunkSource().chunkMap; + // Remove this entity from the hidden player's EntityTrackerEntry +- ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; + // Paper start - ServerPlayer other = ((CraftPlayer) player).getHandle(); -+ unregisterPlayer(other); + Entity other = ((CraftEntity) entity).getHandle(); ++ unregisterEntity(other); + } -+ private void unregisterPlayer(ServerPlayer other) { -+ ChunkMap tracker = ((ServerLevel) entity.level).getChunkSource().chunkMap; ++ private void unregisterEntity(Entity other) { + // Paper end ++ ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); if (entry != null) { entry.removePlayer(this.getHandle()); -@@ -1394,8 +1400,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1407,8 +1413,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } - this.hiddenPlayers.remove(player.getUniqueId()); + this.hiddenEntities.remove(entity.getUniqueId()); -- ChunkMap tracker = ((ServerLevel) entity.level).getChunkSource().chunkMap; +- ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; + // Paper start - ServerPlayer other = ((CraftPlayer) player).getHandle(); -+ registerPlayer(other); + Entity other = ((CraftEntity) entity).getHandle(); ++ registerEntity(other); + } -+ private void registerPlayer(ServerPlayer other) { -+ ChunkMap tracker = ((ServerLevel) entity.level).getChunkSource().chunkMap; ++ private void registerEntity(Entity other) { ++ ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; + // Paper end - this.getHandle().connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, other)); - -@@ -1404,6 +1415,50 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + if (other instanceof ServerPlayer) { + ServerPlayer otherPlayer = (ServerPlayer) other; +@@ -1420,6 +1431,50 @@ public class CraftPlayer extends CraftHumanEntity implements Player { entry.updatePlayer(this.getHandle()); } } + // Paper start + private void reregisterPlayer(ServerPlayer player) { -+ if (!hiddenPlayers.containsKey(player.getUUID())) { -+ unregisterPlayer(player); -+ registerPlayer(player); ++ if (!hiddenEntities.containsKey(player.getUUID())) { ++ unregisterEntity(player); ++ registerEntity(player); + } + } + public void setPlayerProfile(com.destroystokyo.paper.profile.PlayerProfile profile) { @@ -130,4 +117,4 @@ index f9964ef85a7162a5aed81041accf3ae1528c5144..b91ac44543d8bf52551b822f57c4992e + // Paper end public void removeDisconnectingPlayer(Player player) { - this.hiddenPlayers.remove(player.getUniqueId()); + this.hiddenEntities.remove(player.getUniqueId()); diff --git a/patches/server/0189-Flag-to-disable-the-channel-limit.patch b/patches/server/0189-Flag-to-disable-the-channel-limit.patch index 513a1c6ca..f6fa7995e 100644 --- a/patches/server/0189-Flag-to-disable-the-channel-limit.patch +++ b/patches/server/0189-Flag-to-disable-the-channel-limit.patch @@ -9,7 +9,7 @@ e.g. servers which allow and support the usage of mod packs. provide an optional flag to disable this check, at your own risk. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index b91ac44543d8bf52551b822f57c4992e951b81bd..89c689b253d082bfb45021739b2a8e3da8f461ea 100644 +index a440c8b56e21abab7774486d35dc64c454aa1a2b..6b1283721e0a456f27d39e3668d25ed399a02680 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -154,6 +154,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -20,7 +20,7 @@ index b91ac44543d8bf52551b822f57c4992e951b81bd..89c689b253d082bfb45021739b2a8e3d // Paper end public CraftPlayer(CraftServer server, ServerPlayer entity) { -@@ -1621,7 +1622,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1642,7 +1643,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void addChannel(String channel) { diff --git a/patches/server/0257-Asynchronous-chunk-IO-and-loading.patch b/patches/server/0257-Asynchronous-chunk-IO-and-loading.patch index 57dcff5c4..01bb0f56a 100644 --- a/patches/server/0257-Asynchronous-chunk-IO-and-loading.patch +++ b/patches/server/0257-Asynchronous-chunk-IO-and-loading.patch @@ -2304,7 +2304,7 @@ index 746d8eb657808bfaa92654c36093abd9b67a0288..3380aca80bdda5edf8809f6fe36eaf5b public String getLocalIp() { diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index b3ac5e2932f4b3de812b0c34655028d6adc36195..e01804a46ea268c7cd7bb01ec55b473d65dcb59e 100644 +index 45de5e508540b4ba622985d530f1aadaa7eb4535..5b8b9dabc6673b6f0a335a42d2ec71a583c410fb 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -412,7 +412,7 @@ public class ChunkHolder { @@ -2317,7 +2317,7 @@ index b3ac5e2932f4b3de812b0c34655028d6adc36195..e01804a46ea268c7cd7bb01ec55b473d ChunkHolder.FullChunkStatus playerchunk_state1 = ChunkHolder.getFullChunkStatus(this.ticketLevel); // CraftBukkit start diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 09980ee3daa2cdfbb98da3eb44d1eec670888144..415425364f739a8a1c7ec1f33df5bf2baba6558d 100644 +index 5c9e017e5b96024197d199ef754ccf93a00e851d..cfa2b34eb8bbf6cf6f36188dbb111e24e7407395 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -504,6 +504,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -2582,7 +2582,7 @@ index 09980ee3daa2cdfbb98da3eb44d1eec670888144..415425364f739a8a1c7ec1f33df5bf2b public CompoundTag readChunk(ChunkPos pos) throws IOException { CompoundTag nbttagcompound = this.read(pos); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 80ccd821d83b318d3758252ce4ed349bfa5acb69..30b38f85870bd3fd5f04e8ed37c360ee3a10abad 100644 +index 9090bc174c0ccb542616e756be66967f55f0a626..1dc1005142f822c05eb9065b4a5da456ec936ff2 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -502,10 +502,111 @@ public class ServerChunkCache extends ChunkSource { @@ -2744,7 +2744,7 @@ index 80ccd821d83b318d3758252ce4ed349bfa5acb69..30b38f85870bd3fd5f04e8ed37c360ee } finally { chunkMap.callbackExecutor.run(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8411c314b5a4a8131c8e96432f8b0f42b207277e..3f6634056fe00ee47e6b33deee97d67bd9dfa6fb 100644 +index 9a9ae2cac9f44e38f58bd58c279fc648ec728032..e1f8d771775acef29b8e4808a69d8e3a37070a28 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -307,6 +307,78 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -2938,7 +2938,7 @@ index 2b60fc107c309958ec3f20539b243d32765f3518..4a972b26242cf4c9d7e8f655cb1264cd HAS_SPACE(PoiRecord::hasSpace), IS_OCCUPIED(PoiRecord::isOccupied), diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b8241053505441e 100644 +index 1729af83b979e35a585c8d049b14dc23ddf23803..89de1589833dcce8028fd402aea8a3e57dc29e86 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java @@ -75,7 +75,31 @@ public class ChunkSerializer { @@ -3014,7 +3014,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 } } } -@@ -258,7 +296,7 @@ public class ChunkSerializer { +@@ -265,7 +303,7 @@ public class ChunkSerializer { } if (chunkstatus_type == ChunkStatus.ChunkType.LEVELCHUNK) { @@ -3023,7 +3023,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 } else { ProtoChunk protochunk1 = (ProtoChunk) object; -@@ -297,9 +335,67 @@ public class ChunkSerializer { +@@ -304,9 +342,67 @@ public class ChunkSerializer { protochunk1.setCarvingMask(worldgenstage_features, new CarvingMask(nbttagcompound4.getLongArray(s1), ((ChunkAccess) object).getMinBuildHeight())); } @@ -3092,7 +3092,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 private static void logErrors(ChunkPos chunkPos, int y, String message) { ChunkSerializer.LOGGER.error("Recoverable errors when loading section [" + chunkPos.x + ", " + y + ", " + chunkPos.z + "]: " + message); -@@ -310,6 +406,11 @@ public class ChunkSerializer { +@@ -317,6 +413,11 @@ public class ChunkSerializer { } public static CompoundTag write(ServerLevel world, ChunkAccess chunk) { @@ -3104,7 +3104,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 ChunkPos chunkcoordintpair = chunk.getPos(); CompoundTag nbttagcompound = new CompoundTag(); -@@ -317,7 +418,7 @@ public class ChunkSerializer { +@@ -324,7 +425,7 @@ public class ChunkSerializer { nbttagcompound.putInt("xPos", chunkcoordintpair.x); nbttagcompound.putInt("yPos", chunk.getMinSection()); nbttagcompound.putInt("zPos", chunkcoordintpair.z); @@ -3113,7 +3113,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 nbttagcompound.putLong("InhabitedTime", chunk.getInhabitedTime()); nbttagcompound.putString("Status", chunk.getStatus().getName()); BlendingData blendingdata = chunk.getBlendingData(); -@@ -360,8 +461,17 @@ public class ChunkSerializer { +@@ -367,8 +468,17 @@ public class ChunkSerializer { for (int i = lightenginethreaded.getMinLightSection(); i < lightenginethreaded.getMaxLightSection(); ++i) { int j = chunk.getSectionIndexFromSectionY(i); boolean flag1 = j >= 0 && j < achunksection.length; @@ -3133,7 +3133,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 if (flag1 || nibblearray != null || nibblearray1 != null) { CompoundTag nbttagcompound1 = new CompoundTag(); -@@ -399,8 +509,17 @@ public class ChunkSerializer { +@@ -406,8 +516,17 @@ public class ChunkSerializer { nbttagcompound.putBoolean("isLightOn", true); } @@ -3153,7 +3153,7 @@ index d3051e8bdec40cc00326c6ab4ab08e56065c1f56..9168bc15f8fbc8719e6c83428b824105 CompoundTag nbttagcompound2; -@@ -437,7 +556,14 @@ public class ChunkSerializer { +@@ -444,7 +563,14 @@ public class ChunkSerializer { nbttagcompound.put("CarvingMasks", nbttagcompound2); } diff --git a/patches/server/0259-Expose-attack-cooldown-methods-for-Player.patch b/patches/server/0259-Expose-attack-cooldown-methods-for-Player.patch index 47aed1f9b..cafd2d158 100644 --- a/patches/server/0259-Expose-attack-cooldown-methods-for-Player.patch +++ b/patches/server/0259-Expose-attack-cooldown-methods-for-Player.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose attack cooldown methods for Player diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ca123645456bdff52bbd02db333439472d9deaf5..c3847325dd0c0490496f7e0fb729972d42c1c754 100644 +index 91474f355a84fc3a8d84f615147d1ad2b4f47d3f..cb6dfe56856429cb69968ed4e7c04dff994c2e54 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2313,6 +2313,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2334,6 +2334,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.adventure$pointers; } diff --git a/patches/server/0260-Improve-death-events.patch b/patches/server/0260-Improve-death-events.patch index 7f9412464..8a8986ce0 100644 --- a/patches/server/0260-Improve-death-events.patch +++ b/patches/server/0260-Improve-death-events.patch @@ -269,10 +269,10 @@ index 91cf7728aee475cb36f2c02bbfb7e3d2e0d00576..a3a900d10440ed5ebe24370a77ccb6ca } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c3847325dd0c0490496f7e0fb729972d42c1c754..931d41ac0e0b0ef93fa8f836964aff56bd06a593 100644 +index cb6dfe56856429cb69968ed4e7c04dff994c2e54..39ee0c403064a34f48290d1e5b3c24c626d1c979 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1881,7 +1881,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1902,7 +1902,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void sendHealthUpdate() { diff --git a/patches/server/0299-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/patches/server/0299-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch index fdb568c3d..7a929b6a1 100644 --- a/patches/server/0299-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch +++ b/patches/server/0299-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch @@ -28,7 +28,7 @@ index f51c416e7938b7905f7efb154ab14cad643962e9..71cd61112fa36d1de2f5fc0dd75993fa public boolean queueHealthUpdatePacket = false; public net.minecraft.network.protocol.game.ClientboundSetHealthPacket queuedHealthUpdatePacket; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index fb16158ed403abaac740729cb351cd94a36653ac..e9447ac47a858fbc9e16559c18e377517b8089ac 100644 +index 6c03e900a23cced5874ba79f7b309b773f1bbc9e..fd965ebccc45f04d360dda8c7d0f9b640bcc67c1 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -173,6 +173,7 @@ public abstract class PlayerList { @@ -106,7 +106,7 @@ index c7e4c6d29378675b76ebb179022ddbb02831a1dc..88bc0807e8bf66a65422f85f11123363 public Location getBedSpawnLocation() { CompoundTag data = this.getData(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 931d41ac0e0b0ef93fa8f836964aff56bd06a593..377bbfd611ff1ddd3c8c2a4fc3e2d6b3b24f93b8 100644 +index 39ee0c403064a34f48290d1e5b3c24c626d1c979..26f64968afa68ac1915a7d89dde3cd31e6e11ccc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -155,6 +155,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -117,7 +117,7 @@ index 931d41ac0e0b0ef93fa8f836964aff56bd06a593..377bbfd611ff1ddd3c8c2a4fc3e2d6b3 // Paper end public CraftPlayer(CraftServer server, ServerPlayer entity) { -@@ -1525,6 +1526,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1546,6 +1547,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.firstPlayed = firstPlayed; } @@ -136,7 +136,7 @@ index 931d41ac0e0b0ef93fa8f836964aff56bd06a593..377bbfd611ff1ddd3c8c2a4fc3e2d6b3 public void readExtraData(CompoundTag nbttagcompound) { this.hasPlayedBefore = true; if (nbttagcompound.contains("bukkit")) { -@@ -1547,6 +1560,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1568,6 +1581,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void setExtraData(CompoundTag nbttagcompound) { @@ -145,7 +145,7 @@ index 931d41ac0e0b0ef93fa8f836964aff56bd06a593..377bbfd611ff1ddd3c8c2a4fc3e2d6b3 if (!nbttagcompound.contains("bukkit")) { nbttagcompound.put("bukkit", new CompoundTag()); } -@@ -1561,6 +1576,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1582,6 +1597,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { data.putLong("firstPlayed", this.getFirstPlayed()); data.putLong("lastPlayed", System.currentTimeMillis()); data.putString("lastKnownName", handle.getScoreboardName()); diff --git a/patches/server/0302-Block-Entity-remove-from-being-called-on-Players.patch b/patches/server/0302-Block-Entity-remove-from-being-called-on-Players.patch index 4d4559db3..26ae0f287 100644 --- a/patches/server/0302-Block-Entity-remove-from-being-called-on-Players.patch +++ b/patches/server/0302-Block-Entity-remove-from-being-called-on-Players.patch @@ -12,10 +12,10 @@ Player we will look at limiting the scope of this change. It appears to be unintentional in the few cases we've seen so far. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 377bbfd611ff1ddd3c8c2a4fc3e2d6b3b24f93b8..74f1bee84823bf6dac9fdecd47ec492071c07169 100644 +index 26f64968afa68ac1915a7d89dde3cd31e6e11ccc..8059715ce7328cc81cb4decddf0fb012905a08a2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2360,6 +2360,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2381,6 +2381,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetCooldown() { getHandle().resetAttackStrengthTicker(); } diff --git a/patches/server/0334-Fix-World-isChunkGenerated-calls.patch b/patches/server/0334-Fix-World-isChunkGenerated-calls.patch index ac4c97a1e..ccda73498 100644 --- a/patches/server/0334-Fix-World-isChunkGenerated-calls.patch +++ b/patches/server/0334-Fix-World-isChunkGenerated-calls.patch @@ -8,7 +8,7 @@ This patch also adds a chunk status cache on region files (note that its only purpose is to cache the status on DISK) diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 415425364f739a8a1c7ec1f33df5bf2baba6558d..a89af36c461432045fb4d00c0517db5c197245ce 100644 +index cfa2b34eb8bbf6cf6f36188dbb111e24e7407395..9876db4be3f9deede3a3a249d9909d749ba9aea6 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -87,6 +87,7 @@ import net.minecraft.world.level.chunk.ProtoChunk; @@ -103,10 +103,10 @@ index 328f482a0bae8d2f8013ae9a90f0500ef889ffb5..6c72854aa975800bd6160d104936a5ba return (ChunkStatus) Registry.CHUNK_STATUS.get(ResourceLocation.tryParse(id)); } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 9168bc15f8fbc8719e6c83428b8241053505441e..b44d621fc8a5194622775b7903de083cca999022 100644 +index 89de1589833dcce8028fd402aea8a3e57dc29e86..3e631d55d30831a4063e23f9dbc7a315d11a7b68 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -@@ -597,6 +597,17 @@ public class ChunkSerializer { +@@ -604,6 +604,17 @@ public class ChunkSerializer { })); } diff --git a/patches/server/0362-Tracking-Range-Improvements.patch b/patches/server/0362-Tracking-Range-Improvements.patch index 1ff59ebf3..68efc9d6e 100644 --- a/patches/server/0362-Tracking-Range-Improvements.patch +++ b/patches/server/0362-Tracking-Range-Improvements.patch @@ -8,10 +8,10 @@ Sets tracking range of watermobs to animals instead of misc and simplifies code Also ignores Enderdragon, defaulting it to Mojang's setting diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index fd1b17ae9f2d51183eebc2b23209f6c80d81b1f6..cb46732f78748864117cafa94f6d3af14205d71f 100644 +index 8120d74d0016bc9c57ac6f6284b62c14464b9a2c..34249b4eb28c9d0f157eebf0a2c1c50501df2a36 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1865,6 +1865,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1862,6 +1862,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); int j = entity.getType().clientTrackingRange() * 16; diff --git a/patches/server/0379-Optimise-Chunk-getFluid.patch b/patches/server/0379-Optimise-Chunk-getFluid.patch index b87d21f8c..d8c61122b 100644 --- a/patches/server/0379-Optimise-Chunk-getFluid.patch +++ b/patches/server/0379-Optimise-Chunk-getFluid.patch @@ -8,10 +8,10 @@ faster on its own, however removing the try catch makes it easier to inline due to code size diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 805101792508bd721dd38fb57514f7f21bd90504..fc0ac2a5ad24951f05a18607318e5b5edf4f3463 100644 +index a009122a8ea9dc2b04a178248f20ef01886e832b..e3b57c423244be04662576ecdc90a98fefe8e1b4 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -371,18 +371,20 @@ public class LevelChunk extends ChunkAccess { +@@ -373,18 +373,20 @@ public class LevelChunk extends ChunkAccess { } public FluidState getFluidState(int x, int y, int z) { @@ -38,7 +38,7 @@ index 805101792508bd721dd38fb57514f7f21bd90504..fc0ac2a5ad24951f05a18607318e5b5e } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Getting fluid state"); CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Block being got"); -@@ -392,6 +394,7 @@ public class LevelChunk extends ChunkAccess { +@@ -394,6 +396,7 @@ public class LevelChunk extends ChunkAccess { }); throw new ReportedException(crashreport); } @@ -47,7 +47,7 @@ index 805101792508bd721dd38fb57514f7f21bd90504..fc0ac2a5ad24951f05a18607318e5b5e // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index 92a42aea3f54c49e2055e8000645d91da9471e09..74f84597aa2631d693e4ed7b1ae525af4c80d37c 100644 +index 50b6ecfea7a342be0d21e37ae87777a4b4860026..f9e871cff9318e6fea92d5b7a7035b3bfa259bca 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -48,7 +48,7 @@ public class LevelChunkSection { diff --git a/patches/server/0393-Improved-Watchdog-Support.patch b/patches/server/0393-Improved-Watchdog-Support.patch index 7db73e78c..246d03f96 100644 --- a/patches/server/0393-Improved-Watchdog-Support.patch +++ b/patches/server/0393-Improved-Watchdog-Support.patch @@ -262,7 +262,7 @@ index 049eb5693dc98e1d0ec3bd88c73a41fdb2f59bff..0716aaf29f9d76240a0de4ca02daba44 } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 01f87e67d6760b295d7333973f39f8ff6ef3cee5..368dc3a7bd04b106db5b83d73dcab2e09c8d8af9 100644 +index b20e9664cc55c2da53b8aa3def5bf9376b68baf8..a87b62070b25ba429ec606ace2401b0b010de5bf 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -552,6 +552,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -274,7 +274,7 @@ index 01f87e67d6760b295d7333973f39f8ff6ef3cee5..368dc3a7bd04b106db5b83d73dcab2e0 list.stream().map((playerchunk) -> { CompletableFuture completablefuture; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 8901bb31524613bf3fbec3cc5d3c228f8b3f43a4..4e26475bf0f541d6b2f8b6eccfeaeb9ee5b4b2b8 100644 +index e1d729d86d11f9bc9452b7382f12aeb668c19936..dc6ea42139774d1cd4ff856781abb0327fd0da4c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -512,7 +512,7 @@ public abstract class PlayerList { @@ -311,10 +311,10 @@ index 9842e4d39130f45481b643df38ee4b25076c5c08..4a77494ddb94d5fd2d82665c6bd4e513 final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level.getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, throwable); diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 1df4ddab06b6065464302bdc0e4eb0950964fa84..b92da719a5d35a60a2e13ccb0f55c41b242f9b50 100644 +index e3b57c423244be04662576ecdc90a98fefe8e1b4..8c4cd4a82dcf5295a992c37914d3124d6615148a 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -1068,6 +1068,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1070,6 +1070,7 @@ public class LevelChunk extends ChunkAccess { gameprofilerfiller.pop(); } catch (Throwable throwable) { diff --git a/patches/server/0432-Optimize-anyPlayerCloseEnoughForSpawning-to-use-dist.patch b/patches/server/0432-Optimize-anyPlayerCloseEnoughForSpawning-to-use-dist.patch index 7a0006e19..8665e32e6 100644 --- a/patches/server/0432-Optimize-anyPlayerCloseEnoughForSpawning-to-use-dist.patch +++ b/patches/server/0432-Optimize-anyPlayerCloseEnoughForSpawning-to-use-dist.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Optimize anyPlayerCloseEnoughForSpawning to use distance maps Use a distance map to find the players in range quickly diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index b3dc875fde93095d20ae88159afe82c6b452ed8e..7c3eaa72263708f5b2cea455b3eea230bc633c5d 100644 +index 74d674b2684b0db4aa6c183edc6091d53e9ee882..626bcbc6dd013260c3f8b38a1d14e7ba35dc1e01 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -73,6 +73,18 @@ public class ChunkHolder { boolean isUpdateQueued = false; // Paper private final ChunkMap chunkMap; // Paper -+ // Paper start - optimise isOutsideOfRange ++ // Paper start - optimise anyPlayerCloseEnoughForSpawning + // cached here to avoid a map lookup + com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet playersInMobSpawnRange; + com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet playersInChunkTickRange; @@ -23,7 +23,7 @@ index b3dc875fde93095d20ae88159afe82c6b452ed8e..7c3eaa72263708f5b2cea455b3eea230 + this.playersInMobSpawnRange = this.chunkMap.playerMobSpawnMap.getObjectsInRange(key); + this.playersInChunkTickRange = this.chunkMap.playerChunkTickRangeMap.getObjectsInRange(key); + } -+ // Paper end - optimise isOutsideOfRange ++ // Paper end - optimise anyPlayerCloseEnoughForSpawning + public ChunkHolder(ChunkPos pos, int level, LevelHeightAccessor world, LevelLightEngine lightingProvider, ChunkHolder.LevelChangeListener levelUpdateListener, ChunkHolder.PlayerProvider playersWatchingChunkProvider) { this.futures = new AtomicReferenceArray(ChunkHolder.CHUNK_STATUSES.size()); @@ -32,19 +32,19 @@ index b3dc875fde93095d20ae88159afe82c6b452ed8e..7c3eaa72263708f5b2cea455b3eea230 this.setTicketLevel(level); this.changedBlocksPerSection = new ShortSet[world.getSectionsCount()]; this.chunkMap = (ChunkMap)playersWatchingChunkProvider; // Paper -+ this.updateRanges(); // Paper - optimise isOutsideOfRange ++ this.updateRanges(); // Paper - optimise anyPlayerCloseEnoughForSpawning } // CraftBukkit start diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1e9813109 100644 +index 4aa7672317dfd950495fa069f5e5b0f2aee21869..8e009c52070e0a939a479942d0ff4202f4463ad0 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -177,21 +177,40 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider final CallbackExecutor chunkLoadConversionCallbackExecutor = new CallbackExecutor(); // Paper // Paper start - distance maps private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>(); -+ // Paper start - optimise PlayerChunkMap#isOutsideRange ++ // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + // A note about the naming used here: + // Previously, mojang used a "spawn range" of 8 for controlling both ticking and + // mob spawn range. However, spigot makes the spawn range configurable by @@ -54,31 +54,31 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 + // these maps are named after spigot's uses + public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap; // this map is absent from updateMaps since it's controlled at the start of the chunkproviderserver tick + public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerChunkTickRangeMap; -+ // Paper end - optimise PlayerChunkMap#isOutsideRange ++ // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning void addPlayerToDistanceMaps(ServerPlayer player) { int chunkX = MCUtil.getChunkCoordinate(player.getX()); int chunkZ = MCUtil.getChunkCoordinate(player.getZ()); // Note: players need to be explicitly added to distance maps before they can be updated -+ // Paper start - optimise PlayerChunkMap#isOutsideRange ++ // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); + this.playerChunkTickRangeMap.add(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); -+ // Paper end - optimise PlayerChunkMap#isOutsideRange ++ // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning } void removePlayerFromDistanceMaps(ServerPlayer player) { - -+ // Paper start - optimise PlayerChunkMap#isOutsideRange ++ // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerMobSpawnMap.remove(player); + this.playerChunkTickRangeMap.remove(player); -+ // Paper end - optimise PlayerChunkMap#isOutsideRange ++ // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning } void updateMaps(ServerPlayer player) { int chunkX = MCUtil.getChunkCoordinate(player.getX()); int chunkZ = MCUtil.getChunkCoordinate(player.getZ()); // Note: players need to be explicitly added to distance maps before they can be updated -+ this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise PlayerChunkMap#isOutsideRange ++ this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise ChunkMap#anyPlayerCloseEnoughForSpawning } // Paper end // Paper start @@ -86,7 +86,7 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 this.regionManagers.add(this.dataRegionManager); // Paper end this.playerMobDistanceMap = this.level.paperConfig.perPlayerMobSpawns ? new com.destroystokyo.paper.util.PlayerMobDistanceMap() : null; // Paper -+ // Paper start - optimise PlayerChunkMap#isOutsideRange ++ // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerChunkTickRangeMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets, + (ServerPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ, + com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newState) -> { @@ -117,7 +117,7 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 + playerChunk.playersInMobSpawnRange = newState; + } + }); -+ // Paper end - optimise PlayerChunkMap#isOutsideRange ++ // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning } protected ChunkGenerator generator() { @@ -125,7 +125,7 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 } else { if (holder != null) { holder.setTicketLevel(level); -+ holder.updateRanges(); // Paper - optimise isOutsideOfRange ++ holder.updateRanges(); // Paper - optimise anyPlayerCloseEnoughForSpawning } if (holder != null) { @@ -143,7 +143,7 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 - double blockRange = 16384.0D; // Paper - // Spigot end - long i = chunkcoordintpair.toLong(); -+ // Paper start - optimise isOutsideOfRange ++ // Paper start - optimise anyPlayerCloseEnoughForSpawning + final boolean anyPlayerCloseEnoughForSpawning(ChunkPos chunkcoordintpair, boolean reducedRange) { + return this.anyPlayerCloseEnoughForSpawning(this.getUpdatingChunkIfPresent(chunkcoordintpair.toLong()), chunkcoordintpair, reducedRange); + } @@ -205,7 +205,7 @@ index f4fddfcb33ae463c6a86e7282d069279258bc4ff..e64d1493c5e77daad2e410647412a2e1 } + // no players in range + return false; -+ // Paper end - optimise isOutsideOfRange ++ // Paper end - optimise anyPlayerCloseEnoughForSpawning } public List getPlayersCloseForSpawning(ChunkPos pos) { @@ -272,7 +272,7 @@ index 8868ffcda194e8c2300181a2cdda9337dbde6284..95f195980e28bb59f43e5ca1d5e79ebe public String getDebugStatus() { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..f02643d12ac1959d92e895174b22775ee18a32d8 100644 +index 3c36dfa4f4c6025b02ec455d997f13226de75a64..76b56ea346d843aba482c52c4bfe877fdf0e9225 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -881,6 +881,37 @@ public class ServerChunkCache extends ChunkSource { @@ -306,7 +306,7 @@ index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..f02643d12ac1959d92e895174b22775e + int chunkZ = net.minecraft.server.MCUtil.getChunkCoordinate(player.getZ()); + + playerChunkMap.playerMobSpawnMap.addOrUpdate(player, chunkX, chunkZ, range); -+ player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in isOutsideRange ++ player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in anyPlayerCloseEnoughForSpawning + player.playerNaturallySpawnedEvent = event; + } + // Paper end - optimize isOutisdeRange @@ -335,10 +335,10 @@ index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..f02643d12ac1959d92e895174b22775e ChunkPos chunkcoordintpair = chunk1.getPos(); - if (this.level.isPositionEntityTicking(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair)) { -+ if (this.level.isPositionEntityTicking(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkproviderserver_a.holder, chunkcoordintpair, false)) { // Paper - optimise isOutsideOfRange ++ if (this.level.isPositionEntityTicking(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkproviderserver_a.holder, chunkcoordintpair, false)) { // Paper - optimise anyPlayerCloseEnoughForSpawning chunk1.incrementInhabitedTime(j); -- if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && !this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot -+ if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkproviderserver_a.holder, chunkcoordintpair, true)) { // Spigot // Paper - optimise isOutsideOfRange +- if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot ++ if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkproviderserver_a.holder, chunkcoordintpair, true)) { // Spigot // Paper - optimise anyPlayerCloseEnoughForSpawning NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); } diff --git a/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch b/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch index be3179492..fe018336f 100644 --- a/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch +++ b/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Use distance map to optimise entity tracker Use the distance map to find candidate players for tracking. diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046233e3d74 100644 +index 8e009c52070e0a939a479942d0ff4202f4463ad0..ea61f5df9a0998272dd5da1332aa0fbb8704cd5e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -67,6 +67,7 @@ import net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket; @@ -20,7 +20,7 @@ index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046 @@ -188,10 +189,35 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap; // this map is absent from updateMaps since it's controlled at the start of the chunkproviderserver tick public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerChunkTickRangeMap; - // Paper end - optimise PlayerChunkMap#isOutsideRange + // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + // Paper start - use distance map to optimise tracker + public static boolean isLegacyTrackingEntity(Entity entity) { + return entity.isLegacyTrackingEntity; @@ -51,7 +51,7 @@ index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046 + } + // Paper end - use distance map to optimise entity tracker // Note: players need to be explicitly added to distance maps before they can be updated - // Paper start - optimise PlayerChunkMap#isOutsideRange + // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); @@ -200,6 +226,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } @@ -62,7 +62,7 @@ index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046 + this.playerEntityTrackerTrackMaps[i].remove(player); + } + // Paper end - use distance map to optimise tracker - // Paper start - optimise PlayerChunkMap#isOutsideRange + // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning this.playerMobSpawnMap.remove(player); this.playerChunkTickRangeMap.remove(player); @@ -210,6 +241,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -77,7 +77,7 @@ index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046 + trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); + } + // Paper end - use distance map to optimise entity tracker - this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise PlayerChunkMap#isOutsideRange + this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise ChunkMap#anyPlayerCloseEnoughForSpawning } // Paper end @@ -285,6 +324,45 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -123,7 +123,7 @@ index e64d1493c5e77daad2e410647412a2e1e9813109..c9a10f327f971e68bf5bb4ed0793a046 + this.playerEntityTrackerTrackMaps[ordinal] = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets); + } + // Paper end - use distance map to optimise entity tracker - // Paper start - optimise PlayerChunkMap#isOutsideRange + // Paper start - optimise ChunkMap#anyPlayerCloseEnoughForSpawning this.playerChunkTickRangeMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets, (ServerPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ, @@ -1522,17 +1600,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider diff --git a/patches/server/0456-incremental-chunk-and-player-saving.patch b/patches/server/0456-incremental-chunk-and-player-saving.patch index e31629bf3..4e15ac954 100644 --- a/patches/server/0456-incremental-chunk-and-player-saving.patch +++ b/patches/server/0456-incremental-chunk-and-player-saving.patch @@ -98,13 +98,13 @@ index 4351dd9c293d1db48c87c5df28bcb2b9a59583f7..faa6f999f620712b90df465e0dc68e4f // Paper start - move executeAll() into full server tick timing try (co.aikar.timings.Timing ignored = MinecraftTimings.processTasksTimer.startTiming()) { diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index 0f859c9548487bcf3b254e39027ec4114ec6d4d7..35ff6e3b796068a6dd4a422a0106747eadacfa5a 100644 +index 626bcbc6dd013260c3f8b38a1d14e7ba35dc1e01..9e96b0465717bfa761289c255fd8d2f1df1be3d8 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -84,6 +84,8 @@ public class ChunkHolder { this.playersInChunkTickRange = this.chunkMap.playerChunkTickRangeMap.getObjectsInRange(key); } - // Paper end - optimise isOutsideOfRange + // Paper end - optimise anyPlayerCloseEnoughForSpawning + long lastAutoSaveTime; // Paper - incremental autosave + long inactiveTimeStart; // Paper - incremental autosave @@ -165,7 +165,7 @@ index 0f859c9548487bcf3b254e39027ec4114ec6d4d7..35ff6e3b796068a6dd4a422a0106747e for (int i = 0; i < this.futures.length(); ++i) { CompletableFuture> completablefuture = (CompletableFuture) this.futures.get(i); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index c9a10f327f971e68bf5bb4ed0793a046233e3d74..a65f3f24fe00b130520ba9af178f1cf7ad3ece26 100644 +index ea61f5df9a0998272dd5da1332aa0fbb8704cd5e..beb930fdb2535e32692906c54b8654401706086e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -101,6 +101,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureMana @@ -275,7 +275,7 @@ index c9a10f327f971e68bf5bb4ed0793a046233e3d74..a65f3f24fe00b130520ba9af178f1cf7 ChunkPos chunkcoordintpair = chunk.getPos(); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index f02643d12ac1959d92e895174b22775ee18a32d8..f9caa9524ebf0e1f073f23e97c84095b25a30023 100644 +index 76b56ea346d843aba482c52c4bfe877fdf0e9225..eb0c5ceb05f37bc653ea0cc91cc778866861688a 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -825,6 +825,15 @@ public class ServerChunkCache extends ChunkSource { @@ -295,7 +295,7 @@ index f02643d12ac1959d92e895174b22775ee18a32d8..f9caa9524ebf0e1f073f23e97c84095b public void close() throws IOException { // CraftBukkit start diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a5f0fe87bd5d75bf9a12ef284b0d635d8f6dd3a1..d55d2627b7e0c847250c551989d438280bef9ab8 100644 +index 44bc8657d1436114db9ac5f4bca23d330eb49d79..f82ad531d356a663bb085f50eeffbe8746fc6cd3 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1055,6 +1055,37 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -349,7 +349,7 @@ index 2f13055a39c26fe12d2c1094103186635e536166..4b83617a81db1749faaf49fc3ee77e44 private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10; public ServerGamePacketListenerImpl connection; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 30fa9ac91be2ecc55efeee9222835cbedc53acff..a40ca089d92df8f3ea0a444e3293531e787b196b 100644 +index 9b7fcd8be912cd211b6226386bd3340076953442..a8048e3af5bccb4cabe1ed1bc774aac6b8486bec 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -556,6 +556,7 @@ public abstract class PlayerList { @@ -385,10 +385,10 @@ index 30fa9ac91be2ecc55efeee9222835cbedc53acff..a40ca089d92df8f3ea0a444e3293531e MinecraftTimings.savePlayers.stopTiming(); // Paper return null; }); // Paper - ensure main diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -index 04b58d6aec04cc98777f88c2bcc9a820c5fd2f57..a44901edc49259ebbbb4367b0d10b8daa76b07cd 100644 +index 96dc50a24821016e53dfeac344c0e61f110a5a53..5093e34dddbea0f0d5c26f25c257b85bdf841a47 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -@@ -451,6 +451,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom +@@ -457,6 +457,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom public LevelHeightAccessor getHeightAccessorForGeneration() { return this; } @@ -397,7 +397,7 @@ index 04b58d6aec04cc98777f88c2bcc9a820c5fd2f57..a44901edc49259ebbbb4367b0d10b8da // CraftBukkit start - decompile error public static record TicksToSave(SerializableTickContainer blocks, SerializableTickContainer fluids) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index e44b0b2c0b22cdf64bf0e1f014fd4e5a21008fed..adc786dc249fbdd4f871fbeb1b47426447e224bc 100644 +index 8c4cd4a82dcf5295a992c37914d3124d6615148a..93e9ef06f02e5dc0c1bd0e8d714f44b2fea24db0 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -87,6 +87,12 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0470-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch b/patches/server/0470-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch index 8f0b8f761..651dabfc9 100644 --- a/patches/server/0470-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch +++ b/patches/server/0470-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch @@ -80,7 +80,7 @@ index 2fe519d4059fac06781c30e140895b604e13104f..35949e9c15eb998aa89842d34d0999cd chunkData.addProperty("queued-for-unload", chunkMap.toDrop.contains(playerChunk.pos.longKey)); chunkData.addProperty("status", status == null ? "unloaded" : status.toString()); diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index 9c58274f680c1f873b7832d2175d1d449544bff1..26cafbffd6820411df6b9c41bd295883e1090c40 100644 +index 9e96b0465717bfa761289c255fd8d2f1df1be3d8..87271552aa85626f22f7f8569c8fb48fe4b30bf3 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -57,7 +57,7 @@ public class ChunkHolder { @@ -360,7 +360,7 @@ index 9c58274f680c1f873b7832d2175d1d449544bff1..26cafbffd6820411df6b9c41bd295883 return this.isEntityTickingReady; } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index a65f3f24fe00b130520ba9af178f1cf7ad3ece26..4c48dcdb825e041a1d7392cea0e8afb687d45a0a 100644 +index beb930fdb2535e32692906c54b8654401706086e..849dbc24baa518145a63489e5616c9e11955955e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -128,6 +128,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -711,7 +711,7 @@ index 84dc1e94b4f7b8315d8422634dd49b1f85044d18..451d5e9b5906e662a0c2e04b407068ea Ticket ticket = new Ticket<>(TicketType.FORCED, 31, pos); long i = pos.toLong(); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 3f9366019d19f8fb5f636f1b301c2824a54865cd..58c22ed8e37b22b3b304139b1746b5bc8ba6f45a 100644 +index eb0c5ceb05f37bc653ea0cc91cc778866861688a..364375f5da5a3daea200c97c5dca86cbb8be5fb9 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -601,6 +601,26 @@ public class ServerChunkCache extends ChunkSource { @@ -1128,7 +1128,7 @@ index 8770fe0db46b01e8b608637df4f1a669a3f4cdde..3c1698ba0d3bc412ab957777d9b5211d private final String name; private final Comparator comparator; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index ed4e13528cf0fe48384efcb3f55cb5149f4cf681..55b7036a7b7fe45f2b8694bf8ab039d92de1c3bb 100644 +index c1bdd32fade0a613116b0ff848bfa5a4e8c428e6..bcc4de5c0f970325efaa9d99bb0845c2ed422b6d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -175,6 +175,7 @@ public abstract class PlayerList { @@ -1164,10 +1164,10 @@ index fb2d5c768b7dc5255db7dc7199ed750809a8fb94..9b254d00eb0cf0c4d4fe73e7a955b0b6 public float yRotO; public float xRotO; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 6a881c2abdbc23366a1b0ac69e363b196b99197b..ddf362fc14fcf83b22536b76cfc6ac1387b4c57a 100644 +index 93e9ef06f02e5dc0c1bd0e8d714f44b2fea24db0..a8bc174d0b5016cf595267d2727ab06d90f2c794 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -143,7 +143,7 @@ public class LevelChunk extends ChunkAccess { +@@ -141,7 +141,7 @@ public class LevelChunk extends ChunkAccess { return NEIGHBOUR_CACHE_RADIUS; } @@ -1176,7 +1176,7 @@ index 6a881c2abdbc23366a1b0ac69e363b196b99197b..ddf362fc14fcf83b22536b76cfc6ac13 private long neighbourChunksLoadedBitset; private final LevelChunk[] loadedNeighbourChunks = new LevelChunk[(NEIGHBOUR_CACHE_RADIUS * 2 + 1) * (NEIGHBOUR_CACHE_RADIUS * 2 + 1)]; -@@ -681,6 +681,7 @@ public class LevelChunk extends ChunkAccess { +@@ -683,6 +683,7 @@ public class LevelChunk extends ChunkAccess { // CraftBukkit start public void loadCallback() { @@ -1184,7 +1184,7 @@ index 6a881c2abdbc23366a1b0ac69e363b196b99197b..ddf362fc14fcf83b22536b76cfc6ac13 // Paper start - neighbour cache int chunkX = this.chunkPos.x; int chunkZ = this.chunkPos.z; -@@ -735,6 +736,7 @@ public class LevelChunk extends ChunkAccess { +@@ -737,6 +738,7 @@ public class LevelChunk extends ChunkAccess { } public void unloadCallback() { @@ -1210,7 +1210,7 @@ index c11bdc266434aa9d90e5ab25e185dc1a1ba57d9b..eea11a2bf87d409f484f07f207c57c86 net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk) either.left().orElse(null); if (chunk != null) addTicket(x, z); // Paper diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c9d2777748f2df4260fa2a7df4ddb090524fa9f8..da614e5fd56963794cf4915076a42693d5b3ffbe 100644 +index c852759b9a925b5d3377a3cf062a378d39c879fd..df5c2290a7890651e6592ed8586c63bfa783f583 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -908,6 +908,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0484-Brand-support.patch b/patches/server/0484-Brand-support.patch index b3efaa93c..aa269cdab 100644 --- a/patches/server/0484-Brand-support.patch +++ b/patches/server/0484-Brand-support.patch @@ -72,10 +72,10 @@ index 26bd27d3dd6e99488fd0a77257866b1eb1b191b8..c5fc4a2470093202f38472df84355ba0 return (!this.player.joining && !this.connection.isConnected()) || this.processedDisconnect; // Paper } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index da614e5fd56963794cf4915076a42693d5b3ffbe..f89fdf2913fb7caf0526b6f144638294cc688af4 100644 +index df5c2290a7890651e6592ed8586c63bfa783f583..e0efff05f10d4b994fabaa45d39b616a6b231685 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2500,6 +2500,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2525,6 +2525,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper end }; diff --git a/patches/server/0490-Improve-Chunk-Status-Transition-Speed.patch b/patches/server/0490-Improve-Chunk-Status-Transition-Speed.patch index 565e1bc8e..9daba0d15 100644 --- a/patches/server/0490-Improve-Chunk-Status-Transition-Speed.patch +++ b/patches/server/0490-Improve-Chunk-Status-Transition-Speed.patch @@ -36,11 +36,11 @@ scenario / path: Previously would have hopped to SERVER around 12+ times there extra. diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index 26cafbffd6820411df6b9c41bd295883e1090c40..5b9abfb7b8edd686f416a46851f12bd52bea7000 100644 +index 87271552aa85626f22f7f8569c8fb48fe4b30bf3..80aae4303e011dad13ce818136f0383e12ab5c41 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -87,6 +87,13 @@ public class ChunkHolder { - // Paper end - optimise isOutsideOfRange + // Paper end - optimise anyPlayerCloseEnoughForSpawning long lastAutoSaveTime; // Paper - incremental autosave long inactiveTimeStart; // Paper - incremental autosave + // Paper start - optimize chunk status progression without jumping through thread pool @@ -54,7 +54,7 @@ index 26cafbffd6820411df6b9c41bd295883e1090c40..5b9abfb7b8edd686f416a46851f12bd5 public ChunkHolder(ChunkPos pos, int level, LevelHeightAccessor world, LevelLightEngine lightingProvider, ChunkHolder.LevelChangeListener levelUpdateListener, ChunkHolder.PlayerProvider playersWatchingChunkProvider) { this.futures = new AtomicReferenceArray(ChunkHolder.CHUNK_STATUSES.size()); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 4c48dcdb825e041a1d7392cea0e8afb687d45a0a..d9f6d47629f2f4aa1db5a19b8cb7229a0905b75e 100644 +index 849dbc24baa518145a63489e5616c9e11955955e..2bec5bf41fe25c00b68c1040b68b2e204e67cf44 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -674,7 +674,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider diff --git a/patches/server/0536-Fix-Player-spawnParticle-x-y-z-precision-loss.patch b/patches/server/0536-Fix-Player-spawnParticle-x-y-z-precision-loss.patch index 673f5803d..0b0e93132 100644 --- a/patches/server/0536-Fix-Player-spawnParticle-x-y-z-precision-loss.patch +++ b/patches/server/0536-Fix-Player-spawnParticle-x-y-z-precision-loss.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix Player spawnParticle x/y/z precision loss diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 10435f34526b20e50737a0328b464d7f1236f4bd..ef6c209221ad3a48ea9749d81a9f536443fb9403 100644 +index bd507525e3b5f5d632ed515f08942be9d08796f3..9499062a2d8d69764c314a791622c967641e3543 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2080,7 +2080,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2101,7 +2101,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (data != null && !particle.getDataType().isInstance(data)) { throw new IllegalArgumentException("data should be " + particle.getDataType() + " got " + data.getClass()); } diff --git a/patches/server/0753-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch b/patches/server/0753-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch index 929ad6d97..14c56b557 100644 --- a/patches/server/0753-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch +++ b/patches/server/0753-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch @@ -10,7 +10,7 @@ hoping that at least then we don't swap chunks, and maybe recover them all. diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 03439b92297d8a2d73f21ddb57b3b2087f70907c..45930793e7fffe6ce243c7637cb9c0e948c6a83d 100644 +index 5cbcd113385e6bef3eddd969841ee4ac2a8a8923..859e23a182e97afa179419973485208bb0aa84ca 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java @@ -66,6 +66,12 @@ import org.apache.logging.log4j.LogManager; @@ -26,7 +26,7 @@ index 03439b92297d8a2d73f21ddb57b3b2087f70907c..45930793e7fffe6ce243c7637cb9c0e9 public static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codec(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); private static final Logger LOGGER = LogManager.getLogger(); -@@ -443,7 +449,7 @@ public class ChunkSerializer { +@@ -450,7 +456,7 @@ public class ChunkSerializer { nbttagcompound.putInt("xPos", chunkcoordintpair.x); nbttagcompound.putInt("yPos", chunk.getMinSection()); nbttagcompound.putInt("zPos", chunkcoordintpair.z); diff --git a/patches/server/0774-Optimise-nearby-player-lookups.patch b/patches/server/0774-Optimise-nearby-player-lookups.patch index 6e33fa7ae..c23c08abe 100644 --- a/patches/server/0774-Optimise-nearby-player-lookups.patch +++ b/patches/server/0774-Optimise-nearby-player-lookups.patch @@ -9,7 +9,7 @@ since the penalty of a map lookup could outweigh the benefits of searching less players (as it basically did in the outside range patch). diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index 454018b973bde7131353d23920a1e65693b04a65..fe618afd578e4b2af6a0879e84f2b10985dbf639 100644 +index bb411853cb9e0120bcaa82e878724ee17167057b..7f663523b8c43b356763d6d5249e1aec416de37c 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -83,6 +83,12 @@ public class ChunkHolder { @@ -23,10 +23,10 @@ index 454018b973bde7131353d23920a1e65693b04a65..fe618afd578e4b2af6a0879e84f2b109 + } + // Paper end - optimise checkDespawn } - // Paper end - optimise isOutsideOfRange + // Paper end - optimise anyPlayerCloseEnoughForSpawning long lastAutoSaveTime; // Paper - incremental autosave diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b58338d53877 100644 +index 05fd5f8bd0f88fe8e8cd1492c2d4a6e3ad90374c..2da01d9b3f371ec992d1114c0c1501fa2f09adbd 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -159,6 +159,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -46,7 +46,7 @@ index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b583 @@ -239,6 +246,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); this.playerChunkTickRangeMap.add(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); - // Paper end - optimise PlayerChunkMap#isOutsideRange + // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerGeneralAreaMap.add(player, chunkX, chunkZ, GENERAL_AREA_MAP_SQUARE_RADIUS); // Paper - optimise checkDespawn } @@ -54,7 +54,7 @@ index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b583 @@ -251,6 +259,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.playerMobSpawnMap.remove(player); this.playerChunkTickRangeMap.remove(player); - // Paper end - optimise PlayerChunkMap#isOutsideRange + // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerGeneralAreaMap.remove(player); // Paper - optimise checkDespawns } @@ -62,7 +62,7 @@ index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b583 @@ -266,6 +275,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } // Paper end - use distance map to optimise entity tracker - this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise PlayerChunkMap#isOutsideRange + this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + this.playerGeneralAreaMap.update(player, chunkX, chunkZ, GENERAL_AREA_MAP_SQUARE_RADIUS); // Paper - optimise checkDespawn } // Paper end @@ -70,7 +70,7 @@ index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b583 @@ -421,6 +431,23 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } }); - // Paper end - optimise PlayerChunkMap#isOutsideRange + // Paper end - optimise ChunkMap#anyPlayerCloseEnoughForSpawning + // Paper start - optimise checkDespawn + this.playerGeneralAreaMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets, + (ServerPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ, @@ -92,7 +92,7 @@ index bf87cbe80a5119fd06b108722d3968c72c41fe2a..f6d5bf3474dbf37095778cd8d774b583 protected ChunkGenerator generator() { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 94ba82b4c7d4a308eec0475d3fe790f0498dbe29..d47b21b5edc2734cdd45ed3282df98babe0045c0 100644 +index 96548781eefb60c0d0c5c4d242de687481a5faf0..7cc142f8d2fe8d0443d5822137ebec1dfac2a54c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -396,6 +396,83 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -309,10 +309,10 @@ index 928025438af179711c42381fc3eaeac74cd20c59..c48d0773e7f1af4bc247d777eccc8a42 private static Boolean isValidSpawnPostitionForType(ServerLevel world, MobCategory group, StructureFeatureManager structureAccessor, ChunkGenerator chunkGenerator, MobSpawnSettings.SpawnerData spawnEntry, BlockPos.MutableBlockPos pos, double squaredDistance) { // Paper diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 9c33c0b10e8854822605c65cde54b93747bf629d..376099c21d9e0ddeeeac28a7c3c21200c657404b 100644 +index a8bc174d0b5016cf595267d2727ab06d90f2c794..b64272b8353cceb2489bc33e36585155347b7d58 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -237,6 +237,93 @@ public class LevelChunk extends ChunkAccess { +@@ -235,6 +235,93 @@ public class LevelChunk extends ChunkAccess { } } // Paper end diff --git a/patches/server/0810-Rewrite-the-light-engine.patch b/patches/server/0810-Rewrite-the-light-engine.patch index 9691264f1..1963b2174 100644 --- a/patches/server/0810-Rewrite-the-light-engine.patch +++ b/patches/server/0810-Rewrite-the-light-engine.patch @@ -4405,7 +4405,7 @@ index 315bd2408e4a45993c9b2572e0ab5260a70522ec..c0d123bff1825366c30aadd3ad8a7fde Deque queue = new ArrayDeque<>(MCUtil.getSpiralOutChunks(center, radius)); updateLight(sender, world, lightengine, queue); diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java -index fe618afd578e4b2af6a0879e84f2b10985dbf639..31592058edcb27ba1557efcdd2eec7b8e2e7985c 100644 +index 7f663523b8c43b356763d6d5249e1aec416de37c..873a9767687ee78a852e2392d12bafa25e4ddca3 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -52,7 +52,7 @@ public class ChunkHolder { @@ -4418,7 +4418,7 @@ index fe618afd578e4b2af6a0879e84f2b10985dbf639..31592058edcb27ba1557efcdd2eec7b8 private final DebugBuffer chunkToSaveHistory; public int oldTicketLevel; diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 7c4154b1b5ccc53af5f5fb186c2a5d1ff88c7af1..cf6f5388e171035a22e9c35c9dd5d75d147562a4 100644 +index 8f5e443c49ce2dd1319d3fcb2dee1f6104c367fb..dad9553cd47731cffbf0a10865e54f584ad794c7 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -130,7 +130,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -4797,13 +4797,13 @@ index ce4848bdd00c091b9eb5fa2d47b03378d43c91b2..1831588b275f11aff37573fead835f6d } diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -index a44901edc49259ebbbb4367b0d10b8daa76b07cd..4a04e742ffa090046341974cf8ec9c1b97dc382d 100644 +index 5093e34dddbea0f0d5c26f25c257b85bdf841a47..f932cd79e58e472e76aaf36382494c2ad3206311 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -@@ -77,6 +77,48 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom - protected final LevelHeightAccessor levelHeightAccessor; - protected final LevelChunkSection[] sections; - +@@ -81,6 +81,47 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom + private static final org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry(); + public org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(ChunkAccess.DATA_TYPE_REGISTRY); + // CraftBukkit end + // Paper start - rewrite light engine + private volatile ca.spottedleaf.starlight.common.light.SWMRNibbleArray[] blockNibbles; + @@ -4845,10 +4845,9 @@ index a44901edc49259ebbbb4367b0d10b8daa76b07cd..4a04e742ffa090046341974cf8ec9c1b + this.blockEmptinessMap = emptinessMap; + } + // Paper end - rewrite light engine -+ + public ChunkAccess(ChunkPos pos, UpgradeData upgradeData, LevelHeightAccessor heightLimitView, Registry biome, long inhabitedTime, @Nullable LevelChunkSection[] sectionArrayInitializer, @Nullable BlendingData blendingData) { this.locX = pos.x; this.locZ = pos.z; // Paper - reduce need for field lookups - this.chunkPos = pos; this.coordinateKey = ChunkPos.asLong(locX, locZ); // Paper - cache long key diff --git a/src/main/java/net/minecraft/world/level/chunk/EmptyLevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/EmptyLevelChunk.java index 25e9cc39d748dfd99d38f504c14f40f9ec7bdd2d..d14416f186292f2dda5f6539d285705226b7c699 100644 --- a/src/main/java/net/minecraft/world/level/chunk/EmptyLevelChunk.java @@ -4946,7 +4945,7 @@ index 7c5b3acd299c5b021bd20f17ff0b89c8208a6623..d29739c3a67e60741a06fb25bcaf7705 super(wrapped.getPos(), UpgradeData.EMPTY, wrapped.levelHeightAccessor, wrapped.getLevel().registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), wrapped.getBlendingData()); this.wrapped = wrapped; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 376099c21d9e0ddeeeac28a7c3c21200c657404b..5ade22df6f8a2b839f494ab0898a87c3b7cd4e63 100644 +index b64272b8353cceb2489bc33e36585155347b7d58..86875d7593598850ab08003820895771e1ba2e2b 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -100,6 +100,10 @@ public class LevelChunk extends ChunkAccess { @@ -4960,7 +4959,7 @@ index 376099c21d9e0ddeeeac28a7c3c21200c657404b..5ade22df6f8a2b839f494ab0898a87c3 this.tickersInLevel = Maps.newHashMap(); this.clientLightReady = false; this.level = (ServerLevel) world; // CraftBukkit - type -@@ -327,6 +331,12 @@ public class LevelChunk extends ChunkAccess { +@@ -325,6 +329,12 @@ public class LevelChunk extends ChunkAccess { public LevelChunk(ServerLevel world, ProtoChunk protoChunk, @Nullable LevelChunk.PostLoadProcessor entityLoader) { this(world, protoChunk.getPos(), protoChunk.getUpgradeData(), protoChunk.unpackBlockTicks(), protoChunk.unpackFluidTicks(), protoChunk.getInhabitedTime(), protoChunk.getSections(), entityLoader, protoChunk.getBlendingData()); @@ -5004,7 +5003,7 @@ index 568dc3c9cbf009a3892766cacdd00667556e27c5..e7676e86c08affa8e730c13f11d4b269 this.fluidTicks = fluidTickScheduler; } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418c7c39f41 100644 +index 859e23a182e97afa179419973485208bb0aa84ca..d81a2e74cadccebeb5242b34f4550686db684fdb 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java @@ -79,6 +79,14 @@ public class ChunkSerializer { @@ -5115,7 +5114,7 @@ index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418 object = protochunk; protochunk.setInhabitedTime(l); -@@ -390,7 +415,7 @@ public class ChunkSerializer { +@@ -397,7 +422,7 @@ public class ChunkSerializer { DataLayer[] blockLight = new DataLayer[lightenginethreaded.getMaxLightSection() - lightenginethreaded.getMinLightSection()]; DataLayer[] skyLight = new DataLayer[lightenginethreaded.getMaxLightSection() - lightenginethreaded.getMinLightSection()]; @@ -5124,7 +5123,7 @@ index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418 DataLayer blockArray = lightenginethreaded.getLayerListener(LightLayer.BLOCK).getDataLayerData(SectionPos.of(chunkPos, i)); DataLayer skyArray = lightenginethreaded.getLayerListener(LightLayer.SKY).getDataLayerData(SectionPos.of(chunkPos, i)); -@@ -442,6 +467,12 @@ public class ChunkSerializer { +@@ -449,6 +474,12 @@ public class ChunkSerializer { } public static CompoundTag saveChunk(ServerLevel world, ChunkAccess chunk, @org.checkerframework.checker.nullness.qual.Nullable AsyncSaveData asyncsavedata) { // Paper end @@ -5137,7 +5136,7 @@ index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418 ChunkPos chunkcoordintpair = chunk.getPos(); CompoundTag nbttagcompound = new CompoundTag(); -@@ -492,20 +523,14 @@ public class ChunkSerializer { +@@ -499,20 +530,14 @@ public class ChunkSerializer { for (int i = lightenginethreaded.getMinLightSection(); i < lightenginethreaded.getMaxLightSection(); ++i) { int j = chunk.getSectionIndexFromSectionY(i); boolean flag1 = j >= 0 && j < achunksection.length; @@ -5165,7 +5164,7 @@ index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418 if (flag1) { LevelChunkSection chunksection = achunksection[j]; -@@ -520,13 +545,27 @@ public class ChunkSerializer { +@@ -527,13 +552,27 @@ public class ChunkSerializer { nbttagcompound1.put("biomes", (Tag) dataresult1.getOrThrow(false, logger1::error)); } @@ -5197,7 +5196,7 @@ index 45930793e7fffe6ce243c7637cb9c0e948c6a83d..e072a895ed71bb2e98a3a0c4aef37418 if (!nbttagcompound1.isEmpty()) { nbttagcompound1.putByte("Y", (byte) i); -@@ -537,7 +576,8 @@ public class ChunkSerializer { +@@ -544,7 +583,8 @@ public class ChunkSerializer { nbttagcompound.put("sections", nbttaglist); if (flag) { diff --git a/patches/server/0811-Load-chunk-PDC-if-present.patch b/patches/server/0811-Load-chunk-PDC-if-present.patch deleted file mode 100644 index b3090adaf..000000000 --- a/patches/server/0811-Load-chunk-PDC-if-present.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jake -Date: Sun, 28 Nov 2021 12:34:51 -0800 -Subject: [PATCH] Load chunk PDC if present - - -diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index e072a895ed71bb2e98a3a0c4aef37418c7c39f41..c7f9e155b14beab5b0ba1d4debddc9747f13675d 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -+++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -@@ -687,8 +687,9 @@ public class ChunkSerializer { - private static LevelChunk.PostLoadProcessor postLoadChunk(ServerLevel world, CompoundTag nbt) { - ListTag nbttaglist = ChunkSerializer.getListOfCompoundsOrNull(nbt, "entities"); - ListTag nbttaglist1 = ChunkSerializer.getListOfCompoundsOrNull(nbt, "block_entities"); -+ boolean hasPdc = nbt.contains("ChunkBukkitValues", Tag.TAG_COMPOUND); // Paper - -- return nbttaglist == null && nbttaglist1 == null ? null : (chunk) -> { -+ return nbttaglist == null && nbttaglist1 == null && !hasPdc ? null : (chunk) -> { // Paper - if (nbttaglist != null) { - world.addLegacyChunkEntities(EntityType.loadEntitiesRecursive(nbttaglist, world)); - } diff --git a/work/Bukkit b/work/Bukkit index c9b35cdb6..810cb078f 160000 --- a/work/Bukkit +++ b/work/Bukkit @@ -1 +1 @@ -Subproject commit c9b35cdb66761dfbda6f0b860bdb3c2edfda8679 +Subproject commit 810cb078fd22fde8bf94b5a23ed3329f0b1f68db diff --git a/work/CraftBukkit b/work/CraftBukkit index c86a3f7a5..04f8e7e21 160000 --- a/work/CraftBukkit +++ b/work/CraftBukkit @@ -1 +1 @@ -Subproject commit c86a3f7a5877acb5406147923ac48d91c2f6e7d4 +Subproject commit 04f8e7e21f574311f67a6b0dd3bff1597630fef1 diff --git a/work/Spigot b/work/Spigot index 7514aa374..b11f318fd 160000 --- a/work/Spigot +++ b/work/Spigot @@ -1 +1 @@ -Subproject commit 7514aa374a331a548a45673de71e557a96125eda +Subproject commit b11f318fd202a058333afbe406ebcce83037b562