From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Thu, 9 May 2024 20:30:32 -0400 Subject: [PATCH] Skip null banner pattern Try to fix https://github.com/PaperMC/Paper/issues/10677 diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 16dba0fe00150ea919deff052b5dc7a2732741c1..f838839aba8b00474c6f7c95c37a88bb3bf4a884 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -377,6 +377,7 @@ public abstract class PlayerList { ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player final List onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join + System.out.println("看380: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer1 = (ServerPlayer) this.players.get(i); @@ -698,6 +699,7 @@ public abstract class PlayerList { // CraftBukkit start // this.broadcastAll(new ClientboundPlayerInfoRemovePacket(List.of(entityplayer.getUUID()))); ClientboundPlayerInfoRemovePacket packet = new ClientboundPlayerInfoRemovePacket(List.of(entityplayer.getUUID())); + System.out.println("看702: " + this.players.size()); for (int i = 0; i < this.players.size(); i++) { ServerPlayer entityplayer2 = (ServerPlayer) this.players.get(i); @@ -724,6 +726,7 @@ public abstract class PlayerList { ServerPlayer entityplayer; + System.out.println("看729: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { entityplayer = (ServerPlayer) this.players.get(i); if (entityplayer.getUUID().equals(uuid) || (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && entityplayer.getGameProfile().getName().equalsIgnoreCase(gameprofile.getName()))) { // Paper - validate usernames @@ -776,6 +779,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; + System.out.println("看782: " + this.players.size()); if (this.players.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameprofile))) { // Purpur event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } @@ -1080,6 +1084,7 @@ public abstract class PlayerList { for (ServerPlayer targetPlayer : sendAllPlayerInfoBucket) { // Gale end - Purpur - spread out sending all player info var target = targetPlayer.getBukkitEntity();; + System.out.println("看1087: " + this.players.size()); final List list = new java.util.ArrayList<>(this.players.size()); for (ServerPlayer player : this.players) { if (target.canSee(player.getUUID())) { @@ -1111,6 +1116,7 @@ public abstract class PlayerList { // CraftBukkit start - add a world/entity limited version public void broadcastAll(Packet packet, net.minecraft.world.entity.player.Player entityhuman) { + System.out.println("看1119: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer = this.players.get(i); if (entityhuman != null && !entityplayer.getBukkitEntity().canSee(entityhuman.getBukkitEntity())) { @@ -1121,6 +1127,7 @@ public abstract class PlayerList { } public void broadcastAll(Packet packet, Level world) { + System.out.println("看1130: " + this.players.size()); for (int i = 0; i < world.players().size(); ++i) { ((ServerPlayer) world.players().get(i)).connection.send(packet); } @@ -1180,6 +1187,7 @@ public abstract class PlayerList { if (scoreboardteam == null) { this.broadcastSystemMessage(message, false); } else { + System.out.println("看1190: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer = (ServerPlayer) this.players.get(i); @@ -1192,6 +1200,7 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { + System.out.println("看1203: " + this.players.size()); String[] astring = new String[this.players.size()]; for (int i = 0; i < this.players.size(); ++i) { @@ -1307,6 +1316,7 @@ public abstract class PlayerList { } public void broadcast(@Nullable net.minecraft.world.entity.player.Player player, double x, double y, double z, double distance, ResourceKey worldKey, Packet packet) { + System.out.println("看1319: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer = (ServerPlayer) this.players.get(i); @@ -1338,6 +1348,7 @@ public abstract class PlayerList { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main int numSaved = 0; long now = MinecraftServer.currentTick; + System.out.println("看1351: " + this.players.size()); for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer = this.players.get(i); if (interval == -1 || now - entityplayer.lastSave >= interval) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java index 6a3b0c7f0cc3ffb17a231383ad103fa792d7b7ba..3286a2a485dab1fb35910ffa350b1d85fde3ad80 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java @@ -79,6 +79,7 @@ public class CraftMetaBanner extends CraftMetaItem implements BannerMeta { List patterns = entityTag.layers(); for (int i = 0; i < Math.min(patterns.size(), 20); i++) { BannerPatternLayers.Layer p = patterns.get(i); + if (p.pattern() == null || p.pattern().value() == null) continue; // Leaf - Skip null banner pattern DyeColor color = DyeColor.getByWoolData((byte) p.color().getId()); PatternType pattern = CraftPatternType.minecraftHolderToBukkit(p.pattern());