Skip to content

Commit 7c62c21

Browse files
authored
Merge pull request #229 from GumMC/feature/item-death
Add weapon placeholder death message
2 parents 8f85692 + d507972 commit 7c62c21

2 files changed

Lines changed: 43 additions & 27 deletions

File tree

API/src/main/java/fr/maxlego08/essentials/api/messages/Message.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,8 @@ public enum Message {
972972

973973
// Death Messages
974974
DEATH_MESSAGE_GENERIC("#99E0FF%player% &7died."),
975-
DEATH_MESSAGE_PLAYER("#99E0FF%player% &7was slain by #34cfe0%killer%&7."),
975+
DEATH_MESSAGE_PLAYER("#99E0FF%player% &7was slain by #34cfe0%killer% &7using %weapon%&7."),
976+
DEATH_MESSAGE_FISTS("&7fists"),
976977
DEATH_MESSAGE_MOB("#99E0FF%player% &7was killed by &c%mob%&7."),
977978
DEATH_MESSAGE_MYTHIC_MOB("#99E0FF%player% &7was slain by <gradient:#ff6600:#ff0000>%mob%</gradient>&7!"),
978979
;

src/main/java/fr/maxlego08/essentials/module/modules/DeathMessageModule.java

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import fr.maxlego08.essentials.module.ZModule;
1010
import fr.maxlego08.essentials.zutils.utils.paper.PaperComponent;
1111
import net.kyori.adventure.text.Component;
12+
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
13+
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
1214
import org.bukkit.configuration.ConfigurationSection;
1315
import org.bukkit.configuration.file.YamlConfiguration;
1416
import org.bukkit.entity.Entity;
@@ -21,7 +23,6 @@
2123
import org.bukkit.event.entity.PlayerDeathEvent;
2224
import org.bukkit.inventory.ItemStack;
2325

24-
import java.util.ArrayList;
2526
import java.util.HashMap;
2627
import java.util.List;
2728
import java.util.Map;
@@ -84,21 +85,44 @@ public void onDeath(PlayerDeathEvent event) {
8485
return;
8586
}
8687

87-
String deathMessage = buildDeathMessage(player);
88+
EntityDamageEvent lastDamage = player.getLastDamageCause();
89+
String deathMessage = buildDeathMessage(player, lastDamage);
8890
if (deathMessage == null || deathMessage.isEmpty()) {
8991
return;
9092
}
9193

9294
PaperComponent paperComponent = (PaperComponent) this.componentMessage;
9395
var papiMessage = papi(deathMessage, player);
96+
97+
if (lastDamage instanceof EntityDamageByEntityEvent entityDamageEvent
98+
&& entityDamageEvent.getDamager() instanceof Player killer) {
99+
event.deathMessage(paperComponent.getComponent(papiMessage, buildWeaponResolver(paperComponent, killer, player)));
100+
return;
101+
}
102+
94103
event.deathMessage(paperComponent.getComponent(papiMessage));
95104
}
96105

97-
private String buildDeathMessage(Player player) {
98-
EntityDamageEvent lastDamage = player.getLastDamageCause();
106+
private TagResolver buildWeaponResolver(PaperComponent paperComponent, Player killer, Player victim) {
107+
ItemStack weapon = killer.getInventory().getItemInMainHand();
108+
boolean isAir = weapon.getType().isAir();
109+
110+
Component weaponComponent;
111+
if (isAir) {
112+
weaponComponent = paperComponent.getComponent(papi(getMessage(Message.DEATH_MESSAGE_FISTS), victim));
113+
} else if (weapon.hasItemMeta() && weapon.getItemMeta().hasDisplayName()) {
114+
weaponComponent = weapon.getItemMeta().displayName().hoverEvent(weapon.asHoverEvent());
115+
} else {
116+
weaponComponent = Component.translatable(weapon).hoverEvent(weapon.asHoverEvent());
117+
}
118+
119+
return Placeholder.component("zessentials_weapon", weaponComponent);
120+
}
121+
122+
private String buildDeathMessage(Player player, EntityDamageEvent lastDamage) {
99123

100124
if (lastDamage == null) {
101-
return getCustomOrDefaultMessage("GENERIC", player, null, null, null);
125+
return getCustomOrDefaultMessage("GENERIC", player, null, null, null, null);
102126
}
103127

104128
EntityDamageEvent.DamageCause cause = lastDamage.getCause();
@@ -107,38 +131,32 @@ private String buildDeathMessage(Player player) {
107131
Entity damager = entityDamageEvent.getDamager();
108132

109133
if (damager instanceof Player killer) {
110-
return getPlayerKillMessage(player, killer);
134+
return getCustomOrDefaultMessage("PLAYER", player, killer.getName(), null, "PLAYER", "<zessentials_weapon>");
111135
}
112136

113137
if (this.mythicMobsHook != null && this.mythicMobsHook.isMythicMob(damager)) {
114138
Optional<String> mobName = this.mythicMobsHook.getMythicMobName(damager);
115-
return getCustomOrDefaultMessage("MYTHIC_MOB", player, null, mobName.orElse("Unknown"), cause.name());
139+
return getCustomOrDefaultMessage("MYTHIC_MOB", player, null, mobName.orElse("Unknown"), cause.name(), null);
116140
}
117141

118142
if (damager instanceof LivingEntity livingEntity) {
119143
String mobName = getMobName(livingEntity);
120-
return getCustomOrDefaultMessage("MOB", player, null, mobName, cause.name());
144+
return getCustomOrDefaultMessage("MOB", player, null, mobName, cause.name(), null);
121145
}
122146
}
123147

124148
String customMessage = getCustomMessage(cause.name());
125149
if (customMessage != null) {
126-
return formatMessage(customMessage, player, null, null, cause.name());
150+
return formatMessage(customMessage, player, null, null, cause.name(), null);
127151
}
128152

129-
return getCustomOrDefaultMessage("GENERIC", player, null, null, cause.name());
130-
}
131-
132-
private String getPlayerKillMessage(Player victim, Player killer) {
133-
ItemStack weapon = killer.getInventory().getItemInMainHand();
134-
String weaponName = weapon.getType().isAir() ? "fists" : getItemName(weapon);
135-
return getCustomOrDefaultMessage("PLAYER", victim, killer.getName(), weaponName, "PLAYER");
153+
return getCustomOrDefaultMessage("GENERIC", player, null, null, cause.name(), null);
136154
}
137155

138-
private String getCustomOrDefaultMessage(String type, Player player, String killer, String mob, String cause) {
156+
private String getCustomOrDefaultMessage(String type, Player player, String killer, String mob, String cause, String weapon) {
139157
String customMessage = getCustomMessage(type);
140158
if (customMessage != null) {
141-
return formatMessage(customMessage, player, killer, mob, cause);
159+
return formatMessage(customMessage, player, killer, mob, cause, weapon);
142160
}
143161

144162
Message defaultMessage = switch (type) {
@@ -149,7 +167,7 @@ private String getCustomOrDefaultMessage(String type, Player player, String kill
149167
};
150168

151169
String message = getMessage(defaultMessage);
152-
return formatMessage(message, player, killer, mob, cause);
170+
return formatMessage(message, player, killer, mob, cause, weapon);
153171
}
154172

155173
private String getCustomMessage(String cause) {
@@ -160,7 +178,7 @@ private String getCustomMessage(String cause) {
160178
return null;
161179
}
162180

163-
private String formatMessage(String message, Player player, String killer, String mob, String cause) {
181+
private String formatMessage(String message, Player player, String killer, String mob, String cause, String weapon) {
164182
message = message.replace("%player%", player.getName());
165183
message = message.replace("%displayName%", player.getDisplayName());
166184
if (killer != null) {
@@ -172,6 +190,9 @@ private String formatMessage(String message, Player player, String killer, Strin
172190
if (cause != null) {
173191
message = message.replace("%cause%", formatCause(cause));
174192
}
193+
if (weapon != null) {
194+
message = message.replace("%weapon%", weapon);
195+
}
175196
return message;
176197
}
177198

@@ -187,10 +208,4 @@ private String getMobName(LivingEntity entity) {
187208
return name(entity.getType().name());
188209
}
189210

190-
private String getItemName(ItemStack item) {
191-
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) {
192-
return item.getItemMeta().getDisplayName();
193-
}
194-
return name(item.getType().name());
195-
}
196211
}

0 commit comments

Comments
 (0)