|
1 | 1 | package pw.kaboom.extras.modules.player;
|
2 | 2 |
|
| 3 | +import io.papermc.paper.event.world.WorldGameRuleChangeEvent; |
| 4 | +import net.kyori.adventure.text.Component; |
3 | 5 | import org.bukkit.Bukkit;
|
| 6 | +import org.bukkit.GameRule; |
4 | 7 | import org.bukkit.World;
|
5 | 8 | import org.bukkit.attribute.Attribute;
|
6 | 9 | import org.bukkit.attribute.AttributeInstance;
|
|
9 | 12 | import org.bukkit.entity.HumanEntity;
|
10 | 13 | import org.bukkit.entity.Player;
|
11 | 14 | import org.bukkit.event.EventHandler;
|
| 15 | +import org.bukkit.event.EventPriority; |
12 | 16 | import org.bukkit.event.Listener;
|
13 | 17 | import org.bukkit.event.entity.EntityDamageEvent;
|
14 | 18 | import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
19 | 23 | import org.bukkit.potion.PotionEffect;
|
20 | 24 | import pw.kaboom.extras.util.Utility;
|
21 | 25 |
|
| 26 | +import java.util.IdentityHashMap; |
| 27 | +import java.util.Map; |
| 28 | +import java.util.Objects; |
| 29 | + |
22 | 30 | public final class PlayerDamage implements Listener {
|
| 31 | + private final Map<World, Boolean> deathMessageToggles = new IdentityHashMap<>(); |
| 32 | + |
23 | 33 | @EventHandler
|
24 | 34 | void onEntityDamage(final EntityDamageEvent event) {
|
25 | 35 | if (EntityType.PLAYER.equals(event.getEntityType())) {
|
@@ -48,12 +58,28 @@ void onFoodLevelChange(final FoodLevelChangeEvent event) {
|
48 | 58 | }
|
49 | 59 | }
|
50 | 60 |
|
| 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 | + |
51 | 70 | @EventHandler
|
52 | 71 | void onPlayerDeath(final PlayerDeathEvent event) {
|
53 | 72 | final Player player = event.getEntity();
|
| 73 | + final Component deathMessage = event.deathMessage(); |
54 | 74 |
|
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); |
57 | 83 | }
|
58 | 84 |
|
59 | 85 | try {
|
|
0 commit comments