99import fr .maxlego08 .essentials .module .ZModule ;
1010import fr .maxlego08 .essentials .zutils .utils .paper .PaperComponent ;
1111import 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 ;
1214import org .bukkit .configuration .ConfigurationSection ;
1315import org .bukkit .configuration .file .YamlConfiguration ;
1416import org .bukkit .entity .Entity ;
2123import org .bukkit .event .entity .PlayerDeathEvent ;
2224import org .bukkit .inventory .ItemStack ;
2325
24- import java .util .ArrayList ;
2526import java .util .HashMap ;
2627import java .util .List ;
2728import 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