mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-25 03:55:14 +01:00
Add titleOverride to InventoryOpenEvent (#7540)
This commit is contained in:
parent
6813244fb0
commit
7d13b7066c
@ -0,0 +1,52 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Date: Fri, 4 Mar 2022 12:45:21 -0800
|
||||||
|
Subject: [PATCH] Add titleOverride to InventoryOpenEvent
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java b/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java
|
||||||
|
index ceae092eb782698803c6c3df41267dde20ba62b2..8e2afeab4c62724148e8bb0c83fb7eec569c7a0c 100644
|
||||||
|
--- a/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java
|
||||||
|
+++ b/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java
|
||||||
|
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull;
|
||||||
|
public class InventoryOpenEvent extends InventoryEvent implements Cancellable {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private boolean cancelled;
|
||||||
|
+ private net.kyori.adventure.text.Component titleOverride; // Paper
|
||||||
|
|
||||||
|
public InventoryOpenEvent(@NotNull InventoryView transaction) {
|
||||||
|
super(transaction);
|
||||||
|
@@ -56,6 +57,33 @@ public class InventoryOpenEvent extends InventoryEvent implements Cancellable {
|
||||||
|
cancelled = cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start
|
||||||
|
+ /**
|
||||||
|
+ * Gets the title override set by another event or null
|
||||||
|
+ * if not set.
|
||||||
|
+ *
|
||||||
|
+ * @return the title override or null
|
||||||
|
+ */
|
||||||
|
+ public net.kyori.adventure.text.@org.jetbrains.annotations.Nullable Component titleOverride() {
|
||||||
|
+ return this.titleOverride;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the title override or clears the override.
|
||||||
|
+ * <p>
|
||||||
|
+ * This is only the title sent to the client in the open packet, this doesn't change
|
||||||
|
+ * the title returned by {@link InventoryView#title()}, hence "override".
|
||||||
|
+ * <p>
|
||||||
|
+ * <b>NOTE:</b> Horse inventories are a special case where setting this will
|
||||||
|
+ * have no effect. Horse inventory titles are set by the horse display name.
|
||||||
|
+ *
|
||||||
|
+ * @param titleOverride the title override or null
|
||||||
|
+ */
|
||||||
|
+ public void titleOverride(net.kyori.adventure.text.@org.jetbrains.annotations.Nullable Component titleOverride) {
|
||||||
|
+ this.titleOverride = titleOverride;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
@ -0,0 +1,120 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Date: Fri, 4 Mar 2022 12:45:03 -0800
|
||||||
|
Subject: [PATCH] Add titleOverride to InventoryOpenEvent
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
index 161c40692e8d469fad4169908b9353be0f85d0d8..b382da838acc04a1c5d89064b4fa43bcdd38ae71 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
@@ -1559,12 +1559,17 @@ public class ServerPlayer extends Player {
|
||||||
|
this.nextContainerCounter();
|
||||||
|
AbstractContainerMenu container = factory.createMenu(this.containerCounter, this.getInventory(), this);
|
||||||
|
|
||||||
|
+ Component title = null; // Paper
|
||||||
|
// CraftBukkit start - Inventory open hook
|
||||||
|
if (container != null) {
|
||||||
|
container.setTitle(factory.getDisplayName());
|
||||||
|
|
||||||
|
boolean cancelled = false;
|
||||||
|
- container = CraftEventFactory.callInventoryOpenEvent(this, container, cancelled);
|
||||||
|
+ // Paper start
|
||||||
|
+ final com.mojang.datafixers.util.Pair<net.kyori.adventure.text.Component, AbstractContainerMenu> result = CraftEventFactory.callInventoryOpenEventWithTitle(this, container, cancelled);
|
||||||
|
+ container = result.getSecond();
|
||||||
|
+ title = PaperAdventure.asVanilla(result.getFirst());
|
||||||
|
+ // Paper end
|
||||||
|
if (container == null && !cancelled) { // Let pre-cancelled events fall through
|
||||||
|
// SPIGOT-5263 - close chest if cancelled
|
||||||
|
if (factory instanceof Container) {
|
||||||
|
@@ -1586,7 +1591,7 @@ public class ServerPlayer extends Player {
|
||||||
|
} else {
|
||||||
|
// CraftBukkit start
|
||||||
|
this.containerMenu = container;
|
||||||
|
- if (!this.isImmobile()) this.connection.send(new ClientboundOpenScreenPacket(container.containerId, container.getType(), container.getTitle())); // Paper
|
||||||
|
+ if (!this.isImmobile()) this.connection.send(new ClientboundOpenScreenPacket(container.containerId, container.getType(), Objects.requireNonNullElseGet(title, container::getTitle))); // Paper
|
||||||
|
// CraftBukkit end
|
||||||
|
this.initMenu(container);
|
||||||
|
return OptionalInt.of(this.containerCounter);
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||||
|
index 5fe9a0985432ac6cdd28a2a138854a24f10e42ba..7db63d9ef93902872937b69f431137336e4abc3a 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||||
|
@@ -357,12 +357,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||||
|
Preconditions.checkArgument(windowType != null, "Unknown windowType");
|
||||||
|
AbstractContainerMenu container = new CraftContainer(inventory, player, player.nextContainerCounter());
|
||||||
|
|
||||||
|
- container = CraftEventFactory.callInventoryOpenEvent(player, container);
|
||||||
|
+ // Paper start
|
||||||
|
+ final com.mojang.datafixers.util.Pair<net.kyori.adventure.text.Component, AbstractContainerMenu> result = CraftEventFactory.callInventoryOpenEventWithTitle(player, container);
|
||||||
|
+ container = result.getSecond();
|
||||||
|
+ // Paper end
|
||||||
|
if (container == null) return;
|
||||||
|
|
||||||
|
//String title = container.getBukkitView().getTitle(); // Paper - comment
|
||||||
|
net.kyori.adventure.text.Component adventure$title = container.getBukkitView().title(); // Paper
|
||||||
|
if (adventure$title == null) adventure$title = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(container.getBukkitView().getTitle()); // Paper
|
||||||
|
+ if (result.getFirst() != null) adventure$title = result.getFirst(); // Paper
|
||||||
|
|
||||||
|
//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
|
||||||
|
@@ -438,7 +442,10 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger an INVENTORY_OPEN event
|
||||||
|
- container = CraftEventFactory.callInventoryOpenEvent(player, container);
|
||||||
|
+ // Paper start
|
||||||
|
+ final com.mojang.datafixers.util.Pair<net.kyori.adventure.text.Component, AbstractContainerMenu> result = CraftEventFactory.callInventoryOpenEventWithTitle(player, container);
|
||||||
|
+ container = result.getSecond();
|
||||||
|
+ // Paper end
|
||||||
|
if (container == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -449,6 +456,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||||
|
//String title = inventory.getTitle(); // Paper - comment
|
||||||
|
net.kyori.adventure.text.Component adventure$title = inventory.title(); // Paper
|
||||||
|
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
|
||||||
|
//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
|
||||||
|
player.containerMenu = container;
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
index 676c44f688c41df66e304db30a05d6cc967bcf99..090b1ee57ddef58ca71469ad860960f66da7d5a2 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
@@ -1413,10 +1413,21 @@ public class CraftEventFactory {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AbstractContainerMenu callInventoryOpenEvent(ServerPlayer player, AbstractContainerMenu container) {
|
||||||
|
- return CraftEventFactory.callInventoryOpenEvent(player, container, false);
|
||||||
|
+ // Paper start
|
||||||
|
+ return callInventoryOpenEventWithTitle(player, container).getSecond();
|
||||||
|
+ }
|
||||||
|
+ public static com.mojang.datafixers.util.Pair<net.kyori.adventure.text.@org.jetbrains.annotations.Nullable Component, @org.jetbrains.annotations.Nullable AbstractContainerMenu> callInventoryOpenEventWithTitle(ServerPlayer player, AbstractContainerMenu container) {
|
||||||
|
+ return CraftEventFactory.callInventoryOpenEventWithTitle(player, container, false);
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
|
|
||||||
|
+ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper - use method that acknowledges title overrides
|
||||||
|
public static AbstractContainerMenu callInventoryOpenEvent(ServerPlayer player, AbstractContainerMenu container, boolean cancelled) {
|
||||||
|
+ // Paper start
|
||||||
|
+ return callInventoryOpenEventWithTitle(player, container, cancelled).getSecond();
|
||||||
|
+ }
|
||||||
|
+ public static com.mojang.datafixers.util.Pair<net.kyori.adventure.text.@org.jetbrains.annotations.Nullable Component, @org.jetbrains.annotations.Nullable AbstractContainerMenu> callInventoryOpenEventWithTitle(ServerPlayer player, AbstractContainerMenu container, boolean cancelled) {
|
||||||
|
+ // Paper end
|
||||||
|
if (player.containerMenu != player.inventoryMenu) { // fire INVENTORY_CLOSE if one already open
|
||||||
|
player.connection.handleContainerClose(new ServerboundContainerClosePacket(player.containerMenu.containerId), InventoryCloseEvent.Reason.OPEN_NEW); // Paper
|
||||||
|
}
|
||||||
|
@@ -1431,10 +1442,10 @@ public class CraftEventFactory {
|
||||||
|
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
container.transferTo(player.containerMenu, craftPlayer);
|
||||||
|
- return null;
|
||||||
|
+ return com.mojang.datafixers.util.Pair.of(null, null); // Paper - title override
|
||||||
|
}
|
||||||
|
|
||||||
|
- return container;
|
||||||
|
+ return com.mojang.datafixers.util.Pair.of(event.titleOverride(), container); // Paper - title override
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemStack callPreCraftEvent(Container matrix, Container resultInventory, ItemStack result, InventoryView lastCraftView, boolean isRepair) {
|
Loading…
Reference in New Issue
Block a user