Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 19:10:09 +01:00
bffb08c2f9
The Paper method was chosen for deprecation because it was more restrictive in that it has an isGliding check.
121 Zeilen
8.4 KiB
Diff
121 Zeilen
8.4 KiB
Diff
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 7838c7e051b1c4966e5a10289577d60a58ab16dd..872bd74b581249a8132ec5c37dfdd9e699bfbafa 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -1560,12 +1560,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) {
|
|
@@ -1587,7 +1592,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 8a6095850cece3203eeae474dbf32090f698a32e..aefb9879b2edadfb4b21d80135d713b9d34c9941 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 975f4fe01ce0c3f98c4467927242558a66bc19f3..249e3f703ef1b40b5401f167d4c30faafb69bb5b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -1441,10 +1441,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
|
|
}
|
|
@@ -1459,10 +1470,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) {
|