11package me .chancesd .pvpmanager .listener ;
22
33import me .chancesd .sdutils .utils .Log ;
4- import me .chancesd .sdutils .utils .MCVersion ;
54import java .util .UUID ;
65import java .util .concurrent .TimeUnit ;
76
8- import java .util .Set ;
9-
107import org .bukkit .Bukkit ;
118import org .bukkit .Location ;
129import org .bukkit .Material ;
2724import org .bukkit .event .player .PlayerKickEvent ;
2825import org .bukkit .event .player .PlayerQuitEvent ;
2926import org .bukkit .event .player .PlayerRespawnEvent ;
30- import org .bukkit .inventory .ItemStack ;
31- import org .bukkit .inventory .meta .FireworkMeta ;
32-
3327import com .google .common .cache .Cache ;
3428import com .google .common .cache .CacheBuilder ;
3529
36- import me .chancesd .pvpmanager .integration .Hook ;
37- import me .chancesd .pvpmanager .integration .type .WorldGuardDependency ;
3830import me .chancesd .pvpmanager .manager .PlayerManager ;
3931import me .chancesd .pvpmanager .player .CombatPlayer ;
4032import me .chancesd .pvpmanager .player .ProtectionResult ;
4941public class PlayerListener implements Listener {
5042
5143 private final PlayerManager playerHandler ;
52- private final WorldGuardDependency wg ;
5344 private final Cache <UUID , String > msgCooldown = CacheBuilder .newBuilder ().weakValues ().expireAfterWrite (800 , TimeUnit .MILLISECONDS ).build ();
5445
5546 public PlayerListener (final PlayerManager ph ) {
5647 this .playerHandler = ph ;
57- this .wg = (WorldGuardDependency ) ph .getPlugin ().getDependencyManager ().getDependency (Hook .WORLDGUARD );
5848 }
5949
6050 @ EventHandler (ignoreCancelled = true )
@@ -75,55 +65,6 @@ public final void onPlayerEat(final PlayerItemConsumeEvent event) {
7565 }
7666 }
7767
78- @ EventHandler
79- public final void onFireworkUseWhileGliding (final PlayerInteractEvent event ) {
80- final Player player = event .getPlayer ();
81- if (MCVersion .isLowerThan (MCVersion .V1_9 ) || !player .isGliding ())
82- return ;
83-
84- final Action action = event .getAction ();
85- if (action != Action .RIGHT_CLICK_AIR && action != Action .RIGHT_CLICK_BLOCK )
86- return ;
87-
88- final CombatPlayer pvPlayer = playerHandler .get (player );
89- if (!pvPlayer .isInCombat ())
90- return ;
91-
92- @ SuppressWarnings ("deprecation" )
93- final ItemStack item = player .getInventory ().getItemInHand ();
94- Material fireworkMaterial = null ;
95- if (MCVersion .isAtLeast (MCVersion .V1_13 )) {
96- fireworkMaterial = Material .FIREWORK_ROCKET ;
97- } else {
98- // For versions before 1.13, try to get the legacy material
99- try {
100- fireworkMaterial = Material .getMaterial ("FIREWORK" );
101- } catch (final Exception e ) {
102- return ;
103- }
104- }
105-
106- if (item .getType () != fireworkMaterial )
107- return ;
108-
109- // Check if fireworks are completely blocked
110- if (Conf .BLOCK_FIREWORKS_IN_COMBAT .asBool ()) {
111- event .setCancelled (true );
112- pvPlayer .sendActionBar (Lang .FIREWORK_BLOCKED_IN_COMBAT .msg (), 1000 );
113- return ;
114- }
115-
116- // Check power limit
117- final int powerLimit = Conf .FIREWORK_POWER_LIMIT .asInt ();
118- if (powerLimit >= 0 && item .hasItemMeta ()) {
119- final FireworkMeta meta = (FireworkMeta ) item .getItemMeta ();
120- if (meta != null && meta .getPower () > powerLimit ) {
121- event .setCancelled (true );
122- pvPlayer .sendActionBar (Lang .FIREWORK_POWER_LIMITED_IN_COMBAT .msg (meta .getPower ()), 1000 );
123- }
124- }
125- }
126-
12768 @ EventHandler (ignoreCancelled = true , priority = EventPriority .MONITOR )
12869 public final void onPlayerKick (final PlayerKickEvent event ) {
12970 final Player player = event .getPlayer ();
@@ -158,58 +99,9 @@ public final void onPlayerLogoutMonitor(final PlayerQuitEvent event) {
15899
159100 @ EventHandler (priority = EventPriority .HIGH )
160101 public final void onPlayerDeath (final PlayerDeathEvent event ) {
161- final Player player = event .getEntity ();
162- if (CombatUtils .isWorldExcluded (player .getWorld ().getName ()))
163- return ;
164-
165- final CombatPlayer pvPlayer = playerHandler .get (player );
166- final Player killer = player .getKiller ();
167-
168- // Player died in combat, process that
169- if (killer != null && !killer .equals (player )) {
170- final CombatPlayer pKiller = playerHandler .get (killer );
171- handlePvPDeath (player , pvPlayer , killer , pKiller , event );
172- }
173-
174- if (pvPlayer .isInCombat ()) {
175- final Set <CombatPlayer > enemies = pvPlayer .getEnemies ();
176- if (Conf .UNTAG_ON_KILL .asBool ()) {
177- enemies .forEach (enemy -> enemy .removeEnemy (pvPlayer ));
178- }
179- pvPlayer .untag (UntagReason .DEATH );
180- }
181-
182- // Let's process player's inventory/exp according to config file
183- if (pvPlayer .hasPvPLogged ()) {
184- playerHandler .handleCombatLogDrops (event , player );
102+ if (CombatUtils .isWorldExcluded (event .getEntity ().getWorld ().getName ()))
185103 return ;
186- }
187-
188- playerHandler .handlePlayerDrops (event , player , killer );
189- }
190-
191- private void handlePvPDeath (final Player player , final CombatPlayer pvPlayer , final Player killer , final CombatPlayer pKiller , final PlayerDeathEvent event ) {
192- if (Conf .KILL_ABUSE_ENABLED .asBool () && !pKiller .hasPerm (Permissions .EXEMPT_KILL_ABUSE )) {
193- pKiller .addVictim (player );
194- }
195- if (wg == null || !wg .containsRegionsAt (killer .getLocation (), Conf .KILLS_WG_EXCLUSIONS .asSet ())) {
196- if (Conf .MONEY_REWARD .asDouble () > 0 ) {
197- pKiller .giveReward (pvPlayer );
198- }
199- if (Conf .MONEY_PENALTY .asDouble () > 0 ) {
200- pvPlayer .applyPenalty ();
201- }
202- if (pKiller .canExecuteKillCommand ()) {
203- CombatUtils .executeCommands (Conf .COMMANDS_ON_KILL .asList (), killer , killer .getName (), player .getName ());
204- }
205- pvPlayer .setLastDeathWasPvP (true );
206- if (Conf .EXP_STEAL .asDouble () > 0 ) {
207- final int expWon = pKiller .giveExp (pvPlayer );
208- event .setDroppedExp (0 );
209- event .setNewExp (player .getTotalExperience () - expWon );
210- pvPlayer .message (Lang .EXP_STOLEN .msg (pKiller .getName (), expWon ));
211- }
212- }
104+ playerHandler .getDeathHandler ().processDeath (event );
213105 }
214106
215107 @ EventHandler
@@ -262,29 +154,6 @@ public final void onPlayerInteract(final PlayerInteractEvent e) {
262154 }
263155 }
264156
265- @ EventHandler (priority = EventPriority .LOW , ignoreCancelled = true ) // cancel on low since some plugins check cancels on normal instead of monitor
266- public final void onPlayerBlockInteract (final PlayerInteractEvent e ) {
267- final Player player = e .getPlayer ();
268- if (!Conf .BLOCK_INTERACT_IN_COMBAT .asBool () || e .getAction () != Action .RIGHT_CLICK_BLOCK && e .getAction () != Action .PHYSICAL
269- || CombatUtils .isWorldExcluded (player .getWorld ().getName ()))
270- return ;
271-
272- final CombatPlayer combatPlayer = playerHandler .get (player );
273- final Block clickedBlock = e .getClickedBlock ();
274- if (clickedBlock == null )
275- return ;
276- if (combatPlayer .isInCombat ()) {
277- final Material blockType = clickedBlock .getType ();
278- for (final String material : Conf .BLOCK_INTERACT_ITEM_LIST .asList ()) {
279- if (blockType .name ().endsWith (material )) {
280- e .setCancelled (true );
281- combatPlayer .sendActionBar (Lang .INTERACT_BLOCKED_IN_COMBAT .msg (), 1000 );
282- return ;
283- }
284- }
285- }
286- }
287-
288157 @ EventHandler (ignoreCancelled = true )
289158 public final void onBucketEmpty (final PlayerBucketEmptyEvent event ) {
290159 final Player player = event .getPlayer ();
@@ -346,7 +215,6 @@ public final void onPlayerRespawn(final PlayerRespawnEvent event) {
346215 }
347216 if (combatPlayer .wasLastDeathPvP ()) {
348217 CombatUtils .executeCommands (Conf .COMMANDS_ON_RESPAWN .asList (), event .getPlayer (), event .getPlayer ().getName ());
349- combatPlayer .setLastDeathWasPvP (false );
350218 }
351219 }
352220
0 commit comments