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.Listener;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class DeathListener implements Listener {
|
public class DeathListener implements Listener {
|
||||||
private final States states;
|
private final States states;
|
||||||
private final FileConfiguration config;
|
private final FileConfiguration config;
|
||||||
|
private final Logger logger;
|
||||||
|
|
||||||
public DeathListener(States states, Logger logger, FileConfiguration config) {
|
public DeathListener(States states, Logger logger, FileConfiguration config) {
|
||||||
this.states = states;
|
this.states = states;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
this.logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -32,29 +35,48 @@ public class DeathListener implements Listener {
|
||||||
Player killed = event.getEntity().getPlayer();
|
Player killed = event.getEntity().getPlayer();
|
||||||
Player killer = event.getEntity().getKiller();
|
Player killer = event.getEntity().getKiller();
|
||||||
|
|
||||||
|
AtomicBoolean isRevenge = new AtomicBoolean(false);
|
||||||
|
|
||||||
if (killed != null && killer != null && killer.getType().equals(EntityType.PLAYER)) {
|
if (killed != null && killer != null && killer.getType().equals(EntityType.PLAYER)) {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
|
states.killsHistory.forEach((kr, kd) -> {
|
||||||
PlayerPointsAPI pointsAPI = PlayerPoints.getInstance().getAPI();
|
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);
|
logger.info(String.format("Revenge : %s, Same kill: %s", isRevenge.get(), !states.killsHistory.getLastKill(killer.getUniqueId().toString()).equals(killed.getUniqueId().toString())));
|
||||||
pointsAPI.give(killer.getUniqueId(), killedWorth);
|
if (isRevenge.get() || !states.killsHistory.getLastKill(killer.getUniqueId().toString()).equals(killed.getUniqueId().toString())) {
|
||||||
killer.sendRichMessage(String.format("[SMP4] <gold>You got %s points from killing %s.</gold>", killedWorth, killed.getName()));
|
if (Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
|
||||||
states.worths.setPlayerWorth(killed, 0);
|
PlayerPointsAPI pointsAPI = PlayerPoints.getInstance().getAPI();
|
||||||
killed.sendRichMessage("[SMP4] <gold>Your worth got reset to 0.</gold>");
|
|
||||||
|
|
||||||
// Take money
|
int killedWorth = states.worths.getPlayerWorth(killed);
|
||||||
double money = pointsAPI.look(killed.getUniqueId());
|
pointsAPI.give(killer.getUniqueId(), killedWorth);
|
||||||
double newMoney = money * ((double) (100 - config.getInt("percentOfMoneyToTakeOnKills")) / 100);
|
killer.sendRichMessage(String.format("[SMP4] <gold>You got %s points from killing %s.</gold>", killedWorth, killed.getName()));
|
||||||
pointsAPI.set(killed.getUniqueId(), (int) newMoney);
|
states.worths.setPlayerWorth(killed, 0);
|
||||||
killed.sendRichMessage(String.format("[SMP4] <gold>You lost %s%% points from dying to %s.</gold>", money-newMoney, killer));
|
killed.sendRichMessage("[SMP4] <gold>Your worth got reset to 0.</gold>");
|
||||||
|
|
||||||
states.kdr.increasePlayerDeaths(killed);
|
// Take money
|
||||||
killed.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
double money = pointsAPI.look(killed.getUniqueId());
|
||||||
states.kdr.increasePlayerKills(killer);
|
double newMoney = money * ((double) (100 - config.getInt("percentOfMoneyToTakeOnKills")) / 100);
|
||||||
killer.sendRichMessage("[SMP4] <gold>Your kdr has been updated.</gold>");
|
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 UsernameCache usernameCache;
|
||||||
public KDR kdr;
|
public KDR kdr;
|
||||||
public Worths worths;
|
public Worths worths;
|
||||||
|
public KillsHistory killsHistory;
|
||||||
|
|
||||||
public States(JavaPlugin plugin, Logger logger) throws IOException {
|
public States(JavaPlugin plugin, Logger logger) throws IOException {
|
||||||
Path statesPath = StatesParser.getStatesPath(plugin);
|
Path statesPath = StatesParser.getStatesPath(plugin);
|
||||||
|
|
@ -20,6 +21,7 @@ public class States {
|
||||||
this.usernameCache = new UsernameCache();
|
this.usernameCache = new UsernameCache();
|
||||||
this.kdr = new KDR();
|
this.kdr = new KDR();
|
||||||
this.worths = new Worths();
|
this.worths = new Worths();
|
||||||
|
this.killsHistory = new KillsHistory();
|
||||||
|
|
||||||
logger.log(Level.INFO, "Saving empty states");
|
logger.log(Level.INFO, "Saving empty states");
|
||||||
StatesParser.save(statesPath, this);
|
StatesParser.save(statesPath, this);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue