feat: prevent killing in loop the same player getting rewarded
This commit is contained in:
parent
034cb40967
commit
ca1c6f05c7
3 changed files with 84 additions and 17 deletions
|
|
@ -13,15 +13,18 @@ import org.bukkit.event.EventPriority;
|
|||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class DeathListener implements Listener {
|
||||
private final States states;
|
||||
private final FileConfiguration config;
|
||||
private final Logger logger;
|
||||
|
||||
public DeathListener(States states, Logger logger, FileConfiguration config) {
|
||||
this.states = states;
|
||||
this.config = config;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -32,29 +35,48 @@ public class DeathListener implements Listener {
|
|||
Player killed = event.getEntity().getPlayer();
|
||||
Player killer = event.getEntity().getKiller();
|
||||
|
||||
AtomicBoolean isRevenge = new AtomicBoolean(false);
|
||||
|
||||
if (killed != null && killer != null && killer.getType().equals(EntityType.PLAYER)) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
|
||||
PlayerPointsAPI pointsAPI = PlayerPoints.getInstance().getAPI();
|
||||
states.killsHistory.forEach((kr, kd) -> {
|
||||
if(killed.getUniqueId().toString().equals(kr) && killer.getUniqueId().toString().equals(kd)) {
|
||||
isRevenge.set(true);
|
||||
states.killsHistory.updateLastKill(kr, "");
|
||||
//killer.sendMessage(kr, kd, states.killsHistory.getLastKill(killer), killed.getUniqueId().toString());
|
||||
}
|
||||
});
|
||||
|
||||
int killedWorth = states.worths.getPlayerWorth(killed);
|
||||
pointsAPI.give(killer.getUniqueId(), killedWorth);
|
||||
killer.sendRichMessage(String.format("[SMP4] <gold>You got %s points from killing %s.</gold>", killedWorth, killed.getName()));
|
||||
states.worths.setPlayerWorth(killed, 0);
|
||||
killed.sendRichMessage("[SMP4] <gold>Your worth got reset to 0.</gold>");
|
||||
logger.info(String.format("Revenge : %s, Same kill: %s", isRevenge.get(), !states.killsHistory.getLastKill(killer.getUniqueId().toString()).equals(killed.getUniqueId().toString())));
|
||||
if (isRevenge.get() || !states.killsHistory.getLastKill(killer.getUniqueId().toString()).equals(killed.getUniqueId().toString())) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
|
||||
PlayerPointsAPI pointsAPI = PlayerPoints.getInstance().getAPI();
|
||||
|
||||
// Take money
|
||||
double money = pointsAPI.look(killed.getUniqueId());
|
||||
double newMoney = money * ((double) (100 - config.getInt("percentOfMoneyToTakeOnKills")) / 100);
|
||||
pointsAPI.set(killed.getUniqueId(), (int) newMoney);
|
||||
killed.sendRichMessage(String.format("[SMP4] <gold>You lost %s%% points from dying to %s.</gold>", money-newMoney, killer));
|
||||
int killedWorth = states.worths.getPlayerWorth(killed);
|
||||
pointsAPI.give(killer.getUniqueId(), killedWorth);
|
||||
killer.sendRichMessage(String.format("[SMP4] <gold>You got %s points from killing %s.</gold>", killedWorth, killed.getName()));
|
||||
states.worths.setPlayerWorth(killed, 0);
|
||||
killed.sendRichMessage("[SMP4] <gold>Your worth got reset to 0.</gold>");
|
||||
|
||||
states.kdr.increasePlayerDeaths(killed);
|
||||
killed.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
||||
states.kdr.increasePlayerKills(killer);
|
||||
killer.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
||||
// Take money
|
||||
double money = pointsAPI.look(killed.getUniqueId());
|
||||
double newMoney = money * ((double) (100 - config.getInt("percentOfMoneyToTakeOnKills")) / 100);
|
||||
pointsAPI.set(killed.getUniqueId(), (int) newMoney);
|
||||
killed.sendRichMessage(String.format("[SMP4] <gold>You lost %s%% points from dying to %s.</gold>", money - newMoney, killer));
|
||||
|
||||
Utilities.setScore(killed, 0);
|
||||
states.kdr.increasePlayerDeaths(killed);
|
||||
killed.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
||||
states.kdr.increasePlayerKills(killer);
|
||||
killer.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
||||
|
||||
Utilities.setScore(killed, 0);
|
||||
}
|
||||
} else {
|
||||
killer.sendRichMessage("[SMP4] <gold>You've killed this player too recently.</gold>");
|
||||
}
|
||||
|
||||
states.killsHistory.updateLastKill(killer.getUniqueId().toString(), killed.getUniqueId().toString());
|
||||
|
||||
this.logger.info(states.killsHistory.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
43
src/main/java/dev/hrz0/smp4/States/KillsHistory.java
Normal file
43
src/main/java/dev/hrz0/smp4/States/KillsHistory.java
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package dev.hrz0.smp4.States;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashMap;
|
||||
|
||||
//public class KillsHistory extends HashMap<String, ArrayDeque<String>> {
|
||||
// public ArrayDeque<String> getLastKills(Player killer) {
|
||||
// if (containsKey(killer.getUniqueId().toString())) {
|
||||
// return get(killer.getUniqueId().toString());
|
||||
// } else {
|
||||
// ArrayDeque<String> empty = new ArrayDeque<>();
|
||||
// put(killer.getUniqueId().toString(), empty);
|
||||
// return empty;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public void pushKill(Player killer, Player killed) {
|
||||
// ArrayDeque<String> killsHistory = getLastKills(killer);
|
||||
// if (killsHistory.size() == 2) {
|
||||
// killsHistory.removeLast();
|
||||
// }
|
||||
// killsHistory.addFirst(killed.getUniqueId().toString());
|
||||
// put(killer.getUniqueId().toString(), killsHistory);
|
||||
// System.out.printf(killsHistory.toString());
|
||||
// }
|
||||
//}
|
||||
|
||||
public class KillsHistory extends HashMap<String, String> {
|
||||
public String getLastKill(String killer) {
|
||||
if (containsKey(killer)) {
|
||||
return get(killer);
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public void updateLastKill(String killer, String killed) {
|
||||
put(killer, killed);
|
||||
System.out.printf(getLastKill(killer));
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ public class States {
|
|||
public UsernameCache usernameCache;
|
||||
public KDR kdr;
|
||||
public Worths worths;
|
||||
public KillsHistory killsHistory;
|
||||
|
||||
public States(JavaPlugin plugin, Logger logger) throws IOException {
|
||||
Path statesPath = StatesParser.getStatesPath(plugin);
|
||||
|
|
@ -20,6 +21,7 @@ public class States {
|
|||
this.usernameCache = new UsernameCache();
|
||||
this.kdr = new KDR();
|
||||
this.worths = new Worths();
|
||||
this.killsHistory = new KillsHistory();
|
||||
|
||||
logger.log(Level.INFO, "Saving empty states");
|
||||
StatesParser.save(statesPath, this);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue