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.
patch_branch
sigonasr2 8 years ago
parent 245b3f5e07
commit 8570e2706f
  1. BIN
      TwosideKeeper.jar
  2. 10
      src/sig/plugin/TwosideKeeper/CustomDamage.java
  3. 35
      src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
  4. 2
      src/sig/plugin/TwosideKeeper/HolidayEvents/Christmas.java
  5. 2
      src/sig/plugin/TwosideKeeper/MonsterController.java
  6. 291
      src/sig/plugin/TwosideKeeper/PVP.java
  7. 21
      src/sig/plugin/TwosideKeeper/PartyManager.java
  8. 3
      src/sig/plugin/TwosideKeeper/PlayerStructure.java
  9. 96
      src/sig/plugin/TwosideKeeper/TwosideKeeper.java
  10. 1
      src/sig/plugin/TwosideKeeper/aPluginAPIWrapper.java
  11. 5
      src/sig/plugin/TwosideKeeper/runServerHeartbeat.java

Binary file not shown.

@ -790,7 +790,7 @@ public class CustomDamage {
damage=0;
}
if (damage>0 && GenericFunctions.AttemptRevive(p, damage, reason)) {
if (damage>0 && GenericFunctions.AttemptRevive(p, damager, damage, reason)) {
damage=0;
}
@ -2282,7 +2282,7 @@ public class CustomDamage {
target.setLastDamage(0);
target.setNoDamageTicks(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()
//!damager.getWorld().getPVP()
Player attacker = (Player)damager;
@ -2303,10 +2303,14 @@ public class CustomDamage {
PVP.sendPvPRequest(attacker,defender);
}
}
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)) {
return true; //Cancel any damage events in Spectator mode or Creative Mode.
}

@ -3680,7 +3680,7 @@ public class GenericFunctions {
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 fromRoom=false;
if (p.getHealth()<=dmg) {
@ -3691,18 +3691,35 @@ public class GenericFunctions {
pd.lasthitdesc=reason;
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();
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) {
for (Room r : TwosideKeeper.roominstances) {
if (r.onPlayerDeath(p)) {
revived=true;
fromRoom=true;
RevivePlayer(p, p.getMaxHealth());
return true; //Intentionally prevent other revive effects from working.
}
for (Room r : TwosideKeeper.roominstances) {
if (r.onPlayerDeath(p)) {
revived=true;
fromRoom=true;
RevivePlayer(p, p.getMaxHealth());
return true; //Intentionally prevent other revive effects from working.
}
}
}
if (!revived) {
@ -4926,7 +4943,7 @@ public class GenericFunctions {
ItemSet.meetsSlayerSwordConditions(ItemSet.STEALTH, 9, 1, p)) {
return;
} else {
if (!aPlugin.API.isAFK(p)) {
if (!aPluginAPIWrapper.isAFK(p)) {
ItemStack[] inv = p.getInventory().getContents();
for (int i=0;i<9;i++) {
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 bbelow = b.getRelative(0, -1, 0);
if (p.isOnGround()) {
if (!aPlugin.API.isAFK(p)) {
if (!aPluginAPIWrapper.isAFK(p)) {
AddRocketBoosterCharges(p);
}
if (pd.falldamageimmunity && pd.lastusedrocketbooster+20<TwosideKeeper.getServerTickTime()) {

@ -223,7 +223,7 @@ public class MonsterController {
double dist = 999999999;
int nearbyplayers=0;
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());
if (Math.abs(ent.getLocation().getY()-p.getLocation().getY())<=30) {
if (temp<4096) {nearbyplayers++;}

@ -7,6 +7,7 @@ import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@ -31,6 +32,7 @@ public class PVP {
int team1score=0;
int team2score=0;
long timelimit;
long nextRoundTime=0;
boolean scorematch = false; //If true, uses score limit. If false uses timer.
//NEUTRAL team
@ -250,37 +252,242 @@ public class PVP {
case FIGHTING:{
removeInactivePlayers();
if (conditionsToWin() || notEnoughPlayers()) {
StringBuilder sb = PrepareCurrentScores();
Bukkit.getServer().broadcastMessage(sb.toString());
aPlugin.API.discordSendRaw("```"+sb.toString()+"```");
computeWinner();
announceWinner();
resetTeams();
return false;
} else {
setupNextRound();
state = CHOICEENGINE.FINISHED;
nextRoundTime = TwosideKeeper.getServerTickTime()+120;
}
}break;
case FINISHED:{
if (nextRoundTime<TwosideKeeper.getServerTickTime()) {
state=CHOICEENGINE.FIGHTING;
}
}break;
}
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() {
if (scorematch) {
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);
}
}
} 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() {
if (scorematch) {
return (team1score>=scorelimit || team2score>=scorelimit);
return (team1score>=scorelimit || team2score>=scorelimit) || (players.size()==2 && PlayerHasReachedScoreLimit());
} else {
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() {
String firstPlayer = null;
determineWinnerByEliminatingLosers();
for (String s : players.keySet()) {
firstPlayer = s;
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() {
String removedPlayer = null;
for (String s : players.keySet()) {
@ -385,9 +628,9 @@ public class PVP {
}
pp.lastLoc = Bukkit.getPlayer(s).getLocation().clone();
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() {
@ -638,6 +881,10 @@ public class PVP {
public static void setTeam(String teamName, Player p) {
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) {
addPlayerToTeamStructure(p);
@ -670,6 +917,30 @@ public class PVP {
base.addExtra(tc2);
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 {
@ -678,6 +949,8 @@ class PVPPlayer {
Location lastLoc;
PVPOption choice;
int team;
boolean isAlive;
long respawnTimer;
PVPPlayer() {
score=0;
@ -685,6 +958,7 @@ class PVPPlayer {
choice=PVPOption.NONE;
lastLoc=null;
team=0;
isAlive=true;
}
}
@ -698,6 +972,15 @@ enum CHOICEENGINE {
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 {
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."),

@ -8,6 +8,8 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
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.Utils.TextUtils;
@ -21,12 +23,19 @@ public class PartyManager {
totalparties=0;
ClearAllParties();
for (Player p : Bukkit.getOnlinePlayers()) {
if (!IsInParty(p)) {
//We only care about adding a player that's not in a party already.
//We have to make a new party for this player.
AddPlayerToParty(p,totalparties++);
//Now find nearby players and add them to this party.
AddNearbyPlayersToSameParty(p);
if (!PVP.isPvPing(p)) {
if (!IsInParty(p)) {
//We only care about adding a player that's not in a party already.
//We have to make a new party for this player.
AddPlayerToParty(p,totalparties++);
//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();

@ -273,6 +273,7 @@ public class PlayerStructure {
public int afkLength = 60;
public boolean isAFKState = false;
public int unafkLength = 0;
public int gracePeriod = 0;
//Prevent Automatic AFK moving the camera just to avoid the system.
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 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.
@SuppressWarnings("deprecation")
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.PlayerFishEvent;
import org.bukkit.event.player.PlayerFishEvent.State;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemBreakEvent;
@ -1044,17 +1045,21 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
public static void SetupAndModifyDurabilities(Player p) {
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
if (aPluginAPIWrapper.isAFK(p)) {
pd.actionRecords++;
if (pd.durability.size()!=9) {
PopulateDurabilityValues(p);
} else {
//See if durability values are different. If so, multiply the difference.
List<Integer> diff = GetDifferences(p);
for (int i=0;i<9;i++) {
if (diff.get(i)>0) {
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);
if (pd.gracePeriod==0) {
for (int i=0;i<9;i++) {
if (diff.get(i)>0) {
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);
}
@ -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("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("ADJ",(int)pd.adjustmentReading));
} else {
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.LEVITATION,ev.getPlayer());
GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.JUMP,ev.getPlayer());
if (TwosideKeeper.SERVER_TYPE!=ServerType.TEST) {
ev.getPlayer().setGameMode(GameMode.SURVIVAL);
}
runServerHeartbeat.UpdatePlayerScoreboardAndHealth(ev.getPlayer());
ev.getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(4.0d);
@ -3284,6 +3293,16 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
//Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players reset "+ev.getPlayer().getName().toLowerCase());
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)
public void onPlayerChat(final AsyncPlayerChatEvent ev) {
@ -8057,8 +8076,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev.getEntity() instanceof Monster) {
Player p = (Player)ev.getTarget();
Monster m = (Monster)ev.getEntity();
if (GenericFunctions.hasStealth(p) &&
m.getTarget()==null) {
if (PVP.isPvPing(p) || (GenericFunctions.hasStealth(p) &&
m.getTarget()==null)) {
ev.setCancelled(true);
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 ||
ev.getBlock().getType()==Material.TRAPPED_CHEST) {
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) {
TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 4);
Player p = ev.getPlayer();

@ -25,6 +25,7 @@ public class aPluginAPIWrapper {
}
if (pd.isAFKState) {
pd.isAFKState=false;
pd.gracePeriod=3;
TwosideKeeper.log(">>Player "+p.getName()+" is no longer AFK.", 2);
}
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();
long notafktime = System.nanoTime();
if (!aPlugin.API.isAFK(p)) {
if (!aPluginAPIWrapper.isAFK(p)) {
EndShopSession(p);
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);
if (Math.abs(pd.adjustmentReading-pd.averageAdjustmentsMade)<=2 && pd.averageAdjustmentsMadeCount>=10) { //Too consistent.
pd.readingBroken++;
if (pd.gracePeriod>0) {
pd.gracePeriod--;
} else
if (pd.readingBroken>=3) {
pd.tooConsistentAdjustments=true;
}

Loading…
Cancel
Save