From 883b76cbabf2d5a4514210bdf56c16068ad70294 Mon Sep 17 00:00:00 2001 From: nopjar Date: Tue, 14 Jun 2022 12:09:18 +0200 Subject: [PATCH] Add InventoryView#sendTitleUpdate(Component) Adds a possibility to send a title update (packet). This does not change the title on the server. --- ...-Add-sendTitleUpdate-for-inventories.patch | 27 +++++++++++ ...-Add-sendTitleUpdate-for-inventories.patch | 45 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 patches/api/0386-Add-sendTitleUpdate-for-inventories.patch create mode 100644 patches/server/0911-Add-sendTitleUpdate-for-inventories.patch diff --git a/patches/api/0386-Add-sendTitleUpdate-for-inventories.patch b/patches/api/0386-Add-sendTitleUpdate-for-inventories.patch new file mode 100644 index 000000000000..6ca8eae752c9 --- /dev/null +++ b/patches/api/0386-Add-sendTitleUpdate-for-inventories.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: nopjar +Date: Mon, 13 Jun 2022 11:29:23 +0200 +Subject: [PATCH] Add sendTitleUpdate for inventories + + +diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java +index 2448e70d75ae7a678c6befac4506c103edb78875..8f579e315b199261f896d94db375c1b5ad9589a7 100644 +--- a/src/main/java/org/bukkit/inventory/InventoryView.java ++++ b/src/main/java/org/bukkit/inventory/InventoryView.java +@@ -467,4 +467,16 @@ public abstract class InventoryView { + @Deprecated // Paper + @NotNull + public abstract String getTitle(); ++ ++ // Paper start ++ /** ++ * Sends a packet to the client to open a new inventory with the new title. ++ *

++ * The ID of the inventory and the contents stay the same. This does not affect the title on the ++ * server. Methods like {@link #title()} will still return the old title. ++ * ++ * @param title the new title ++ */ ++ public abstract void sendTitleUpdate(@NotNull net.kyori.adventure.text.Component title); ++ // Paper end + } diff --git a/patches/server/0911-Add-sendTitleUpdate-for-inventories.patch b/patches/server/0911-Add-sendTitleUpdate-for-inventories.patch new file mode 100644 index 000000000000..a2ae60a874ea --- /dev/null +++ b/patches/server/0911-Add-sendTitleUpdate-for-inventories.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: nopjar +Date: Mon, 13 Jun 2022 11:29:42 +0200 +Subject: [PATCH] Add sendTitleUpdate for inventories + + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +index a2eeaad280569c9ab2c02d2885611db50462bf2b..021d4b5283be07a62ef08e0a7e3d1acc62520d19 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +@@ -80,6 +80,16 @@ public class CraftContainer extends AbstractContainerMenu { + public String getTitle() { + return inventory instanceof CraftInventoryCustom custom ? custom.getTitle() : inventory.getType().getDefaultTitle(); // Paper + } ++ ++ // Paper start ++ @Override ++ public void sendTitleUpdate(@org.jetbrains.annotations.NotNull net.kyori.adventure.text.Component title) { ++ AbstractContainerMenu menu = ((org.bukkit.craftbukkit.entity.CraftHumanEntity) getPlayer()).getHandle().containerMenu; ++ var packet = new net.minecraft.network.protocol.game.ClientboundOpenScreenPacket(menu.containerId, menu.getType(), io.papermc.paper.adventure.PaperAdventure.asVanilla(title)); ++ ((net.minecraft.server.level.ServerPlayer) player).connection.send(packet); ++ menu.sendAllDataToRemote(); ++ } ++ // Paper end + }, player, id); + } + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java +index 7d6b5fdb00a5c1614849735634262a36a4efbd66..68e11a13120d81eff511f2e6c6c08aeef4fd50ae 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java +@@ -83,4 +83,13 @@ public class CraftInventoryView extends InventoryView { + public AbstractContainerMenu getHandle() { + return this.container; + } ++ ++ // Paper start ++ @Override ++ public void sendTitleUpdate(@org.jetbrains.annotations.NotNull net.kyori.adventure.text.Component title) { ++ var packet = new net.minecraft.network.protocol.game.ClientboundOpenScreenPacket(this.container.containerId, this.container.getType(), io.papermc.paper.adventure.PaperAdventure.asVanilla(title)); ++ ((org.bukkit.craftbukkit.entity.CraftPlayer) getPlayer()).getHandle().connection.send(packet); ++ container.sendAllDataToRemote(); ++ } ++ // Paper end + }