Skip to content

Commit aa39226

Browse files
authored
Add Player send death screen API (#1129)
Co-authored-by: MelnCat <melncatuwu@gmail.com>
1 parent fbfcfb6 commit aa39226

2 files changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: MelnCat <melncatuwu@gmail.com>
3+
Date: Fri, 23 Sep 2022 18:35:28 -0700
4+
Subject: [PATCH] Add death screen API
5+
6+
7+
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
8+
index f50c61a8c375af03f3f0f5469e376e3f9c19f03e..872a1c0f4ac33ee6739b3d73ee99670da05e33c6 100644
9+
--- a/src/main/java/org/bukkit/entity/Player.java
10+
+++ b/src/main/java/org/bukkit/entity/Player.java
11+
@@ -2948,5 +2948,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
12+
* Clears all debug block highlights
13+
*/
14+
void clearBlockHighlights();
15+
+
16+
+ /**
17+
+ * Sends a player the death screen with a specified death message.
18+
+ *
19+
+ * @param message The death message to show the player
20+
+ */
21+
+ void sendDeathScreen(@NotNull Component message);
22+
+
23+
+ /**
24+
+ * Sends a player the death screen with a specified death message,
25+
+ * along with the entity that caused the death.
26+
+ *
27+
+ * @param message The death message to show the player
28+
+ * @param killer The entity that killed the player
29+
+ */
30+
+ void sendDeathScreen(@NotNull Component message, @Nullable Entity killer);
31+
// Purpur end
32+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: MelnCat <melncatuwu@gmail.com>
3+
Date: Fri, 23 Sep 2022 18:41:05 -0700
4+
Subject: [PATCH] Add death screen API
5+
6+
7+
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java
8+
index 53b75f5737a910ffc5448cd9a85eae57f9c1488f..ea95873dd034779e56a8b924cd27f9375be05daf 100644
9+
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java
10+
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java
11+
@@ -9,6 +9,7 @@ public class ClientboundPlayerCombatKillPacket implements Packet<ClientGamePacke
12+
private final int playerId;
13+
private final int killerId;
14+
private final Component message;
15+
+ public net.kyori.adventure.text.Component adventure$message; // Purpur
16+
17+
public ClientboundPlayerCombatKillPacket(CombatTracker damageTracker, Component message) {
18+
this(damageTracker.getMob().getId(), damageTracker.getKillerId(), message);
19+
@@ -30,6 +31,12 @@ public class ClientboundPlayerCombatKillPacket implements Packet<ClientGamePacke
20+
public void write(FriendlyByteBuf buf) {
21+
buf.writeVarInt(this.playerId);
22+
buf.writeInt(this.killerId);
23+
+ // Purpur start
24+
+ if (this.adventure$message != null) {
25+
+ buf.writeComponent(this.adventure$message);
26+
+ return;
27+
+ }
28+
+ // Purpur end
29+
buf.writeComponent(this.message);
30+
}
31+
32+
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
33+
index 3b5ff0b3013a10b5515b13d1b660ec421531d772..c503b886013bc053d32b8afd8cd9bca09132a882 100644
34+
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
35+
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
36+
@@ -3026,5 +3026,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
37+
if (this.getHandle().connection == null) return;
38+
this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.DEBUG_GAME_TEST_CLEAR, new FriendlyByteBuf(io.netty.buffer.Unpooled.buffer())));
39+
}
40+
+
41+
+ @Override
42+
+ public void sendDeathScreen(net.kyori.adventure.text.Component message) {
43+
+ sendDeathScreen(message, null);
44+
+ }
45+
+
46+
+ @Override
47+
+ public void sendDeathScreen(net.kyori.adventure.text.Component message, org.bukkit.entity.Entity killer) {
48+
+ if (this.getHandle().connection == null) return;
49+
+ net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket packet = new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), killer == null ? -1 : killer.getEntityId(), null);
50+
+ packet.adventure$message = message;
51+
+ this.getHandle().connection.send(packet);
52+
+ }
53+
// Purpur end
54+
}

0 commit comments

Comments
 (0)