Skip to content

Commit 1630391

Browse files
committed
Refactor death handling to new class
1 parent 3a32e2d commit 1630391

7 files changed

Lines changed: 233 additions & 206 deletions

File tree

pvpmanager-plugin/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
<configuration>
2323
<createDependencyReducedPom>false</createDependencyReducedPom>
2424
<transformers>
25-
<!-- Avoid overlapping MANIFEST.MF file -->
25+
<!-- Exclude MANIFEST.MF to avoid overlapping files warning -->
2626
<transformer
2727
implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
28-
<resource>MANIFEST.MF</resource>
28+
<resource>META-INF/MANIFEST.MF</resource>
2929
</transformer>
3030
</transformers>
3131
</configuration>

pvpmanager/src/main/java/me/chancesd/pvpmanager/command/Help.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private String getCommandUsage(final BaseCommand command, final String commandNa
104104
*/
105105
private String buildAutoHoverText(final BaseCommand command, final String description) {
106106
final String usage = getCommandUsage(command, "");
107-
final boolean needsParameters = usage.contains("<") || usage.contains("[");
107+
final boolean needsParameters = usage.contains("<");
108108

109109
if (needsParameters) {
110110
return buildSyntaxHoverText(description, command);

pvpmanager/src/main/java/me/chancesd/pvpmanager/listener/BlockedActionsListener.java

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@
44
import me.chancesd.sdutils.utils.MCVersion;
55
import java.util.Arrays;
66

7+
import org.bukkit.Material;
8+
import org.bukkit.block.Block;
79
import org.bukkit.entity.Player;
810
import org.bukkit.event.EventHandler;
911
import org.bukkit.event.EventPriority;
1012
import org.bukkit.event.Listener;
13+
import org.bukkit.event.block.Action;
1114
import org.bukkit.event.block.BlockBreakEvent;
1215
import org.bukkit.event.block.BlockPlaceEvent;
1316
import org.bukkit.event.inventory.InventoryOpenEvent;
1417
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
18+
import org.bukkit.event.player.PlayerInteractEvent;
1519
import org.bukkit.event.player.PlayerPickupItemEvent;
1620
import org.bukkit.event.player.PlayerTeleportEvent;
1721
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
22+
import org.bukkit.inventory.ItemStack;
23+
import org.bukkit.inventory.meta.FireworkMeta;
1824
import org.bukkit.event.player.PlayerToggleFlightEvent;
1925
import me.chancesd.pvpmanager.manager.PlayerManager;
2026
import me.chancesd.pvpmanager.player.CombatPlayer;
@@ -26,9 +32,15 @@
2632
public class BlockedActionsListener implements Listener {
2733

2834
private final PlayerManager playerHandler;
35+
Material fireworkMaterial;
2936

3037
public BlockedActionsListener(final PlayerManager ph) {
3138
this.playerHandler = ph;
39+
if (MCVersion.isAtLeast(MCVersion.V1_13)) {
40+
fireworkMaterial = Material.FIREWORK_ROCKET;
41+
} else {
42+
fireworkMaterial = Material.getMaterial("FIREWORK");
43+
}
3244
}
3345

3446
@EventHandler(ignoreCancelled = true)
@@ -62,6 +74,66 @@ public final void onToggleFlight(final PlayerToggleFlightEvent event) {
6274
}
6375
}
6476

77+
@EventHandler
78+
public final void onFireworkUseWhileGliding(final PlayerInteractEvent event) {
79+
final Player player = event.getPlayer();
80+
if (MCVersion.isLowerThan(MCVersion.V1_9) || !player.isGliding())
81+
return;
82+
83+
final Action action = event.getAction();
84+
if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK)
85+
return;
86+
87+
final CombatPlayer pvPlayer = playerHandler.get(player);
88+
if (!pvPlayer.isInCombat())
89+
return;
90+
91+
@SuppressWarnings("deprecation")
92+
final ItemStack item = player.getInventory().getItemInHand();
93+
if (item.getType() != fireworkMaterial)
94+
return;
95+
96+
// Check if fireworks are completely blocked
97+
if (Conf.BLOCK_FIREWORKS_IN_COMBAT.asBool()) {
98+
event.setCancelled(true);
99+
pvPlayer.sendActionBar(Lang.FIREWORK_BLOCKED_IN_COMBAT.msg(), 1000);
100+
return;
101+
}
102+
103+
// Check power limit
104+
final int powerLimit = Conf.FIREWORK_POWER_LIMIT.asInt();
105+
if (powerLimit >= 0 && item.hasItemMeta()) {
106+
final FireworkMeta meta = (FireworkMeta) item.getItemMeta();
107+
if (meta != null && meta.getPower() > powerLimit) {
108+
event.setCancelled(true);
109+
pvPlayer.sendActionBar(Lang.FIREWORK_POWER_LIMITED_IN_COMBAT.msg(meta.getPower()), 1000);
110+
}
111+
}
112+
}
113+
114+
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) // cancel on low since some plugins check cancels on normal instead of monitor
115+
public final void onPlayerBlockInteract(final PlayerInteractEvent e) {
116+
final Player player = e.getPlayer();
117+
if (!Conf.BLOCK_INTERACT_IN_COMBAT.asBool() || e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.PHYSICAL
118+
|| CombatUtils.isWorldExcluded(player.getWorld().getName()))
119+
return;
120+
121+
final CombatPlayer combatPlayer = playerHandler.get(player);
122+
final Block clickedBlock = e.getClickedBlock();
123+
if (clickedBlock == null)
124+
return;
125+
if (combatPlayer.isInCombat()) {
126+
final Material blockType = clickedBlock.getType();
127+
for (final String material : Conf.BLOCK_INTERACT_ITEM_LIST.asList()) {
128+
if (blockType.name().endsWith(material)) {
129+
e.setCancelled(true);
130+
combatPlayer.sendActionBar(Lang.INTERACT_BLOCKED_IN_COMBAT.msg(), 1000);
131+
return;
132+
}
133+
}
134+
}
135+
}
136+
65137
@SuppressWarnings("deprecation")
66138
@EventHandler(ignoreCancelled = true)
67139
public final void onPlayerPickup(final PlayerPickupItemEvent e) {
@@ -92,16 +164,18 @@ public final void onPlayerTeleport(final PlayerTeleportEvent event) {
92164
&& Conf.BLOCK_CHORUSFRUIT.asBool()) {
93165
event.setCancelled(true);
94166
pvplayer.message(Lang.CHORUS_BLOCKED_IN_COMBAT);
95-
} else if (cause.equals(TeleportCause.COMMAND) && Conf.BLOCK_TELEPORT.asBool()) {
96-
event.setCancelled(true);
97-
pvplayer.message(Lang.TELEPORT_BLOCKED_IN_COMBAT);
98-
} else if ((cause.equals(TeleportCause.PLUGIN) || cause.equals(TeleportCause.UNKNOWN))
99-
&& Conf.BLOCK_UNSAFE_TELEPORTS.asBool()) { // Some plugins use PLUGIN or UNKNOWN as the cause.
167+
} else if (shouldBlockTeleport(cause)) {
100168
event.setCancelled(true);
101169
pvplayer.message(Lang.TELEPORT_BLOCKED_IN_COMBAT);
102170
}
103171
}
104172

173+
private boolean shouldBlockTeleport(final TeleportCause cause) {
174+
return cause.equals(TeleportCause.COMMAND) && Conf.BLOCK_TELEPORT.asBool() ||
175+
// Some plugins use PLUGIN or UNKNOWN as the cause.
176+
(cause.equals(TeleportCause.PLUGIN) || cause.equals(TeleportCause.UNKNOWN)) && Conf.BLOCK_UNSAFE_TELEPORTS.asBool();
177+
}
178+
105179
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
106180
public final void onCommand(final PlayerCommandPreprocessEvent event) {
107181
if (Conf.COMBAT_TAG_ENABLED.asBool() && Conf.BLOCK_COMMANDS.asBool() || Conf.NEWBIE_ENABLED.asBool()) {

pvpmanager/src/main/java/me/chancesd/pvpmanager/listener/PlayerListener.java

Lines changed: 2 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package me.chancesd.pvpmanager.listener;
22

33
import me.chancesd.sdutils.utils.Log;
4-
import me.chancesd.sdutils.utils.MCVersion;
54
import java.util.UUID;
65
import java.util.concurrent.TimeUnit;
76

8-
import java.util.Set;
9-
107
import org.bukkit.Bukkit;
118
import org.bukkit.Location;
129
import org.bukkit.Material;
@@ -27,14 +24,9 @@
2724
import org.bukkit.event.player.PlayerKickEvent;
2825
import org.bukkit.event.player.PlayerQuitEvent;
2926
import org.bukkit.event.player.PlayerRespawnEvent;
30-
import org.bukkit.inventory.ItemStack;
31-
import org.bukkit.inventory.meta.FireworkMeta;
32-
3327
import com.google.common.cache.Cache;
3428
import com.google.common.cache.CacheBuilder;
3529

36-
import me.chancesd.pvpmanager.integration.Hook;
37-
import me.chancesd.pvpmanager.integration.type.WorldGuardDependency;
3830
import me.chancesd.pvpmanager.manager.PlayerManager;
3931
import me.chancesd.pvpmanager.player.CombatPlayer;
4032
import me.chancesd.pvpmanager.player.ProtectionResult;
@@ -49,12 +41,10 @@
4941
public 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

Comments
 (0)