From 915c37188e131614067241df27f71b90713523ed Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 12 Feb 2025 23:55:21 +0100 Subject: [PATCH 1/4] Fix death message handling, add {CAUSE} placeholder and update PL/EN configurations --- .../deathmessage/DeathMessageController.java | 40 +++++++++---------- .../implementation/ENTranslation.java | 17 +++++--- .../implementation/PLTranslation.java | 21 ++++++---- 3 files changed, 45 insertions(+), 33 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java index 499713949..4a1bad7c0 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java @@ -7,9 +7,11 @@ import com.eternalcode.core.notice.NoticeService; import com.eternalcode.multification.notice.Notice; import java.util.List; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.PlayerDeathEvent; @@ -30,26 +32,29 @@ class DeathMessageController implements Listener { @EventHandler void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getEntity(); - event.setDeathMessage(null); - if (player.getKiller() != null) { - this.noticeService.create() - .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().deathMessage())) - .placeholder("{PLAYER}", player.getName()) - .placeholder("{KILLER}", player.getKiller().getName()) - .onlinePlayers() - .send(); + EntityDamageEvent damageCause = player.getLastDamageCause(); - return; + if (damageCause instanceof EntityDamageByEntityEvent) { + Entity damaged = ((EntityDamageByEntityEvent) damageCause).getDamager(); + if (damaged instanceof Player killer) { + this.noticeService.create() + .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().deathMessage())) + .placeholder("{PLAYER}", player.getName()) + .placeholder("{KILLER}", killer.getName()) + .onlinePlayers() + .send(); + return; + } } - EntityDamageEvent lastDamageCause = player.getLastDamageCause(); - - if (lastDamageCause == null) { + if (damageCause != null) { + EntityDamageEvent.DamageCause cause = damageCause.getCause(); this.noticeService.create() .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().unknownDeathCause())) .placeholder("{PLAYER}", player.getName()) + .placeholder("{CAUSE}", cause.name()) .onlinePlayers() .send(); return; @@ -57,15 +62,8 @@ void onPlayerDeath(PlayerDeathEvent event) { this.noticeService.create() .noticeOptional(translation -> { - EntityDamageEvent.DamageCause cause = lastDamageCause.getCause(); - - List notifications = translation.event().deathMessageByDamageCause().get(cause); - - if (notifications == null) { - return RandomElementUtil.randomElement(translation.event().unknownDeathCause()); - } - - return RandomElementUtil.randomElement(notifications); + List messages = translation.event().unknownDeathCause(); + return RandomElementUtil.randomElement(messages); }) .placeholder("{PLAYER}", player.getName()) .onlinePlayers() diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java index 02f091307..ac8fbc466 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java @@ -281,27 +281,34 @@ public static class ENChatSection implements ChatSection { @Getter @Contextual public static class ENEventSection implements EventSection { - @Description("# {PLAYER} - Killed player, {KILLER} - Killer") + @Description({ + "# {PLAYER} - Killed player", + "# {KILLER} - Killer (only for PvP deaths)" + }) public List deathMessage = List.of( Notice.chat("{PLAYER} died!"), Notice.chat("{PLAYER} was killed by {KILLER}!") ); @Description({ - "# EternalCore will pick a random message for the list below, every time the player do a various action.", - "# If the {KILLER} not be found, the message will be picked from list if contains cause.", + "# Messages shown when a player dies from specific damage causes", + "# {PLAYER} - Killed player", + "# {CAUSE} - Death cause (e.g., FALL, VOID)", "# List of DamageCauses: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html" }) public Map> deathMessageByDamageCause = Map.of( - EntityDamageEvent.DamageCause.VOID, Collections.singletonList(Notice.chat("{PLAYER} fell into the void!")), + EntityDamageEvent.DamageCause.VOID, Collections.singletonList( + Notice.chat("{PLAYER} fell into the void!") + ), EntityDamageEvent.DamageCause.FALL, Arrays.asList( Notice.chat("{PLAYER} fell from a high place!"), Notice.chat("{PLAYER} fell off a deadly cliff!") ) ); + @Description("# {PLAYER} - Player who died from an unknown cause") public List unknownDeathCause = List.of( - Notice.chat("{PLAYER} died!") + Notice.chat("{PLAYER} died under mysterious circumstances!") ); @Description({"", "# {PLAYER} - Player who joined"}) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java index 038d47f5e..07e80ed0f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java @@ -286,27 +286,34 @@ public static class PLChatSection implements ChatSection { @Getter @Contextual public static class PLEventSection implements EventSection { - @Description("# {PLAYER} - Gracz który został uśmiercony, {KILLER} - Gracz który zabił gracza") + @Description({ + "# {PLAYER} - Gracz, który zginął", + "# {KILLER} - Gracz, który zabił (tylko w przypadku PvP)" + }) public List deathMessage = List.of( Notice.actionbar("{PLAYER} zginął przez {KILLER}!"), - Notice.actionbar("{PLAYER} zginął tragicznie podczas cieżkiej walki!") + Notice.actionbar("{PLAYER} zginął tragicznie podczas ciężkiej walki!") ); @Description({ - "# EternalCore będzie losować losową wiadomość z poniższej listy, za każdym razem gdy gracz zginie.", - "# Jeżeli {KILLER} nie będzie uwzględniony to wiadomość zostanie pobrana z tej listy.", - "# Lista powodów zgonu: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html" + "# Wiadomości wyświetlane gdy gracz ginie od konkretnego typu obrażeń", + "# {PLAYER} - Gracz, który zginął", + "# {CAUSE} - Przyczyna śmierci (np. UPADEK, VOID)", + "# List of DamageCauses: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html" }) public Map> deathMessageByDamageCause = Map.of( - EntityDamageEvent.DamageCause.VOID, Collections.singletonList(Notice.chat("{PLAYER} wypadł z naszego świata!")), + EntityDamageEvent.DamageCause.VOID, Collections.singletonList( + Notice.chat("{PLAYER} wypadł w otchłań!") + ), EntityDamageEvent.DamageCause.FALL, Arrays.asList( Notice.chat("{PLAYER} spadł z wysokości!"), Notice.chat("{PLAYER} spadł z zabójczego klifu!") ) ); + @Description("# {PLAYER} - Gracz, który zginął z nieznanej przyczyny") public List unknownDeathCause = List.of( - Notice.chat("{PLAYER} został zabity przez niezidentyfikowany obiekt bojowy!") + Notice.chat("{PLAYER} został zabity przez niezidentyfikowany obiekt!") ); @Description({ From 351434b5a33f3014f460effe3d2a61ea87704d79 Mon Sep 17 00:00:00 2001 From: Rollczi Date: Thu, 13 Feb 2025 20:40:13 +0100 Subject: [PATCH 2/4] Simplify if statement --- .../deathmessage/DeathMessageController.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java index 4a1bad7c0..ba9d3c777 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java @@ -36,17 +36,14 @@ void onPlayerDeath(PlayerDeathEvent event) { EntityDamageEvent damageCause = player.getLastDamageCause(); - if (damageCause instanceof EntityDamageByEntityEvent) { - Entity damaged = ((EntityDamageByEntityEvent) damageCause).getDamager(); - if (damaged instanceof Player killer) { - this.noticeService.create() - .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().deathMessage())) - .placeholder("{PLAYER}", player.getName()) - .placeholder("{KILLER}", killer.getName()) - .onlinePlayers() - .send(); - return; - } + if (damageCause instanceof EntityDamageByEntityEvent causeByEntity && causeByEntity.getDamager() instanceof Player killer) { + this.noticeService.create() + .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().deathMessage())) + .placeholder("{PLAYER}", player.getName()) + .placeholder("{KILLER}", killer.getName()) + .onlinePlayers() + .send(); + return; } if (damageCause != null) { From 686a91c6bd65fde1d5bb851fb2b5c120020b0d8e Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Fri, 14 Feb 2025 22:49:46 +0100 Subject: [PATCH 3/4] Fix. --- .../feature/deathmessage/DeathMessageController.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java index ba9d3c777..3bb34a313 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java @@ -49,7 +49,15 @@ void onPlayerDeath(PlayerDeathEvent event) { if (damageCause != null) { EntityDamageEvent.DamageCause cause = damageCause.getCause(); this.noticeService.create() - .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().unknownDeathCause())) + .noticeOptional(translation -> { + List notifications = translation.event().deathMessageByDamageCause().get(cause); + + if (notifications == null) { + return RandomElementUtil.randomElement(translation.event().unknownDeathCause()); + } + + return RandomElementUtil.randomElement(notifications); + }) .placeholder("{PLAYER}", player.getName()) .placeholder("{CAUSE}", cause.name()) .onlinePlayers() From b9fdea021eb9d6952acbb1cadde9663e5b282d56 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Sat, 15 Feb 2025 00:53:36 +0100 Subject: [PATCH 4/4] Fix. --- .../core/feature/deathmessage/DeathMessageController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java index 3bb34a313..843111fbf 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/deathmessage/DeathMessageController.java @@ -66,10 +66,7 @@ void onPlayerDeath(PlayerDeathEvent event) { } this.noticeService.create() - .noticeOptional(translation -> { - List messages = translation.event().unknownDeathCause(); - return RandomElementUtil.randomElement(messages); - }) + .noticeOptional(translation -> RandomElementUtil.randomElement(translation.event().unknownDeathCause())) .placeholder("{PLAYER}", player.getName()) .onlinePlayers() .send();