From e529b532c71ece24cd694ec5ec5ef58b924b66f1 Mon Sep 17 00:00:00 2001 From: masmc05 Date: Tue, 1 Oct 2024 00:28:47 +0300 Subject: [PATCH 1/4] Fix and enhance openInventory(InventoryView) --- ...-enhance-openInventory-InventoryView.patch | 37 ++++++++++++ ...-enhance-openInventory-InventoryView.patch | 58 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch create mode 100644 patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch diff --git a/patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch b/patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch new file mode 100644 index 000000000000..72135c620d56 --- /dev/null +++ b/patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch @@ -0,0 +1,37 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: masmc05 +Date: Tue, 1 Oct 2024 00:11:13 +0300 +Subject: [PATCH] Fix and enhance openInventory(InventoryView) + + +diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java +index 261475159221ddd528d13991c06be5eaf908030c..1a02730ce6914740afe15f5bc7aba739faf3f9eb 100644 +--- a/src/main/java/org/bukkit/entity/HumanEntity.java ++++ b/src/main/java/org/bukkit/entity/HumanEntity.java +@@ -154,6 +154,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder + */ + public void openInventory(@NotNull InventoryView inventory); + ++ // Paper start - fix and enhance openInventory(InventoryView) ++ /** ++ * Opens an inventory window to the specified inventory view. ++ *

++ * The player associated with the InventoryView must be the same as this ++ * instance of HumanEntity. ++ *

++ * The player of the InventoryView can be checked using ++ * {@link InventoryView#getPlayer()}. ++ *

++ * NOTE: Horse inventories are a special case where setting the override will ++ * have no effect. Horse inventory titles are set by the horse display name. ++ * ++ * @param inventory The view to open ++ * @param titleOverride The title which will override the view and inventory title, this doesn't change ++ * the title returned by {@link InventoryView#title()}, hence "override". ++ */ ++ void openInventory(@NotNull InventoryView inventory, @NotNull net.kyori.adventure.text.Component titleOverride); ++ // Paper end - fix and enhance openInventory(InventoryView) ++ + /** + * Starts a trade between the player and the villager. + * diff --git a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch new file mode 100644 index 000000000000..252cbd213f6c --- /dev/null +++ b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch @@ -0,0 +1,58 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: masmc05 +Date: Mon, 30 Sep 2024 23:51:49 +0300 +Subject: [PATCH] Fix and enhance openInventory(InventoryView) + +== AT == +public net.minecraft.world.inventory.HorseInventoryMenu horse + +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +index 7dcfb45c24d7743956be514c7d554e06aac77b3e..acf8d6b6dd7a1967eaffd43df2f7da3984d23e9c 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +@@ -436,6 +436,18 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { + + @Override + public void openInventory(InventoryView inventory) { ++ // Paper start - fix and enhance openInventory(InventoryView) ++ this.openInventory0(inventory, null); ++ } ++ ++ @Override ++ public void openInventory(InventoryView inventory, net.kyori.adventure.text.Component defaultOverride) { ++ Preconditions.checkNotNull(defaultOverride, "defaultOverride cannot be null"); ++ this.openInventory0(inventory, defaultOverride); ++ } ++ ++ private void openInventory0(InventoryView inventory, net.kyori.adventure.text.Component defaultOverride) { ++ // Paper end - fix and enhance openInventory(InventoryView) + Preconditions.checkArgument(this.equals(inventory.getPlayer()), "InventoryView must belong to the opening player"); + if (!(this.getHandle() instanceof ServerPlayer)) return; // TODO: NPC support? + if (((ServerPlayer) this.getHandle()).connection == null) return; +@@ -461,14 +473,23 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { + } + + // Now open the window +- MenuType windowType = CraftContainer.getNotchInventoryType(inventory.getTopInventory()); ++ // MenuType windowType = CraftContainer.getNotchInventoryType(inventory.getTopInventory()); // Paper - move down - fix and enhance openInventory(InventoryView) + + //String title = inventory.getTitle(); // Paper - comment +- net.kyori.adventure.text.Component adventure$title = inventory.title(); // Paper ++ net.kyori.adventure.text.Component adventure$title = defaultOverride == null ? inventory.title() : defaultOverride; // Paper // Paper - fix and enhance openInventory(InventoryView) + if (adventure$title == null) adventure$title = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(inventory.getTitle()); // Paper + if (result.getFirst() != null) adventure$title = result.getFirst(); // Paper - Add titleOverride to InventoryOpenEvent + //player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, CraftChatMessage.fromString(title)[0])); // Paper - comment +- if (!player.isImmobile()) player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, io.papermc.paper.adventure.PaperAdventure.asVanilla(adventure$title))); // Paper - Prevent opening inventories when frozen ++ // Paper start - fix and enhance openInventory(InventoryView) ++ if (!player.isImmobile()) { // Paper - Prevent opening inventories when frozen ++ if (container instanceof net.minecraft.world.inventory.HorseInventoryMenu menu) { ++ player.connection.send(new net.minecraft.network.protocol.game.ClientboundHorseScreenOpenPacket(menu.containerId, menu.horse.getInventoryColumns(), menu.horse.getId())); ++ } else { ++ MenuType windowType = CraftContainer.getNotchInventoryType(inventory.getTopInventory()); ++ player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, io.papermc.paper.adventure.PaperAdventure.asVanilla(adventure$title))); // Paper - Prevent opening inventories when frozen ++ } ++ } ++ // Paper end - fix and enhance openInventory(InventoryView) + player.containerMenu = container; + player.initMenu(container); + } From 86cfb0435e780077ae1210dfc10a68302407825e Mon Sep 17 00:00:00 2001 From: masmc05 Date: Tue, 1 Oct 2024 00:44:03 +0300 Subject: [PATCH 2/4] Remove duplicated paper comment --- .../1063-Fix-and-enhance-openInventory-InventoryView.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch index 252cbd213f6c..ad75110cd350 100644 --- a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch +++ b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Fix and enhance openInventory(InventoryView) public net.minecraft.world.inventory.HorseInventoryMenu horse diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 7dcfb45c24d7743956be514c7d554e06aac77b3e..acf8d6b6dd7a1967eaffd43df2f7da3984d23e9c 100644 +index 7dcfb45c24d7743956be514c7d554e06aac77b3e..c3ee999a4ec2f2256f53322be70b7878af870bb1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -436,6 +436,18 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -49,7 +49,7 @@ index 7dcfb45c24d7743956be514c7d554e06aac77b3e..acf8d6b6dd7a1967eaffd43df2f7da39 + player.connection.send(new net.minecraft.network.protocol.game.ClientboundHorseScreenOpenPacket(menu.containerId, menu.horse.getInventoryColumns(), menu.horse.getId())); + } else { + MenuType windowType = CraftContainer.getNotchInventoryType(inventory.getTopInventory()); -+ player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, io.papermc.paper.adventure.PaperAdventure.asVanilla(adventure$title))); // Paper - Prevent opening inventories when frozen ++ player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, io.papermc.paper.adventure.PaperAdventure.asVanilla(adventure$title))); + } + } + // Paper end - fix and enhance openInventory(InventoryView) From 6aafb11f5a8c6fb8c601f3acaa8911baaa7137b2 Mon Sep 17 00:00:00 2001 From: masmc05 Date: Sun, 13 Oct 2024 01:00:34 +0300 Subject: [PATCH 3/4] Allow old views to continue updating its content to player pre interaction --- .../1063-Fix-and-enhance-openInventory-InventoryView.patch | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch index ad75110cd350..00fca378fd08 100644 --- a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch +++ b/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Fix and enhance openInventory(InventoryView) public net.minecraft.world.inventory.HorseInventoryMenu horse diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 7dcfb45c24d7743956be514c7d554e06aac77b3e..c3ee999a4ec2f2256f53322be70b7878af870bb1 100644 +index 7dcfb45c24d7743956be514c7d554e06aac77b3e..883130e8280c1c518cfb00198eba3c726a409003 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -436,6 +436,18 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -29,7 +29,7 @@ index 7dcfb45c24d7743956be514c7d554e06aac77b3e..c3ee999a4ec2f2256f53322be70b7878 Preconditions.checkArgument(this.equals(inventory.getPlayer()), "InventoryView must belong to the opening player"); if (!(this.getHandle() instanceof ServerPlayer)) return; // TODO: NPC support? if (((ServerPlayer) this.getHandle()).connection == null) return; -@@ -461,14 +473,23 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { +@@ -461,14 +473,24 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { } // Now open the window @@ -52,6 +52,7 @@ index 7dcfb45c24d7743956be514c7d554e06aac77b3e..c3ee999a4ec2f2256f53322be70b7878 + player.connection.send(new ClientboundOpenScreenPacket(container.containerId, windowType, io.papermc.paper.adventure.PaperAdventure.asVanilla(adventure$title))); + } + } ++ container.resumeRemoteUpdates(); + // Paper end - fix and enhance openInventory(InventoryView) player.containerMenu = container; player.initMenu(container); From e2d566beacadcf3c1339f1e56b8d1f05eda8fcb6 Mon Sep 17 00:00:00 2001 From: masmc05 Date: Sun, 24 Nov 2024 15:27:49 +0200 Subject: [PATCH 4/4] Rebase to 1.21.3 --- ...h => 0501-Fix-and-enhance-openInventory-InventoryView.patch} | 2 +- ...h => 1073-Fix-and-enhance-openInventory-InventoryView.patch} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename patches/api/{0493-Fix-and-enhance-openInventory-InventoryView.patch => 0501-Fix-and-enhance-openInventory-InventoryView.patch} (94%) rename patches/server/{1063-Fix-and-enhance-openInventory-InventoryView.patch => 1073-Fix-and-enhance-openInventory-InventoryView.patch} (97%) diff --git a/patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch b/patches/api/0501-Fix-and-enhance-openInventory-InventoryView.patch similarity index 94% rename from patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch rename to patches/api/0501-Fix-and-enhance-openInventory-InventoryView.patch index 72135c620d56..1c92f4273bee 100644 --- a/patches/api/0493-Fix-and-enhance-openInventory-InventoryView.patch +++ b/patches/api/0501-Fix-and-enhance-openInventory-InventoryView.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix and enhance openInventory(InventoryView) diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java -index 261475159221ddd528d13991c06be5eaf908030c..1a02730ce6914740afe15f5bc7aba739faf3f9eb 100644 +index 488604ba1a516b477693877c74712e4a45624a8b..e4f5a728043adbd1bd3bdf9a04b0aed0a1534f0c 100644 --- a/src/main/java/org/bukkit/entity/HumanEntity.java +++ b/src/main/java/org/bukkit/entity/HumanEntity.java @@ -154,6 +154,26 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder diff --git a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch b/patches/server/1073-Fix-and-enhance-openInventory-InventoryView.patch similarity index 97% rename from patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch rename to patches/server/1073-Fix-and-enhance-openInventory-InventoryView.patch index 00fca378fd08..24ac2db214f0 100644 --- a/patches/server/1063-Fix-and-enhance-openInventory-InventoryView.patch +++ b/patches/server/1073-Fix-and-enhance-openInventory-InventoryView.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Fix and enhance openInventory(InventoryView) public net.minecraft.world.inventory.HorseInventoryMenu horse diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 7dcfb45c24d7743956be514c7d554e06aac77b3e..883130e8280c1c518cfb00198eba3c726a409003 100644 +index e345cdbfab44a0f5da80d738798dbb4424b7ab5c..67d39b86406ca735df55c40bf73dd1685b2ecaac 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -436,6 +436,18 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {