diff --git a/patches/server/0008-Fakeplayer-support.patch b/patches/server/0008-Fakeplayer-support.patch index edd77e7b..17284c43 100644 --- a/patches/server/0008-Fakeplayer-support.patch +++ b/patches/server/0008-Fakeplayer-support.patch @@ -58,7 +58,7 @@ index acc49f66bf34e2507d0ee6fec0a56b11bfc68f46..7fc87841fd72fc9b5bca4fbdffd378c7 AdvancementProgress advancementprogress = this.getOrStartProgress(advancement); boolean flag1 = advancementprogress.isDone(); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 65d947df910d60f478e7a449eb161e5105e2c0c9..0034c4bcd8301788fd86e279c6632ad0a95dbd37 100644 +index 65d947df910d60f478e7a449eb161e5105e2c0c9..56be0c66374b6cb200d43212582fd1280442a6a3 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -1584,6 +1584,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -68,7 +68,7 @@ index 65d947df910d60f478e7a449eb161e5105e2c0c9..0034c4bcd8301788fd86e279c6632ad0 + // Leaves start - render bot + if (entity instanceof top.leavesmc.leaves.bot.ServerBot bot) { + if (top.leavesmc.leaves.LeavesConfig.alwaysSendFakeplayerData) { -+ bot.render(player, false); ++ bot.sendFakeData(player.connection, false); + } + } + // Leaves end - render bot @@ -76,10 +76,18 @@ index 65d947df910d60f478e7a449eb161e5105e2c0c9..0034c4bcd8301788fd86e279c6632ad0 } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d044c1c897 100644 +index b382da838acc04a1c5d89064b4fa43bcdd38ae71..c63142cea44d26c6742f39b090eeba8f2052662c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -185,6 +185,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; +@@ -100,7 +100,6 @@ import net.minecraft.util.Mth; + import net.minecraft.util.RandomSource; + import net.minecraft.util.Unit; + import net.minecraft.world.damagesource.DamageSource; +-import net.minecraft.world.damagesource.DamageSources; + import net.minecraft.world.effect.MobEffectInstance; + import net.minecraft.world.effect.MobEffects; + import net.minecraft.world.entity.Entity; +@@ -185,6 +184,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.MainHand; @@ -87,7 +95,7 @@ index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d0 // CraftBukkit end public class ServerPlayer extends Player { -@@ -719,15 +720,19 @@ public class ServerPlayer extends Player { +@@ -719,15 +719,19 @@ public class ServerPlayer extends Player { } // Paper start - Configurable container update tick rate @@ -115,7 +123,7 @@ index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d0 Entity entity = this.getCamera(); -@@ -743,7 +748,7 @@ public class ServerPlayer extends Player { +@@ -743,7 +747,7 @@ public class ServerPlayer extends Player { } } @@ -124,7 +132,7 @@ index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d0 if (this.levitationStartPos != null) { CriteriaTriggers.LEVITATION.trigger(this, this.levitationStartPos, this.tickCount - this.levitationStartTime); } -@@ -936,7 +941,7 @@ public class ServerPlayer extends Player { +@@ -936,7 +940,7 @@ public class ServerPlayer extends Player { java.util.List loot = new java.util.ArrayList(this.getInventory().getContainerSize()); boolean keepInventory = this.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) || this.isSpectator(); @@ -133,14 +141,14 @@ index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d0 for (ItemStack item : this.getInventory().getContents()) { if (!item.isEmpty() && !EnchantmentHelper.hasVanishingCurse(item)) { loot.add(CraftItemStack.asCraftMirror(item)); -@@ -1265,6 +1270,13 @@ public class ServerPlayer extends Player { +@@ -1265,6 +1269,13 @@ public class ServerPlayer extends Player { this.lastSentHealth = -1.0F; this.lastSentFood = -1; + // Leaves start - bot support + if (top.leavesmc.leaves.LeavesConfig.fakeplayerSupport) { + ServerBot.getBots().forEach(bot1 -> -+ bot1.render(this, true)); // Leaves - render bot ++ bot1.sendFakeDataIfNeed(this, true)); // Leaves - render bot + } + // Leaves end - bot support + @@ -148,18 +156,10 @@ index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0cc848a600fa0f8af4f5f991834dd1d0 PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld()); this.level().getCraftServer().getPluginManager().callEvent(changeEvent); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..c64c53075efdefc5bb845f954de87c3f3f9d3fcf 100644 +index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..175c117bb5acca0b0d43b5ce090e51e20a2ca23b 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -81,6 +81,7 @@ import net.minecraft.server.ServerScoreboard; - import net.minecraft.tags.BlockTags; - import net.minecraft.tags.TagNetworkSerialization; - import net.minecraft.util.Mth; -+import net.minecraft.world.damagesource.DamageSource; - import net.minecraft.world.effect.MobEffectInstance; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.EntityType; -@@ -101,6 +102,7 @@ import net.minecraft.world.scores.Objective; +@@ -101,6 +101,7 @@ 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; @@ -167,7 +167,23 @@ index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..c64c53075efdefc5bb845f954de87c3f import org.slf4j.Logger; // CraftBukkit start -@@ -342,6 +344,19 @@ public abstract class PlayerList { +@@ -118,7 +119,6 @@ import org.bukkit.Location; + import org.bukkit.craftbukkit.CraftServer; + import org.bukkit.craftbukkit.CraftWorld; + import org.bukkit.craftbukkit.entity.CraftPlayer; +-import org.bukkit.craftbukkit.util.CraftChatMessage; + import org.bukkit.craftbukkit.util.CraftLocation; + import org.bukkit.entity.Player; + import org.bukkit.event.player.PlayerChangedWorldEvent; +@@ -127,7 +127,6 @@ import org.bukkit.event.player.PlayerLoginEvent; + import org.bukkit.event.player.PlayerQuitEvent; + import org.bukkit.event.player.PlayerRespawnEvent; + import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; +-import org.bukkit.event.player.PlayerSpawnChangeEvent; + // CraftBukkit end + + public abstract class PlayerList { +@@ -342,6 +341,21 @@ public abstract class PlayerList { return; } @@ -179,29 +195,31 @@ index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..c64c53075efdefc5bb845f954de87c3f + this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); + this.playersByUUID.put(player.getUUID(), player); + } -+ ServerBot.getBots().forEach(bot1 -> -+ bot1.render(playerconnection, true,player.getBukkitEntity().getWorld() == bot1.getBukkitEntity().getWorld())); // Leaves - render bot ++ ServerBot.getBots().forEach(bot1 -> { ++ bot1.sendPlayerInfo(player); ++ bot1.sendFakeDataIfNeed(player, true); ++ }); // Leaves - render bot + } + // Leaves end - bot support + final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure -@@ -985,6 +1000,13 @@ public abstract class PlayerList { +@@ -985,6 +999,13 @@ public abstract class PlayerList { } // Paper end + // Leaves start - bot support + if (top.leavesmc.leaves.LeavesConfig.fakeplayerSupport) { + top.leavesmc.leaves.bot.ServerBot.getBots().forEach(bot1 -> -+ bot1.render(entityplayer1, true)); // Leaves - render bot ++ bot1.sendFakeDataIfNeed(entityplayer1, true)); // Leaves - render bot + } + // Leaves end - bot support + // CraftBukkit end return entityplayer1; } -@@ -1095,11 +1117,16 @@ public abstract class PlayerList { +@@ -1095,11 +1116,16 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { @@ -219,7 +237,7 @@ index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..c64c53075efdefc5bb845f954de87c3f return astring; } -@@ -1578,4 +1605,16 @@ public abstract class PlayerList { +@@ -1578,4 +1604,16 @@ public abstract class PlayerList { public boolean isAllowCheatsForAllPlayers() { return this.allowCheatsForAllPlayers; } @@ -1148,10 +1166,10 @@ index 0000000000000000000000000000000000000000..daaece30b2a3983f1cc9ee9a851e8f37 +} diff --git a/src/main/java/top/leavesmc/leaves/bot/ServerBot.java b/src/main/java/top/leavesmc/leaves/bot/ServerBot.java new file mode 100644 -index 0000000000000000000000000000000000000000..4365351efbe01b46b5df29a34bef08abfa79cd9e +index 0000000000000000000000000000000000000000..8bcffe8d307c9664133a37677900312c2a19c275 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/bot/ServerBot.java -@@ -0,0 +1,711 @@ +@@ -0,0 +1,712 @@ +package top.leavesmc.leaves.bot; + +import com.google.common.collect.Lists; @@ -1178,6 +1196,7 @@ index 0000000000000000000000000000000000000000..4365351efbe01b46b5df29a34bef08ab +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.network.ServerPlayerConnection; ++import net.minecraft.server.players.PlayerList; +import net.minecraft.stats.ServerStatsCounter; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; @@ -1238,6 +1257,7 @@ index 0000000000000000000000000000000000000000..4365351efbe01b46b5df29a34bef08ab + + private final Map actions; + private final boolean removeOnDeath; ++ private final int tracingRange; + + private Vec3 velocity; + private int fireTicks; @@ -1268,6 +1288,7 @@ index 0000000000000000000000000000000000000000..4365351efbe01b46b5df29a34bef08ab + this.fauxSleeping = LeavesConfig.fakeplayerSkipSleep; + this.waterSwim = true; + this.knockback = Vec3.ZERO; ++ this.tracingRange = world.spigotConfig.playerTrackingRange * world.spigotConfig.playerTrackingRange; + } + + public static ServerBot createBot(@NotNull BotCreateState state) { @@ -1334,46 +1355,44 @@ index 0000000000000000000000000000000000000000..4365351efbe01b46b5df29a34bef08ab + return ServerBot.getBots().size() < top.leavesmc.leaves.LeavesConfig.fakeplayerLimit; + } + -+ private void renderAll() { -+ Packet[] packets = getRenderPackets(); -+ Bukkit.getOnlinePlayers().forEach(p -> -+ render(((CraftPlayer) p).getHandle().connection, packets, false, p.getWorld() == getBukkitPlayer().getWorld())); -+ } -+ -+ public void render(ServerPlayerConnection connection, boolean login, boolean all) { -+ render(connection, getRenderPackets(), login, all && LeavesConfig.alwaysSendFakeplayerData); -+ } -+ -+ public void render(ServerPlayer player, boolean login) { -+ render(player.connection, getRenderPackets(), login, player.level() == this.level() && LeavesConfig.alwaysSendFakeplayerData); -+ } -+ -+ private void render(@NotNull ServerPlayerConnection connection, Packet @NotNull [] packets, boolean login, boolean all) { // always use getRenderPackets() to get packets. replace it soon -+ connection.send(packets[0]); -+ if (all) { -+ connection.send(packets[1]); -+ if (login) { -+ Bukkit.getScheduler().runTaskLater(MINECRAFT_PLUGIN, () -> { -+ connection.send(packets[2]); -+ }, 10); -+ } else { -+ connection.send(packets[2]); ++ public void renderAll() { ++ MinecraftServer.getServer().getPlayerList().getPlayers().forEach( ++ player -> { ++ this.sendPlayerInfo(player); ++ this.sendFakeData(player.connection, false); + } ++ ); ++ } ++ ++ public void sendPlayerInfo(ServerPlayer player) { ++ player.connection.send(new ClientboundPlayerInfoUpdatePacket(EnumSet.of(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, ClientboundPlayerInfoUpdatePacket.Action.UPDATE_LISTED, ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME), List.of(this))); ++ } ++ ++ public boolean needSendFakeData(ServerPlayer player) { ++ return LeavesConfig.alwaysSendFakeplayerData && (player.level() == this.level() && player.position().distanceToSqr(this.position()) > this.tracingRange); ++ } ++ ++ public void sendFakeDataIfNeed(ServerPlayer player, boolean login) { ++ if (needSendFakeData(player)) { ++ this.sendFakeData(player.connection, login); + } + } + -+ @Contract(" -> new") -+ private Packet @NotNull [] getRenderPackets() { -+ return new Packet[]{ -+ new ClientboundPlayerInfoUpdatePacket(EnumSet.of(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, ClientboundPlayerInfoUpdatePacket.Action.UPDATE_LISTED, ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME), List.of(this)), -+ new ClientboundAddPlayerPacket(this), -+ // new ClientboundSetEntityDataPacket(this.getId(), ), -+ new ClientboundRotateHeadPacket(this, (byte) ((getYRot() * 256f) / 360f)) -+ }; ++ public void sendFakeData(ServerPlayerConnection playerConnection, boolean login) { ++ playerConnection.send(new ClientboundAddPlayerPacket(this)); ++ if (login) { ++ Bukkit.getScheduler().runTaskLater(MINECRAFT_PLUGIN, () -> { ++ connection.send(new ClientboundRotateHeadPacket(this, (byte) ((getYRot() * 256f) / 360f))); ++ }, 10); ++ } else { ++ connection.send(new ClientboundRotateHeadPacket(this, (byte) ((getYRot() * 256f) / 360f))); ++ } + } + + private void sendPacket(Packet packet) { -+ Bukkit.getOnlinePlayers().forEach(p -> ((CraftPlayer) p).getHandle().connection.send(packet)); ++ MinecraftServer.getServer().getPlayerList().getPlayers().forEach( ++ player -> player.connection.send(packet) ++ ); + } + + // die check start diff --git a/patches/server/0016-No-chat-sign.patch b/patches/server/0016-No-chat-sign.patch index 25c24fed..e7a8d0f7 100644 --- a/patches/server/0016-No-chat-sign.patch +++ b/patches/server/0016-No-chat-sign.patch @@ -155,10 +155,10 @@ index 3c0651fa5a5db880202c9a3805a6455269c5f16d..434e5e1fd280dc5b1bd29fc2a196ce0b if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c64c53075efdefc5bb845f954de87c3f3f9d3fcf..bdf17bce2b4c0a2c64abefcc82a6e9690f96d186 100644 +index 175c117bb5acca0b0d43b5ce090e51e20a2ca23b..0e095d71cbe46acbf076623a0e1af6963610e5c4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1466,7 +1466,7 @@ public abstract class PlayerList { +@@ -1465,7 +1465,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public diff --git a/patches/server/0040-PCA-sync-protocol.patch b/patches/server/0040-PCA-sync-protocol.patch index 7986e7e8..4f171827 100644 --- a/patches/server/0040-PCA-sync-protocol.patch +++ b/patches/server/0040-PCA-sync-protocol.patch @@ -35,11 +35,11 @@ index 434e5e1fd280dc5b1bd29fc2a196ce0b803279f7..2ed3fba5de71bb36187b8a65f65673a4 byte[] data = new byte[packet.data.readableBytes()]; packet.data.readBytes(data); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index bdf17bce2b4c0a2c64abefcc82a6e9690f96d186..0ca2aca30468ecce20970354b1faf24b3a58a00f 100644 +index 0e095d71cbe46acbf076623a0e1af6963610e5c4..afbe81cec75b06d17699e005acf715d61c56f68d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -356,6 +356,7 @@ public abstract class PlayerList { - bot1.render(playerconnection, true,player.getBukkitEntity().getWorld() == bot1.getBukkitEntity().getWorld())); // Leaves - render bot +@@ -355,6 +355,7 @@ public abstract class PlayerList { + }); // Leaves - render bot } // Leaves end - bot support + top.leavesmc.leaves.protocol.PcaSyncProtocol.onJoin(player); // Leaves - pca diff --git a/patches/server/0041-BBOR-Protocol.patch b/patches/server/0041-BBOR-Protocol.patch index efa3698b..b5e17b03 100644 --- a/patches/server/0041-BBOR-Protocol.patch +++ b/patches/server/0041-BBOR-Protocol.patch @@ -32,10 +32,10 @@ index 2ed3fba5de71bb36187b8a65f65673a4f426cfd0..4004b3d068b97efa835798b05aa424d0 ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex); this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0ca2aca30468ecce20970354b1faf24b3a58a00f..ecdf7bc56ad035881cbb0c36d7fbad7bb11ab442 100644 +index afbe81cec75b06d17699e005acf715d61c56f68d..81088d403e3988f4004d6cf368aa15dfa3ac26aa 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -357,6 +357,7 @@ public abstract class PlayerList { +@@ -356,6 +356,7 @@ public abstract class PlayerList { } // Leaves end - bot support top.leavesmc.leaves.protocol.PcaSyncProtocol.onJoin(player); // Leaves - pca @@ -43,7 +43,7 @@ index 0ca2aca30468ecce20970354b1faf24b3a58a00f..ecdf7bc56ad035881cbb0c36d7fbad7b final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); -@@ -608,6 +609,7 @@ public abstract class PlayerList { +@@ -607,6 +608,7 @@ public abstract class PlayerList { return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : PaperAdventure.asAdventure(entityplayer.getDisplayName()))); } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { @@ -51,7 +51,7 @@ index 0ca2aca30468ecce20970354b1faf24b3a58a00f..ecdf7bc56ad035881cbb0c36d7fbad7b // Paper end ServerLevel worldserver = entityplayer.serverLevel(); -@@ -1600,7 +1602,7 @@ public abstract class PlayerList { +@@ -1599,7 +1601,7 @@ public abstract class PlayerList { entityplayer.connection.send(packetplayoutrecipeupdate); entityplayer.getRecipeBook().sendInitialRecipeBook(entityplayer); } diff --git a/patches/server/0044-Jade-Protocol.patch b/patches/server/0044-Jade-Protocol.patch index 6614e58d..15457e58 100644 --- a/patches/server/0044-Jade-Protocol.patch +++ b/patches/server/0044-Jade-Protocol.patch @@ -20,10 +20,10 @@ index 4004b3d068b97efa835798b05aa424d08b8e3229..bb0e97bd0f4332a2da1b9f077d61b6f8 ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex); this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index ecdf7bc56ad035881cbb0c36d7fbad7bb11ab442..9edb1fb5f1609e7e95245a4b946220a29dcb06b3 100644 +index 81088d403e3988f4004d6cf368aa15dfa3ac26aa..34771b561d6e944e77b85ee4b4018453b30ba388 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -358,6 +358,7 @@ public abstract class PlayerList { +@@ -357,6 +357,7 @@ public abstract class PlayerList { // Leaves end - bot support top.leavesmc.leaves.protocol.PcaSyncProtocol.onJoin(player); // Leaves - pca top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedIn(player); // Leaves - bbor diff --git a/patches/server/0046-Player-operation-limiter.patch b/patches/server/0046-Player-operation-limiter.patch index dfdc8fb7..e6d0aa9b 100644 --- a/patches/server/0046-Player-operation-limiter.patch +++ b/patches/server/0046-Player-operation-limiter.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Player operation limiter This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0cc848a600fa0f8af4f5f991834dd1d044c1c897..39a88eb5de7b735257f368856cd6d6d37521f257 100644 +index c63142cea44d26c6742f39b090eeba8f2052662c..20778affc3e42d6eeb898e42671dc9ac83d05242 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -279,6 +279,10 @@ public class ServerPlayer extends Player { +@@ -278,6 +278,10 @@ public class ServerPlayer extends Player { public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event @@ -20,7 +20,7 @@ index 0cc848a600fa0f8af4f5f991834dd1d044c1c897..39a88eb5de7b735257f368856cd6d6d3 private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -712,6 +716,7 @@ public class ServerPlayer extends Player { +@@ -711,6 +715,7 @@ public class ServerPlayer extends Player { this.joining = false; } // CraftBukkit end @@ -28,7 +28,7 @@ index 0cc848a600fa0f8af4f5f991834dd1d044c1c897..39a88eb5de7b735257f368856cd6d6d3 this.gameMode.tick(); this.wardenSpawnTracker.tick(); --this.spawnInvulnerableTime; -@@ -2666,5 +2671,32 @@ public class ServerPlayer extends Player { +@@ -2665,5 +2670,32 @@ public class ServerPlayer extends Player { public CraftPlayer getBukkitEntity() { return (CraftPlayer) super.getBukkitEntity(); } diff --git a/patches/server/0051-Return-nether-portal-fix.patch b/patches/server/0051-Return-nether-portal-fix.patch index 93d81d1a..3f15a9ba 100644 --- a/patches/server/0051-Return-nether-portal-fix.patch +++ b/patches/server/0051-Return-nether-portal-fix.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Return nether portal fix This patch is powered by NetherPortalFix(https://github.com/TwelveIterationMods/NetherPortalFix) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 39a88eb5de7b735257f368856cd6d6d37521f257..6a1922f5e1065ffa46d3ba4fa72596bebed826d4 100644 +index 20778affc3e42d6eeb898e42671dc9ac83d05242..2c3e286d683437c1435b76665a5f94082a1b2ec5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -186,6 +186,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +@@ -185,6 +185,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.MainHand; import top.leavesmc.leaves.bot.ServerBot; @@ -17,7 +17,7 @@ index 39a88eb5de7b735257f368856cd6d6d37521f257..6a1922f5e1065ffa46d3ba4fa72596be // CraftBukkit end public class ServerPlayer extends Player { -@@ -1286,6 +1287,24 @@ public class ServerPlayer extends Player { +@@ -1285,6 +1286,24 @@ public class ServerPlayer extends Player { PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld()); this.level().getCraftServer().getPluginManager().callEvent(changeEvent); // CraftBukkit end @@ -42,7 +42,7 @@ index 39a88eb5de7b735257f368856cd6d6d37521f257..6a1922f5e1065ffa46d3ba4fa72596be } // Paper start if (this.isBlocking()) { -@@ -1338,6 +1357,30 @@ public class ServerPlayer extends Player { +@@ -1337,6 +1356,30 @@ public class ServerPlayer extends Player { protected Optional getExitPortal(ServerLevel worldserver, BlockPos blockposition, boolean flag, WorldBorder worldborder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit Optional optional = super.getExitPortal(worldserver, blockposition, flag, worldborder, searchRadius, canCreatePortal, createRadius); // CraftBukkit @@ -74,7 +74,7 @@ index 39a88eb5de7b735257f368856cd6d6d37521f257..6a1922f5e1065ffa46d3ba4fa72596be return optional; } else { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9edb1fb5f1609e7e95245a4b946220a29dcb06b3..d4e0a2bbf07dae404b510923a401444af4f40430 100644 +index 34771b561d6e944e77b85ee4b4018453b30ba388..00fa187c70c6c0f7eea03fbd320fb938addcb410 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -27,6 +27,8 @@ import java.util.UUID; @@ -86,8 +86,8 @@ index 9edb1fb5f1609e7e95245a4b946220a29dcb06b3..d4e0a2bbf07dae404b510923a401444a import net.minecraft.ChatFormatting; import net.minecraft.FileUtil; import net.minecraft.commands.CommandSourceStack; -@@ -132,6 +134,8 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; - import org.bukkit.event.player.PlayerSpawnChangeEvent; +@@ -129,6 +131,8 @@ import org.bukkit.event.player.PlayerRespawnEvent; + import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; // CraftBukkit end +import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix @@ -95,7 +95,7 @@ index 9edb1fb5f1609e7e95245a4b946220a29dcb06b3..d4e0a2bbf07dae404b510923a401444a public abstract class PlayerList { public static final File USERBANLIST_FILE = new File("banned-players.json"); -@@ -991,6 +995,24 @@ public abstract class PlayerList { +@@ -990,6 +994,24 @@ public abstract class PlayerList { if (fromWorld != location.getWorld()) { PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(entityplayer.getBukkitEntity(), fromWorld); server.server.getPluginManager().callEvent(event); @@ -121,7 +121,7 @@ index 9edb1fb5f1609e7e95245a4b946220a29dcb06b3..d4e0a2bbf07dae404b510923a401444a // Save player file again if they were disconnected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 72268f148a9d676975fa881fa94757ca96e39d82..f560f0b91818d8c41c6842a241699fe5f3163818 100644 +index 3a3b1439f6f20a82f6800272bd99feb3596fdecb..d56f683a5d043f3be624a94d889acc1df0e95554 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -242,7 +242,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0052-Appleskin-Protocol.patch b/patches/server/0052-Appleskin-Protocol.patch index ca01de73..f279a9d1 100644 --- a/patches/server/0052-Appleskin-Protocol.patch +++ b/patches/server/0052-Appleskin-Protocol.patch @@ -17,10 +17,10 @@ index 8150ac9c98a30afff5fc04fdec8af6d340c4b9f5..c748b29bf2d4382215bffd41854f70fd MinecraftTimings.tickablesTimer.startTiming(); // Spigot // Paper for (int i = 0; i < this.tickables.size(); ++i) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d4e0a2bbf07dae404b510923a401444af4f40430..d345dbbe76fdef80834bcacee7862d7115e12dd3 100644 +index 00fa187c70c6c0f7eea03fbd320fb938addcb410..d29db001f12c072fbba1f981ca02880cb39cf62e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -363,6 +363,7 @@ public abstract class PlayerList { +@@ -362,6 +362,7 @@ public abstract class PlayerList { top.leavesmc.leaves.protocol.PcaSyncProtocol.onJoin(player); // Leaves - pca top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedIn(player); // Leaves - bbor top.leavesmc.leaves.protocol.JadeProtocol.onPlayerJoin(player); // Leaves - Jade @@ -28,7 +28,7 @@ index d4e0a2bbf07dae404b510923a401444af4f40430..d345dbbe76fdef80834bcacee7862d71 final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); -@@ -615,6 +616,7 @@ public abstract class PlayerList { +@@ -614,6 +615,7 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedOut(entityplayer); // Leaves - bbor diff --git a/patches/server/0053-Xaero-Map-Protocol.patch b/patches/server/0053-Xaero-Map-Protocol.patch index dc25ba21..48cd2ea7 100644 --- a/patches/server/0053-Xaero-Map-Protocol.patch +++ b/patches/server/0053-Xaero-Map-Protocol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Xaero Map Protocol diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d345dbbe76fdef80834bcacee7862d7115e12dd3..c81d0a6e534d54db00c5f4595df0478a8342dfaf 100644 +index d29db001f12c072fbba1f981ca02880cb39cf62e..7bb6b4da0495b2ad5a95e858f01577afe157d470 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1311,6 +1311,7 @@ public abstract class PlayerList { +@@ -1310,6 +1310,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldborder)); player.connection.send(new ClientboundSetTimePacket(world.getGameTime(), world.getDayTime(), world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(world.getSharedSpawnPos(), world.getSharedSpawnAngle())); diff --git a/patches/server/0067-Leaves-carpet-support.patch b/patches/server/0067-Leaves-carpet-support.patch index bdeea7ce..dfaa17b4 100644 --- a/patches/server/0067-Leaves-carpet-support.patch +++ b/patches/server/0067-Leaves-carpet-support.patch @@ -19,10 +19,10 @@ index 6d527cdb75e767182dce5b338322a9c27b21d5b8..7634fc05f7e1bd12c9c6aa9204af6133 ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex); this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c81d0a6e534d54db00c5f4595df0478a8342dfaf..d07442bc4a3abf00aac17375628cd1ae0eae28f1 100644 +index 7bb6b4da0495b2ad5a95e858f01577afe157d470..a137b9bff6595594ebe149ff766abd9edea04294 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -364,6 +364,7 @@ public abstract class PlayerList { +@@ -363,6 +363,7 @@ public abstract class PlayerList { top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedIn(player); // Leaves - bbor top.leavesmc.leaves.protocol.JadeProtocol.onPlayerJoin(player); // Leaves - Jade top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedIn(player); // Leaves - appleskin diff --git a/patches/server/0075-Bladeren-mspt-sync-protocol.patch b/patches/server/0075-Bladeren-mspt-sync-protocol.patch index 74799419..ba2f940c 100644 --- a/patches/server/0075-Bladeren-mspt-sync-protocol.patch +++ b/patches/server/0075-Bladeren-mspt-sync-protocol.patch @@ -17,10 +17,10 @@ index 5c09e2164a045346e0e2d4ce64408ac9209cf501..d47e29850462356e843591deba7e8a83 MinecraftTimings.tickablesTimer.startTiming(); // Spigot // Paper for (int i = 0; i < this.tickables.size(); ++i) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d07442bc4a3abf00aac17375628cd1ae0eae28f1..dde9803e5163b4bba99831ab09f4283c0d748a79 100644 +index a137b9bff6595594ebe149ff766abd9edea04294..7ee3840b1e44f3b9596ca839e252cdee3d41eda6 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -618,6 +618,7 @@ public abstract class PlayerList { +@@ -617,6 +617,7 @@ public abstract class PlayerList { public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedOut(entityplayer); // Leaves - bbor top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedOut(entityplayer); // Leaves - appleskin diff --git a/patches/server/0076-Fix-Paper-9372.patch b/patches/server/0076-Fix-Paper-9372.patch index bfc4697b..858c14e9 100644 --- a/patches/server/0076-Fix-Paper-9372.patch +++ b/patches/server/0076-Fix-Paper-9372.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix Paper#9372 This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 6a1922f5e1065ffa46d3ba4fa72596bebed826d4..2da9ce7472dc06083959b6da540570eac6245756 100644 +index 2c3e286d683437c1435b76665a5f94082a1b2ec5..9966d7e1f542a2a9602381869c2c671d33a60c5a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1257,6 +1257,7 @@ public class ServerPlayer extends Player { +@@ -1256,6 +1256,7 @@ public class ServerPlayer extends Player { this.setServerLevel(worldserver); this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); @@ -17,7 +17,7 @@ index 6a1922f5e1065ffa46d3ba4fa72596bebed826d4..2da9ce7472dc06083959b6da540570ea worldserver.addDuringPortalTeleport(this); worldserver1.getProfiler().pop(); this.triggerDimensionChangeTriggers(worldserver1); -@@ -1973,6 +1974,7 @@ public class ServerPlayer extends Player { +@@ -1972,6 +1973,7 @@ public class ServerPlayer extends Player { public void moveTo(double x, double y, double z) { super.moveTo(x, y, z); this.connection.resetPosition(); @@ -25,7 +25,7 @@ index 6a1922f5e1065ffa46d3ba4fa72596bebed826d4..2da9ce7472dc06083959b6da540570ea } @Override -@@ -2209,6 +2211,7 @@ public class ServerPlayer extends Player { +@@ -2208,6 +2210,7 @@ public class ServerPlayer extends Player { this.connection.send(new ClientboundSetCameraPacket(this.camera)); this.connection.resetPosition(); @@ -33,7 +33,7 @@ index 6a1922f5e1065ffa46d3ba4fa72596bebed826d4..2da9ce7472dc06083959b6da540570ea } } -@@ -2661,6 +2664,7 @@ public class ServerPlayer extends Player { +@@ -2660,6 +2663,7 @@ public class ServerPlayer extends Player { public void forceSetPositionRotation(double x, double y, double z, float yaw, float pitch) { this.moveTo(x, y, z, yaw, pitch); this.connection.resetPosition(); diff --git a/patches/server/0078-Leaves-protocol.patch b/patches/server/0078-Leaves-protocol.patch index 64e38922..8e767974 100644 --- a/patches/server/0078-Leaves-protocol.patch +++ b/patches/server/0078-Leaves-protocol.patch @@ -19,10 +19,10 @@ index 3d7e2654d67b9b61cf783e234e33576a03351413..f5e16e9f144824a78ccd4a9fa0a5c0f3 ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex); this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index dde9803e5163b4bba99831ab09f4283c0d748a79..a1629559dc62adbd8918727bde2a65574d26f3ac 100644 +index 7ee3840b1e44f3b9596ca839e252cdee3d41eda6..c9b5184baefae815e94e041a9ce41557524c4eb7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -365,6 +365,7 @@ public abstract class PlayerList { +@@ -364,6 +364,7 @@ public abstract class PlayerList { top.leavesmc.leaves.protocol.JadeProtocol.onPlayerJoin(player); // Leaves - Jade top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedIn(player); // Leaves - appleskin top.leavesmc.leaves.protocol.CarpetServerProtocol.onPlayerJoin(player); // Leaves - carpet diff --git a/patches/server/0094-Reduce-array-allocations.patch b/patches/server/0094-Reduce-array-allocations.patch index 4b743b7c..446acc9c 100644 --- a/patches/server/0094-Reduce-array-allocations.patch +++ b/patches/server/0094-Reduce-array-allocations.patch @@ -346,18 +346,18 @@ index 2ff578e4a953ffcf5176815ba8e3f06f73499989..bf082b9c3947d6037328526e5bfafe2b final String s; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a1629559dc62adbd8918727bde2a65574d26f3ac..70b201502a5ee4fca3da2cd2658b42ece0b3211e 100644 +index c9b5184baefae815e94e041a9ce41557524c4eb7..63149cfdfbc129fa02070e06d44a9417dbde7c5f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -134,6 +134,7 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; - import org.bukkit.event.player.PlayerSpawnChangeEvent; +@@ -131,6 +131,7 @@ import org.bukkit.event.player.PlayerRespawnEvent; + import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; // CraftBukkit end +import top.leavesmc.leaves.util.ArrayConstants; import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix public abstract class PlayerList { -@@ -736,7 +737,7 @@ public abstract class PlayerList { +@@ -735,7 +736,7 @@ public abstract class PlayerList { while (iterator.hasNext()) { entityplayer = (ServerPlayer) iterator.next(); this.save(entityplayer); // CraftBukkit - Force the player's inventory to be saved diff --git a/patches/server/0113-Replay-Mod-API.patch b/patches/server/0113-Replay-Mod-API.patch index eea8b2cb..175be13e 100644 --- a/patches/server/0113-Replay-Mod-API.patch +++ b/patches/server/0113-Replay-Mod-API.patch @@ -115,10 +115,10 @@ index fd9e85dab7c511873824cac56a270ff435792292..257e51570ed08660613895f5a1eccbee } // Leaves end - bot can't get advancement diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e42dd8ac16 100644 +index 63149cfdfbc129fa02070e06d44a9417dbde7c5f..6f609ec7a9814a44afc82aa504010519d614b796 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -136,6 +136,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; +@@ -133,6 +133,7 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; import top.leavesmc.leaves.util.ArrayConstants; import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix @@ -126,7 +126,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 public abstract class PlayerList { -@@ -168,6 +169,7 @@ public abstract class PlayerList { +@@ -165,6 +166,7 @@ public abstract class PlayerList { private boolean allowCheatsForAllPlayers; private static final boolean ALLOW_LOGOUTIVATOR = false; private int sendAllPlayerInfoIn; @@ -134,7 +134,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 // CraftBukkit start private CraftServer cserver; -@@ -195,6 +197,108 @@ public abstract class PlayerList { +@@ -192,6 +194,110 @@ public abstract class PlayerList { } abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor @@ -196,8 +196,10 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 + this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); + this.playersByUUID.put(player.getUUID(), player); + } -+ ServerBot.getBots().forEach(bot1 -> -+ bot1.render(playerconnection, true,player.getBukkitEntity().getWorld() == bot1.getBukkitEntity().getWorld())); // Leaves - render bot ++ ServerBot.getBots().forEach(bot1 -> { ++ bot1.sendPlayerInfo(player); ++ bot1.sendFakeDataIfNeed(player, true); ++ }); // Leaves - render bot + } + // Leaves end - bot support + @@ -243,7 +245,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 public void placeNewPlayer(Connection connection, ServerPlayer player) { player.isRealPlayer = true; // Paper player.loginTime = System.currentTimeMillis(); // Paper -@@ -326,6 +430,7 @@ public abstract class PlayerList { +@@ -323,6 +429,7 @@ public abstract class PlayerList { // entityplayer.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below this.players.add(player); @@ -251,7 +253,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot this.playersByUUID.put(player.getUUID(), player); // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer))); // CraftBukkit - replaced with loop below -@@ -399,6 +504,12 @@ public abstract class PlayerList { +@@ -398,6 +505,12 @@ public abstract class PlayerList { continue; } @@ -264,7 +266,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 onlinePlayers.add(entityplayer1); // Paper - use single player info update packet } // Paper start - use single player info update packet -@@ -613,6 +724,43 @@ public abstract class PlayerList { +@@ -612,6 +725,43 @@ public abstract class PlayerList { } @@ -308,7 +310,7 @@ index 70b201502a5ee4fca3da2cd2658b42ece0b3211e..383ed8f9962ea4b9c00aa3c8c4d877e4 public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer) { // CraftBukkit - return string // Paper - return Component // Paper start return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : PaperAdventure.asAdventure(entityplayer.getDisplayName()))); -@@ -683,6 +831,7 @@ public abstract class PlayerList { +@@ -682,6 +832,7 @@ public abstract class PlayerList { entityplayer.retireScheduler(); // Paper - Folia schedulers entityplayer.getAdvancements().stopListening(); this.players.remove(entityplayer); diff --git a/patches/server/0114-Leaves-tick-command.patch b/patches/server/0114-Leaves-tick-command.patch index 1fc0079b..95f38b90 100644 --- a/patches/server/0114-Leaves-tick-command.patch +++ b/patches/server/0114-Leaves-tick-command.patch @@ -109,10 +109,10 @@ index d47e29850462356e843591deba7e8a83f59faba0..5f61f4861254fb05f069f8e95a3e84c4 ReportedException reportedexception = null; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2da9ce7472dc06083959b6da540570eac6245756..11f83f29e078b8f96c52d9d4d7c0c25b6e980155 100644 +index 9966d7e1f542a2a9602381869c2c671d33a60c5a..c9a89a93a816f500cdfb52d8ee153c8d4a98df1e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2742,7 +2742,7 @@ public class ServerPlayer extends Player { +@@ -2741,7 +2741,7 @@ public class ServerPlayer extends Player { } public boolean allowOperation() { diff --git a/patches/server/0118-Delete-Timings.patch b/patches/server/0118-Delete-Timings.patch index d97d0d99..08d555d1 100644 --- a/patches/server/0118-Delete-Timings.patch +++ b/patches/server/0118-Delete-Timings.patch @@ -1178,7 +1178,7 @@ index f8edbc95ffe7de0341e5724ad3efe69c74e95a07..2390788d6a472d900e1cf014e4c4a683 // Paper start if (waitableArray[0] != null) { diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 7d0a532921ef6b18da235cbea3437ae554221c5c..975c18cf108b754f358942c81781a4717686f6bb 100644 +index a1bf598332fafe372b98e331a92c48b948ac29f7..ed7154afa61d8e555346f17543280f106ab97e37 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -1,13 +1,10 @@ @@ -1712,7 +1712,7 @@ index 43dc38afc03323ebf4192f58a7703402f9379ade..e22cf5ed3c905d0536cad7ac23b7d94f } // 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 383ed8f9962ea4b9c00aa3c8c4d877e42dd8ac16..0fb91e5180d49530ddf796ec5e69b2176ffc44d3 100644 +index 6f609ec7a9814a44afc82aa504010519d614b796..cf4ea675119d3c1a12435a6f00309ea2023e0a71 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,6 +1,5 @@ @@ -1722,7 +1722,7 @@ index 383ed8f9962ea4b9c00aa3c8c4d877e42dd8ac16..0fb91e5180d49530ddf796ec5e69b217 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1425,7 +1424,6 @@ public abstract class PlayerList { +@@ -1426,7 +1425,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1730,7 +1730,7 @@ index 383ed8f9962ea4b9c00aa3c8c4d877e42dd8ac16..0fb91e5180d49530ddf796ec5e69b217 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1436,7 +1434,6 @@ public abstract class PlayerList { +@@ -1437,7 +1435,6 @@ public abstract class PlayerList { } // Paper end }