From 2eca2a27b04a564bd82a2887b1c30d9031437163 Mon Sep 17 00:00:00 2001 From: Aya <31237389+tal5@users.noreply.github.com> Date: Sun, 22 Jan 2023 15:00:37 +0200 Subject: [PATCH] Add Player#sendEquipmentChange(Map) API (#8800) --- ...d-Player-sendEquipmentChange-Map-API.patch | 33 ++++++++++++++++ ...d-Player-sendEquipmentChange-Map-API.patch | 38 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 patches/api/0427-Add-Player-sendEquipmentChange-Map-API.patch create mode 100644 patches/server/0958-Add-Player-sendEquipmentChange-Map-API.patch diff --git a/patches/api/0427-Add-Player-sendEquipmentChange-Map-API.patch b/patches/api/0427-Add-Player-sendEquipmentChange-Map-API.patch new file mode 100644 index 0000000000..af8d147f90 --- /dev/null +++ b/patches/api/0427-Add-Player-sendEquipmentChange-Map-API.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aya <31237389+tal5@users.noreply.github.com> +Date: Fri, 20 Jan 2023 13:49:35 +0000 +Subject: [PATCH] Add Player#sendEquipmentChange(Map) API + + +diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java +index de960716478477ce199526b8f860cfafa1541ee9..eb2fd6f0e09e50eeacfe4ceccf8fdede55c135a3 100644 +--- a/src/main/java/org/bukkit/entity/Player.java ++++ b/src/main/java/org/bukkit/entity/Player.java +@@ -666,7 +666,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + * @param slot The slot of the spoofed equipment change + * @param item The ItemStack to display for the player + */ +- public void sendEquipmentChange(@NotNull LivingEntity entity, @NotNull EquipmentSlot slot, @NotNull ItemStack item); ++ // Paper start ++ default void sendEquipmentChange(@NotNull LivingEntity entity, @NotNull EquipmentSlot slot, @NotNull ItemStack item) { ++ this.sendEquipmentChange(entity, java.util.Map.of(slot, item)); ++ }; ++ ++ /** ++ * Send an equipment change for an entity. This fakes the equipment change ++ * of an entity for a user. This will not actually change the inventory of ++ * the specified entity in any way. ++ * ++ * @param entity The entity that the player will see the change for ++ * @param equipmentChanges A map of slots to the items they will be changed to, cannot contain null values. ++ */ ++ void sendEquipmentChange(@NotNull LivingEntity entity, @NotNull java.util.Map equipmentChanges); ++ // Paper end + + // Paper start + /** diff --git a/patches/server/0958-Add-Player-sendEquipmentChange-Map-API.patch b/patches/server/0958-Add-Player-sendEquipmentChange-Map-API.patch new file mode 100644 index 0000000000..f0d56a5f8d --- /dev/null +++ b/patches/server/0958-Add-Player-sendEquipmentChange-Map-API.patch @@ -0,0 +1,38 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aya <31237389+tal5@users.noreply.github.com> +Date: Fri, 20 Jan 2023 13:49:59 +0000 +Subject: [PATCH] Add Player#sendEquipmentChange(Map) API + + +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index b32f44beab2c9790ee2da8403e362e8b3ecc6175..7b795a8f23a617d1d80f72f3262e11a1c9f806be 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1055,17 +1055,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + this.sendSignChange0(components, loc, dyeColor, hasGlowingText); // Paper + } + ++ // Paper start + @Override +- public void sendEquipmentChange(LivingEntity entity, EquipmentSlot slot, ItemStack item) { ++ public void sendEquipmentChange(LivingEntity entity, Map equipmentChanges) { + Preconditions.checkArgument(entity != null, "entity must not be null"); +- Preconditions.checkArgument(slot != null, "slot must not be null"); +- Preconditions.checkArgument(item != null, "item must not be null"); ++ Preconditions.checkNotNull(equipmentChanges, "equipmentChanges must not be null"); + + if (this.getHandle().connection == null) return; + +- List> equipment = Arrays.asList( +- new Pair<>(CraftEquipmentSlot.getNMS(slot), CraftItemStack.asNMSCopy(item)) +- ); ++ List> equipment = new ArrayList<>(equipmentChanges.size()); ++ for (Map.Entry entry : equipmentChanges.entrySet()) { ++ Preconditions.checkNotNull(entry.getKey(), "EquipmentSlot key must not be null"); ++ Preconditions.checkNotNull(entry.getValue(), "ItemStack value must not be null"); ++ equipment.add(new Pair<>(CraftEquipmentSlot.getNMS(entry.getKey()), CraftItemStack.asNMSCopy(entry.getValue()))); ++ } ++ // Paper end + + this.getHandle().connection.send(new ClientboundSetEquipmentPacket(entity.getEntityId(), equipment)); + }