Skip to content

Commit 60b20ab

Browse files
Respect death messages gamerule (#359)
* Use Bukkit.broadcast instead of looping through getOnlinePlayers * Check if the death message is null before broadcasting it * Don't broadcast death messages from worlds with showDeathMessages disabled
1 parent 8cca595 commit 60b20ab

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package pw.kaboom.extras.modules.player;
22

3+
import io.papermc.paper.event.world.WorldGameRuleChangeEvent;
4+
import net.kyori.adventure.text.Component;
35
import org.bukkit.Bukkit;
6+
import org.bukkit.GameRule;
47
import org.bukkit.World;
58
import org.bukkit.attribute.Attribute;
69
import org.bukkit.attribute.AttributeInstance;
@@ -9,6 +12,7 @@
912
import org.bukkit.entity.HumanEntity;
1013
import org.bukkit.entity.Player;
1114
import org.bukkit.event.EventHandler;
15+
import org.bukkit.event.EventPriority;
1216
import org.bukkit.event.Listener;
1317
import org.bukkit.event.entity.EntityDamageEvent;
1418
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
@@ -19,7 +23,13 @@
1923
import org.bukkit.potion.PotionEffect;
2024
import pw.kaboom.extras.util.Utility;
2125

26+
import java.util.IdentityHashMap;
27+
import java.util.Map;
28+
import java.util.Objects;
29+
2230
public final class PlayerDamage implements Listener {
31+
private final Map<World, Boolean> deathMessageToggles = new IdentityHashMap<>();
32+
2333
@EventHandler
2434
void onEntityDamage(final EntityDamageEvent event) {
2535
if (EntityType.PLAYER.equals(event.getEntityType())) {
@@ -48,12 +58,28 @@ void onFoodLevelChange(final FoodLevelChangeEvent event) {
4858
}
4959
}
5060

61+
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
62+
void onGameRuleChange(final WorldGameRuleChangeEvent event) {
63+
if (event.getGameRule() != GameRule.SHOW_DEATH_MESSAGES) {
64+
return;
65+
}
66+
67+
this.deathMessageToggles.put(event.getWorld(), Boolean.parseBoolean(event.getValue()));
68+
}
69+
5170
@EventHandler
5271
void onPlayerDeath(final PlayerDeathEvent event) {
5372
final Player player = event.getEntity();
73+
final Component deathMessage = event.deathMessage();
5474

55-
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
56-
onlinePlayer.sendMessage(event.deathMessage());
75+
if (deathMessage != null && this.deathMessageToggles.computeIfAbsent(
76+
player.getWorld(),
77+
(key) -> Objects.requireNonNullElse(
78+
key.getGameRuleValue(GameRule.SHOW_DEATH_MESSAGES),
79+
key.getGameRuleDefault(GameRule.SHOW_DEATH_MESSAGES)
80+
)
81+
)) {
82+
Bukkit.broadcast(deathMessage);
5783
}
5884

5985
try {

0 commit comments

Comments
 (0)