Skip to content

Commit 0c76be2

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

6 files changed

Lines changed: 152 additions & 124 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/PlayerListener.java

Lines changed: 2 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import java.util.UUID;
66
import java.util.concurrent.TimeUnit;
77

8-
import java.util.Set;
9-
108
import org.bukkit.Bukkit;
119
import org.bukkit.Location;
1210
import org.bukkit.Material;
@@ -33,8 +31,6 @@
3331
import com.google.common.cache.Cache;
3432
import com.google.common.cache.CacheBuilder;
3533

36-
import me.chancesd.pvpmanager.integration.Hook;
37-
import me.chancesd.pvpmanager.integration.type.WorldGuardDependency;
3834
import me.chancesd.pvpmanager.manager.PlayerManager;
3935
import me.chancesd.pvpmanager.player.CombatPlayer;
4036
import me.chancesd.pvpmanager.player.ProtectionResult;
@@ -49,12 +45,10 @@
4945
public class PlayerListener implements Listener {
5046

5147
private final PlayerManager playerHandler;
52-
private final WorldGuardDependency wg;
5348
private final Cache<UUID, String> msgCooldown = CacheBuilder.newBuilder().weakValues().expireAfterWrite(800, TimeUnit.MILLISECONDS).build();
5449

5550
public PlayerListener(final PlayerManager ph) {
5651
this.playerHandler = ph;
57-
this.wg = (WorldGuardDependency) ph.getPlugin().getDependencyManager().getDependency(Hook.WORLDGUARD);
5852
}
5953

6054
@EventHandler(ignoreCancelled = true)
@@ -158,58 +152,9 @@ public final void onPlayerLogoutMonitor(final PlayerQuitEvent event) {
158152

159153
@EventHandler(priority = EventPriority.HIGH)
160154
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);
155+
if (CombatUtils.isWorldExcluded(event.getEntity().getWorld().getName()))
185156
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-
}
157+
playerHandler.getDeathHandler().processDeath(event);
213158
}
214159

215160
@EventHandler
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package me.chancesd.pvpmanager.manager;
2+
3+
import java.util.HashMap;
4+
import java.util.Set;
5+
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.event.entity.PlayerDeathEvent;
8+
import org.bukkit.inventory.ItemStack;
9+
10+
import me.chancesd.pvpmanager.integration.Hook;
11+
import me.chancesd.pvpmanager.integration.type.WorldGuardDependency;
12+
import me.chancesd.pvpmanager.player.CombatPlayer;
13+
import me.chancesd.pvpmanager.player.UntagReason;
14+
import me.chancesd.pvpmanager.setting.Conf;
15+
import me.chancesd.pvpmanager.setting.Lang;
16+
import me.chancesd.pvpmanager.setting.Permissions;
17+
import me.chancesd.pvpmanager.utils.CombatUtils;
18+
19+
public class DeathHandler {
20+
21+
private final PlayerManager playerManager;
22+
private final WorldGuardDependency wg;
23+
24+
public DeathHandler(final PlayerManager playerManager) {
25+
this.playerManager = playerManager;
26+
this.wg = (WorldGuardDependency) playerManager.getPlugin().getDependencyManager().getDependency(Hook.WORLDGUARD);
27+
}
28+
29+
public void processDeath(final PlayerDeathEvent event) {
30+
final Player player = event.getEntity();
31+
final CombatPlayer combatPlayer = playerManager.get(player);
32+
final Player killer = player.getKiller();
33+
34+
if (combatPlayer.isInCombat()) {
35+
if (killer != null && !killer.equals(player)) {
36+
final CombatPlayer pKiller = playerManager.get(killer);
37+
handlePvPDeath(player, combatPlayer, killer, pKiller, event);
38+
}
39+
40+
final Set<CombatPlayer> enemies = combatPlayer.getEnemies();
41+
if (Conf.UNTAG_ON_KILL.asBool()) {
42+
enemies.forEach(enemy -> enemy.removeEnemy(combatPlayer));
43+
}
44+
combatPlayer.untag(UntagReason.DEATH);
45+
}
46+
47+
// Let's process player's inventory/exp according to config file
48+
if (combatPlayer.hasPvPLogged()) {
49+
handleCombatLogDrops(event, player);
50+
return;
51+
}
52+
53+
handlePlayerDrops(event, player, killer);
54+
}
55+
56+
private void handlePvPDeath(final Player player, final CombatPlayer pvPlayer, final Player killer, final CombatPlayer pKiller,
57+
final PlayerDeathEvent event) {
58+
if (Conf.KILL_ABUSE_ENABLED.asBool() && !pKiller.hasPerm(Permissions.EXEMPT_KILL_ABUSE)) {
59+
pKiller.addVictim(player);
60+
}
61+
if (wg == null || !wg.containsRegionsAt(killer.getLocation(), Conf.KILLS_WG_EXCLUSIONS.asSet())) {
62+
if (Conf.MONEY_REWARD.asDouble() > 0) {
63+
pKiller.giveReward(pvPlayer);
64+
}
65+
if (Conf.MONEY_PENALTY.asDouble() > 0) {
66+
pvPlayer.applyPenalty();
67+
}
68+
if (pKiller.canExecuteKillCommand()) {
69+
CombatUtils.executeCommands(Conf.COMMANDS_ON_KILL.asList(), killer, killer.getName(), player.getName());
70+
}
71+
pvPlayer.setLastDeathWasPvP(true);
72+
if (Conf.EXP_STEAL.asDouble() > 0) {
73+
final int expWon = pKiller.giveExp(pvPlayer);
74+
event.setDroppedExp(0);
75+
event.setNewExp(player.getTotalExperience() - expWon);
76+
pvPlayer.message(Lang.EXP_STOLEN.msg(pKiller.getName(), expWon));
77+
}
78+
}
79+
}
80+
81+
public void handleCombatLogDrops(final PlayerDeathEvent event, final Player player) {
82+
if (!Conf.DROP_EXP.asBool()) {
83+
keepExp(event);
84+
}
85+
if (!Conf.DROP_INVENTORY.asBool() && Conf.DROP_ARMOR.asBool()) {
86+
CombatUtils.fakeItemStackDrop(player, player.getInventory().getArmorContents());
87+
player.getInventory().setArmorContents(null);
88+
} else if (Conf.DROP_INVENTORY.asBool() && !Conf.DROP_ARMOR.asBool()) {
89+
CombatUtils.fakeItemStackDrop(player, player.getInventory().getContents());
90+
player.getInventory().clear();
91+
}
92+
if (!Conf.DROP_INVENTORY.asBool() || !Conf.DROP_ARMOR.asBool()) {
93+
keepInv(event);
94+
}
95+
}
96+
97+
public void handlePlayerDrops(final PlayerDeathEvent event, final Player player, final Player killer) {
98+
if (player.equals(killer))
99+
return;
100+
switch (Conf.PLAYER_DROP_MODE.asEnum(Conf.DropMode.class)) {
101+
case DROP:
102+
if (killer == null) {
103+
keepInv(event);
104+
keepExp(event);
105+
}
106+
break;
107+
case KEEP:
108+
if (killer != null) {
109+
keepInv(event);
110+
keepExp(event);
111+
}
112+
break;
113+
case TRANSFER:
114+
if (killer != null) {
115+
final ItemStack[] drops = event.getDrops().toArray(new ItemStack[event.getDrops().size()]);
116+
final HashMap<Integer, ItemStack> returned = killer.getInventory().addItem(drops);
117+
CombatUtils.fakeItemStackDrop(player, returned.values().toArray(new ItemStack[returned.values().size()]));
118+
event.getDrops().clear();
119+
}
120+
break;
121+
case CLEAR:
122+
event.getDrops().clear();
123+
event.setDroppedExp(0);
124+
break;
125+
default:
126+
break;
127+
}
128+
}
129+
130+
private void keepInv(final PlayerDeathEvent event) {
131+
event.setKeepInventory(true);
132+
event.getDrops().clear();
133+
}
134+
135+
private void keepExp(final PlayerDeathEvent event) {
136+
event.setKeepLevel(true);
137+
event.setDroppedExp(0);
138+
}
139+
140+
}

pvpmanager/src/main/java/me/chancesd/pvpmanager/manager/PlayerManager.java

Lines changed: 6 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.chancesd.pvpmanager.manager;
22

3-
import java.util.HashMap;
43
import java.util.HashSet;
54
import java.util.Map;
65
import java.util.Set;
@@ -13,8 +12,6 @@
1312
import org.bukkit.damage.DamageSource;
1413
import org.bukkit.damage.DamageType;
1514
import org.bukkit.entity.Player;
16-
import org.bukkit.event.entity.PlayerDeathEvent;
17-
import org.bukkit.inventory.ItemStack;
1815
import org.bukkit.scoreboard.Objective;
1916
import org.bukkit.scoreboard.Scoreboard;
2017
import org.bukkit.scoreboard.ScoreboardManager;
@@ -42,7 +39,7 @@ public class PlayerManager {
4239
private final Map<UUID, CombatPlayer> players = new ConcurrentHashMap<>();
4340
private final ConfigManager configManager;
4441
private final DependencyManager dependencyManager;
45-
@NotNull
42+
private final DeathHandler deathHandler;
4643
private final PvPManager plugin;
4744
private final TagTask tagTask;
4845
private boolean globalStatus = true;
@@ -51,6 +48,7 @@ public PlayerManager(@NotNull final PvPManager plugin) {
5148
this.plugin = plugin;
5249
this.configManager = plugin.getConfigM();
5350
this.dependencyManager = plugin.getDependencyManager();
51+
this.deathHandler = new DeathHandler(this);
5452
this.tagTask = new TagTask(plugin.getDisplayManager());
5553
Bukkit.getPluginManager().registerEvents(tagTask, plugin);
5654

@@ -216,65 +214,6 @@ public final void applyPunishments(final CombatPlayer player) {
216214
}
217215
}
218216

219-
public void handleCombatLogDrops(final PlayerDeathEvent event, final Player player) {
220-
if (!Conf.DROP_EXP.asBool()) {
221-
keepExp(event);
222-
}
223-
if (!Conf.DROP_INVENTORY.asBool() && Conf.DROP_ARMOR.asBool()) {
224-
CombatUtils.fakeItemStackDrop(player, player.getInventory().getArmorContents());
225-
player.getInventory().setArmorContents(null);
226-
} else if (Conf.DROP_INVENTORY.asBool() && !Conf.DROP_ARMOR.asBool()) {
227-
CombatUtils.fakeItemStackDrop(player, player.getInventory().getContents());
228-
player.getInventory().clear();
229-
}
230-
if (!Conf.DROP_INVENTORY.asBool() || !Conf.DROP_ARMOR.asBool()) {
231-
keepInv(event);
232-
}
233-
}
234-
235-
public void handlePlayerDrops(final PlayerDeathEvent event, final Player player, final Player killer) {
236-
if (player.equals(killer))
237-
return;
238-
switch (Conf.PLAYER_DROP_MODE.asEnum(Conf.DropMode.class)) {
239-
case DROP:
240-
if (killer == null) {
241-
keepInv(event);
242-
keepExp(event);
243-
}
244-
break;
245-
case KEEP:
246-
if (killer != null) {
247-
keepInv(event);
248-
keepExp(event);
249-
}
250-
break;
251-
case TRANSFER:
252-
if (killer != null) {
253-
final ItemStack[] drops = event.getDrops().toArray(new ItemStack[event.getDrops().size()]);
254-
final HashMap<Integer, ItemStack> returned = killer.getInventory().addItem(drops);
255-
CombatUtils.fakeItemStackDrop(player, returned.values().toArray(new ItemStack[returned.values().size()]));
256-
event.getDrops().clear();
257-
}
258-
break;
259-
case CLEAR:
260-
event.getDrops().clear();
261-
event.setDroppedExp(0);
262-
break;
263-
default:
264-
break;
265-
}
266-
}
267-
268-
private void keepInv(final PlayerDeathEvent event) {
269-
event.setKeepInventory(true);
270-
event.getDrops().clear();
271-
}
272-
273-
private void keepExp(final PlayerDeathEvent event) {
274-
event.setKeepLevel(true);
275-
event.setDroppedExp(0);
276-
}
277-
278217
private void addOnlinePlayers() {
279218
final ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();
280219
if (scoreboardManager != null) {
@@ -343,4 +282,8 @@ public ConfigManager getConfigManager() {
343282
return configManager;
344283
}
345284

285+
public DeathHandler getDeathHandler() {
286+
return deathHandler;
287+
}
288+
346289
}

pvpmanager/src/main/java/me/chancesd/pvpmanager/utils/CombatUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public static final boolean isPvP(final EntityDamageByEntityEvent event) {
155155
}
156156

157157
private static boolean isValidPvPAttack(final Entity attacker, final Entity defender) {
158-
return Conf.SELF_TAG.asBool() || !attacker.equals(defender);
158+
return Conf.SELF_TAG.asBool() || !defender.equals(attacker);
159159
}
160160

161161
private static boolean shouldCountDamage(final EntityDamageByEntityEvent event) {

0 commit comments

Comments
 (0)