0ae58c09a1
There was a TODO left there regarding the translated death message being used by plugins to identify the cause of death. This should be mitigated now because the LegacyComponentSerializer default implemenation uses our custom flattener which renders vanilla translatable components to their English representation.
63 lines
2.7 KiB
Diff
63 lines
2.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 11 Mar 2013 20:04:34 -0400
|
|
Subject: [PATCH] PlayerDeathEvent#getItemsToKeep
|
|
|
|
Exposes a mutable array on items a player should keep on death
|
|
|
|
Example Usage: https://gist.github.com/aikar/5bb202de6057a051a950ce1f29feb0b4
|
|
|
|
diff --git a/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java b/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
|
|
index 59b84a0e07ddc214a419d5b59ab3a86c5ab63b78..3ce76cfb09f6f5eb55e950843bdd846b2b561116 100644
|
|
--- a/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
|
|
@@ -37,7 +37,6 @@ public class PlayerDeathEvent extends EntityDeathEvent {
|
|
}
|
|
// Paper end - adventure
|
|
|
|
- @Deprecated // Paper
|
|
public PlayerDeathEvent(@NotNull final Player player, @NotNull final List<ItemStack> drops, final int droppedExp, @Nullable final String deathMessage) {
|
|
this(player, drops, droppedExp, 0, deathMessage);
|
|
}
|
|
@@ -56,6 +55,41 @@ public class PlayerDeathEvent extends EntityDeathEvent {
|
|
this.deathMessage = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserializeOrNull(deathMessage); // Paper
|
|
}
|
|
|
|
+ @Deprecated // Paper
|
|
+ // Paper start
|
|
+ private List<ItemStack> itemsToKeep = new java.util.ArrayList<>();
|
|
+
|
|
+ /**
|
|
+ * A mutable collection to add items that the player should retain in their inventory on death (Similar to KeepInventory game rule)
|
|
+ *
|
|
+ * You <b>MUST</b> remove the item from the .getDrops() collection too or it will duplicate!
|
|
+ * <pre>{@code
|
|
+ * {@literal @EventHandler(ignoreCancelled = true)}
|
|
+ * public void onPlayerDeath(PlayerDeathEvent event) {
|
|
+ * for (Iterator<ItemStack> iterator = event.getDrops().iterator(); iterator.hasNext(); ) {
|
|
+ * ItemStack drop = iterator.next();
|
|
+ * List<String> lore = drop.getLore();
|
|
+ * if (lore != null && !lore.isEmpty()) {
|
|
+ * if (lore.get(0).contains("(SOULBOUND)")) {
|
|
+ * iterator.remove();
|
|
+ * event.getItemsToKeep().add(drop);
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ * }</pre>
|
|
+ *
|
|
+ * Adding an item to this list that the player did not previously have will give them the item on death.
|
|
+ * An example case could be a "Note" that "You died at X/Y/Z coordinates"
|
|
+ *
|
|
+ * @return The list to hold items to keep
|
|
+ */
|
|
+ @NotNull
|
|
+ public List<ItemStack> getItemsToKeep() {
|
|
+ return itemsToKeep;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@NotNull
|
|
@Override
|
|
public Player getEntity() {
|