@@ -39,8 +39,6 @@ index fdde0f82531fba370327ff71f59c2c4722d42df2..339b3a4ebae8a522ec3932f901729f88
+ *
++ * The player's client will download the new resource pack asynchronously
++ * in the background, and will automatically switch to it once the
++ * download is complete. If the client has downloaded and cached the same
++ * resource pack in the past, it will perform a quick timestamp check
++ * over the network to determine if the resource pack has changed and
++ * needs to be downloaded again. When this request is sent for the very
++ * first time from a given server, the client will first display a
++ * confirmation GUI to the player before proceeding with the download.
++ *
The request is sent with empty string as the hash when the hash is
+ * not provided. This might result in newer versions not loading the
+ * pack correctly.
diff --git a/src/main/java/org/bukkit/entity/Slime.java b/src/main/java/org/bukkit/entity/Slime.java
index a5ad3250cebfeb302c58e0bfd6db1295913c927e..bfac874840cf1f36afba16ae4d176c5821a68cfb 100644
--- a/src/main/java/org/bukkit/entity/Slime.java
@@ -837,7 +907,7 @@ index 6782024735a885ba0b1b4dba4a576740c1410366..8977f7609431c3c46324a82de84d4a32
@Override
public HandlerList getHandlers() {
diff --git a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
-index d80191e0848e04bbfb740113b9b1646dae087ec0..25ac728dac8c15c18851dde4cbcc10028552ae77 100644
+index e4c32b21ab013703a6a1b07a1ad564d914ebe83f..e58fecf0fe54db06e0e944027923a352fd8005d8 100644
--- a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
+++ b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
@@ -6,8 +6,9 @@ import org.bukkit.event.HandlerList;
diff --git a/patches/api/0092-Player.setPlayerProfile-API.patch b/patches/api/0092-Player.setPlayerProfile-API.patch
index 1eb1ebd708..289ae2ac92 100644
--- a/patches/api/0092-Player.setPlayerProfile-API.patch
+++ b/patches/api/0092-Player.setPlayerProfile-API.patch
@@ -93,34 +93,36 @@ index aad8b2fbdbb03fbf32f99b3a533716eca9d42219..405b6a388c3593a83985f766e79b9295
/**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 695bdf0bca8af1360d4deeb4aadedf1fb4140223..7a24cc6617b55bdeea4cf6d70e3abb835b0697bf 100644
+index 2787f205b08b9c0dc97c6a49ade01b319ef23630..985185802e0ad5d063e83ad22a1bcc735d722f04 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2787,6 +2787,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- * was {@link org.bukkit.event.player.PlayerResourcePackStatusEvent.Status#SUCCESSFULLY_LOADED}
- */
- boolean hasResourcePack();
-+
+@@ -2853,6 +2853,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+ }
+ // Paper end
+
++ // Paper start - Player Profile API
+ /**
+ * Gets a copy of this players profile
++ *
+ * @return The players profile object
+ */
-+ @NotNull
-+ com.destroystokyo.paper.profile.PlayerProfile getPlayerProfile();
++ com.destroystokyo.paper.profile.@NotNull PlayerProfile getPlayerProfile();
+
+ /**
+ * Changes the PlayerProfile for this player. This will cause this player
-+ * to be reregistered to all clients that can currently see this player.
-+ *
++ * to be re-registered to all clients that can currently see this player.
++ *
+ * After executing this method, the player {@link java.util.UUID} won't
-+ * be swapped, only their name and gameprofile properties.
++ * be swapped, only their name and profile properties.
+ *
+ * @param profile The new profile to use
+ */
-+ void setPlayerProfile(@NotNull com.destroystokyo.paper.profile.PlayerProfile profile);
- // Paper end
-
++ void setPlayerProfile(com.destroystokyo.paper.profile.@NotNull PlayerProfile profile);
++ // Paper end - Player Profile API
++
// Spigot start
+ public class Spigot extends Entity.Spigot {
+
diff --git a/src/main/java/org/bukkit/profile/PlayerProfile.java b/src/main/java/org/bukkit/profile/PlayerProfile.java
index fc46add38bf59dc1a04ea566fd230dcd8ae2708c..d36b3e3c7e53840132011add365ca2a26d799064 100644
--- a/src/main/java/org/bukkit/profile/PlayerProfile.java
diff --git a/patches/api/0095-Add-openSign-method-to-HumanEntity.patch b/patches/api/0095-Add-openSign-method-to-HumanEntity.patch
index bdc5ae2697..9ece271165 100644
--- a/patches/api/0095-Add-openSign-method-to-HumanEntity.patch
+++ b/patches/api/0095-Add-openSign-method-to-HumanEntity.patch
@@ -36,10 +36,10 @@ index abdca9fe5acc90f167219eb769ece66c35682bb1..b3aa3dc6aa5afbc36cc86741b4cba56f
/**
* Make the entity drop the item in their hand.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 7a24cc6617b55bdeea4cf6d70e3abb835b0697bf..9e2b93ce876ae69ec05bc55b15a4e0ebf054aa50 100644
+index 985185802e0ad5d063e83ad22a1bcc735d722f04..ab7df32513667f9c73540c2d74e438daed1381b0 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2632,10 +2632,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2814,10 +2814,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
/**
* Open a Sign for editing by the Player.
*
diff --git a/patches/api/0145-Expose-attack-cooldown-methods-for-Player.patch b/patches/api/0145-Expose-attack-cooldown-methods-for-Player.patch
index 890a298210..eacc09cd2e 100644
--- a/patches/api/0145-Expose-attack-cooldown-methods-for-Player.patch
+++ b/patches/api/0145-Expose-attack-cooldown-methods-for-Player.patch
@@ -5,14 +5,14 @@ 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 203e8555bfd410b9becfa7e0fb88728dfbd98f77..fe06d06cf97b1b020c771fb455f644d68097f1ef 100644
+index 7899925a60e81e0d58a288f033d3c5d2789485ed..5466b250db43bd92137f46d249a0dd8558491567 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2963,6 +2963,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- * @param profile The new profile to use
- */
- void setPlayerProfile(@NotNull com.destroystokyo.paper.profile.PlayerProfile profile);
-+
+@@ -3031,6 +3031,28 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+ void setPlayerProfile(com.destroystokyo.paper.profile.@NotNull PlayerProfile profile);
+ // Paper end - Player Profile API
+
++ // Paper start - attack cooldown API
+ /**
+ * Returns the amount of ticks the current cooldown lasts
+ *
@@ -32,6 +32,8 @@ index 203e8555bfd410b9becfa7e0fb88728dfbd98f77..fe06d06cf97b1b020c771fb455f644d6
+ * Reset the cooldown counter to 0, effectively starting the cooldown period.
+ */
+ void resetCooldown();
- // Paper end
-
++ // Paper end - attack cooldown API
++
// Spigot start
+ public class Spigot extends Entity.Spigot {
+
diff --git a/patches/api/0190-Add-Player-Client-Options-API.patch b/patches/api/0190-Add-Player-Client-Options-API.patch
index 1d1189fbe0..3f4764cbba 100644
--- a/patches/api/0190-Add-Player-Client-Options-API.patch
+++ b/patches/api/0190-Add-Player-Client-Options-API.patch
@@ -229,19 +229,20 @@ index 0000000000000000000000000000000000000000..cf67dc7d465223710adbf2b798109f52
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 1afa65152f56e42793cb53a049e06b16eabe2ce4..cf2090ee92e7245c028a0e625cdb483665b3821f 100644
+index 716b2023ee3e03a70f0afc0c26558fc0a2ee356b..1e52cc88dc47f2494af505d92ebe56f79780a099 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2980,6 +2980,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- * Reset the cooldown counter to 0, effectively starting the cooldown period.
- */
+@@ -3050,6 +3050,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void resetCooldown();
-+
+ // Paper end - attack cooldown API
+
++ // Paper start - client option API
+ /**
+ * @return the client option value of the player
+ */
-+ @NotNull
-+ T getClientOption(@NotNull com.destroystokyo.paper.ClientOption option);
- // Paper end
-
++ @NotNull T getClientOption(com.destroystokyo.paper.@NotNull ClientOption option);
++ // Paper end - client option API
++
// Spigot start
+ public class Spigot extends Entity.Spigot {
+
diff --git a/patches/api/0208-Brand-support.patch b/patches/api/0208-Brand-support.patch
index 8f8ba72f55..2d4f207294 100644
--- a/patches/api/0208-Brand-support.patch
+++ b/patches/api/0208-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 cf2090ee92e7245c028a0e625cdb483665b3821f..110d3d031ae2408e5caac2fdfd3f8f8efbeb7e05 100644
+index 1e52cc88dc47f2494af505d92ebe56f79780a099..b128d2e9a2bc1629dbe650ba7d7e3a19a502de7b 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3094,6 +3094,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3163,6 +3163,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
// Paper end
}
diff --git a/patches/api/0218-Player-elytra-boost-API.patch b/patches/api/0218-Player-elytra-boost-API.patch
index 2c50e28530..0c4a7066a4 100644
--- a/patches/api/0218-Player-elytra-boost-API.patch
+++ b/patches/api/0218-Player-elytra-boost-API.patch
@@ -5,14 +5,14 @@ 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 110d3d031ae2408e5caac2fdfd3f8f8efbeb7e05..9f1e3bc711e34a1a30aefc7c60068c84e3ea02ba 100644
+index b128d2e9a2bc1629dbe650ba7d7e3a19a502de7b..f086585e03b6b782431abd69f163e648bc1c22b4 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2986,6 +2986,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- */
- @NotNull
- T getClientOption(@NotNull com.destroystokyo.paper.ClientOption option);
-+
+@@ -3057,6 +3057,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+ @NotNull T getClientOption(com.destroystokyo.paper.@NotNull ClientOption option);
+ // Paper end - client option API
+
++ // Paper start - elytra boost API
+ /**
+ * Boost a Player that's {@link #isGliding()} using a {@link Firework}.
+ * If the creation of the entity is cancelled, no boosting is done.
@@ -25,11 +25,12 @@ index 110d3d031ae2408e5caac2fdfd3f8f8efbeb7e05..9f1e3bc711e34a1a30aefc7c60068c84
+ * @deprecated use {@link HumanEntity#fireworkBoost(ItemStack)} instead. Note that this method does not
+ * check if the player is gliding or not.
+ */
-+ @Nullable
-+ default Firework boostElytra(@NotNull ItemStack firework) {
++ default @Nullable Firework boostElytra(final @NotNull ItemStack firework) {
+ com.google.common.base.Preconditions.checkState(this.isGliding(), "Player must be gliding");
+ return this.fireworkBoost(firework);
+ }
- // Paper end
-
++ // Paper end - elytra boost API
++
// Spigot start
+ public class Spigot extends Entity.Spigot {
+
diff --git a/patches/api/0245-Add-sendOpLevel-API.patch b/patches/api/0245-Add-sendOpLevel-API.patch
index 53c84f2f9d..f2dca3ee6d 100644
--- a/patches/api/0245-Add-sendOpLevel-API.patch
+++ b/patches/api/0245-Add-sendOpLevel-API.patch
@@ -5,12 +5,12 @@ 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 9f1e3bc711e34a1a30aefc7c60068c84e3ea02ba..1efce69d16014147ae022ecf33eaed934236a7c1 100644
+index f086585e03b6b782431abd69f163e648bc1c22b4..b848ef1c207797b352c2ca97c574c4cd3fe6e43a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3006,6 +3006,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3076,6 +3076,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
}
- // Paper end
+ // Paper end - elytra boost API
+ // Paper start - sendOpLevel API
+ /**
diff --git a/patches/api/0293-Add-PlayerKickEvent-causes.patch b/patches/api/0293-Add-PlayerKickEvent-causes.patch
index c981afdab1..5b213c4350 100644
--- a/patches/api/0293-Add-PlayerKickEvent-causes.patch
+++ b/patches/api/0293-Add-PlayerKickEvent-causes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add PlayerKickEvent causes
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 1efce69d16014147ae022ecf33eaed934236a7c1..7ce512072f242632f17db55224488f18c1cddcc4 100644
+index b848ef1c207797b352c2ca97c574c4cd3fe6e43a..2a6879aa1b0497c485d127542ca4e526a23ecf85 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -275,6 +275,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -24,7 +24,7 @@ index 1efce69d16014147ae022ecf33eaed934236a7c1..7ce512072f242632f17db55224488f18
/**
diff --git a/src/main/java/org/bukkit/event/player/PlayerKickEvent.java b/src/main/java/org/bukkit/event/player/PlayerKickEvent.java
-index 997b06c19a5277656521e0e298f2958c209f1da1..2eb13c049fa917d41fa9ad17fdec9ec4c33701a8 100644
+index 997b06c19a5277656521e0e298f2958c209f1da1..f7f864a2b46129e4d61bc87f3e23c343417aa094 100644
--- a/src/main/java/org/bukkit/event/player/PlayerKickEvent.java
+++ b/src/main/java/org/bukkit/event/player/PlayerKickEvent.java
@@ -12,6 +12,7 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable {
@@ -35,7 +35,7 @@ index 997b06c19a5277656521e0e298f2958c209f1da1..2eb13c049fa917d41fa9ad17fdec9ec4
private boolean cancel;
@Deprecated // Paper
-@@ -19,14 +20,25 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable {
+@@ -19,14 +20,26 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable {
super(playerKicked);
this.kickReason = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(kickReason); // Paper
this.leaveMessage = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(leaveMessage); // Paper
@@ -52,6 +52,7 @@ index 997b06c19a5277656521e0e298f2958c209f1da1..2eb13c049fa917d41fa9ad17fdec9ec4
+ this.cause = Cause.UNKNOWN;
+ }
+
++ @org.jetbrains.annotations.ApiStatus.Internal
+ public PlayerKickEvent(@NotNull final Player playerKicked, @NotNull final net.kyori.adventure.text.Component kickReason, @NotNull final net.kyori.adventure.text.Component leaveMessage, @NotNull final Cause cause) {
+ super(playerKicked);
+ this.kickReason = kickReason;
@@ -61,7 +62,7 @@ index 997b06c19a5277656521e0e298f2958c209f1da1..2eb13c049fa917d41fa9ad17fdec9ec4
}
/**
-@@ -132,4 +144,77 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable {
+@@ -132,4 +145,77 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable {
public static HandlerList getHandlerList() {
return handlers;
}
diff --git a/patches/api/0368-More-Teleport-API.patch b/patches/api/0368-More-Teleport-API.patch
index 7cdd65de37..fb5c155fe4 100644
--- a/patches/api/0368-More-Teleport-API.patch
+++ b/patches/api/0368-More-Teleport-API.patch
@@ -158,10 +158,10 @@ index 953bb49b7079647450d3453356d1c8a91be94c01..2ea66188468cf32bcaedc5167d4b9b0c
* Teleports this entity to the given location. If this entity is riding a
* vehicle, it will be dismounted prior to teleportation.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index a6053648464d903d1f9501bbeae688240fbfd754..2b0826e3cbf684fe15f664c4d9041dc95a991ebd 100644
+index 2ded556b2adca7cf8d6f6cd0c19a618f5d3ffaaf..17f78126ba815fd2c1a88e12047d5187285ada8f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3166,6 +3166,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3236,6 +3236,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
String getClientBrandName();
// Paper end
diff --git a/patches/api/0370-Custom-Chat-Completion-Suggestions-API.patch b/patches/api/0370-Custom-Chat-Completion-Suggestions-API.patch
index 28c67cd7e9..f123c89635 100644
--- a/patches/api/0370-Custom-Chat-Completion-Suggestions-API.patch
+++ b/patches/api/0370-Custom-Chat-Completion-Suggestions-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Custom Chat Completion Suggestions API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 2b0826e3cbf684fe15f664c4d9041dc95a991ebd..11294829dc3dc4523110892bb92d6bb5210e01e9 100644
+index 17f78126ba815fd2c1a88e12047d5187285ada8f..d5ee046a5d410c9805924ae9d9ca3cbc1239b826 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3050,6 +3050,31 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3120,6 +3120,31 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void sendOpLevel(byte level);
// Paper end - sendOpLevel API
diff --git a/patches/api/0380-Elder-Guardian-appearance-API.patch b/patches/api/0380-Elder-Guardian-appearance-API.patch
index 8cd2549b95..c130d36150 100644
--- a/patches/api/0380-Elder-Guardian-appearance-API.patch
+++ b/patches/api/0380-Elder-Guardian-appearance-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Elder Guardian appearance API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 11294829dc3dc4523110892bb92d6bb5210e01e9..b42693e8adce3b4dfbed17ad5f3df5ea00f3615b 100644
+index d5ee046a5d410c9805924ae9d9ca3cbc1239b826..2fe7a0afa581c5f8ab2f7b1ab5703cc5976b89f4 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3230,6 +3230,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3300,6 +3300,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor, @NotNull io.papermc.paper.entity.LookAnchor entityAnchor);
// Paper end - Teleport API
diff --git a/patches/api/0388-Add-Player-Warden-Warning-API.patch b/patches/api/0388-Add-Player-Warden-Warning-API.patch
index 6ab9971525..8b0e99a0a0 100644
--- a/patches/api/0388-Add-Player-Warden-Warning-API.patch
+++ b/patches/api/0388-Add-Player-Warden-Warning-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add Player Warden Warning API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index b42693e8adce3b4dfbed17ad5f3df5ea00f3615b..53026b36fce2a201e81a844b115a274e9495928d 100644
+index 2fe7a0afa581c5f8ab2f7b1ab5703cc5976b89f4..24d23796558dd2ff3a942b4d0ccf46c3bc7ed2bf 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3246,6 +3246,59 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3316,6 +3316,59 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param silent whether sound should be silenced
*/
void showElderGuardian(boolean silent);
diff --git a/patches/api/0441-Add-player-idle-duration-API.patch b/patches/api/0441-Add-player-idle-duration-API.patch
index 883cee91af..b728ffc4ca 100644
--- a/patches/api/0441-Add-player-idle-duration-API.patch
+++ b/patches/api/0441-Add-player-idle-duration-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add player idle duration API
Implements API for getting and resetting a player's idle duration.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 0909c7d1dae6192e3103f4eaeb08bf3efbbd4153..962283d336e6d53941cebbc3a995d403ff989f66 100644
+index bab78593de3b8cbf939f423334ba3cfc67aea9dc..a8d3451ccfcd21a9e80adc2feab8fc9c2926c753 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3387,6 +3387,29 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3457,6 +3457,29 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void increaseWardenWarningLevel();
// Paper end
diff --git a/patches/server/0010-Adventure.patch b/patches/server/0010-Adventure.patch
index 84ba0ce478..ee701aa325 100644
--- a/patches/server/0010-Adventure.patch
+++ b/patches/server/0010-Adventure.patch
@@ -3567,7 +3567,7 @@ index 61759e8179d0f6342abf0c0294e5a024928db8d9..92e21126a9347f1ee2279ab09bb6abf2
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 3777442efd8e7d599a4f3191d85cb1be6871ad3b..336045ecb9e6b3803fdf9531b07bb72ceff0ee73 100644
+index 3777442efd8e7d599a4f3191d85cb1be6871ad3b..f8fc314a0c6960125e51e6d6ed11afcdff684332 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -303,14 +303,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3751,14 +3751,14 @@ index 3777442efd8e7d599a4f3191d85cb1be6871ad3b..336045ecb9e6b3803fdf9531b07bb72c
}
@Override
-@@ -1731,6 +1797,22 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1731,6 +1797,23 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
-+ // Paper start
-+ // TODO UUID API
++ // Paper start - adventure
+ @Override
-+ public void setResourcePack(String url, byte[] hashBytes, net.kyori.adventure.text.Component prompt, boolean force) {
++ public void setResourcePack(final UUID uuid, final String url, final byte[] hashBytes, final net.kyori.adventure.text.Component prompt, final boolean force) {
++ Preconditions.checkArgument(uuid != null, "Resource pack UUID cannot be null");
+ Preconditions.checkArgument(url != null, "Resource pack URL cannot be null");
+ final String hash;
+ if (hashBytes != null) {
@@ -3767,14 +3767,15 @@ index 3777442efd8e7d599a4f3191d85cb1be6871ad3b..336045ecb9e6b3803fdf9531b07bb72c
+ } else {
+ hash = "";
+ }
-+ this.getHandle().connection.send(new ClientboundResourcePackPushPacket(UUID.randomUUID(), url, hash, force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)));
++ this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket(Optional.empty()));
++ this.getHandle().connection.send(new ClientboundResourcePackPushPacket(uuid, url, hash, force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)));
+ }
-+ // Paper end
++ // Paper end - adventure
+
public void addChannel(String channel) {
Preconditions.checkState(this.channels.size() < 128, "Cannot register channel '%s'. Too many channels registered!", channel);
channel = StandardMessenger.validateAndCorrectChannel(channel);
-@@ -2126,6 +2208,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2126,6 +2209,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return (this.getHandle().requestedViewDistance() == 0) ? Bukkit.getViewDistance() : this.getHandle().requestedViewDistance();
}
@@ -3787,7 +3788,7 @@ index 3777442efd8e7d599a4f3191d85cb1be6871ad3b..336045ecb9e6b3803fdf9531b07bb72c
@Override
public int getPing() {
return this.getHandle().connection.latency();
-@@ -2176,6 +2264,252 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2176,6 +2265,252 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().allowsListing();
}
diff --git a/patches/server/0014-Timings-v2.patch b/patches/server/0014-Timings-v2.patch
index d6bbfae1a4..a38625f584 100644
--- a/patches/server/0014-Timings-v2.patch
+++ b/patches/server/0014-Timings-v2.patch
@@ -1123,7 +1123,7 @@ index 7cacfceed5ef9276a19123a8a9079579423d03ac..5cd680d2ed47aadb5e65a775d70bc662
gameprofilerfiller.pop();
gameprofilerfiller.pop();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 634869a2747c655a6705deeb5fcb27d2c4754e0c..e2990302d932a5dc089a25e831e11ac6468f6381 100644
+index 3bd2bddb782d29e647a1f1b362a39d224151f8b1..3851c1026b91b77a02dbb5df1a1eedb212ac2a06 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 @@
@@ -1817,10 +1817,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 336045ecb9e6b3803fdf9531b07bb72ceff0ee73..c74428dccd9db8c4d2809bbd23f3268a16d7e282 100644
+index f8fc314a0c6960125e51e6d6ed11afcdff684332..4a7199edc2c7597cba956b2427a17efa08eb8d82 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2585,6 +2585,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2586,6 +2586,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
CraftPlayer.this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(components, position == net.md_5.bungee.api.ChatMessageType.ACTION_BAR));
}
diff --git a/patches/server/0030-Player-affects-spawning-API.patch b/patches/server/0030-Player-affects-spawning-API.patch
index f14f5a356c..b8e5ed0b8b 100644
--- a/patches/server/0030-Player-affects-spawning-API.patch
+++ b/patches/server/0030-Player-affects-spawning-API.patch
@@ -137,10 +137,10 @@ index 2ec2b1d9d987c7f31c685aec3d3c87f42758c94b..36d793b492d9776ee36f8285b5bab09e
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 24c282c0727fa814c403716837b2d44b216c5b16..e6f67e770f97f239e545c2d4396c86b546c712e0 100644
+index 41a4f6126f24848a26ff0f928a23b5be13783c90..4bdcff78393b618b2201753bbffbd9001d5ad2d1 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2266,6 +2266,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2267,6 +2267,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().language;
}
diff --git a/patches/server/0032-Only-refresh-abilities-if-needed.patch b/patches/server/0032-Only-refresh-abilities-if-needed.patch
index e43a900d8f..3ec75f6e69 100644
--- a/patches/server/0032-Only-refresh-abilities-if-needed.patch
+++ b/patches/server/0032-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 e6f67e770f97f239e545c2d4396c86b546c712e0..eb0409c01d8e1259414803495c48ec14179f457b 100644
+index 4bdcff78393b618b2201753bbffbd9001d5ad2d1..188daf2ff7766d39b62b763bab7e4ad79f85449f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1937,12 +1937,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1938,12 +1938,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setFlying(boolean value) {
diff --git a/patches/server/0045-Implement-PlayerLocaleChangeEvent.patch b/patches/server/0045-Implement-PlayerLocaleChangeEvent.patch
index 500847e33b..4e3884a480 100644
--- a/patches/server/0045-Implement-PlayerLocaleChangeEvent.patch
+++ b/patches/server/0045-Implement-PlayerLocaleChangeEvent.patch
@@ -39,10 +39,10 @@ index bf89ea0f7506434848cb9c1cbfb3fe6dd2eb3212..686b42a9b4475fe3d530a9b950c1cc8f
// CraftBukkit end
this.language = clientOptions.language();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index eb0409c01d8e1259414803495c48ec14179f457b..1e395d14382c79231dc81d6cf7ea864e45906add 100644
+index 188daf2ff7766d39b62b763bab7e4ad79f85449f..6cf9ca72f042b1b936f8ba04e9582cf4da4bcb6a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2264,7 +2264,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2265,7 +2265,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public String getLocale() {
diff --git a/patches/server/0064-Complete-resource-pack-API.patch b/patches/server/0064-Complete-resource-pack-API.patch
index 952619d2c9..dbfd623250 100644
--- a/patches/server/0064-Complete-resource-pack-API.patch
+++ b/patches/server/0064-Complete-resource-pack-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Complete resource pack API
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 56f6f65ceb1271e9273b1ee6658773eb3445beed..a26db4bd859ef52dadf03f1b62155bcc54b7a740 100644
+index 56f6f65ceb1271e9273b1ee6658773eb3445beed..771db61f81d7a3cd763efb5febf6008fd2ba1232 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -156,7 +156,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -15,58 +15,38 @@ index 56f6f65ceb1271e9273b1ee6658773eb3445beed..a26db4bd859ef52dadf03f1b62155bcc
- this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packet.id(), PlayerResourcePackStatusEvent.Status.values()[packet.action().ordinal()])); // CraftBukkit
+ // Paper start
+ PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packet.action().ordinal()];
-+ player.getBukkitEntity().setResourcePackStatus(packStatus);
++ player.getBukkitEntity().resourcePackStatus = packStatus;
+ this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packet.id(), packStatus)); // CraftBukkit
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index a58b0d10d73310587a05e40e072029ee258063e1..6da1b2f54317ddc84a1fbff037560e402b02f771 100644
+index b64d3ad29235c8483bbb4ae108821137cbe13e3f..5d624f73a5b47efc3b117023a58176fe35454a84 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -44,6 +44,7 @@ import net.minecraft.network.chat.Component;
- import net.minecraft.network.chat.PlayerChatMessage;
- import net.minecraft.network.protocol.Packet;
- import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
-+import net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket;
- import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket;
- import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
- import net.minecraft.network.protocol.game.ClientboundBlockDestructionPacket;
-@@ -192,6 +193,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -192,6 +192,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
private double healthScale = 20;
private CraftWorldBorder clientWorldBorder = null;
private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener();
-+ // Paper start
-+ private org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus;
-+ private String resourcePackHash;
-+ // Paper end
++ public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; // Paper - more resource pack API
public CraftPlayer(CraftServer server, ServerPlayer entity) {
super(server, entity);
-@@ -2387,6 +2392,46 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
- public boolean getAffectsSpawning() {
- return this.getHandle().affectsSpawning;
+@@ -1964,6 +1965,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
-+
+ // Paper end - adventure
+
++ // Paper start - more resource pack API
+ @Override
-+ public void setResourcePack(@NotNull String url, @NotNull String hash) {
-+ this.setResourcePack(url, hash, false, null);
-+ }
-+
-+ @Override
-+ public void setResourcePack(@NotNull String url, @NotNull String hash, boolean required) {
-+ this.setResourcePack(url, hash, required, null);
-+ }
-+
-+ @Override
-+ public void setResourcePack(@NotNull String url, @NotNull String hash, boolean required, net.kyori.adventure.text.Component resourcePackPrompt) {
++ public void setResourcePack(@NotNull UUID uuid, @NotNull String url, @NotNull String hash, net.kyori.adventure.text.Component resourcePackPrompt, boolean required) {
++ Preconditions.checkArgument(uuid != null, "Resource pack UUID cannot be null");
+ Preconditions.checkArgument(url != null, "Resource pack URL cannot be null");
+ Preconditions.checkArgument(hash != null, "Hash cannot be null");
-+ net.minecraft.network.chat.Component promptComponent = resourcePackPrompt != null ?
-+ io.papermc.paper.adventure.PaperAdventure.asVanilla(resourcePackPrompt) :
-+ null;
-+ this.getHandle().connection.send(new ClientboundResourcePackPopPacket(Optional.empty()));
++ final net.minecraft.network.chat.Component promptComponent = resourcePackPrompt != null ?
++ io.papermc.paper.adventure.PaperAdventure.asVanilla(resourcePackPrompt) :
++ null;
++ this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket(Optional.empty()));
+ this.getHandle().connection.send(new ClientboundResourcePackPushPacket(UUID.randomUUID(), url, hash, required, promptComponent));
+ }
+
@@ -74,20 +54,8 @@ index a58b0d10d73310587a05e40e072029ee258063e1..6da1b2f54317ddc84a1fbff037560e40
+ public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status getResourcePackStatus() {
+ return this.resourcePackStatus;
+ }
++ // Paper end - more resource pack API
+
-+ @Override
-+ public String getResourcePackHash() {
-+ return this.resourcePackHash;
-+ }
-+
-+ @Override
-+ public boolean hasResourcePack() {
-+ return this.resourcePackStatus == org.bukkit.event.player.PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED;
-+ }
-+
-+ public void setResourcePackStatus(org.bukkit.event.player.PlayerResourcePackStatusEvent.Status status) {
-+ this.resourcePackStatus = status;
-+ }
- // Paper end
-
- @Override
+ public void addChannel(String channel) {
+ Preconditions.checkState(this.channels.size() < 128, "Cannot register channel '%s'. Too many channels registered!", channel);
+ channel = StandardMessenger.validateAndCorrectChannel(channel);
diff --git a/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch b/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch
index cf7108f301..f4c25dcca2 100644
--- a/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch
+++ b/patches/server/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch
@@ -44,10 +44,10 @@ index b76ac10fe0d4b860a4b30fae365cf38400afb456..1e2d3040bb3e8b1901fbc933caa5ad3b
protected void internalSetAbsorptionAmount(float absorptionAmount) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 6da1b2f54317ddc84a1fbff037560e402b02f771..0599752a23363405b6af1e89521badf3bf6643f3 100644
+index 5d624f73a5b47efc3b117023a58176fe35454a84..77d836f33db291eeb214a833169da9cd1f22e4bb 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2183,6 +2183,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2199,6 +2199,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
public void setRealHealth(double health) {
diff --git a/patches/server/0120-String-based-Action-Bar-API.patch b/patches/server/0120-String-based-Action-Bar-API.patch
index efbc37f59b..5da48b5804 100644
--- a/patches/server/0120-String-based-Action-Bar-API.patch
+++ b/patches/server/0120-String-based-Action-Bar-API.patch
@@ -26,10 +26,10 @@ index cb88a3a4e4c87a6d6c838183c1640b13d82c9344..0b391b0dc6262ef482c4a253a074b593
// Paper end
buf.writeComponent(this.text);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 0599752a23363405b6af1e89521badf3bf6643f3..ab0b31a41b9a35f3ff19c73a99d0392a303c2b53 100644
+index 77d836f33db291eeb214a833169da9cd1f22e4bb..6c46977874eac7d88ad87f655c0f6ad5159ce98c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -350,6 +350,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -346,6 +346,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper start
diff --git a/patches/server/0157-Expose-client-protocol-version-and-virtual-host.patch b/patches/server/0157-Expose-client-protocol-version-and-virtual-host.patch
index 075faa1849..0befb524ec 100644
--- a/patches/server/0157-Expose-client-protocol-version-and-virtual-host.patch
+++ b/patches/server/0157-Expose-client-protocol-version-and-virtual-host.patch
@@ -90,10 +90,10 @@ index 0d9658b1c6b5912a34058c0ce53b8e7f8c28afac..203fc53142bb0c9b6e2d1876fe8dfbe3
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index ab0b31a41b9a35f3ff19c73a99d0392a303c2b53..7115d71cfd514a4cdc2b0d2b17b87fb6fff21ee7 100644
+index 6c46977874eac7d88ad87f655c0f6ad5159ce98c..31e107a0641276b2f00fd219f2095e15e0544285 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -296,6 +296,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -292,6 +292,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
diff --git a/patches/server/0167-Ability-to-apply-mending-to-XP-API.patch b/patches/server/0167-Ability-to-apply-mending-to-XP-API.patch
index 999ddd73aa..0b914ae992 100644
--- a/patches/server/0167-Ability-to-apply-mending-to-XP-API.patch
+++ b/patches/server/0167-Ability-to-apply-mending-to-XP-API.patch
@@ -14,10 +14,10 @@ public net.minecraft.world.entity.ExperienceOrb durabilityToXp(I)I
public net.minecraft.world.entity.ExperienceOrb xpToDurability(I)I
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 7115d71cfd514a4cdc2b0d2b17b87fb6fff21ee7..352c16b89f0e33aefef141fea0bf8067208cffcf 100644
+index 31e107a0641276b2f00fd219f2095e15e0544285..9255edcd67e2cdd2fab31ae881ca88b6a5beb8e3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1550,7 +1550,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1546,7 +1546,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
@Override
diff --git a/patches/server/0180-Player.setPlayerProfile-API.patch b/patches/server/0180-Player.setPlayerProfile-API.patch
index 437cd967b2..96ec2274b8 100644
--- a/patches/server/0180-Player.setPlayerProfile-API.patch
+++ b/patches/server/0180-Player.setPlayerProfile-API.patch
@@ -55,10 +55,10 @@ index 477d3245facb5ae59c786d4f696f64226cb540a6..e8490a58dd4d9bc39a5bb2f9fc109526
public Server getServer() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc8631d32632d 100644
+index 9255edcd67e2cdd2fab31ae881ca88b6a5beb8e3..a343157512ca145b3e5ab1a0fcaeae0ae7aeb2e0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -279,11 +279,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -275,11 +275,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.server.getPlayer(this.getUniqueId()) != null;
}
@@ -70,7 +70,7 @@ index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc863
@Override
public InetSocketAddress getAddress() {
if (this.getHandle().connection == null) return null;
-@@ -1700,8 +1695,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1696,8 +1691,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
private void untrackAndHideEntity(org.bukkit.entity.Entity entity) {
// Remove this entity from the hidden player's EntityTrackerEntry
@@ -87,7 +87,7 @@ index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc863
ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId());
if (entry != null) {
entry.removePlayer(this.getHandle());
-@@ -1714,8 +1716,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1710,8 +1712,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().connection.send(new ClientboundPlayerInfoRemovePacket(List.of(otherPlayer.getUUID())));
}
}
@@ -96,7 +96,7 @@ index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc863
}
void resetAndHideEntity(org.bukkit.entity.Entity entity) {
-@@ -1780,12 +1780,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1776,12 +1776,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
private void trackAndShowEntity(org.bukkit.entity.Entity entity) {
@@ -122,7 +122,7 @@ index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc863
}
ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId());
-@@ -1795,6 +1808,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1791,6 +1804,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity));
}
@@ -162,7 +162,7 @@ index 352c16b89f0e33aefef141fea0bf8067208cffcf..f4a6a3f9c6c8972f482a53ee434dc863
void resetAndShowEntity(org.bukkit.entity.Entity entity) {
// SPIGOT-7312: Can't show/hide self
-@@ -1806,6 +1852,36 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1802,6 +1848,36 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.trackAndShowEntity(entity);
}
}
diff --git a/patches/server/0185-Flag-to-disable-the-channel-limit.patch b/patches/server/0185-Flag-to-disable-the-channel-limit.patch
index 7933c9ab00..ad0d8dbe43 100644
--- a/patches/server/0185-Flag-to-disable-the-channel-limit.patch
+++ b/patches/server/0185-Flag-to-disable-the-channel-limit.patch
@@ -9,19 +9,19 @@ 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 f4a6a3f9c6c8972f482a53ee434dc8631d32632d..90de9ce49cf067335ce881a2806fa18ef9e5d556 100644
+index a343157512ca145b3e5ab1a0fcaeae0ae7aeb2e0..a5b82436d929c17007cf55d12686ecdd948bdee3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -196,6 +196,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
- // Paper start
- private org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus;
- private String resourcePackHash;
+@@ -193,6 +193,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ private CraftWorldBorder clientWorldBorder = null;
+ private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener();
+ public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; // Paper - more resource pack API
+ private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit
- // Paper end
public CraftPlayer(CraftServer server, ServerPlayer entity) {
-@@ -2112,7 +2113,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
- // Paper end
+ super(server, entity);
+@@ -2128,7 +2129,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ // Paper end - more resource pack API
public void addChannel(String channel) {
- Preconditions.checkState(this.channels.size() < 128, "Cannot register channel '%s'. Too many channels registered!", channel);
diff --git a/patches/server/0214-InventoryCloseEvent-Reason-API.patch b/patches/server/0214-InventoryCloseEvent-Reason-API.patch
index 710d13f9d8..abbc09ef61 100644
--- a/patches/server/0214-InventoryCloseEvent-Reason-API.patch
+++ b/patches/server/0214-InventoryCloseEvent-Reason-API.patch
@@ -173,10 +173,10 @@ index 7d6301ae9ee2added007b0c68ffabe5d79f7be62..801dca6bbafd6e1825a1291fc128efc1
@Override
public boolean isBlocking() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 90de9ce49cf067335ce881a2806fa18ef9e5d556..9718d1f36db4f41140e3b7b2ff008038ca4f9cb8 100644
+index a5b82436d929c17007cf55d12686ecdd948bdee3..9e34575c8ffff57d692349a4a05db3d1f769c687 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1201,7 +1201,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1197,7 +1197,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Close any foreign inventory
if (this.getHandle().containerMenu != this.getHandle().inventoryMenu) {
diff --git a/patches/server/0250-Expose-attack-cooldown-methods-for-Player.patch b/patches/server/0250-Expose-attack-cooldown-methods-for-Player.patch
index 7af5ffd331..0c69959323 100644
--- a/patches/server/0250-Expose-attack-cooldown-methods-for-Player.patch
+++ b/patches/server/0250-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 9718d1f36db4f41140e3b7b2ff008038ca4f9cb8..c7aed877d5e1976da8407075e69a75eb2837bff3 100644
+index 9e34575c8ffff57d692349a4a05db3d1f769c687..8417da1eb3a440adcd425ffbda9fdcb768857afd 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2864,6 +2864,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2840,6 +2840,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.adventure$pointers;
}
diff --git a/patches/server/0251-Improve-death-events.patch b/patches/server/0251-Improve-death-events.patch
index 1d2883ce15..45829b0186 100644
--- a/patches/server/0251-Improve-death-events.patch
+++ b/patches/server/0251-Improve-death-events.patch
@@ -392,10 +392,10 @@ index 948ba97e318506dad96e59121297b5bf8340d2e6..810bead2f19de70786027b190137f743
this.gameEvent(GameEvent.ENTITY_DIE);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index c7aed877d5e1976da8407075e69a75eb2837bff3..e7c81627e8e9a959b2db521a30e16dcda98ef145 100644
+index 8417da1eb3a440adcd425ffbda9fdcb768857afd..e55d31783396e87ef18f5b6dfc27742c0b4e3465 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2361,7 +2361,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2377,7 +2377,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void sendHealthUpdate() {
FoodData foodData = this.getHandle().getFoodData();
diff --git a/patches/server/0287-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/patches/server/0287-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
index c39ca042ac..5287e5fb3d 100644
--- a/patches/server/0287-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
+++ b/patches/server/0287-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch
@@ -106,37 +106,37 @@ index e8490a58dd4d9bc39a5bb2f9fc109526e031b971..5f590575f95eff8bf0cdcafde7dee0e3
public Location getLastDeathLocation() {
if (this.getData().contains("LastDeathLocation", 10)) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index e7c81627e8e9a959b2db521a30e16dcda98ef145..00a5e27fc3e2e566642c5f5c730c3c4c97abe2cb 100644
+index e55d31783396e87ef18f5b6dfc27742c0b4e3465..6ec80e3a838f8f7479ee965561043586d64c649a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -197,6 +197,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
- private org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus;
- private String resourcePackHash;
+@@ -194,6 +194,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener();
+ public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; // Paper - more resource pack API
private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit
-+ private long lastSaveTime;
- // Paper end
++ private long lastSaveTime; // Paper - getLastPlayed replacement API
public CraftPlayer(CraftServer server, ServerPlayer entity) {
-@@ -1962,6 +1963,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ super(server, entity);
+@@ -1958,6 +1959,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.firstPlayed = firstPlayed;
}
-+ // Paper start
++ // Paper start - getLastPlayed replacement API
+ @Override
+ public long getLastLogin() {
-+ return getHandle().loginTime;
++ return this.getHandle().loginTime;
+ }
+
+ @Override
+ public long getLastSeen() {
-+ return isOnline() ? System.currentTimeMillis() : this.lastSaveTime;
++ return this.isOnline() ? System.currentTimeMillis() : this.lastSaveTime;
+ }
-+ // Paper end
++ // Paper end - getLastPlayed replacement API
+
public void readExtraData(CompoundTag nbttagcompound) {
this.hasPlayedBefore = true;
if (nbttagcompound.contains("bukkit")) {
-@@ -1984,6 +1997,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1980,6 +1993,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
public void setExtraData(CompoundTag nbttagcompound) {
@@ -145,7 +145,7 @@ index e7c81627e8e9a959b2db521a30e16dcda98ef145..00a5e27fc3e2e566642c5f5c730c3c4c
if (!nbttagcompound.contains("bukkit")) {
nbttagcompound.put("bukkit", new CompoundTag());
}
-@@ -1998,6 +2013,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1994,6 +2009,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/0289-Dont-block-Player-remove-if-the-handle-is-a-custom-p.patch b/patches/server/0289-Dont-block-Player-remove-if-the-handle-is-a-custom-p.patch
index b15cfcf5e7..1de004a0a4 100644
--- a/patches/server/0289-Dont-block-Player-remove-if-the-handle-is-a-custom-p.patch
+++ b/patches/server/0289-Dont-block-Player-remove-if-the-handle-is-a-custom-p.patch
@@ -8,10 +8,10 @@ We just add a check to ensure that the CraftPlayer's handle
is a ServerPlayer
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 00a5e27fc3e2e566642c5f5c730c3c4c97abe2cb..553c5b65f4cc42e915196fa60a939f020b935e3a 100644
+index 6ec80e3a838f8f7479ee965561043586d64c649a..49da25428fa35a935bab2ca5a28081682284a79a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -254,8 +254,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -250,8 +250,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void remove() {
diff --git a/patches/server/0373-Implement-Player-Client-Options-API.patch b/patches/server/0373-Implement-Player-Client-Options-API.patch
index 6ecd245abf..3f1de4718c 100644
--- a/patches/server/0373-Implement-Player-Client-Options-API.patch
+++ b/patches/server/0373-Implement-Player-Client-Options-API.patch
@@ -136,10 +136,10 @@ index 3a026f766e2d67e005ae8a06337d465f92c8d1f3..352fbab070ccdb683e9a7558292c86cc
this.adventure$locale = net.kyori.adventure.translation.Translator.parseLocale(this.language); // Paper
this.requestedViewDistance = clientOptions.viewDistance();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 553c5b65f4cc42e915196fa60a939f020b935e3a..74b36a42971976c4205f0638dee5eb78e1014bcd 100644
+index 49da25428fa35a935bab2ca5a28081682284a79a..e10cad5e2b078ff6ff7cba84dfa105ea5704d019 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -616,6 +616,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -612,6 +612,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message);
}
}
diff --git a/patches/server/0441-Brand-support.patch b/patches/server/0441-Brand-support.patch
index bd578684f9..5f958d3be5 100644
--- a/patches/server/0441-Brand-support.patch
+++ b/patches/server/0441-Brand-support.patch
@@ -17,7 +17,7 @@ index 25c5f23b859961c792b2ec08404171eea1aedba7..478abaffd1a80949b96f1c1774c98134
// Paper start - replace player chunk loader
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));
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 595086133c687d2f9752cbda475123063f22df42..9647f6a274f4a4d2a940759b9cbd00569ac3bb18 100644
+index 698fc66f8c232644f2d747c81f8ac2e39204fd7f..8cb7e9d67fc4713dc327ad0459518f062dc9264e 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -54,6 +54,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -57,10 +57,10 @@ index 595086133c687d2f9752cbda475123063f22df42..9647f6a274f4a4d2a940759b9cbd0056
} catch (Exception ex) {
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 74b36a42971976c4205f0638dee5eb78e1014bcd..49994f8fc11c41052305dd8722c0abe51160ee64 100644
+index e10cad5e2b078ff6ff7cba84dfa105ea5704d019..630f98fc58579c0a900d8ff6712a463742f90338 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3023,6 +3023,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2999,6 +2999,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper end
};
diff --git a/patches/server/0487-Fix-Player-spawnParticle-x-y-z-precision-loss.patch b/patches/server/0487-Fix-Player-spawnParticle-x-y-z-precision-loss.patch
index d268e0dacc..cfb4e7caf0 100644
--- a/patches/server/0487-Fix-Player-spawnParticle-x-y-z-precision-loss.patch
+++ b/patches/server/0487-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 49994f8fc11c41052305dd8722c0abe51160ee64..37efca4dcd1504e3dab231f516cc9e455f70effb 100644
+index 630f98fc58579c0a900d8ff6712a463742f90338..32c51de77dcd278f895969c513e38075dad83ace 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2546,7 +2546,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2562,7 +2562,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (data != null) {
Preconditions.checkArgument(particle.getDataType().isInstance(data), "data (%s) should be %s", data.getClass(), particle.getDataType());
}
diff --git a/patches/server/0526-Add-sendOpLevel-API.patch b/patches/server/0526-Add-sendOpLevel-API.patch
index 8553b885d4..9f2f3ebb75 100644
--- a/patches/server/0526-Add-sendOpLevel-API.patch
+++ b/patches/server/0526-Add-sendOpLevel-API.patch
@@ -32,10 +32,10 @@ index 1131ee88f35c3898f0119c414c8376b0d9130169..bf361396bc2ec5d5c7b45d425af990c0
public boolean isWhiteListed(GameProfile profile) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 37efca4dcd1504e3dab231f516cc9e455f70effb..7134590b3ecef49dac5f9660f8870b1f2814ba5b 100644
+index 32c51de77dcd278f895969c513e38075dad83ace..f556375e1081039f38d2e2e5c0fb48c3f77dd387 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -640,6 +640,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -636,6 +636,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end
diff --git a/patches/server/0593-additions-to-PlayerGameModeChangeEvent.patch b/patches/server/0593-additions-to-PlayerGameModeChangeEvent.patch
index 3ce69f8dcc..67f37a1a0c 100644
--- a/patches/server/0593-additions-to-PlayerGameModeChangeEvent.patch
+++ b/patches/server/0593-additions-to-PlayerGameModeChangeEvent.patch
@@ -144,10 +144,10 @@ index ba65b69e967ad933fec5e87da1ccfba25a42a372..eb04b74e2d71bf1842a19b346576f0ff
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 7134590b3ecef49dac5f9660f8870b1f2814ba5b..8c5aa99068b5f67e55fd3af9e9abea2612ee84d5 100644
+index f556375e1081039f38d2e2e5c0fb48c3f77dd387..785f218d1a56a22b9d01a4423ac0100a05758241 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1566,7 +1566,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1562,7 +1562,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Preconditions.checkArgument(mode != null, "GameMode cannot be null");
if (this.getHandle().connection == null) return;
diff --git a/patches/server/0605-Add-PlayerKickEvent-causes.patch b/patches/server/0605-Add-PlayerKickEvent-causes.patch
index b191ac3eae..2e57d3520c 100644
--- a/patches/server/0605-Add-PlayerKickEvent-causes.patch
+++ b/patches/server/0605-Add-PlayerKickEvent-causes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add PlayerKickEvent causes
diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
-index 96814e626a95e4e3c2f4df1a0339d37bb02f2e61..b96bf00bc6cd10ced89939424150bd3c5baf12c3 100644
+index 96814e626a95e4e3c2f4df1a0339d37bb02f2e61..85a8a687b1568a56e3e646b37ef78b562c1b8a82 100644
--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
+++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
@@ -35,16 +35,16 @@ public class SignedMessageChain {
@@ -13,7 +13,7 @@ index 96814e626a95e4e3c2f4df1a0339d37bb02f2e61..b96bf00bc6cd10ced89939424150bd3c
SignedMessageLink signedMessageLink = this.advanceLink();
if (signedMessageLink == null) {
- throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false);
-+ throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - TODO 1.20.3 - new kick cause?
++ throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - diff on change (if disconnects, need a new kick event cause)
} else if (playerPublicKey.data().hasExpired()) {
- throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey"), false);
+ throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey", org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY), false); // Paper - kick event causes
@@ -100,7 +100,7 @@ index b9560b4ae5c0867396006119c5dadd7f3b47f78b..f3e32da770f379d46c65a0ba5a100b5f
return Component.translatable("commands.kick.success", serverPlayer.getDisplayName(), reason);
}, true);
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index e9b46bc0650050595f9db503c747350dc1997a5d..c0ed5bfcbd17b61c16484cad4b42eb1365a0556b 100644
+index 4a2ff42950a9c15a3dbbf9ca7e3c43cad4c77404..312b7a446453cf0859538cb10e6e98a8188d9094 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -94,7 +94,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -491,10 +491,10 @@ index 6724d0a1af13e97bc1d3bd94fd43fef742a0deab..20ba0a0c9eae28658888a77dd2170f62
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 8c5aa99068b5f67e55fd3af9e9abea2612ee84d5..a777484bf2c625545e008eb1a22068e7a770b22c 100644
+index 785f218d1a56a22b9d01a4423ac0100a05758241..aacd811da1e7b091e218054e9404242a2d2ac6c1 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -598,7 +598,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -594,7 +594,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot
if (this.getHandle().connection == null) return;
@@ -503,7 +503,7 @@ index 8c5aa99068b5f67e55fd3af9e9abea2612ee84d5..a777484bf2c625545e008eb1a22068e7
}
// Paper start
-@@ -610,10 +610,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -606,10 +606,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void kick(final net.kyori.adventure.text.Component message) {
@@ -520,7 +520,7 @@ index 8c5aa99068b5f67e55fd3af9e9abea2612ee84d5..a777484bf2c625545e008eb1a22068e7
}
}
-@@ -672,7 +677,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -668,7 +673,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper start - Improve chat handling
if (ServerGamePacketListenerImpl.isChatMessageIllegal(msg)) {
diff --git a/patches/server/0640-Add-PlayerSetSpawnEvent.patch b/patches/server/0640-Add-PlayerSetSpawnEvent.patch
index ad7f38fe85..a251b7541c 100644
--- a/patches/server/0640-Add-PlayerSetSpawnEvent.patch
+++ b/patches/server/0640-Add-PlayerSetSpawnEvent.patch
@@ -187,10 +187,10 @@ index ecaa7f0b2bf795f16187f11fa27f6d5d435ccbfe..c83ffba568f33323b0f8b9a03fa0b7bb
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index a777484bf2c625545e008eb1a22068e7a770b22c..41107ebfe9d517e04ef787f3fb9487ad6ac74314 100644
+index aacd811da1e7b091e218054e9404242a2d2ac6c1..f6eb66b0e8e442cf72aa6ea4507e550c1dcb9615 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1325,9 +1325,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1321,9 +1321,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setBedSpawnLocation(Location location, boolean override) {
if (location == null) {
diff --git a/patches/server/0749-Multi-Block-Change-API-Implementation.patch b/patches/server/0749-Multi-Block-Change-API-Implementation.patch
index acd7ccddb8..5972c61d39 100644
--- a/patches/server/0749-Multi-Block-Change-API-Implementation.patch
+++ b/patches/server/0749-Multi-Block-Change-API-Implementation.patch
@@ -24,10 +24,10 @@ index f96d61bdeb556665d6e6e5023f9d77fd82204e89..e3f355c85eb7cc8c1683e3009502c10a
public void write(FriendlyByteBuf buf) {
buf.writeLong(this.sectionPos.asLong());
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 41107ebfe9d517e04ef787f3fb9487ad6ac74314..b0b5d0d7730f0150823dc4600775608fc6eb875b 100644
+index f6eb66b0e8e442cf72aa6ea4507e550c1dcb9615..2699f90a0fbe5397fb057ce59cadf0a64913659f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -893,6 +893,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -889,6 +889,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().connection.send(packet);
}
diff --git a/patches/server/0825-More-Teleport-API.patch b/patches/server/0825-More-Teleport-API.patch
index 66d45c92ab..1b9778d3dd 100644
--- a/patches/server/0825-More-Teleport-API.patch
+++ b/patches/server/0825-More-Teleport-API.patch
@@ -72,10 +72,10 @@ index d4fffcc5bb746df8dc177780f15ff4dbca64c018..ed30e079c23f564cbd0a45b38586bd12
// Let the server handle cross world teleports
if (location.getWorld() != null && !location.getWorld().equals(this.getWorld())) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index b0b5d0d7730f0150823dc4600775608fc6eb875b..75c277f3b5323d5d813c1bdfff3731d1b403b50a 100644
+index 2699f90a0fbe5397fb057ce59cadf0a64913659f..d8791e8b79b0aa430c0d451353e02a7ce8825893 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1214,13 +1214,101 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1210,13 +1210,101 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setRotation(float yaw, float pitch) {
@@ -178,7 +178,7 @@ index b0b5d0d7730f0150823dc4600775608fc6eb875b..75c277f3b5323d5d813c1bdfff3731d1
location.checkFinite();
ServerPlayer entity = this.getHandle();
-@@ -1233,7 +1321,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1229,7 +1317,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return false;
}
@@ -187,7 +187,7 @@ index b0b5d0d7730f0150823dc4600775608fc6eb875b..75c277f3b5323d5d813c1bdfff3731d1
return false;
}
-@@ -1251,7 +1339,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1247,7 +1335,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// If this player is riding another entity, we must dismount before teleporting.
@@ -196,7 +196,7 @@ index b0b5d0d7730f0150823dc4600775608fc6eb875b..75c277f3b5323d5d813c1bdfff3731d1
// SPIGOT-5509: Wakeup, similar to riding
if (this.isSleeping()) {
-@@ -1267,13 +1355,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1263,13 +1351,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
ServerLevel toWorld = ((CraftWorld) to.getWorld()).getHandle();
// Close any foreign inventory
diff --git a/patches/server/0830-Custom-Chat-Completion-Suggestions-API.patch b/patches/server/0830-Custom-Chat-Completion-Suggestions-API.patch
index 598b00b482..a12668f87e 100644
--- a/patches/server/0830-Custom-Chat-Completion-Suggestions-API.patch
+++ b/patches/server/0830-Custom-Chat-Completion-Suggestions-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Custom Chat Completion Suggestions API
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 75c277f3b5323d5d813c1bdfff3731d1b403b50a..ca3c35e486743cc0c2425a86836d398af25f5f89 100644
+index d8791e8b79b0aa430c0d451353e02a7ce8825893..047b5a4b0d942726422f7025768dca5b00526d3c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -654,6 +654,24 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -650,6 +650,24 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end - sendOpLevel API
diff --git a/patches/server/0856-Elder-Guardian-appearance-API.patch b/patches/server/0856-Elder-Guardian-appearance-API.patch
index 7848b5dd91..21ec461773 100644
--- a/patches/server/0856-Elder-Guardian-appearance-API.patch
+++ b/patches/server/0856-Elder-Guardian-appearance-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Elder Guardian appearance API
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index ca3c35e486743cc0c2425a86836d398af25f5f89..8a3213818fe57b08b730efb0b490c2ca2a8e60f7 100644
+index 047b5a4b0d942726422f7025768dca5b00526d3c..e05b3033b64672a9afe316fca49674f38f2830d5 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3176,6 +3176,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3152,6 +3152,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end
diff --git a/patches/server/0873-Add-Player-Warden-Warning-API.patch b/patches/server/0873-Add-Player-Warden-Warning-API.patch
index 76149ce8a8..17f8b35103 100644
--- a/patches/server/0873-Add-Player-Warden-Warning-API.patch
+++ b/patches/server/0873-Add-Player-Warden-Warning-API.patch
@@ -10,10 +10,10 @@ public net.minecraft.world.entity.monster.warden.WardenSpawnTracker cooldownTick
public net.minecraft.world.entity.monster.warden.WardenSpawnTracker increaseWarningLevel()V
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 8a3213818fe57b08b730efb0b490c2ca2a8e60f7..ff8fdcd407238061104625dd780e5236f9f8c78b 100644
+index e05b3033b64672a9afe316fca49674f38f2830d5..e15a9558e1525081025c1363e218f6b4bd312c59 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3181,6 +3181,41 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3157,6 +3157,41 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void showElderGuardian(boolean silent) {
if (getHandle().connection != null) getHandle().connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.GUARDIAN_ELDER_EFFECT, silent ? 0F : 1F));
}
diff --git a/patches/server/0887-fix-Instruments.patch b/patches/server/0887-fix-Instruments.patch
index 3ddd651ffd..cd27f3f33b 100644
--- a/patches/server/0887-fix-Instruments.patch
+++ b/patches/server/0887-fix-Instruments.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] fix Instruments
properly handle Player#playNote
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index ff8fdcd407238061104625dd780e5236f9f8c78b..d905ad840c049a8f95dbed8679626b6d45bf4aed 100644
+index e15a9558e1525081025c1363e218f6b4bd312c59..0911c5ca8f2ea1a0f99567b1621c80064ee81ce8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -731,7 +731,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -727,7 +727,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Sound instrumentSound = instrument.getSound();
if (instrumentSound == null) return;
diff --git a/patches/server/0897-Flying-Fall-Damage.patch b/patches/server/0897-Flying-Fall-Damage.patch
index 73a6ec3abe..983ea7cf35 100644
--- a/patches/server/0897-Flying-Fall-Damage.patch
+++ b/patches/server/0897-Flying-Fall-Damage.patch
@@ -26,10 +26,10 @@ index 28fa46f29639a6b643b475912133d601028facb2..7f3466340891b4409d1399ebeb2ca865
} else {
if (fallDistance >= 2.0F) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index d905ad840c049a8f95dbed8679626b6d45bf4aed..7d40c698ec2aff93c0ee7f211c74a3daab7c5ca2 100644
+index 0911c5ca8f2ea1a0f99567b1621c80064ee81ce8..79105c8525b8087e4121814f99f3a8b8ae285bb5 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2418,6 +2418,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2434,6 +2434,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().onUpdateAbilities();
}
diff --git a/patches/server/0903-Win-Screen-API.patch b/patches/server/0903-Win-Screen-API.patch
index d57666ccc8..3d0eb8d793 100644
--- a/patches/server/0903-Win-Screen-API.patch
+++ b/patches/server/0903-Win-Screen-API.patch
@@ -7,10 +7,10 @@ Subject: [PATCH] Win Screen API
public net.minecraft.server.level.ServerPlayer seenCredits
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 7d40c698ec2aff93c0ee7f211c74a3daab7c5ca2..0a0eefdeead3dba7881b2bd21618de2173e46e81 100644
+index 79105c8525b8087e4121814f99f3a8b8ae285bb5..849fa10a831b83061a974c284b4e42cbf9d812cc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1233,6 +1233,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1229,6 +1229,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().connection.send(packet);
}
diff --git a/patches/server/0935-Expand-PlayerItemMendEvent.patch b/patches/server/0935-Expand-PlayerItemMendEvent.patch
index 3644ae731f..28a28a4921 100644
--- a/patches/server/0935-Expand-PlayerItemMendEvent.patch
+++ b/patches/server/0935-Expand-PlayerItemMendEvent.patch
@@ -33,10 +33,10 @@ index cab5636fe6be9ee7f23ffbd5a399d2aeea1cd538..fb74f13ab2a977224e843a468ea8c72d
return k > 0 ? this.repairPlayerItems(player, k) : 0;
} else {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 0a0eefdeead3dba7881b2bd21618de2173e46e81..2b20ddfbd599d157f3a3658957407040c992e68d 100644
+index 849fa10a831b83061a974c284b4e42cbf9d812cc..104a46702686340fafd25b80a1f5a7c1a69076a6 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1755,11 +1755,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1751,11 +1751,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
orb.setPosRaw(handle.getX(), handle.getY(), handle.getZ());
int i = Math.min(orb.xpToDurability(amount), itemstack.getDamageValue());
diff --git a/patches/server/0960-Fix-BanList-API.patch b/patches/server/0960-Fix-BanList-API.patch
index e314d0bd96..9a67b58cae 100644
--- a/patches/server/0960-Fix-BanList-API.patch
+++ b/patches/server/0960-Fix-BanList-API.patch
@@ -208,10 +208,10 @@ index 172202accf4448a933fcf1ff820316c7910dd7f7..50ee7656580d386db473c054f5c5ec57
return null;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 2b20ddfbd599d157f3a3658957407040c992e68d..c1cc6f615e90a6dcb071b3e731cfaa76d2d2ae23 100644
+index 104a46702686340fafd25b80a1f5a7c1a69076a6..2453a6930c37b7596844d5355fc2aa99518f683a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1653,23 +1653,23 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1649,23 +1649,23 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
@Override
@@ -240,7 +240,7 @@ index 2b20ddfbd599d157f3a3658957407040c992e68d..c1cc6f615e90a6dcb071b3e731cfaa76
if (kickPlayer) {
this.kickPlayer(reason);
}
-@@ -1677,12 +1677,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1673,12 +1673,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
@Override
diff --git a/patches/server/0980-Bandaid-fix-for-Effect.patch b/patches/server/0980-Bandaid-fix-for-Effect.patch
index b1f735b878..dc85a27f09 100644
--- a/patches/server/0980-Bandaid-fix-for-Effect.patch
+++ b/patches/server/0980-Bandaid-fix-for-Effect.patch
@@ -73,10 +73,10 @@ index c77fec78636805a496ecea3e56f26290dbcbffff..abb14719496971a780650782bdce17c6
// Special case: the axis is optional for ELECTRIC_SPARK
Preconditions.checkArgument(effect.getData() == null || effect == Effect.ELECTRIC_SPARK, "Wrong kind of data for the %s effect", effect);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index c1cc6f615e90a6dcb071b3e731cfaa76d2d2ae23..712cc70a536d8a332c3c1f8573ccbd4e0ff8f640 100644
+index 2453a6930c37b7596844d5355fc2aa99518f683a..1a0d57c849b059d781cda9617c163bf6830c063a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -880,7 +880,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -876,7 +876,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Preconditions.checkArgument(effect != null, "Effect cannot be null");
if (data != null) {
Preconditions.checkArgument(effect.getData() != null, "Effect.%s does not have a valid Data", effect);
diff --git a/patches/server/0989-Add-Listing-API-for-Player.patch b/patches/server/0989-Add-Listing-API-for-Player.patch
index 1b5dd484df..6fb01f29ad 100644
--- a/patches/server/0989-Add-Listing-API-for-Player.patch
+++ b/patches/server/0989-Add-Listing-API-for-Player.patch
@@ -113,10 +113,10 @@ index 098bb36a66e022da30302936aba10d296587ac88..a35638a92479b90afa89cf201fc45b49
// Paper end
player.sentListPacket = true;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 712cc70a536d8a332c3c1f8573ccbd4e0ff8f640..22470d74ea644bac933e94fcf08b13066793f02c 100644
+index 1a0d57c849b059d781cda9617c163bf6830c063a..a86f389034825b200bec799c03464541a9f4df87 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -186,6 +186,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -185,6 +185,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
private final ConversationTracker conversationTracker = new ConversationTracker();
private final Set channels = new HashSet();
private final Map>> invertedVisibilityEntities = new HashMap<>();
@@ -124,7 +124,7 @@ index 712cc70a536d8a332c3c1f8573ccbd4e0ff8f640..22470d74ea644bac933e94fcf08b1306
private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>();
private int hash = 0;
private double health = 20;
-@@ -1993,7 +1994,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1989,7 +1990,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
otherPlayer.setUUID(uuidOverride);
}
// Paper end
@@ -133,7 +133,7 @@ index 712cc70a536d8a332c3c1f8573ccbd4e0ff8f640..22470d74ea644bac933e94fcf08b1306
if (original != null) otherPlayer.setUUID(original); // Paper - uuid override
}
-@@ -2102,6 +2103,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2098,6 +2099,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return (entity != null) ? this.canSee(entity) : false; // If we can't find it, we can't see it
}
diff --git a/patches/server/1001-Implement-OfflinePlayer-isConnected.patch b/patches/server/1001-Implement-OfflinePlayer-isConnected.patch
index 935a382b87..d7a56953a9 100644
--- a/patches/server/1001-Implement-OfflinePlayer-isConnected.patch
+++ b/patches/server/1001-Implement-OfflinePlayer-isConnected.patch
@@ -23,10 +23,10 @@ index 9daec0782774ab51ea8091cb8ed9d0a106e34cfa..2bbc39c257965ad91ee360cdfcd3538a
public String getName() {
Player player = this.getPlayer();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 22470d74ea644bac933e94fcf08b13066793f02c..e075baed83a4ab3142ee41cbb49de7ceb004ac56 100644
+index a86f389034825b200bec799c03464541a9f4df87..abcde413e2fe22b14994b2f5b15fd7db1a257465 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -286,6 +286,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -282,6 +282,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.server.getPlayer(this.getUniqueId()) != null;
}
diff --git a/patches/server/1030-Add-player-idle-duration-API.patch b/patches/server/1030-Add-player-idle-duration-API.patch
index d5b54d637d..1c75e9eb2f 100644
--- a/patches/server/1030-Add-player-idle-duration-API.patch
+++ b/patches/server/1030-Add-player-idle-duration-API.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add player idle duration API
Implements API for getting and resetting a player's idle duration.
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index e075baed83a4ab3142ee41cbb49de7ceb004ac56..b0e2f0a9155e43c113142840bb8198fb84a31cb6 100644
+index abcde413e2fe22b14994b2f5b15fd7db1a257465..9073edd4c0baa82f2b340d1898a89cf285262484 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3298,6 +3298,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3274,6 +3274,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end
diff --git a/patches/server/1033-Allow-null-itemstack-for-Player-sendEquipmentChange.patch b/patches/server/1033-Allow-null-itemstack-for-Player-sendEquipmentChange.patch
index a08631dc56..08933a9259 100644
--- a/patches/server/1033-Allow-null-itemstack-for-Player-sendEquipmentChange.patch
+++ b/patches/server/1033-Allow-null-itemstack-for-Player-sendEquipmentChange.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow null itemstack for Player#sendEquipmentChange
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index b0e2f0a9155e43c113142840bb8198fb84a31cb6..ed41decbf0522c516b3608569d5719687105e25b 100644
+index 9073edd4c0baa82f2b340d1898a89cf285262484..2f65d85b35eec863dabf05eff2230ee513d341d3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1090,7 +1090,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1086,7 +1086,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void sendEquipmentChange(LivingEntity entity, EquipmentSlot slot, ItemStack item) {
diff --git a/patches/server/1053-Keep-previous-behavior-for-setResourcePack.patch b/patches/server/1053-Keep-previous-behavior-for-setResourcePack.patch
new file mode 100644
index 0000000000..8c1093aae5
--- /dev/null
+++ b/patches/server/1053-Keep-previous-behavior-for-setResourcePack.patch
@@ -0,0 +1,26 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic
+Date: Fri, 8 Dec 2023 15:06:16 -0800
+Subject: [PATCH] Keep previous behavior for setResourcePack
+
+Before multiple packs were allowed, setResourcePack
+resulted in the client's existing server pack being
+replaced. To keep this behavior, we will remove all
+packs before sending the new pack. Other API exists
+for adding a new pack to the existing packs on a client.
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+index 2f65d85b35eec863dabf05eff2230ee513d341d3..036b31cbfda8bac02205d99c1eff8a08f4da1250 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+@@ -2350,8 +2350,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ if (hash != null) {
+ Preconditions.checkArgument(hash.length == 20, "Resource pack hash should be 20 bytes long but was %s", hash.length);
+
++ this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket(Optional.empty())); // Paper - keep previous behavior of clearing packs
+ this.getHandle().connection.send(new ClientboundResourcePackPushPacket(id, url, BaseEncoding.base16().lowerCase().encode(hash), force, CraftChatMessage.fromStringOrNull(prompt, true)));
+ } else {
++ this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket(Optional.empty())); // Paper - keep previous behavior of clearing packs
+ this.getHandle().connection.send(new ClientboundResourcePackPushPacket(id, url, "", force, CraftChatMessage.fromStringOrNull(prompt, true)));
+ }
+ }