Added PVP Scoreboard displays, fleshed out more PVP bugs. Added
experimental anti-lag block breaking code in hopes of making Efficiency X tools much better to use.
This commit is contained in:
parent
245b3f5e07
commit
8570e2706f
Binary file not shown.
@ -790,7 +790,7 @@ public class CustomDamage {
|
|||||||
damage=0;
|
damage=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (damage>0 && GenericFunctions.AttemptRevive(p, damage, reason)) {
|
if (damage>0 && GenericFunctions.AttemptRevive(p, damager, damage, reason)) {
|
||||||
damage=0;
|
damage=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2282,7 +2282,7 @@ public class CustomDamage {
|
|||||||
target.setLastDamage(0);
|
target.setLastDamage(0);
|
||||||
target.setNoDamageTicks(0);
|
target.setNoDamageTicks(0);
|
||||||
target.setMaximumNoDamageTicks(0);
|
target.setMaximumNoDamageTicks(0);
|
||||||
if (damager instanceof Player && target instanceof Player) { //PvP Checks
|
if (shooter instanceof Player && target instanceof Player) { //PvP Checks
|
||||||
//!((Player)target).isOnline()
|
//!((Player)target).isOnline()
|
||||||
//!damager.getWorld().getPVP()
|
//!damager.getWorld().getPVP()
|
||||||
Player attacker = (Player)damager;
|
Player attacker = (Player)damager;
|
||||||
@ -2303,10 +2303,14 @@ public class CustomDamage {
|
|||||||
PVP.sendPvPRequest(attacker,defender);
|
PVP.sendPvPRequest(attacker,defender);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true; //Cancel all PvP related events.
|
return true; //Cancel all PvP related events.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (shooter instanceof Player && !(target instanceof Player)) {
|
||||||
|
if (PVP.isPvPing((Player)shooter)) {
|
||||||
|
return true; //Can't hit non-PVP targets while PVP'ing.
|
||||||
|
}
|
||||||
|
}
|
||||||
if (target instanceof Player && (((Player)target).getGameMode()==GameMode.SPECTATOR || ((Player)target).getGameMode()==GameMode.CREATIVE)) {
|
if (target instanceof Player && (((Player)target).getGameMode()==GameMode.SPECTATOR || ((Player)target).getGameMode()==GameMode.CREATIVE)) {
|
||||||
return true; //Cancel any damage events in Spectator mode or Creative Mode.
|
return true; //Cancel any damage events in Spectator mode or Creative Mode.
|
||||||
}
|
}
|
||||||
|
@ -3680,7 +3680,7 @@ public class GenericFunctions {
|
|||||||
return orb;
|
return orb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean AttemptRevive(Player p, double dmg, String reason) {
|
public static boolean AttemptRevive(Player p, Entity damager, double dmg, String reason) {
|
||||||
boolean revived=false;
|
boolean revived=false;
|
||||||
boolean fromRoom=false;
|
boolean fromRoom=false;
|
||||||
if (p.getHealth()<=dmg) {
|
if (p.getHealth()<=dmg) {
|
||||||
@ -3691,18 +3691,35 @@ public class GenericFunctions {
|
|||||||
pd.lasthitdesc=reason;
|
pd.lasthitdesc=reason;
|
||||||
pd.slayermodehp = p.getMaxHealth();
|
pd.slayermodehp = p.getMaxHealth();
|
||||||
|
|
||||||
|
if (damager!=null) {
|
||||||
|
LivingEntity shooter = CustomDamage.getDamagerEntity(damager);
|
||||||
|
if (shooter instanceof Player) {
|
||||||
|
Player pl = (Player)shooter;
|
||||||
|
pd.lastplayerHitBy = pl.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ItemStack[] equips = p.getEquipment().getArmorContents();
|
ItemStack[] equips = p.getEquipment().getArmorContents();
|
||||||
|
|
||||||
|
if (!revived) {
|
||||||
|
if (PVP.isPvPing(p)) {
|
||||||
|
revived=true;
|
||||||
|
RevivePlayer(p, p.getMaxHealth());
|
||||||
|
PVP session = PVP.getMatch(p);
|
||||||
|
session.onDeathEvent(p);
|
||||||
|
return true; //Intentionally prevent other revive effects from working.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!revived) {
|
if (!revived) {
|
||||||
for (Room r : TwosideKeeper.roominstances) {
|
for (Room r : TwosideKeeper.roominstances) {
|
||||||
if (r.onPlayerDeath(p)) {
|
if (r.onPlayerDeath(p)) {
|
||||||
revived=true;
|
revived=true;
|
||||||
fromRoom=true;
|
fromRoom=true;
|
||||||
RevivePlayer(p, p.getMaxHealth());
|
RevivePlayer(p, p.getMaxHealth());
|
||||||
return true; //Intentionally prevent other revive effects from working.
|
return true; //Intentionally prevent other revive effects from working.
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!revived) {
|
if (!revived) {
|
||||||
@ -4926,7 +4943,7 @@ public class GenericFunctions {
|
|||||||
ItemSet.meetsSlayerSwordConditions(ItemSet.STEALTH, 9, 1, p)) {
|
ItemSet.meetsSlayerSwordConditions(ItemSet.STEALTH, 9, 1, p)) {
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (!aPlugin.API.isAFK(p)) {
|
if (!aPluginAPIWrapper.isAFK(p)) {
|
||||||
ItemStack[] inv = p.getInventory().getContents();
|
ItemStack[] inv = p.getInventory().getContents();
|
||||||
for (int i=0;i<9;i++) {
|
for (int i=0;i<9;i++) {
|
||||||
if (inv[i]!=null &&
|
if (inv[i]!=null &&
|
||||||
|
@ -762,7 +762,7 @@ public class Christmas {
|
|||||||
Block b = p.getWorld().getHighestBlockAt(p.getLocation().getBlockX()+blockx, p.getLocation().getBlockZ()+blockz);
|
Block b = p.getWorld().getHighestBlockAt(p.getLocation().getBlockX()+blockx, p.getLocation().getBlockZ()+blockz);
|
||||||
Block bbelow = b.getRelative(0, -1, 0);
|
Block bbelow = b.getRelative(0, -1, 0);
|
||||||
if (p.isOnGround()) {
|
if (p.isOnGround()) {
|
||||||
if (!aPlugin.API.isAFK(p)) {
|
if (!aPluginAPIWrapper.isAFK(p)) {
|
||||||
AddRocketBoosterCharges(p);
|
AddRocketBoosterCharges(p);
|
||||||
}
|
}
|
||||||
if (pd.falldamageimmunity && pd.lastusedrocketbooster+20<TwosideKeeper.getServerTickTime()) {
|
if (pd.falldamageimmunity && pd.lastusedrocketbooster+20<TwosideKeeper.getServerTickTime()) {
|
||||||
|
@ -223,7 +223,7 @@ public class MonsterController {
|
|||||||
double dist = 999999999;
|
double dist = 999999999;
|
||||||
int nearbyplayers=0;
|
int nearbyplayers=0;
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
if (ent.getWorld().equals(p.getWorld()) && !aPlugin.API.isAFK(p)) {
|
if (ent.getWorld().equals(p.getWorld()) && !aPluginAPIWrapper.isAFK(p)) {
|
||||||
double temp = ent.getLocation().distanceSquared(p.getLocation());
|
double temp = ent.getLocation().distanceSquared(p.getLocation());
|
||||||
if (Math.abs(ent.getLocation().getY()-p.getLocation().getY())<=30) {
|
if (Math.abs(ent.getLocation().getY()-p.getLocation().getY())<=30) {
|
||||||
if (temp<4096) {nearbyplayers++;}
|
if (temp<4096) {nearbyplayers++;}
|
||||||
|
@ -7,6 +7,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ public class PVP {
|
|||||||
int team1score=0;
|
int team1score=0;
|
||||||
int team2score=0;
|
int team2score=0;
|
||||||
long timelimit;
|
long timelimit;
|
||||||
|
long nextRoundTime=0;
|
||||||
boolean scorematch = false; //If true, uses score limit. If false uses timer.
|
boolean scorematch = false; //If true, uses score limit. If false uses timer.
|
||||||
|
|
||||||
//NEUTRAL team
|
//NEUTRAL team
|
||||||
@ -250,37 +252,242 @@ public class PVP {
|
|||||||
case FIGHTING:{
|
case FIGHTING:{
|
||||||
removeInactivePlayers();
|
removeInactivePlayers();
|
||||||
if (conditionsToWin() || notEnoughPlayers()) {
|
if (conditionsToWin() || notEnoughPlayers()) {
|
||||||
|
StringBuilder sb = PrepareCurrentScores();
|
||||||
|
Bukkit.getServer().broadcastMessage(sb.toString());
|
||||||
|
aPlugin.API.discordSendRaw("```"+sb.toString()+"```");
|
||||||
computeWinner();
|
computeWinner();
|
||||||
announceWinner();
|
announceWinner();
|
||||||
|
resetTeams();
|
||||||
return false;
|
return false;
|
||||||
|
} else {
|
||||||
|
setupNextRound();
|
||||||
|
state = CHOICEENGINE.FINISHED;
|
||||||
|
nextRoundTime = TwosideKeeper.getServerTickTime()+120;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case FINISHED:{
|
||||||
|
if (nextRoundTime<TwosideKeeper.getServerTickTime()) {
|
||||||
|
state=CHOICEENGINE.FIGHTING;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupNextRound() {
|
||||||
|
boolean deadTeam=false;
|
||||||
|
if (scorematch) {
|
||||||
|
if (players.size()>2) {
|
||||||
|
if (AllPlayersOnTeamDead(1)) {
|
||||||
|
team2score++;
|
||||||
|
deadTeam=true;
|
||||||
|
} else
|
||||||
|
if (AllPlayersOnTeamDead(2)){
|
||||||
|
team1score++;
|
||||||
|
deadTeam=true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
if (!pp.isAlive) {
|
||||||
|
deadTeam=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (deadTeam) {
|
||||||
|
StringBuilder sb = PrepareCurrentScores();
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
Player p = Bukkit.getPlayer(s);
|
||||||
|
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||||
|
p.setHealth(p.getMaxHealth());
|
||||||
|
p.sendMessage(sb.toString());
|
||||||
|
pd.customtitle.modifySmallCenterTitle(ChatColor.GREEN+"Next match starting...", 100);
|
||||||
|
for (int i=0;i<5;i++) {
|
||||||
|
final int counter = i;
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
if (p!=null && p.isOnline()) {
|
||||||
|
pd.customtitle.modifyLargeCenterTitle(ChatColor.GREEN+Integer.toString(5-counter), 20);
|
||||||
|
pd.customtitle.update();
|
||||||
|
}
|
||||||
|
}, 20*i);
|
||||||
|
}
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
if (p!=null && p.isOnline()) {
|
||||||
|
pp.isAlive=true;
|
||||||
|
p.setGameMode(GameMode.SURVIVAL);
|
||||||
|
Location myLoc = p.getLocation().clone();
|
||||||
|
//myLoc.setY(p.getLocation().getChunk().getChunkSnapshot().getHighestBlockYAt(Math.floorMod(p.getLocation().getBlockX(),16), Math.floorMod(p.getLocation().getBlockZ(),16)));
|
||||||
|
p.teleport(pp.startingLoc);
|
||||||
|
}
|
||||||
|
}, 120);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private StringBuilder PrepareCurrentScores() {
|
||||||
|
StringBuilder sb = new StringBuilder("\n\n");
|
||||||
|
sb.append("------- PVP Match -------\n");
|
||||||
|
if ((scorematch && players.size()==2) || (!scorematch)) {
|
||||||
|
DisplaySortedScoreboard(sb);
|
||||||
|
} else {
|
||||||
|
DisplayTeamScoreboard(sb);
|
||||||
|
}
|
||||||
|
sb.append("----- ");
|
||||||
|
sb.append(style.getTitle());
|
||||||
|
sb.append(" -----");
|
||||||
|
return sb;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisplayTeamScoreboard(StringBuilder sb) {
|
||||||
|
List<Score> sortedscores = new ArrayList<Score>();
|
||||||
|
if (team1score>team2score) {
|
||||||
|
sortedscores.add(new Score(ChatColor.BLUE+"Team 1",team1score));
|
||||||
|
sortedscores.add(new Score(ChatColor.RED+"Team 2",team2score));
|
||||||
|
} else {
|
||||||
|
sortedscores.add(new Score(ChatColor.RED+"Team 2",team2score));
|
||||||
|
sortedscores.add(new Score(ChatColor.BLUE+"Team 1",team1score));
|
||||||
|
}
|
||||||
|
boolean alttext=false;
|
||||||
|
for (Score s : sortedscores) {
|
||||||
|
sb.append((alttext)?ChatColor.GRAY:ChatColor.WHITE);
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append(s.name);
|
||||||
|
sb.append(" ");
|
||||||
|
for (int i=0;i<Math.max(16-s.name.length(), 1);i++) {
|
||||||
|
sb.append(".");
|
||||||
|
}
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append(s.score);
|
||||||
|
sb.append(" \n");
|
||||||
|
alttext=!alttext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisplaySortedScoreboard(StringBuilder sb) {
|
||||||
|
List<Score> scorelist= new ArrayList<Score>();
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
scorelist.add(new Score(s,pp.score));
|
||||||
|
}
|
||||||
|
List<Score> sortedscores = new ArrayList<Score>();
|
||||||
|
while (scorelist.size()>0) {
|
||||||
|
boolean found=false;
|
||||||
|
for (int i=0;i<sortedscores.size();i++) {
|
||||||
|
if (scorelist.get(0).score>sortedscores.get(i).score) {
|
||||||
|
sortedscores.add(i,scorelist.remove(0));
|
||||||
|
found=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
sortedscores.add(scorelist.remove(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
boolean alttext=false;
|
||||||
|
for (Score s : sortedscores) {
|
||||||
|
sb.append((alttext)?ChatColor.GRAY:ChatColor.WHITE);
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append(s.name);
|
||||||
|
sb.append(" ");
|
||||||
|
for (int i=0;i<Math.max(16-s.name.length(), 1);i++) {
|
||||||
|
sb.append(".");
|
||||||
|
}
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append(s.score);
|
||||||
|
sb.append(" \n");
|
||||||
|
alttext=!alttext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean AllPlayersOnTeamDead(int teamnumb) {
|
||||||
|
List<String> members = getPlayersInTeam(teamnumb);
|
||||||
|
for (String s : members) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
if (pp.isAlive) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetTeams() {
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVP.setTeam("NEUTRAL", s);
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
if (Bukkit.getPlayer(s)!=null && Bukkit.getPlayer(s).isOnline()) {
|
||||||
|
Bukkit.getPlayer(s).setGameMode(GameMode.SURVIVAL);
|
||||||
|
}
|
||||||
|
}, 5);
|
||||||
|
}
|
||||||
|
for (String s : losers) {
|
||||||
|
PVP.setTeam("NEUTRAL", s);
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
if (Bukkit.getPlayer(s)!=null && Bukkit.getPlayer(s).isOnline()) {
|
||||||
|
Bukkit.getPlayer(s).setGameMode(GameMode.SURVIVAL);
|
||||||
|
}
|
||||||
|
}, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void computeWinner() {
|
private void computeWinner() {
|
||||||
if (scorematch) {
|
if (scorematch) {
|
||||||
if (team1score>team2score) {
|
if (team1score>team2score) {
|
||||||
for (String s : getPlayersInTeam(2)) {
|
for (String s : getPlayersInTeam(2)) {
|
||||||
|
losers.add(s);
|
||||||
|
players.remove(s);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
for (String s : getPlayersInTeam(1)) {
|
||||||
|
losers.add(s);
|
||||||
|
players.remove(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int highestscore = Integer.MIN_VALUE;
|
||||||
|
String highestscoreplayer = "";
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
if (pp.score>highestscore) {
|
||||||
|
highestscoreplayer = s;
|
||||||
|
highestscore = pp.score;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<String> removals = new ArrayList<String>();
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
if (!s.equalsIgnoreCase(highestscoreplayer)) {
|
||||||
|
removals.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String s : removals) {
|
||||||
|
players.remove(s);
|
||||||
|
losers.add(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean conditionsToWin() {
|
private boolean conditionsToWin() {
|
||||||
if (scorematch) {
|
if (scorematch) {
|
||||||
return (team1score>=scorelimit || team2score>=scorelimit);
|
return (team1score>=scorelimit || team2score>=scorelimit) || (players.size()==2 && PlayerHasReachedScoreLimit());
|
||||||
} else {
|
} else {
|
||||||
return TwosideKeeper.getServerTickTime()>=timelimit;
|
return TwosideKeeper.getServerTickTime()>=timelimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean PlayerHasReachedScoreLimit() {
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
if (pp.score>=scorelimit) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void announceWinner() {
|
private void announceWinner() {
|
||||||
String firstPlayer = null;
|
String firstPlayer = null;
|
||||||
|
determineWinnerByEliminatingLosers();
|
||||||
for (String s : players.keySet()) {
|
for (String s : players.keySet()) {
|
||||||
firstPlayer = s;
|
firstPlayer = s;
|
||||||
break;
|
break;
|
||||||
@ -304,6 +511,42 @@ public class PVP {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void determineWinnerByEliminatingLosers() {
|
||||||
|
if (players.size()==2) {
|
||||||
|
String higherscoreplayer = "";
|
||||||
|
int higherscore = Integer.MIN_VALUE;
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
PVPPlayer pp = players.get(s);
|
||||||
|
if (pp.score>higherscore) {
|
||||||
|
higherscoreplayer = s;
|
||||||
|
higherscore = pp.score;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<String> removals = new ArrayList<String>();
|
||||||
|
for (String s : players.keySet()) {
|
||||||
|
if (!s.equalsIgnoreCase(higherscoreplayer)) {
|
||||||
|
losers.add(s);
|
||||||
|
removals.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String s : removals) {
|
||||||
|
players.remove(s);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (team1score>team2score) {
|
||||||
|
for (String s : getPlayersInTeam(2)) {
|
||||||
|
losers.add(s);
|
||||||
|
players.remove(s);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (String s : getPlayersInTeam(1)) {
|
||||||
|
losers.add(s);
|
||||||
|
players.remove(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void removeInactivePlayers() {
|
private void removeInactivePlayers() {
|
||||||
String removedPlayer = null;
|
String removedPlayer = null;
|
||||||
for (String s : players.keySet()) {
|
for (String s : players.keySet()) {
|
||||||
@ -385,9 +628,9 @@ public class PVP {
|
|||||||
}
|
}
|
||||||
pp.lastLoc = Bukkit.getPlayer(s).getLocation().clone();
|
pp.lastLoc = Bukkit.getPlayer(s).getLocation().clone();
|
||||||
Bukkit.getPlayer(s).sendMessage(ChatColor.GREEN+"The PVP Match between "+getParticipants()+" has begun!");
|
Bukkit.getPlayer(s).sendMessage(ChatColor.GREEN+"The PVP Match between "+getParticipants()+" has begun!");
|
||||||
aPlugin.API.discordSendRawItalicized("The PVP Match between **"+getParticipants()+"** has begun!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
aPlugin.API.discordSendRawItalicized("The PVP Match between **"+getParticipants()+"** has begun!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DisplayStageChoices() {
|
private void DisplayStageChoices() {
|
||||||
@ -639,6 +882,10 @@ public class PVP {
|
|||||||
teams.put(p.getName(), teamName);
|
teams.put(p.getName(), teamName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setTeam(String teamName, String s) {
|
||||||
|
teams.put(s, teamName);
|
||||||
|
}
|
||||||
|
|
||||||
public static void setOnSameTeam(Player p, Player...allies) {
|
public static void setOnSameTeam(Player p, Player...allies) {
|
||||||
addPlayerToTeamStructure(p);
|
addPlayerToTeamStructure(p);
|
||||||
String myTeam = getTeam(p);
|
String myTeam = getTeam(p);
|
||||||
@ -670,6 +917,30 @@ public class PVP {
|
|||||||
base.addExtra(tc2);
|
base.addExtra(tc2);
|
||||||
defender.spigot().sendMessage(base);
|
defender.spigot().sendMessage(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onDeathEvent(Player p) {
|
||||||
|
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||||
|
if (pd.lastplayerHitBy!=null &&
|
||||||
|
players.containsKey(pd.lastplayerHitBy)) {
|
||||||
|
String killedByPlayer = pd.lastplayerHitBy;
|
||||||
|
PVPPlayer killer = players.get(killedByPlayer);
|
||||||
|
killer.score++;
|
||||||
|
PVPPlayer myself = players.get(p.getName());
|
||||||
|
if (!scorematch) {
|
||||||
|
myself.score--;
|
||||||
|
}
|
||||||
|
myself.isAlive=false;
|
||||||
|
p.setGameMode(GameMode.SPECTATOR);
|
||||||
|
p.setSpectatorTarget(Bukkit.getPlayer(killedByPlayer));
|
||||||
|
p.sendMessage(" Killed by "+ChatColor.RED+killedByPlayer+ChatColor.RESET+".");
|
||||||
|
}
|
||||||
|
/*if (getPlayersInTeam(1).contains(killer)) {
|
||||||
|
team1score++;
|
||||||
|
} else {
|
||||||
|
team2score++;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PVPPlayer {
|
class PVPPlayer {
|
||||||
@ -678,6 +949,8 @@ class PVPPlayer {
|
|||||||
Location lastLoc;
|
Location lastLoc;
|
||||||
PVPOption choice;
|
PVPOption choice;
|
||||||
int team;
|
int team;
|
||||||
|
boolean isAlive;
|
||||||
|
long respawnTimer;
|
||||||
|
|
||||||
PVPPlayer() {
|
PVPPlayer() {
|
||||||
score=0;
|
score=0;
|
||||||
@ -685,6 +958,7 @@ class PVPPlayer {
|
|||||||
choice=PVPOption.NONE;
|
choice=PVPOption.NONE;
|
||||||
lastLoc=null;
|
lastLoc=null;
|
||||||
team=0;
|
team=0;
|
||||||
|
isAlive=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,6 +972,15 @@ enum CHOICEENGINE {
|
|||||||
FINISHED, //Any cleanup that has to be done. Warp all players back.
|
FINISHED, //Any cleanup that has to be done. Warp all players back.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Score{
|
||||||
|
String name;
|
||||||
|
int score;
|
||||||
|
Score(String name, int score) {
|
||||||
|
this.name=name;
|
||||||
|
this.score=score;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum PVPOption {
|
enum PVPOption {
|
||||||
NONE(0,"No Choice","Hey look! It's my favorite streamer! The one and only >>Legendary<<, yes LEGENDARY Captain_Marrow aka Storm! We break ultimate plates, alchemize Artifacts, miss skillshots, break Master Swords, collect food because we cannot dodge the Ganon, deny our combat-buddies from keeping their legendary equipment, and jump off boats right before they leave ( cy@ VoHiYo )! Come join the fun! Kappa"),
|
NONE(0,"No Choice","Hey look! It's my favorite streamer! The one and only >>Legendary<<, yes LEGENDARY Captain_Marrow aka Storm! We break ultimate plates, alchemize Artifacts, miss skillshots, break Master Swords, collect food because we cannot dodge the Ganon, deny our combat-buddies from keeping their legendary equipment, and jump off boats right before they leave ( cy@ VoHiYo )! Come join the fun! Kappa"),
|
||||||
ROUNDS3(1,ChatColor.WHITE+"Best of 3","The team that wins 2 of 3 total rounds wins the duel."),
|
ROUNDS3(1,ChatColor.WHITE+"Best of 3","The team that wins 2 of 3 total rounds wins the duel."),
|
||||||
|
@ -8,6 +8,8 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
import net.minecraft.server.v1_9_R1.Scoreboard;
|
||||||
|
import net.minecraft.server.v1_9_R1.ScoreboardObjective;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils;
|
||||||
|
|
||||||
@ -21,12 +23,19 @@ public class PartyManager {
|
|||||||
totalparties=0;
|
totalparties=0;
|
||||||
ClearAllParties();
|
ClearAllParties();
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
if (!IsInParty(p)) {
|
if (!PVP.isPvPing(p)) {
|
||||||
//We only care about adding a player that's not in a party already.
|
if (!IsInParty(p)) {
|
||||||
//We have to make a new party for this player.
|
//We only care about adding a player that's not in a party already.
|
||||||
AddPlayerToParty(p,totalparties++);
|
//We have to make a new party for this player.
|
||||||
//Now find nearby players and add them to this party.
|
AddPlayerToParty(p,totalparties++);
|
||||||
AddNearbyPlayersToSameParty(p);
|
//Now find nearby players and add them to this party.
|
||||||
|
AddNearbyPlayersToSameParty(p);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+pd.previousparty);
|
||||||
|
pd.currentparty=-1;
|
||||||
|
pd.partybonus=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdatePartyScoreboards();
|
UpdatePartyScoreboards();
|
||||||
|
@ -273,6 +273,7 @@ public class PlayerStructure {
|
|||||||
public int afkLength = 60;
|
public int afkLength = 60;
|
||||||
public boolean isAFKState = false;
|
public boolean isAFKState = false;
|
||||||
public int unafkLength = 0;
|
public int unafkLength = 0;
|
||||||
|
public int gracePeriod = 0;
|
||||||
|
|
||||||
//Prevent Automatic AFK moving the camera just to avoid the system.
|
//Prevent Automatic AFK moving the camera just to avoid the system.
|
||||||
public long lastAdjustmentReading = 0; //When the last adjustment reading started.
|
public long lastAdjustmentReading = 0; //When the last adjustment reading started.
|
||||||
@ -282,6 +283,8 @@ public class PlayerStructure {
|
|||||||
public int averageAdjustmentsMadeCount = 0; //Stored number of adjustments used in average.
|
public int averageAdjustmentsMadeCount = 0; //Stored number of adjustments used in average.
|
||||||
public boolean tooConsistentAdjustments = false; //Adjustments are too consistent.
|
public boolean tooConsistentAdjustments = false; //Adjustments are too consistent.
|
||||||
|
|
||||||
|
public String lastplayerHitBy = ""; //The last player that hurt this player.
|
||||||
|
|
||||||
//Needs the instance of the player object to get all other info. Only to be called at the beginning.
|
//Needs the instance of the player object to get all other info. Only to be called at the beginning.
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public PlayerStructure(Player p, long serverTickTime) {
|
public PlayerStructure(Player p, long serverTickTime) {
|
||||||
|
@ -137,6 +137,7 @@ import org.bukkit.event.player.PlayerDropItemEvent;
|
|||||||
import org.bukkit.event.player.PlayerExpChangeEvent;
|
import org.bukkit.event.player.PlayerExpChangeEvent;
|
||||||
import org.bukkit.event.player.PlayerFishEvent;
|
import org.bukkit.event.player.PlayerFishEvent;
|
||||||
import org.bukkit.event.player.PlayerFishEvent.State;
|
import org.bukkit.event.player.PlayerFishEvent.State;
|
||||||
|
import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerItemBreakEvent;
|
import org.bukkit.event.player.PlayerItemBreakEvent;
|
||||||
@ -1044,17 +1045,21 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
public static void SetupAndModifyDurabilities(Player p) {
|
public static void SetupAndModifyDurabilities(Player p) {
|
||||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||||
if (aPluginAPIWrapper.isAFK(p)) {
|
if (aPluginAPIWrapper.isAFK(p)) {
|
||||||
pd.actionRecords++;
|
|
||||||
if (pd.durability.size()!=9) {
|
if (pd.durability.size()!=9) {
|
||||||
PopulateDurabilityValues(p);
|
PopulateDurabilityValues(p);
|
||||||
} else {
|
} else {
|
||||||
//See if durability values are different. If so, multiply the difference.
|
//See if durability values are different. If so, multiply the difference.
|
||||||
List<Integer> diff = GetDifferences(p);
|
List<Integer> diff = GetDifferences(p);
|
||||||
for (int i=0;i<9;i++) {
|
if (pd.gracePeriod==0) {
|
||||||
if (diff.get(i)>0) {
|
for (int i=0;i<9;i++) {
|
||||||
aPlugin.API.damageItem(p, p.getInventory().getItem(i), (int)(diff.get(i)*PlayerStructure.getAFKMultiplier(p)));
|
if (diff.get(i)>0) {
|
||||||
TwosideKeeper.log(" Damaged item slot"+i+" an extra "+((int)(diff.get(i)*PlayerStructure.getAFKMultiplier(p)))+" damage due to AFK state.", 2);
|
pd.actionRecords+=5;
|
||||||
|
aPlugin.API.damageItem(p, p.getInventory().getItem(i), (int)(diff.get(i)*PlayerStructure.getAFKMultiplier(p)));
|
||||||
|
TwosideKeeper.log(" Damaged item slot"+i+" an extra "+((int)(diff.get(i)*PlayerStructure.getAFKMultiplier(p)))+" damage due to AFK state.", 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pd.gracePeriod--;
|
||||||
}
|
}
|
||||||
PopulateDurabilityValues(p);
|
PopulateDurabilityValues(p);
|
||||||
}
|
}
|
||||||
@ -1584,6 +1589,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
sender.sendMessage(ChatColor.WHITE+Display("HIT",pd.hitlist.size())+Display("ITE",pd.itemcubelist.size())+Display("LAS",pd.lasteffectlist.size()));
|
sender.sendMessage(ChatColor.WHITE+Display("HIT",pd.hitlist.size())+Display("ITE",pd.itemcubelist.size())+Display("LAS",pd.lasteffectlist.size()));
|
||||||
sender.sendMessage(ChatColor.WHITE+Display("BLO",pd.blockscanlist.size())+Display("AFK",pd.afkLength)+Display("UAFK",pd.unafkLength));
|
sender.sendMessage(ChatColor.WHITE+Display("BLO",pd.blockscanlist.size())+Display("AFK",pd.afkLength)+Display("UAFK",pd.unafkLength));
|
||||||
sender.sendMessage(ChatColor.WHITE+Display("AAVG",(int)pd.averageAdjustmentsMade)+Display("AVGC",(int)pd.averageAdjustmentsMadeCount)+Display("ACT",pd.actionRecords));
|
sender.sendMessage(ChatColor.WHITE+Display("AAVG",(int)pd.averageAdjustmentsMade)+Display("AVGC",(int)pd.averageAdjustmentsMadeCount)+Display("ACT",pd.actionRecords));
|
||||||
|
sender.sendMessage(ChatColor.WHITE+Display("ADJ",(int)pd.adjustmentReading));
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("Could not find player "+ChatColor.YELLOW+args[0]+ChatColor.RESET+"!");
|
sender.sendMessage("Could not find player "+ChatColor.YELLOW+args[0]+ChatColor.RESET+"!");
|
||||||
}
|
}
|
||||||
@ -3217,6 +3223,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.NIGHT_VISION,ev.getPlayer());
|
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.NIGHT_VISION,ev.getPlayer());
|
||||||
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.LEVITATION,ev.getPlayer());
|
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.LEVITATION,ev.getPlayer());
|
||||||
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.JUMP,ev.getPlayer());
|
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.JUMP,ev.getPlayer());
|
||||||
|
if (TwosideKeeper.SERVER_TYPE!=ServerType.TEST) {
|
||||||
|
ev.getPlayer().setGameMode(GameMode.SURVIVAL);
|
||||||
|
}
|
||||||
runServerHeartbeat.UpdatePlayerScoreboardAndHealth(ev.getPlayer());
|
runServerHeartbeat.UpdatePlayerScoreboardAndHealth(ev.getPlayer());
|
||||||
ev.getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(4.0d);
|
ev.getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(4.0d);
|
||||||
|
|
||||||
@ -3285,6 +3294,16 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
log("[TASK] Player Data for "+ev.getPlayer().getName()+" has been removed. Size of array: "+playerdata.size(),4);
|
log("[TASK] Player Data for "+ev.getPlayer().getName()+" has been removed. Size of array: "+playerdata.size(),4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||||
|
public void onPlayerModeChange(PlayerGameModeChangeEvent ev) {
|
||||||
|
if (ev.getNewGameMode()==GameMode.SURVIVAL &&
|
||||||
|
PVP.isPvPing(ev.getPlayer()) &&
|
||||||
|
!PVP.getMatch(ev.getPlayer()).players.get(ev.getPlayer().getName()).isAlive) {
|
||||||
|
ev.getPlayer().sendMessage("You must wait for the next round before respawning!");
|
||||||
|
ev.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||||
public void onPlayerChat(final AsyncPlayerChatEvent ev) {
|
public void onPlayerChat(final AsyncPlayerChatEvent ev) {
|
||||||
if (ev.getMessage().length()>=1) {
|
if (ev.getMessage().length()>=1) {
|
||||||
@ -8057,8 +8076,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
ev.getEntity() instanceof Monster) {
|
ev.getEntity() instanceof Monster) {
|
||||||
Player p = (Player)ev.getTarget();
|
Player p = (Player)ev.getTarget();
|
||||||
Monster m = (Monster)ev.getEntity();
|
Monster m = (Monster)ev.getEntity();
|
||||||
if (GenericFunctions.hasStealth(p) &&
|
if (PVP.isPvPing(p) || (GenericFunctions.hasStealth(p) &&
|
||||||
m.getTarget()==null) {
|
m.getTarget()==null)) {
|
||||||
ev.setCancelled(true);
|
ev.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -9024,6 +9043,54 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*Material type = ev.getBlock().getType();
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
StringBuilder blockmap = new StringBuilder("");
|
||||||
|
for (int y=0;y<2;y++) {
|
||||||
|
for (int z=-2;z<3;z++) {
|
||||||
|
for (int x=-2;x<3;x++) {
|
||||||
|
blockmap.append(ev.getPlayer().getLocation().getBlock().getRelative(x, y, z).getType().name().substring(0, 1));
|
||||||
|
}
|
||||||
|
blockmap.append("\n");
|
||||||
|
}
|
||||||
|
blockmap.append(ChatColor.DARK_RED+"\n\n");
|
||||||
|
}
|
||||||
|
p.sendMessage(blockmap.toString());
|
||||||
|
}, 1);*/
|
||||||
|
/**
|
||||||
|
* EXPERIMENTAL BLOCK ANTI-LAG CODE.
|
||||||
|
*/
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
|
||||||
|
Block baseblock = ev.getPlayer().getLocation().getBlock().getRelative(0, 1, 0);
|
||||||
|
Block targetblock = ev.getBlock();
|
||||||
|
Vector diffs = new Vector(targetblock.getLocation().getBlockX()-baseblock.getLocation().getBlockX(),
|
||||||
|
targetblock.getLocation().getBlockY()-baseblock.getLocation().getBlockY(),
|
||||||
|
targetblock.getLocation().getBlockZ()-baseblock.getLocation().getBlockZ());
|
||||||
|
//TwosideKeeper.log("Vector is "+diffs, 1);
|
||||||
|
diffs = diffs.multiply(1d/largestVector(diffs));
|
||||||
|
Location pointerloc = p.getLocation().add(new Vector(0,p.getEyeHeight()+0.01,0));
|
||||||
|
//TwosideKeeper.log("Vector is "+diffs, 1);
|
||||||
|
int iterations = 0;
|
||||||
|
int distance = (int)baseblock.getLocation().distance(targetblock.getLocation())+1;
|
||||||
|
while (iterations<distance && (pointerloc.getBlockX()!=targetblock.getLocation().getBlockX() ||
|
||||||
|
pointerloc.getBlockY()!=targetblock.getLocation().getBlockY() ||
|
||||||
|
pointerloc.getBlockZ()!=targetblock.getLocation().getBlockZ())) {
|
||||||
|
//TwosideKeeper.log("Deleting pointer block: "+pointerloc, 1);
|
||||||
|
if (pointerloc.getBlock().getType()!=Material.AIR &&
|
||||||
|
!pointerloc.getBlock().isLiquid() &&
|
||||||
|
pointerloc.getBlock().getType().isSolid()
|
||||||
|
/*targetblock.getType()==pointerloc.getBlock().getType()*/) {
|
||||||
|
TwosideKeeper.log("WARNING! Block "+pointerloc.getBlock()+" did not break properly! Breaking manually...", 1);
|
||||||
|
pointerloc.getBlock().breakNaturally();
|
||||||
|
}
|
||||||
|
pointerloc.add(diffs);
|
||||||
|
iterations++;
|
||||||
|
}
|
||||||
|
if (iterations==50) {
|
||||||
|
TwosideKeeper.log("WARNING! Reached 50 iterations and cancelled.", 1);
|
||||||
|
}
|
||||||
|
}, 1);
|
||||||
|
|
||||||
if (ev.getBlock().getType()==Material.CHEST ||
|
if (ev.getBlock().getType()==Material.CHEST ||
|
||||||
ev.getBlock().getType()==Material.TRAPPED_CHEST) {
|
ev.getBlock().getType()==Material.TRAPPED_CHEST) {
|
||||||
Chest cc = (Chest)ev.getBlock().getState();
|
Chest cc = (Chest)ev.getBlock().getState();
|
||||||
@ -9178,7 +9245,20 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
private double largestVector(Vector diffs) {
|
||||||
|
double largestvector = -999999;
|
||||||
|
if (Math.abs(diffs.getX())>largestvector) {
|
||||||
|
largestvector = Math.abs(diffs.getX());
|
||||||
|
}
|
||||||
|
if (Math.abs(diffs.getY())>largestvector) {
|
||||||
|
largestvector = Math.abs(diffs.getY());
|
||||||
|
}
|
||||||
|
if (Math.abs(diffs.getZ())>largestvector) {
|
||||||
|
largestvector = Math.abs(diffs.getZ());
|
||||||
|
}
|
||||||
|
return largestvector;
|
||||||
|
}
|
||||||
|
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||||
public void onaPluginPickupEvent(PlayerGainItemEvent ev) {
|
public void onaPluginPickupEvent(PlayerGainItemEvent ev) {
|
||||||
TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 4);
|
TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 4);
|
||||||
Player p = ev.getPlayer();
|
Player p = ev.getPlayer();
|
||||||
|
@ -25,6 +25,7 @@ public class aPluginAPIWrapper {
|
|||||||
}
|
}
|
||||||
if (pd.isAFKState) {
|
if (pd.isAFKState) {
|
||||||
pd.isAFKState=false;
|
pd.isAFKState=false;
|
||||||
|
pd.gracePeriod=3;
|
||||||
TwosideKeeper.log(">>Player "+p.getName()+" is no longer AFK.", 2);
|
TwosideKeeper.log(">>Player "+p.getName()+" is no longer AFK.", 2);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -239,7 +239,7 @@ final public class runServerHeartbeat implements Runnable {
|
|||||||
TwosideKeeper.HeartbeatLogger.AddEntry("Purchase Notification Sending", (int)(System.nanoTime()-time));time=System.nanoTime();
|
TwosideKeeper.HeartbeatLogger.AddEntry("Purchase Notification Sending", (int)(System.nanoTime()-time));time=System.nanoTime();
|
||||||
|
|
||||||
long notafktime = System.nanoTime();
|
long notafktime = System.nanoTime();
|
||||||
if (!aPlugin.API.isAFK(p)) {
|
if (!aPluginAPIWrapper.isAFK(p)) {
|
||||||
EndShopSession(p);
|
EndShopSession(p);
|
||||||
TwosideKeeper.HeartbeatLogger.AddEntry("End Shop Session", (int)(System.nanoTime()-time));time=System.nanoTime();
|
TwosideKeeper.HeartbeatLogger.AddEntry("End Shop Session", (int)(System.nanoTime()-time));time=System.nanoTime();
|
||||||
|
|
||||||
@ -432,6 +432,9 @@ final public class runServerHeartbeat implements Runnable {
|
|||||||
//TwosideKeeper.log("Current adjustment reading: "+pd.averageAdjustmentsMade+" <--> "+pd.adjustmentReading, 2);
|
//TwosideKeeper.log("Current adjustment reading: "+pd.averageAdjustmentsMade+" <--> "+pd.adjustmentReading, 2);
|
||||||
if (Math.abs(pd.adjustmentReading-pd.averageAdjustmentsMade)<=2 && pd.averageAdjustmentsMadeCount>=10) { //Too consistent.
|
if (Math.abs(pd.adjustmentReading-pd.averageAdjustmentsMade)<=2 && pd.averageAdjustmentsMadeCount>=10) { //Too consistent.
|
||||||
pd.readingBroken++;
|
pd.readingBroken++;
|
||||||
|
if (pd.gracePeriod>0) {
|
||||||
|
pd.gracePeriod--;
|
||||||
|
} else
|
||||||
if (pd.readingBroken>=3) {
|
if (pd.readingBroken>=3) {
|
||||||
pd.tooConsistentAdjustments=true;
|
pd.tooConsistentAdjustments=true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user