11package net .opmasterleo .combat .listener .player ;
22
3- import net .opmasterleo .combat .Combat ;
3+ import java .util .Objects ;
4+ import java .util .UUID ;
5+
46import org .bukkit .Bukkit ;
7+ import org .bukkit .Location ;
8+ import org .bukkit .World ;
59import org .bukkit .entity .Player ;
610import org .bukkit .event .EventHandler ;
711import org .bukkit .event .EventPriority ;
812import org .bukkit .event .Listener ;
913import org .bukkit .event .entity .PlayerDeathEvent ;
10- import org .bukkit .Location ;
11- import org .bukkit .World ;
12- import java .util .UUID ;
13- import java .util .Objects ;
14+
15+ import net .opmasterleo .combat .Combat ;
1416
1517public class PlayerDeathListener implements Listener {
1618
1719 private static final String INTENTIONAL_GAME_DESIGN_KEYWORD = "Intentional Game Design" ;
20+ private static final Combat combat = Combat .getInstance ();
1821
19- @ EventHandler (priority = EventPriority .NORMAL )
22+ @ EventHandler (priority = EventPriority .HIGH , ignoreCancelled = true )
2023 public void onPlayerDeath (PlayerDeathEvent event ) {
21- Player victim = event .getEntity ();
22- Combat combat = Combat .getInstance ();
23- Player combatOpponent = combat .getCombatOpponent (victim );
24+ final Player victim = event .getEntity ();
25+ final UUID victimUUID = victim .getUniqueId ();
26+ final Combat .CombatRecord victimRecord = combat .getCombatRecords ().get (victimUUID );
27+ final UUID opponentUUID = victimRecord != null ? victimRecord .opponent : null ;
2428 Player killer = victim .getKiller ();
25- if (killer == null && combatOpponent != null ) {
29+ if (killer == null && opponentUUID != null ) {
2630 net .kyori .adventure .text .Component deathComp = event .deathMessage ();
2731 if (deathComp != null ) {
28- String deathText = net .kyori .adventure .text .serializer .plain .PlainTextComponentSerializer .plainText ()
29- .serialize (Objects .requireNonNull (deathComp ));
32+ String deathText = net .kyori .adventure .text .serializer .plain .PlainTextComponentSerializer .plainText ()
33+ .serialize (Objects .requireNonNull (deathComp ));
3034 if (deathText .contains (INTENTIONAL_GAME_DESIGN_KEYWORD )) {
31- victim .setKiller (combatOpponent );
35+ Player combatOpponent = Bukkit .getPlayer (opponentUUID );
36+ if (combatOpponent != null ) {
37+ victim .setKiller (combatOpponent );
38+ killer = combatOpponent ;
39+ }
3240 }
3341 }
3442 }
3543
36- UUID victimUUID = victim .getUniqueId ();
37- Combat .CombatRecord victimRecord = combat .getCombatRecords ().get (victimUUID );
38- UUID opponentUUID = victimRecord != null ? victimRecord .opponent : null ;
39- boolean untagOnDeath = combat .getConfig ().getBoolean ("untag-on-death" , true );
40- boolean untagOnEnemyDeath = combat .getConfig ().getBoolean ("untag-on-enemy-death" , true );
41- boolean lightningEnabled = combat .getConfig ().getBoolean ("lightning-on-kill" , false );
42- if (lightningEnabled && killer != null && !killer .equals (victim )) {
44+ if (combat .getConfig ().getBoolean ("lightning-on-kill" , false ) && killer != null && !killer .equals (victim )) {
4345 Location loc = victim .getLocation ();
4446 World world = loc .getWorld ();
4547 if (world != null ) {
4648 world .strikeLightningEffect (loc );
4749 }
4850 }
4951
52+ final boolean untagOnDeath = combat .getConfig ().getBoolean ("untag-on-death" , true );
53+ final boolean untagOnEnemyDeath = combat .getConfig ().getBoolean ("untag-on-enemy-death" , true );
54+
55+ if (!untagOnDeath && !untagOnEnemyDeath ) {
56+ return ;
57+ }
58+
5059 if (untagOnDeath ) {
51- combat .forceCombatCleanup (victimUUID );
52- if (combat .getGlowManager () != null ) {
53- combat .getGlowManager ().setGlowing (victim , false );
54- }
60+ untagPlayer (victimUUID , victim , false );
5561 }
62+
5663 if (untagOnEnemyDeath && opponentUUID != null ) {
57- combat .forceCombatCleanup (opponentUUID );
58- Player opponent = combat .getServer ().getPlayer (opponentUUID );
59- if (opponent != null && opponent .isOnline ()) {
60- if (combat .getGlowManager () != null ) {
61- combat .getGlowManager ().setGlowing (opponent , false );
62- }
64+ Player opponent = Bukkit .getPlayer (opponentUUID );
65+ untagPlayer (opponentUUID , opponent , true );
66+ }
67+ }
6368
64- String noLongerInCombatMsg ;
65- String noLongerInCombatType ;
66- if (combat .getConfig ().isConfigurationSection ("Messages.NoLongerInCombat" )) {
67- noLongerInCombatMsg = combat .getConfig ().getString ("Messages.NoLongerInCombat.text" , "" );
68- noLongerInCombatType = combat .getConfig ().getString ("Messages.NoLongerInCombat.type" , "chat" );
69- } else {
70- noLongerInCombatMsg = combat .getConfig ().getString ("Messages.NoLongerInCombat" , "" );
71- noLongerInCombatType = combat .getConfig ().getString ("Messages.NoLongerInCombat.type" , "chat" );
72- }
73- String prefix = combat .getMessage ("Messages.Prefix" );
74- net .kyori .adventure .text .Component component = net .opmasterleo .combat .util .ChatUtil .parse (prefix + noLongerInCombatMsg );
75- switch (noLongerInCombatType == null ? "chat" : noLongerInCombatType .toLowerCase ()) {
69+ private void untagPlayer (UUID uuid , Player player , boolean sendMessage ) {
70+ combat .getCombatRecords ().remove (uuid );
71+ combat .getLastActionBarUpdates ().remove (uuid );
72+ if (player != null && combat .getGlowManager () != null ) {
73+ combat .getGlowManager ().setGlowing (player , false , null );
74+ }
75+
76+ if (sendMessage && player != null && player .isOnline () && combat .isCombatVisible (player )) {
77+ String msg ;
78+ String type ;
79+
80+ if (combat .getConfig ().isConfigurationSection ("Messages.NoLongerInCombat" )) {
81+ msg = combat .getConfig ().getString ("Messages.NoLongerInCombat.text" , "" );
82+ type = combat .getConfig ().getString ("Messages.NoLongerInCombat.type" , "chat" );
83+ } else {
84+ msg = combat .getConfig ().getString ("Messages.NoLongerInCombat" , "" );
85+ type = "chat" ;
86+ }
87+
88+ if (msg != null && !msg .isEmpty ()) {
89+ String prefix = combat .getPrefix ();
90+ net .kyori .adventure .text .Component component = net .opmasterleo .combat .util .ChatUtil .parse (prefix + msg );
91+
92+ switch (type == null ? "chat" : type .toLowerCase ()) {
7693 case "actionbar" :
77- opponent .sendActionBar (component );
94+ player .sendActionBar (component );
7895 break ;
7996 case "both" :
80- opponent .sendMessage (component );
81- opponent .sendActionBar (component );
97+ player .sendMessage (component );
98+ player .sendActionBar (component );
8299 break ;
83100 case "chat" :
84101 default :
85- opponent .sendMessage (component );
102+ player .sendMessage (component );
86103 break ;
87104 }
88105 }
89106 }
90107 }
91-
92- @ EventHandler (priority = EventPriority .HIGHEST , ignoreCancelled = true )
93- public void handle (PlayerDeathEvent event ) {
94- Player player = event .getPlayer ();
95- Combat combat = Combat .getInstance ();
96-
97- Combat .CombatRecord record = combat .getCombatRecords ().remove (player .getUniqueId ());
98-
99- if (combat .getGlowManager () != null ) {
100- combat .getGlowManager ().setGlowing (player , false );
101- if (record != null && record .opponent != null ) {
102- Player opponent = Bukkit .getPlayer (record .opponent );
103- if (opponent != null ) {
104- combat .getGlowManager ().setGlowing (opponent , false );
105- }
106- }
107- }
108-
109- if (record != null && record .opponent != null ) {
110- combat .getCombatRecords ().remove (record .opponent );
111- }
112- }
113108}
0 commit comments