From 15a9af2f5ed2c1d1e63cc071711ee02db5e146fb Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 5 Dec 2023 20:54:55 +0100 Subject: [PATCH] More more more work --- .../Add-PlayerUseUnknownEntityEvent.patch | 0 .../server/Add-World-Util-Methods.patch | 0 ...-to-configure-frosted_ice-properties.patch | 0 ...dd-configurable-portal-search-radius.patch | 2 +- .../Add-exception-reporting-event.patch | 2 +- ...ent-to-allow-plugins-to-handle-clien.patch | 0 ...working-with-arrows-stuck-in-living-.patch | 0 .../server/Add-velocity-warnings.patch | 0 ...chunks-are-slime-spawn-chunks-toggle.patch | 10 +++--- ...llow-Reloading-of-Custom-Permissions.patch | 0 ...e-informative-in-maxHealth-exception.patch | 0 .../server/Chunk-Save-Reattempt.patch | 0 .../server/Complete-resource-pack-API.patch | 6 ++-- .../Configurable-Chunk-Inhabited-Time.patch | 0 ...urable-Disabling-Cat-Chest-Detection.patch | 0 ...urable-Non-Player-Arrow-Despawn-Rate.patch | 0 .../Configurable-Player-Collision.patch | 8 ++--- .../server/Configurable-RCON-IP-address.patch | 2 +- ...ble-inter-world-teleportation-safety.patch | 0 ...gurable-random-tick-rates-for-blocks.patch | 2 +- ...le-spawn-chances-for-skeleton-horses.patch | 0 .../Custom-replacement-for-eaten-items.patch | 0 ...ading-permissions.yml-before-plugins.patch | 0 ...oreboards-for-non-players-by-default.patch | 4 +-- .../Do-not-load-chunks-for-Pathfinding.patch | 0 ...y-scoreboard-teams-to-scoreboard.dat.patch | 0 ...Entity-AddTo-RemoveFrom-World-Events.patch | 0 .../server/EntityPathfindEvent.patch | 0 ...ityRegainHealthEvent-isFastRegen-API.patch | 0 .../server/Expose-server-CommandMap.patch | 0 ...g-BlockPlaceEvent-triggering-physics.patch | 0 .../Handle-Item-Meta-Inconsistencies.patch | 6 ++-- ...item-frames-performance-and-bug-fixe.patch | 0 .../Improve-Player-chat-API-handling.patch | 0 ...ckPhysicsEvent-if-a-plugin-has-a-lis.patch | 4 +-- .../server/Optimize-DataBits.patch | 0 ...ldBounds-and-getBlockState-for-inlin.patch | 0 ...nilla-per-world-scoreboard-coloring-.patch | 0 .../Player-Tab-List-and-Title-APIs.patch | 4 +-- .../server/Remove-Metadata-on-reload.patch | 0 ...egionFileCache-and-make-configurable.patch | 0 ...cing-for-EntityLiving-hasLineOfSight.patch | 0 .../Use-a-Shared-Random-for-Entities.patch | 4 +-- ...th-absorb-values-and-repair-bad-data.patch | 0 ...-possibility-for-getServer-singleton.patch | 0 ...-don-t-need-to-when-cerealising-text.patch | 35 ------------------- 46 files changed, 27 insertions(+), 62 deletions(-) rename patches/{unapplied => }/server/Add-PlayerUseUnknownEntityEvent.patch (100%) rename patches/{unapplied => }/server/Add-World-Util-Methods.patch (100%) rename patches/{unapplied => }/server/Add-ability-to-configure-frosted_ice-properties.patch (100%) rename patches/{unapplied => }/server/Add-configurable-portal-search-radius.patch (98%) rename patches/{unapplied => }/server/Add-exception-reporting-event.patch (99%) rename patches/{unapplied => }/server/Add-handshake-event-to-allow-plugins-to-handle-clien.patch (100%) rename patches/{unapplied => }/server/Add-methods-for-working-with-arrows-stuck-in-living-.patch (100%) rename patches/{unapplied => }/server/Add-velocity-warnings.patch (100%) rename patches/{unapplied => }/server/All-chunks-are-slime-spawn-chunks-toggle.patch (80%) rename patches/{unapplied => }/server/Allow-Reloading-of-Custom-Permissions.patch (100%) rename patches/{unapplied => }/server/Be-a-bit-more-informative-in-maxHealth-exception.patch (100%) rename patches/{unapplied => }/server/Chunk-Save-Reattempt.patch (100%) rename patches/{unapplied => }/server/Complete-resource-pack-API.patch (94%) rename patches/{unapplied => }/server/Configurable-Chunk-Inhabited-Time.patch (100%) rename patches/{unapplied => }/server/Configurable-Disabling-Cat-Chest-Detection.patch (100%) rename patches/{unapplied => }/server/Configurable-Non-Player-Arrow-Despawn-Rate.patch (100%) rename patches/{unapplied => }/server/Configurable-Player-Collision.patch (95%) rename patches/{unapplied => }/server/Configurable-RCON-IP-address.patch (91%) rename patches/{unapplied => }/server/Configurable-inter-world-teleportation-safety.patch (100%) rename patches/{unapplied => }/server/Configurable-random-tick-rates-for-blocks.patch (98%) rename patches/{unapplied => }/server/Configurable-spawn-chances-for-skeleton-horses.patch (100%) rename patches/{unapplied => }/server/Custom-replacement-for-eaten-items.patch (100%) rename patches/{unapplied => }/server/Default-loading-permissions.yml-before-plugins.patch (100%) rename patches/{unapplied => }/server/Disable-Scoreboards-for-non-players-by-default.patch (96%) rename patches/{unapplied => }/server/Do-not-load-chunks-for-Pathfinding.patch (100%) rename patches/{unapplied => }/server/Don-t-save-empty-scoreboard-teams-to-scoreboard.dat.patch (100%) rename patches/{unapplied => }/server/Entity-AddTo-RemoveFrom-World-Events.patch (100%) rename patches/{unapplied => }/server/EntityPathfindEvent.patch (100%) rename patches/{unapplied => }/server/EntityRegainHealthEvent-isFastRegen-API.patch (100%) rename patches/{unapplied => }/server/Expose-server-CommandMap.patch (100%) rename patches/{unapplied => }/server/Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch (100%) rename patches/{unapplied => }/server/Handle-Item-Meta-Inconsistencies.patch (98%) rename patches/{unapplied => }/server/Improve-Maps-in-item-frames-performance-and-bug-fixe.patch (100%) rename patches/{unapplied => }/server/Improve-Player-chat-API-handling.patch (100%) rename patches/{unapplied => }/server/Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch (96%) rename patches/{unapplied => }/server/Optimize-DataBits.patch (100%) rename patches/{unapplied => }/server/Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch (100%) rename patches/{unapplied => }/server/Option-to-use-vanilla-per-world-scoreboard-coloring-.patch (100%) rename patches/{unapplied => }/server/Player-Tab-List-and-Title-APIs.patch (97%) rename patches/{unapplied => }/server/Remove-Metadata-on-reload.patch (100%) rename patches/{unapplied => }/server/Sanitise-RegionFileCache-and-make-configurable.patch (100%) rename patches/{unapplied => }/server/Strip-raytracing-for-EntityLiving-hasLineOfSight.patch (100%) rename patches/{unapplied => }/server/Use-a-Shared-Random-for-Entities.patch (98%) rename patches/{unapplied => }/server/handle-NaN-health-absorb-values-and-repair-bad-data.patch (100%) rename patches/{unapplied => }/server/remove-null-possibility-for-getServer-singleton.patch (100%) delete mode 100644 patches/unapplied/server/Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch diff --git a/patches/unapplied/server/Add-PlayerUseUnknownEntityEvent.patch b/patches/server/Add-PlayerUseUnknownEntityEvent.patch similarity index 100% rename from patches/unapplied/server/Add-PlayerUseUnknownEntityEvent.patch rename to patches/server/Add-PlayerUseUnknownEntityEvent.patch diff --git a/patches/unapplied/server/Add-World-Util-Methods.patch b/patches/server/Add-World-Util-Methods.patch similarity index 100% rename from patches/unapplied/server/Add-World-Util-Methods.patch rename to patches/server/Add-World-Util-Methods.patch diff --git a/patches/unapplied/server/Add-ability-to-configure-frosted_ice-properties.patch b/patches/server/Add-ability-to-configure-frosted_ice-properties.patch similarity index 100% rename from patches/unapplied/server/Add-ability-to-configure-frosted_ice-properties.patch rename to patches/server/Add-ability-to-configure-frosted_ice-properties.patch diff --git a/patches/unapplied/server/Add-configurable-portal-search-radius.patch b/patches/server/Add-configurable-portal-search-radius.patch similarity index 98% rename from patches/unapplied/server/Add-configurable-portal-search-radius.patch rename to patches/server/Add-configurable-portal-search-radius.patch index ca257ce63e..e58fce8934 100644 --- a/patches/unapplied/server/Add-configurable-portal-search-radius.patch +++ b/patches/server/Add-configurable-portal-search-radius.patch @@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/jav index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S double d0 = DimensionType.getTeleportationScale(this.level().dimensionType(), destination.dimensionType()); BlockPos blockposition = worldborder.clampToBounds(this.getX() * d0, this.getY(), this.getZ() * d0); // CraftBukkit start diff --git a/patches/unapplied/server/Add-exception-reporting-event.patch b/patches/server/Add-exception-reporting-event.patch similarity index 99% rename from patches/unapplied/server/Add-exception-reporting-event.patch rename to patches/server/Add-exception-reporting-event.patch index b23a9b799c..1f27509c2e 100644 --- a/patches/unapplied/server/Add-exception-reporting-event.patch +++ b/patches/server/Add-exception-reporting-event.patch @@ -60,7 +60,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 import com.google.common.collect.Maps; import com.google.common.io.Files; @@ -0,0 +0,0 @@ public class OldUsersConverter { - root = NbtIo.readCompressed(new java.io.FileInputStream(file5)); + root = NbtIo.readCompressed(new java.io.FileInputStream(file5), NbtAccounter.unlimitedHeap()); } catch (Exception exception) { exception.printStackTrace(); + ServerInternalException.reportInternalException(exception); // Paper diff --git a/patches/unapplied/server/Add-handshake-event-to-allow-plugins-to-handle-clien.patch b/patches/server/Add-handshake-event-to-allow-plugins-to-handle-clien.patch similarity index 100% rename from patches/unapplied/server/Add-handshake-event-to-allow-plugins-to-handle-clien.patch rename to patches/server/Add-handshake-event-to-allow-plugins-to-handle-clien.patch diff --git a/patches/unapplied/server/Add-methods-for-working-with-arrows-stuck-in-living-.patch b/patches/server/Add-methods-for-working-with-arrows-stuck-in-living-.patch similarity index 100% rename from patches/unapplied/server/Add-methods-for-working-with-arrows-stuck-in-living-.patch rename to patches/server/Add-methods-for-working-with-arrows-stuck-in-living-.patch diff --git a/patches/unapplied/server/Add-velocity-warnings.patch b/patches/server/Add-velocity-warnings.patch similarity index 100% rename from patches/unapplied/server/Add-velocity-warnings.patch rename to patches/server/Add-velocity-warnings.patch diff --git a/patches/unapplied/server/All-chunks-are-slime-spawn-chunks-toggle.patch b/patches/server/All-chunks-are-slime-spawn-chunks-toggle.patch similarity index 80% rename from patches/unapplied/server/All-chunks-are-slime-spawn-chunks-toggle.patch rename to patches/server/All-chunks-are-slime-spawn-chunks-toggle.patch index 4318fc1bdd..1fb755eba0 100644 --- a/patches/unapplied/server/All-chunks-are-slime-spawn-chunks-toggle.patch +++ b/patches/server/All-chunks-are-slime-spawn-chunks-toggle.patch @@ -9,14 +9,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java @@ -0,0 +0,0 @@ public class Slime extends Mob implements Enemy { - } + } - ChunkPos chunkcoordintpair = new ChunkPos(pos); -- boolean flag = WorldgenRandom.seedSlimeChunk(chunkcoordintpair.x, chunkcoordintpair.z, ((WorldGenLevel) world).getSeed(), world.getMinecraftWorld().spigotConfig.slimeSeed).nextInt(10) == 0; // Spigot + ChunkPos chunkcoordintpair = new ChunkPos(pos); +- boolean flag = WorldgenRandom.seedSlimeChunk(chunkcoordintpair.x, chunkcoordintpair.z, ((WorldGenLevel) world).getSeed(), world.getMinecraftWorld().spigotConfig.slimeSeed).nextInt(10) == 0; // Spigot + boolean flag = world.getMinecraftWorld().paperConfig().entities.spawning.allChunksAreSlimeChunks || WorldgenRandom.seedSlimeChunk(chunkcoordintpair.x, chunkcoordintpair.z, ((WorldGenLevel) world).getSeed(), world.getMinecraftWorld().spigotConfig.slimeSeed).nextInt(10) == 0; // Spigot // Paper - if (random.nextInt(10) == 0 && flag && pos.getY() < 40) { - return checkMobSpawnRules(type, world, spawnReason, pos, random); + if (random.nextInt(10) == 0 && flag && pos.getY() < 40) { + return checkMobSpawnRules(type, world, spawnReason, pos, random); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java diff --git a/patches/unapplied/server/Allow-Reloading-of-Custom-Permissions.patch b/patches/server/Allow-Reloading-of-Custom-Permissions.patch similarity index 100% rename from patches/unapplied/server/Allow-Reloading-of-Custom-Permissions.patch rename to patches/server/Allow-Reloading-of-Custom-Permissions.patch diff --git a/patches/unapplied/server/Be-a-bit-more-informative-in-maxHealth-exception.patch b/patches/server/Be-a-bit-more-informative-in-maxHealth-exception.patch similarity index 100% rename from patches/unapplied/server/Be-a-bit-more-informative-in-maxHealth-exception.patch rename to patches/server/Be-a-bit-more-informative-in-maxHealth-exception.patch diff --git a/patches/unapplied/server/Chunk-Save-Reattempt.patch b/patches/server/Chunk-Save-Reattempt.patch similarity index 100% rename from patches/unapplied/server/Chunk-Save-Reattempt.patch rename to patches/server/Chunk-Save-Reattempt.patch diff --git a/patches/unapplied/server/Complete-resource-pack-API.patch b/patches/server/Complete-resource-pack-API.patch similarity index 94% rename from patches/unapplied/server/Complete-resource-pack-API.patch rename to patches/server/Complete-resource-pack-API.patch index 3c7b179140..c5ef910176 100644 --- a/patches/unapplied/server/Complete-resource-pack-API.patch +++ b/patches/server/Complete-resource-pack-API.patch @@ -9,12 +9,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -0,0 +0,0 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - ServerCommonPacketListenerImpl.LOGGER.info("Disconnecting {} due to resource pack rejection", this.playerProfile().getName()); + ServerCommonPacketListenerImpl.LOGGER.info("Disconnecting {} due to resource pack {} rejection", this.playerProfile().getName(), packet.id()); this.disconnect(Component.translatable("multiplayer.requiredTexturePrompt.disconnect")); } -- this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), PlayerResourcePackStatusEvent.Status.values()[packet.getAction().ordinal()])); // CraftBukkit +- this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), PlayerResourcePackStatusEvent.Status.values()[packet.action().ordinal()])); // CraftBukkit + // Paper start -+ PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packet.getAction().ordinal()]; ++ PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packet.action().ordinal()]; + player.getBukkitEntity().setResourcePackStatus(packStatus); + this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit + // Paper end diff --git a/patches/unapplied/server/Configurable-Chunk-Inhabited-Time.patch b/patches/server/Configurable-Chunk-Inhabited-Time.patch similarity index 100% rename from patches/unapplied/server/Configurable-Chunk-Inhabited-Time.patch rename to patches/server/Configurable-Chunk-Inhabited-Time.patch diff --git a/patches/unapplied/server/Configurable-Disabling-Cat-Chest-Detection.patch b/patches/server/Configurable-Disabling-Cat-Chest-Detection.patch similarity index 100% rename from patches/unapplied/server/Configurable-Disabling-Cat-Chest-Detection.patch rename to patches/server/Configurable-Disabling-Cat-Chest-Detection.patch diff --git a/patches/unapplied/server/Configurable-Non-Player-Arrow-Despawn-Rate.patch b/patches/server/Configurable-Non-Player-Arrow-Despawn-Rate.patch similarity index 100% rename from patches/unapplied/server/Configurable-Non-Player-Arrow-Despawn-Rate.patch rename to patches/server/Configurable-Non-Player-Arrow-Despawn-Rate.patch diff --git a/patches/unapplied/server/Configurable-Player-Collision.patch b/patches/server/Configurable-Player-Collision.patch similarity index 95% rename from patches/unapplied/server/Configurable-Player-Collision.patch rename to patches/server/Configurable-Player-Collision.patch index 68a78038be..c16b6ac858 100644 --- a/patches/unapplied/server/Configurable-Player-Collision.patch +++ b/patches/server/Configurable-Player-Collision.patch @@ -50,10 +50,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 import net.minecraft.world.scores.DisplaySlot; import net.minecraft.world.scores.Objective; import net.minecraft.world.scores.PlayerTeam; -+import net.minecraft.world.scores.Scoreboard; // Paper - import net.minecraft.world.scores.Team; ++import net.minecraft.world.scores.Team; import org.slf4j.Logger; + // CraftBukkit start @@ -0,0 +0,0 @@ public abstract class PlayerList { // CraftBukkit start private CraftServer cserver; @@ -67,7 +67,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 player.initInventoryMenu(); // CraftBukkit - Moved from above, added world + // Paper start - Add to collideRule team if needed -+ final Scoreboard scoreboard = this.getServer().getLevel(Level.OVERWORLD).getScoreboard(); ++ final net.minecraft.world.scores.Scoreboard scoreboard = this.getServer().getLevel(Level.OVERWORLD).getScoreboard(); + final PlayerTeam collideRuleTeam = scoreboard.getPlayerTeam(this.collideRuleTeamName); + if (this.collideRuleTeamName != null && collideRuleTeam != null && player.getTeam() == null) { + scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); @@ -82,7 +82,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + // Paper start - Remove from collideRule team if needed + if (this.collideRuleTeamName != null) { -+ final Scoreboard scoreBoard = this.server.getLevel(Level.OVERWORLD).getScoreboard(); ++ final net.minecraft.world.scores.Scoreboard scoreBoard = this.server.getLevel(Level.OVERWORLD).getScoreboard(); + final PlayerTeam team = scoreBoard.getPlayersTeam(this.collideRuleTeamName); + if (entityplayer.getTeam() == team && team != null) { + scoreBoard.removePlayerFromTeam(entityplayer.getScoreboardName(), team); diff --git a/patches/unapplied/server/Configurable-RCON-IP-address.patch b/patches/server/Configurable-RCON-IP-address.patch similarity index 91% rename from patches/unapplied/server/Configurable-RCON-IP-address.patch rename to patches/server/Configurable-RCON-IP-address.patch index 24018d3016..6adf07b882 100644 --- a/patches/unapplied/server/Configurable-RCON-IP-address.patch +++ b/patches/server/Configurable-RCON-IP-address.patch @@ -23,7 +23,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 super(properties, optionset); @@ -0,0 +0,0 @@ public class DedicatedServerProperties extends Settings= level; } @@ -89,7 +89,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 private CraftEntity bukkitEntity; public CraftEntity getBukkitEntity() { -@@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; diff --git a/patches/unapplied/server/handle-NaN-health-absorb-values-and-repair-bad-data.patch b/patches/server/handle-NaN-health-absorb-values-and-repair-bad-data.patch similarity index 100% rename from patches/unapplied/server/handle-NaN-health-absorb-values-and-repair-bad-data.patch rename to patches/server/handle-NaN-health-absorb-values-and-repair-bad-data.patch diff --git a/patches/unapplied/server/remove-null-possibility-for-getServer-singleton.patch b/patches/server/remove-null-possibility-for-getServer-singleton.patch similarity index 100% rename from patches/unapplied/server/remove-null-possibility-for-getServer-singleton.patch rename to patches/server/remove-null-possibility-for-getServer-singleton.patch diff --git a/patches/unapplied/server/Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch b/patches/unapplied/server/Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch deleted file mode 100644 index f4f710b3a0..0000000000 --- a/patches/unapplied/server/Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Riley Park -Date: Tue, 8 Mar 2016 18:28:43 -0800 -Subject: [PATCH] Don't nest if we don't need to when cerealising text - components - - -diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSystemChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSystemChatPacket.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSystemChatPacket.java -+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSystemChatPacket.java -@@ -0,0 +0,0 @@ public record ClientboundSystemChatPacket(@javax.annotation.Nullable net.kyori.a - } - - public ClientboundSystemChatPacket(net.md_5.bungee.api.chat.BaseComponent[] content, boolean overlay) { -- this(null, net.md_5.bungee.chat.ComponentSerializer.toString(content), overlay); // Paper - Adventure -+ this(null, improveBungeeComponentSerialization(content), overlay); // Paper - Adventure - } - // Spigot end - // Paper start -@@ -0,0 +0,0 @@ public record ClientboundSystemChatPacket(@javax.annotation.Nullable net.kyori.a - public ClientboundSystemChatPacket(net.kyori.adventure.text.Component content, boolean overlay) { - this(content, null, overlay); - } -+ -+ private static String improveBungeeComponentSerialization(net.md_5.bungee.api.chat.BaseComponent[] content) { -+ if (content.length == 1) { -+ return net.md_5.bungee.chat.ComponentSerializer.toString(content[0]); -+ } else { -+ return net.md_5.bungee.chat.ComponentSerializer.toString(content); -+ } -+ } - // Paper end - - public ClientboundSystemChatPacket(FriendlyByteBuf buf) {