diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index b3cb99f..d4fda8a 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java b/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java index 498f60a..53dcb64 100644 --- a/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java +++ b/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java @@ -47,24 +47,24 @@ public class ActionBarBuffUpdater{ effectString.append(AppendAmplifier((p.getFireTicks()/20)-1,false)); effectString.append(" "); } - if (pd.lifestealstacks>0) { + /*if (pd.lifestealstacks>0) { effectString.append(ChatColor.AQUA); effectString.append("❣"); effectString.append(AppendAmplifier(pd.lifestealstacks-1)); effectString.append(" "); - } - if (pd.weaponcharges>0) { + }*/ + /*if (pd.weaponcharges>0) { effectString.append(ChatColor.DARK_AQUA); effectString.append("☤"); effectString.append(AppendAmplifier(pd.weaponcharges-1)); effectString.append(" "); - } - if (pd.damagepool>0) { + }*/ + /*if (pd.damagepool>0) { effectString.append(ChatColor.DARK_PURPLE); effectString.append("♥"); effectString.append(AppendAmplifier((int)(pd.damagepool-1))); effectString.append(" "); - } + }*/ if (pd.lastvendettastack+200>TwosideKeeper.getServerTickTime() && ItemSet.hasFullSet((Player)p, ItemSet.SONGSTEEL)) { effectString.append(ChatColor.GRAY); diff --git a/src/sig/plugin/TwosideKeeper/Artifact.java b/src/sig/plugin/TwosideKeeper/Artifact.java index 8e40ea6..0706c88 100644 --- a/src/sig/plugin/TwosideKeeper/Artifact.java +++ b/src/sig/plugin/TwosideKeeper/Artifact.java @@ -13,6 +13,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.ArtifactItem; import sig.plugin.TwosideKeeper.HelperStructures.ArtifactItemType; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; +import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils; public class Artifact { public static ItemStack createArtifactItem(ArtifactItem type) { @@ -191,7 +192,7 @@ public class Artifact { (GenericFunctions.searchfor(item.getItemMeta().getLore(),ChatColor.GOLD+""+ChatColor.ITALIC+"Artifact Crafting Item") || item.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.ITALIC+"Artifact Item") || (ItemUtils.LoreContainsSubstring(item, ChatColor.GOLD+""+ChatColor.BOLD+"T") && - ItemUtils.LoreContainsSubstring(item, " Artifact")))) { + ItemUtils.LoreContainsSubstring(item, " Artifact") && TextUtils.hasNoSpaceBeforeAndAfter(ChatColor.GOLD+""+ChatColor.BOLD+"T"," Artifact",item.getItemMeta().getLore())))) { //This is an artifact. return true; } else { diff --git a/src/sig/plugin/TwosideKeeper/CustomDamage.java b/src/sig/plugin/TwosideKeeper/CustomDamage.java index df32165..082a079 100644 --- a/src/sig/plugin/TwosideKeeper/CustomDamage.java +++ b/src/sig/plugin/TwosideKeeper/CustomDamage.java @@ -58,6 +58,7 @@ import aPlugin.API; import sig.plugin.TwosideKeeper.Boss.EliteZombie; import sig.plugin.TwosideKeeper.Events.EntityDamagedEvent; import sig.plugin.TwosideKeeper.Events.PlayerDodgeEvent; +import sig.plugin.TwosideKeeper.HelperStructures.AdvancedTitle; import sig.plugin.TwosideKeeper.HelperStructures.ArtifactAbility; import sig.plugin.TwosideKeeper.HelperStructures.BowMode; import sig.plugin.TwosideKeeper.HelperStructures.DamageStructure; @@ -94,6 +95,7 @@ public class CustomDamage { public static final int IS_CRIT = 1; //System Flag. Used for telling a player structure their last hit was a crit. public static final int IS_HEADSHOT = 2; //System Flag. Used for telling a player structure their last hit was a headshot. public static final int IS_PREEMPTIVE = 4; //System Flag. Used for telling a player structure their last hit was a preemptive strike. + public static final int IS_THORNS = 8; //System Flag. Used for telling a player structure their last hit was with thorns. static public boolean ApplyDamage(double damage, Entity damager, LivingEntity target, ItemStack weapon, String reason) { return ApplyDamage(damage,damager,target,weapon,reason,NONE); @@ -170,6 +172,8 @@ public class CustomDamage { if (!Dummy.isDummy(target)) { Bukkit.getPluginManager().callEvent(ev); } + + setupDamagePropertiesForPlayer(damager,((reason!=null && reason.equalsIgnoreCase("thorns"))?IS_THORNS:0)); if (!ev.isCancelled()) { //TwosideKeeper.log("Inside of here.", 0); DealDamageToEntity(dmg, damager, target, weapon, reason, flags); @@ -309,6 +313,7 @@ public class CustomDamage { } } TwosideKeeper.log("Damage: "+dmg+", Armor Pen Damage: "+armorpendmg, 3); + setupDamagePropertiesForPlayer(damager,((crit)?IS_CRIT:0)|((headshot)?IS_HEADSHOT:0)|((preemptive)?IS_PREEMPTIVE:0)); dmg = hardCapDamage(dmg+armorpendmg,target,reason); return dmg; @@ -320,7 +325,7 @@ public class CustomDamage { Player p = (Player)shooter; PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); if (pd.damagepool>0) { - mult+=pd.damagepool*(ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.LEGION, 4, 4)/100d); + mult+=(pd.damagepool/100d)*((ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.LEGION, 4, 4)/100d)); } } return mult; @@ -560,6 +565,8 @@ public class CustomDamage { } DecimalFormat df = new DecimalFormat("0.00"); GenericFunctions.sendActionBarMessage(p, "", true); + //pd.customtitle.updateTitle(p); + pd.customtitle.updateCombatBar(p, getDamagerEntity(damager)); //GenericFunctions.sendActionBarMessage(p, ChatColor.YELLOW+" Vendetta: "+ChatColor.GREEN+Math.round(pd.vendetta_amt)+((pd.thorns_amt>0)?"/"+ChatColor.GOLD+df.format(pd.thorns_amt):"")+ChatColor.GREEN+" dmg stored",true); } } @@ -637,6 +644,10 @@ public class CustomDamage { if (damage>0 && GenericFunctions.AttemptRevive(p, damage, reason)) { damage=0; } + + //pd.customtitle.updateTitle(p); + pd.customtitle.updateCombatBar(p, getDamagerEntity(damager)); + pd.lastattack=TwosideKeeper.getServerTickTime(); } LivingEntity shooter = getDamagerEntity(damager); if ((shooter instanceof Player) && target!=null) { @@ -789,6 +800,11 @@ public class CustomDamage { AwardDamageAchievement(p,damage); appendDebuffsToName(target); + + /*if ((reason!=null && !reason.equalsIgnoreCase("thorns")) || pd.customtitle.getTitles()[1].length()==0) { + pd.customtitle.updateCombatBar(p, target, damage, pd.lasthitproperties); + }*/ + pd.lastattack=TwosideKeeper.getServerTickTime(); } if (target instanceof Monster) { if (reason!=null && reason.equalsIgnoreCase("SUFFOCATION")) { @@ -1238,7 +1254,8 @@ public class CustomDamage { if (reason.equalsIgnoreCase("power swing")) { IncreaseLifestealStacks(p,10); pd.weaponcharges-=10; - GenericFunctions.sendActionBarMessage(p, ""); + //GenericFunctions.sendActionBarMessage(p, ""); + pd.customtitle.updateSideTitleStats(p); } } if (p.isSneaking() && pd.weaponcharges>=30 && (reason==null || !reason.equalsIgnoreCase("forceful strike")) && @@ -1257,7 +1274,7 @@ public class CustomDamage { GenericFunctions.DealDamageToNearbyMobs(attackloc, dmg, 1, true, 0.6, p, weapon, false, "Forceful Strike"); } pd.weaponcharges-=30; - GenericFunctions.sendActionBarMessage(p, ""); + pd.customtitle.updateSideTitleStats(p); } } return dmg; @@ -1277,7 +1294,7 @@ public class CustomDamage { amt*=2; } pd.weaponcharges+=amt; - GenericFunctions.sendActionBarMessage(p, ""); + pd.customtitle.updateSideTitleStats(p); } } @@ -1287,7 +1304,6 @@ public class CustomDamage { amt*=2; } pd.lifestealstacks=Math.min(100,pd.lifestealstacks+amt*((pd.rage_time>TwosideKeeper.getServerTickTime())?2:1)); - GenericFunctions.sendActionBarMessage(p, ""); } private static double sendDamageToDamagePool(Player p, double damage, String reason) { @@ -1525,6 +1541,7 @@ public class CustomDamage { pd.regenpool-=pd.damagepool; } pd.damagepool = Math.max(pd.damagepool-pd.regenpool, 0); + pd.customtitle.updateSideTitleStats(p); } else { pd.regenpool += lifestealamt; } @@ -2025,6 +2042,7 @@ public class CustomDamage { } DecimalFormat df = new DecimalFormat("0.00"); GenericFunctions.sendActionBarMessage(p, "", true); + pd.customtitle.updateSideTitleStats(p); //GenericFunctions.sendActionBarMessage(p, ChatColor.YELLOW+" Vendetta: "+ChatColor.GREEN+Math.round(pd.vendetta_amt)+((pd.thorns_amt>0)?"/"+ChatColor.GOLD+df.format(pd.thorns_amt):"")+ChatColor.GREEN+" dmg stored",true); } if (ItemSet.HasSetBonusBasedOnSetBonusCount(p, ItemSet.VIXEN, 4)) { @@ -2743,7 +2761,7 @@ public class CustomDamage { double headshotvaly=0.22/TwosideKeeper.HEADSHOT_ACC; TwosideKeeper.log("In here.", 5); if (proj.getShooter() instanceof Player) { - TwosideKeeper.log("We somehow made it to here???", 5); + TwosideKeeper.log("We somehow made it to here???", 0); Player p = (Player)proj.getShooter(); if (PlayerMode.isRanger(p) && GenericFunctions.getBowMode(p)==BowMode.SNIPE) { @@ -2801,8 +2819,8 @@ public class CustomDamage { mult+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.SHARD, 2, 2)/100d; } p.sendMessage(ChatColor.DARK_RED+"Headshot! x2 Damage"); - isheadshot=true; } + isheadshot=true; } if (PlayerMode.isRanger(p) && GenericFunctions.getBowMode(p)==BowMode.DEBILITATION) { @@ -2838,6 +2856,12 @@ public class CustomDamage { } } } + + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + if (isheadshot) { + pd.customtitle.modifyLargeCenterTitle(ChatColor.DARK_RED+"HEADSHOT !", 20); + //pd.customtitle.update(); + } } } } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/AdvancedTitle.java b/src/sig/plugin/TwosideKeeper/HelperStructures/AdvancedTitle.java new file mode 100644 index 0000000..afa328d --- /dev/null +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/AdvancedTitle.java @@ -0,0 +1,172 @@ +package sig.plugin.TwosideKeeper.HelperStructures; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import sig.plugin.TwosideKeeper.PlayerStructure; +import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; +import sig.plugin.TwosideKeeper.HelperStructures.Utils.PlayerUtils; + +public class AdvancedTitle { + TitlePart large_lefttitle = new TitlePart("",0); + TitlePart large_centertitle = new TitlePart("",0); + TitlePart large_righttitle = new TitlePart("",0); + TitlePart small_centertitle = new TitlePart("",0); + Player p; + + public AdvancedTitle(Player p) { + this.p=p; + } + + public void modifyLargeLeftTitle(String title, int duration) { + large_lefttitle.setTitle(title); + large_lefttitle.setDuration(duration); + update(); + } + public void modifyLargeCenterTitle(String title, int duration) { + large_centertitle.setTitle(title); + large_centertitle.setDuration(duration); + update(); + } + public void modifyLargeRightTitle(String title, int duration) { + large_righttitle.setTitle(title); + large_righttitle.setDuration(duration); + update(); + } + public void modifySmallCenterTitle(String title, int duration) { + small_centertitle.setTitle(title); + small_centertitle.setDuration(duration); + update(); + } + + public void checkExpiredTitles() { + boolean refreshnames=false; + if (large_lefttitle.isExpired()) { + large_lefttitle.clear(); + refreshnames=true; + } + if (large_centertitle.isExpired()) { + large_centertitle.clear(); + refreshnames=true; + } + if (large_righttitle.isExpired()) { + large_righttitle.clear(); + refreshnames=true; + } + if (small_centertitle.isExpired()) { + small_centertitle.clear(); + refreshnames=true; + } + if (refreshnames) { + update(); + } + } + + public void update() { + p.sendTitle(combineLargeTitles(), combineSmallTitles()); + } + + private String combineSmallTitles() { + StringBuilder sb = new StringBuilder(small_centertitle.getTitle()); + return sb.toString(); + } + + private String combineLargeTitles() { + StringBuilder sb = new StringBuilder(large_lefttitle.getTitle()); + sb.append(ChatColor.RESET); + if (large_lefttitle.getTitle().length()>0 || + large_righttitle.getTitle().length()>0) { + if (large_centertitle.getTitle().length()==0) { + sb.append(" "); + } else { + sb.append(" "); + sb.append(large_centertitle.getTitle()); + sb.append(ChatColor.RESET); + sb.append(" "); + } + } else { + sb.append(large_centertitle.getTitle()); + sb.append(ChatColor.RESET); + } + sb.append(large_righttitle.getTitle()); + return sb.toString(); + } + + public void updateCombatBar(Player p, LivingEntity target) { + updateSideTitleStats(p); + TwosideKeeper.updateHealthbarDisplay(p, target); + update(); + } + + public void updateCombatBar(Player p, LivingEntity target, double damage, int flags) { + updateSideTitleStats(p); + TwosideKeeper.updateHealthbarDisplay(p, target, damage, flags); + update(); + } + + public void updateSideTitleStats(Player p) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + if (PlayerMode.getPlayerMode(p)==PlayerMode.BARBARIAN) { + modifyLargeLeftTitle(ChatColor.DARK_AQUA+"☤"+Integer.toString((int)pd.weaponcharges),100); + modifyLargeRightTitle(ChatColor.DARK_PURPLE+Integer.toString((int)pd.damagepool)+"♥",100); + } + if (PlayerMode.getPlayerMode(p)==PlayerMode.DEFENDER && + ItemSet.hasFullSet(p, ItemSet.SONGSTEEL)) { + modifyLargeLeftTitle(ChatColor.YELLOW+Integer.toString((int)pd.vendetta_amt),100); + modifyLargeRightTitle(ChatColor.GOLD+Integer.toString((int)pd.thorns_amt),100); + } + } + + public String[] getTitles() { + return new String[]{large_lefttitle.getTitle(),large_centertitle.getTitle(),large_righttitle.getTitle()}; + } +} + +class TitlePart { + String title; + long expiretime; + boolean hasExpired=false; + + TitlePart(String title, int duration) { + this.title=title; + this.expiretime=TwosideKeeper.getServerTickTime()+duration; + } + + public void clear() { + title=""; + hasExpired=true; + } + + void setTitle(String title) { + this.title=title; + } + + void setDuration(int duration) { + this.expiretime=TwosideKeeper.getServerTickTime()+duration; + hasExpired=false; + } + + boolean alreadyExpired() { + return hasExpired; + } + + boolean isExpired() { + return !hasExpired && expiretime<=TwosideKeeper.getServerTickTime(); + } + + String getTitle() { + return title; + } + + long getExpirationTime() { + return expiretime; + } +} \ No newline at end of file diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 5c7d292..0e48116 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -3683,7 +3683,7 @@ public class GenericFunctions { Buff.addBuff(p, "COOLDOWN_UNDYING_RAGE", new Buff("Undying Rage Cooldown",20*60,0,null,ChatColor.WHITE+"",true)); } } - return true; + //return true; } if (ItemSet.HasSetBonusBasedOnSetBonusCount(p, ItemSet.GLADOMAIN, 5) && diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java index 298607d..d1da8e9 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java @@ -848,7 +848,7 @@ public enum ItemSet { lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Lifesteal"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Damage per 10 Weapon Charges"); lore.add(ChatColor.AQUA+" ( Max. 200 stacks - "+(ItemSet.GetBaseAmount(set, tier, 3)*200)+"% Damage )"); - lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage per 100 Damage Pool"); + lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage per 100 Damage Pool Stacks"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Undying Rage"+ABILITY_LABEL_END); lore.add(ChatColor.GRAY+" When taking fatal damage, removes all Damage"); lore.add(ChatColor.GRAY+" Pool stacks and prevents your health from"); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/PlayerUtils.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/PlayerUtils.java index ab76c5a..36cdf35 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/PlayerUtils.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/PlayerUtils.java @@ -9,7 +9,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; public class PlayerUtils { public static boolean PlayerIsInCombat(Player p) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); - return (pd.target!=null && pd.target.isValid() && !pd.target.isDead() && pd.target.getLocation().getWorld().equals(p.getWorld()) && pd.target.getLocation().distanceSquared(p.getLocation())<256); + return (pd.lastattack+250<=TwosideKeeper.getServerTickTime() || (pd.target!=null && pd.target.isValid() && !pd.target.isDead() && pd.target.getLocation().getWorld().equals(p.getWorld()) && pd.target.getLocation().distanceSquared(p.getLocation())<256)); } public static boolean cooldownAvailable(long basetimer, int cooldown, Player p) { return (basetimer+GenericFunctions.GetModifiedCooldown(cooldown, p)<=TwosideKeeper.getServerTickTime()); diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/TextUtils.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/TextUtils.java index 1aae1ed..451b3f2 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/TextUtils.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/TextUtils.java @@ -82,4 +82,20 @@ public class TextUtils { } return builder.toString(); } + + + public static boolean hasNoSpaceBeforeAndAfter(String str1, String str2, List baselist) { + //int pos = str + for (int i=0;i0 || pos2+str2.length()0 && difficulty_modifier.length()>0) { + if (sb.length()>0 && difficulty_modifier.length()>0) { sb.append(" "); } sb.append(difficulty_modifier); - if (difficulty_modifier.length()>0 && base_name.length()>0) { + if (sb.length()>0 && base_name.length()>0) { sb.append(" "); } sb.append(base_name); - if (base_name.length()>0 && suffix.length()>0) { + if (sb.length()>0 && suffix.length()>0) { sb.append(" "); } sb.append(suffix); - if (suffix.length()>0 && suffix_bar.length()>0) { + if (sb.length()>0 && suffix_bar.length()>0) { sb.append(" "); } sb.append(suffix_bar); @@ -230,31 +230,43 @@ public class LivingEntityStructure { LivingEntity m = (LivingEntity)ent; LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); m.setCustomNameVisible(false); - String actualName = les.getActualName(); - if (actualName.length()>0) { - //m.setCustomName(ChatColor.stripColor(GenericFunctions.getDisplayName(m))); - /*if (m.getCustomName().contains("Dangerous")) { - m.setCustomName(ChatColor.DARK_AQUA+m.getCustomName()); - } else - if (m.getCustomName().contains("Deadly")) { - m.setCustomName(ChatColor.GOLD+m.getCustomName()); - } else - if (m.getCustomName().contains("Hellfire")) { - m.setCustomName(ChatColor.DARK_RED+m.getCustomName()); - } else { - m.setCustomName(ChatColor.WHITE+m.getCustomName()+ChatColor.RESET+" "); - }*/ - if (Buff.hasBuff(m, "DeathMark")) { - GenericFunctions.RefreshBuffColor(m, Buff.getBuff(m, "DeathMark").getAmplifier()); - } - CustomDamage.appendDebuffsToName(m); - if (les.suffix_bar.length()>0 || les.prefix.length()>0) { - m.setCustomNameVisible(true); + if (les.GetTarget()!=null && m.hasLineOfSight(les.GetTarget()) || + hasLineOfSightWithAPlayer(m)) { + String actualName = les.getActualName(); + if (actualName.length()>0) { + //m.setCustomName(ChatColor.stripColor(GenericFunctions.getDisplayName(m))); + /*if (m.getCustomName().contains("Dangerous")) { + m.setCustomName(ChatColor.DARK_AQUA+m.getCustomName()); + } else + if (m.getCustomName().contains("Deadly")) { + m.setCustomName(ChatColor.GOLD+m.getCustomName()); + } else + if (m.getCustomName().contains("Hellfire")) { + m.setCustomName(ChatColor.DARK_RED+m.getCustomName()); + } else { + m.setCustomName(ChatColor.WHITE+m.getCustomName()+ChatColor.RESET+" "); + }*/ + if (Buff.hasBuff(m, "DeathMark")) { + GenericFunctions.RefreshBuffColor(m, Buff.getBuff(m, "DeathMark").getAmplifier()); + } + CustomDamage.appendDebuffsToName(m); + if (les.suffix_bar.length()>0 || les.prefix.length()>0) { + m.setCustomNameVisible(true); + } + m.setCustomName(actualName); } - m.setCustomName(actualName); } } } + private static boolean hasLineOfSightWithAPlayer(LivingEntity ent) { + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.getWorld().equals(ent.getWorld()) && p.getLocation().distanceSquared(ent.getLocation())<=625 && + p.hasLineOfSight(ent)) { + return true; + } + } + return false; + } //Either gets a monster structure that exists or creates a new one. public static LivingEntityStructure GetLivingEntityStructure(LivingEntity m) { if (m instanceof Player) { diff --git a/src/sig/plugin/TwosideKeeper/PlayerStructure.java b/src/sig/plugin/TwosideKeeper/PlayerStructure.java index c95e123..a076ee8 100644 --- a/src/sig/plugin/TwosideKeeper/PlayerStructure.java +++ b/src/sig/plugin/TwosideKeeper/PlayerStructure.java @@ -23,6 +23,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.potion.PotionEffect; +import sig.plugin.TwosideKeeper.HelperStructures.AdvancedTitle; import sig.plugin.TwosideKeeper.HelperStructures.BowMode; import sig.plugin.TwosideKeeper.HelperStructures.Channel; import sig.plugin.TwosideKeeper.HelperStructures.DeathStructure; @@ -120,6 +121,7 @@ public class PlayerStructure { public double slayermodehp=0; public long lastassassinatetime=0; public long lastlifesavertime=0; + public long lastusedbarbability=0; public boolean slayermegahit=false; public double thorns_amt = 0.0; public long lastimportantactionbarmsg=0; @@ -153,6 +155,9 @@ public class PlayerStructure { public long lastusedbeastwithin = TwosideKeeper.getServerTickTime(); public long lastusedunstoppableteam = TwosideKeeper.getServerTickTime(); public boolean had3pieceprotecterset = false; + public AdvancedTitle customtitle; + public long lastattack = TwosideKeeper.getServerTickTime(); + public boolean lastHitWasThorns=false; public long iframetime = 0; @@ -280,6 +285,7 @@ public class PlayerStructure { this.vacuumsuckup=true; this.equipweapons=true; this.equiparmor=true; + this.customtitle = new AdvancedTitle(p); //Set defaults first, in case this is a new user. loadConfig(); p.getInventory().addItem(new ItemStack(Material.PORTAL)); diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index 20013fa..89b1f65 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -474,6 +474,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static BowModeLogger BowLogger; //The logger for Bow Modes. public static LootLogger Loot_Logger; //The logger for Loot. public static sig.plugin.TwosideKeeper.Logging.HeartbeatLogger HeartbeatLogger; //Diagnostics for heartbeat speed. + public static sig.plugin.TwosideKeeper.Logging.HeartbeatLogger PickupLogger; //Diagnostics for heartbeat speed. //public static AutoUpdatePlugin pluginupdater; public static boolean restarting_server=false; public static List log_messages=new ArrayList(); @@ -1029,6 +1030,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { BowLogger = new BowModeLogger(); Loot_Logger = new LootLogger(); HeartbeatLogger = new sig.plugin.TwosideKeeper.Logging.HeartbeatLogger(); + PickupLogger = new sig.plugin.TwosideKeeper.Logging.HeartbeatLogger(); habitat_data = new Habitation(); habitat_data.loadLocationHashesFromConfig(); @@ -1331,10 +1333,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { sender.sendMessage(ChatColor.WHITE+"To view a specific player's usage, use "+ChatColor.GREEN+"\"/debugreport \""); sender.sendMessage(ChatColor.WHITE+"To view specific entities' usage, use "+ChatColor.GREEN+"\"/debugreport ALLENTS\""); sender.sendMessage(ChatColor.WHITE+"To view heartbeat timings, use "+ChatColor.GREEN+"\"/debugreport heartbeat\""); + sender.sendMessage(ChatColor.WHITE+"To view item pickup timings, use "+ChatColor.GREEN+"\"/debugreport pickup\""); } else { if (args[0].equalsIgnoreCase("heartbeat")) { sender.sendMessage("Heartbeat Timings:"); sender.sendMessage(HeartbeatLogger.outputReport()); + } else + if (args[0].equalsIgnoreCase("pickup")) { + sender.sendMessage("Item Pickup Timings:"); + sender.sendMessage(PickupLogger.outputReport()); } else if (args[0].equalsIgnoreCase("ALLENTS")) { sender.sendMessage("Individual Structures for all Living Entities:"); @@ -2742,6 +2749,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //Update player max health. Check equipment too. setPlayerMaxHealth(ev.getPlayer()); + FilterCubeItem.populateFilterCubeItemList(ev.getPlayer()); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard players set "+ev.getPlayer().getName()+" Deaths "+ev.getPlayer().getStatistic(Statistic.DEATHS)); GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.GLOWING,ev.getPlayer()); GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.NIGHT_VISION,ev.getPlayer()); @@ -3343,12 +3351,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { */ if (PlayerMode.getPlayerMode(p)==PlayerMode.BARBARIAN && ev.getRightClicked() instanceof LivingEntity) { aPlugin.API.swingOffHand(p); - if (pd.weaponcharges>=10 && (pd.weaponcharges<30 || !p.isSneaking())) { + if (pd.weaponcharges>=10 && (pd.weaponcharges<30 || !p.isSneaking()) && pd.lastusedbarbability+10<=TwosideKeeper.getServerTickTime()) { //Apply a stronger attack. + pd.lastusedbarbability=TwosideKeeper.getServerTickTime(); CustomDamage.ApplyDamage(0, p, (LivingEntity)ev.getRightClicked(), p.getInventory().getExtraContents()[0], "Power Swing"); } else - if (pd.weaponcharges>=30 && p.isSneaking()) { + if (pd.weaponcharges>=30 && p.isSneaking() && pd.lastusedbarbability+10<=TwosideKeeper.getServerTickTime()) { //Apply Sweep Up Attack. + + pd.lastusedbarbability=TwosideKeeper.getServerTickTime(); pd.weaponcharges-=30; CustomDamage.IncreaseLifestealStacks(p, pd.lifestealstacks); GenericFunctions.sendActionBarMessage(p, ""); @@ -4512,7 +4523,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (!Christmas.ChristmasPlaceEvent(ev)) { return; } - + TwosideKeeper.log("1- Cancelled? "+ev.isCancelled(), 0); if (ev.getBlockPlaced().getType()==Material.CHEST || ev.getBlockPlaced().getType()==Material.TRAPPED_CHEST) { //Check for a chest or trapped chest around each side of the block. @@ -4534,7 +4545,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } - + + TwosideKeeper.log("2- Cancelled? "+ev.isCancelled(), 0); if (WorldShop.isPlaceableWorldShop(ev.getItemInHand())) { if (BlockUtils.LocationInFrontOfBlockIsFree(ev.getBlockPlaced())) { //ev.getPlayer().sendMessage("ALLOWED!"); @@ -4545,6 +4557,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } return; } + TwosideKeeper.log("3- Cancelled? "+ev.isCancelled(), 0); if (ev.getItemInHand().hasItemMeta() && ev.getItemInHand().getItemMeta().hasLore() && @@ -4554,21 +4567,25 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.setCancelled(true); return; } - + + TwosideKeeper.log("4- Cancelled? "+ev.isCancelled(), 0); if (Artifact.isArtifact(ev.getItemInHand()) && !GenericFunctions.isArtifactEquip(ev.getItemInHand())) { ev.setCancelled(true); return; } + TwosideKeeper.log("5- Cancelled? "+ev.isCancelled(), 0); if (ItemSet.isSetItem(ev.getItemInHand())) { ev.setCancelled(true); return; } - + + TwosideKeeper.log("6- Cancelled? "+ev.isCancelled(), 0); if (BaublePouch.isBaublePouch(ev.getItemInHand())) { //Do not allow bauble pouches to be built. ev.setCancelled(true); return; } + TwosideKeeper.log("7- Cancelled? "+ev.isCancelled(), 0); } @EventHandler(priority=EventPriority.LOWEST,ignoreCancelled = true) @@ -5029,15 +5046,16 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static void sendNotReadyCastMessage(Player p, String string) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); if (pd.lastFailedCastTime+20=TwosideKeeper.getServerTickTime()) { + if (pd.lastFailedCastTime+40>=TwosideKeeper.getServerTickTime()) { pd.lastFailedCastTime=TwosideKeeper.getServerTickTime(); - p.sendTitle("", ""); + pd.customtitle.modifySmallCenterTitle("", 0); } } private void UpdateUnstoppableTeamBuff(Player p, PlayerStructure pd) { @@ -5339,6 +5357,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } ItemSet.updateItemSets(p); + if (ev.getInventory().getType()==InventoryType.HOPPER && + ev.getInventory().getTitle()!=null) { + FilterCubeItem.populateFilterCubeItemList((Player)ev.getPlayer()); + } } } public void DropDeathInventoryContents(Player p, Location deathloc) { @@ -5485,7 +5507,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener { @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) public void onInventoryUpdate(InventoryUpdateEvent ev) { - FilterCubeItem.populateFilterCubeItemList(ev.getPlayer()); + if (ItemCubeUtils.isItemCubeMaterial(ev.getItemStack().getType())) { + FilterCubeItem.populateFilterCubeItemList(ev.getPlayer()); + } ClearOutIgnoredUUIDs(ev.getPlayer()); } @@ -6652,6 +6676,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //Spill some XP out of the damaged target. dmgdealt += pd.thorns_amt; pd.thorns_amt=0; + pd.customtitle.updateSideTitleStats(p); } CustomDamage.ApplyDamage(dmgdealt, ev.getDamager(), (LivingEntity)ev.getEntity(), null, ev.getCause().name(), CustomDamage.TRUEDMG); ev.setCancelled(true); @@ -6679,7 +6704,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { int flags = pd.lasthitproperties; pd.target=(LivingEntity)ev.getEntity(); pd.damagedealt=dmgdealt; - displayTitle(shooter,pd,flags); + pd.lastattack=TwosideKeeper.getServerTickTime(); + //displayTitle(shooter,pd,flags); + LivingEntity lasttarget = pd.target; + Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, () -> { + updateHealthbarDisplay(shooter,lasttarget,pd.damagedealt,flags); + pd.customtitle.update(); + },1); } } else { ItemStack weapon = null; @@ -6696,6 +6727,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { CustomDamage.ApplyDamage(pd.vendetta_amt, ev.getDamager(), (LivingEntity)ev.getEntity(), null, "Vendetta"); pd.vendetta_amt=0.0; GenericFunctions.sendActionBarMessage(p, ChatColor.YELLOW+"Vendetta: "+ChatColor.GREEN+Math.round(pd.vendetta_amt)+" dmg stored",true); + pd.customtitle.updateSideTitleStats(p); ev.setCancelled(true); } else { CustomDamage.ApplyDamage(0, ev.getDamager(), (LivingEntity)ev.getEntity(), weapon, null); @@ -6746,6 +6778,109 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } + public static void updateHealthbarDisplay(Player p, LivingEntity target, double damage, int flags) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + updateHealthbarDisplay(p,target); + if (pd.damagelogging) { + if (Bukkit.getPlayer(pd.name)!=null && target!=null) { + if (Bukkit.getPlayer(pd.name)!=null && target!=null) { + ChatColor col = ChatColor.AQUA; + if (CustomDamage.isFlagSet(pd.lasthitproperties, CustomDamage.IS_CRIT)) { + col = ChatColor.YELLOW; + } else + if (CustomDamage.isFlagSet(pd.lasthitproperties, CustomDamage.IS_PREEMPTIVE)) { + pd.customtitle.modifyLargeCenterTitle(ChatColor.BLUE+"!", 20); + col = ChatColor.BLUE; + } else + if (CustomDamage.isFlagSet(pd.lasthitproperties, CustomDamage.IS_HEADSHOT)) { + col = ChatColor.DARK_RED; + } else + if (CustomDamage.isFlagSet(pd.lasthitproperties, CustomDamage.IS_THORNS)) { + col = ChatColor.GRAY; + } + DecimalFormat df = new DecimalFormat("0.00"); + if (!CustomDamage.isFlagSet(pd.lasthitproperties, CustomDamage.IS_THORNS) || + pd.customtitle.getTitles()[1].length()==0) { + pd.customtitle.modifyLargeCenterTitle(col+""+df.format(pd.damagedealt), 20); + } + //updateTitle(shooter,col+""+df.format(pd.damagedealt)); + } + } + } + } + + public static void updateHealthbarDisplay(Player p, LivingEntity target) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + if (Bukkit.getPlayer(pd.name)!=null && target!=null) { + String MonsterName = target.getType().toString().toLowerCase(); + MonsterName = GenericFunctions.getDisplayName(target); + + final String finalMonsterName = MonsterName; + String heartdisplay = "", remainingheartdisplay = ""; + int color1=0,color2=1; + double health=target.getHealth(); + double maxhealth=target.getMaxHealth(); + final double orghealth = health; + if (health>20) { + while (health>20) { + color1++; + color2++; + health-=20; + } + } + for (int i=0;i20) { + if (orghealth>20) { + for (int i=0;i<10;i++) { + heartdisplay+=Character.toString('♥'); + } + } else { + for (int i=0;i<10;i++) { + heartdisplay+=Character.toString('♡'); + } + } + } else { + for (int i=0;i2000) { + finalheartdisplay=GetHeartColor(GetFactorialAmt(target.getHealth()))+FinalHealthDisplay(target.getHealth())+" / "+FinalHealthDisplay(target.getMaxHealth()); + //p.sendTitle(message1, finalMonsterName+" "+finalheartdisplay+" "+ChatColor.RESET); + pd.customtitle.modifySmallCenterTitle(finalMonsterName+ChatColor.RESET+" "+finalheartdisplay+" "+ChatColor.RESET, 100); + } else { + pd.customtitle.modifySmallCenterTitle(finalMonsterName+ChatColor.RESET+" "+finalheartdisplay+" "+ChatColor.RESET+ChatColor.DARK_GRAY+"x"+(int)(target.getHealth()/20+1), 100); + //p.sendTitle(message1, finalMonsterName+" "+finalheartdisplay+" "+ChatColor.RESET+ChatColor.DARK_GRAY+"x"+(int)(target.getHealth()/20+1)); + } + } + //pd.customtitle.updateTitle(p, true); + } + + + private static String FinalHealthDisplay(double maxHealth) { + DecimalFormat df = new DecimalFormat("0"); + if (maxHealth>=1000000) { + return df.format(maxHealth/1000000)+"M"; + } else { + return df.format(maxHealth/1000)+"k"; + } + } + + private static int GetFactorialAmt(double health) { + double startingamt = health; + int numb = 0; + while (startingamt>1000) { + startingamt/=1000; + numb++; + } + return numb; + } private int getNumberofPiecesWithThorns(Player p) { int pieces=0; for (ItemStack item : GenericFunctions.getArmor(p)) { @@ -8166,8 +8301,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } Player p = ev.getPlayer(); //log("Item Right now: "+ev.getItem().getItemStack(),0); + long time = System.nanoTime(); + long totaltime = System.nanoTime(); + InventoryUpdateEvent.TriggerUpdateInventoryEvent(p,ev.getItem().getItemStack(),UpdateReason.PICKEDUPITEM); + TwosideKeeper.PickupLogger.AddEntry("Trigger Update Inventory Event", (int)(System.nanoTime()-time));time=System.nanoTime(); ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItem().getItemStack()); + TwosideKeeper.PickupLogger.AddEntry("Fill Partial Slots First", (int)(System.nanoTime()-time));time=System.nanoTime(); //TwosideKeeper.log(" New Stack is: "+newstack,0); if (newstack==null || newstack.getType()==Material.AIR) { SoundUtils.playGlobalSound(ev.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(ev.getItem().getItemStack())); @@ -8177,10 +8317,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener { GenericFunctions.giveItem(p, it.getItemStack()); } ev.getItem().remove();ev.setCancelled(true);return;} + TwosideKeeper.PickupLogger.AddEntry("Pickup Item when it's null", (int)(System.nanoTime()-time));time=System.nanoTime(); ev.getItem().setItemStack(newstack); //log("Pickup Metadata: "+ev.getItem().getItemStack().getItemMeta().toString(),0); //GenericFunctions.updateSetItems(p.getInventory()); GenericFunctions.UpdateItemLore(ev.getItem().getItemStack()); + TwosideKeeper.PickupLogger.AddEntry("Update Item Lore", (int)(System.nanoTime()-time));time=System.nanoTime(); /*//LEGACY CODE if (!ev.isCancelled()) { if (ev.getItem().getItemStack().getType()==Material.ARROW && @@ -8197,8 +8339,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener { }*/ HandlePickupAchievements(ev.getPlayer(), ev.getItem().getItemStack()); + TwosideKeeper.PickupLogger.AddEntry("Pickup Achievements", (int)(System.nanoTime()-time));time=System.nanoTime(); boolean handled = AutoEquipItem(ev.getItem().getItemStack(), p); + TwosideKeeper.PickupLogger.AddEntry("Auto Equip Item Check", (int)(System.nanoTime()-time));time=System.nanoTime(); if (handled) { PlayPickupParticle(ev.getPlayer(),ev.getItem()); ev.getItem().remove(); @@ -8213,12 +8357,14 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.setCancelled(true); return; } + TwosideKeeper.PickupLogger.AddEntry("Auto Consume Item Check", (int)(System.nanoTime()-time));time=System.nanoTime(); if (ev.getItem().hasMetadata("INFINITEARROW")) { //Not allowed to be picked up, this was an infinite arrow. TwosideKeeper.log("INFINITE PICKUP", 5); ev.setCancelled(true); return; } + TwosideKeeper.PickupLogger.AddEntry("Infinite Arrow Check", (int)(System.nanoTime()-time));time=System.nanoTime(); if (GenericFunctions.isValidArrow(ev.getItem().getItemStack()) && ArrowQuiver.getArrowQuiverInPlayerInventory(p)!=null) { ev.setCancelled(true); @@ -8228,6 +8374,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { AddToPlayerInventory(ev.getItem().getItemStack(), p); return; } + TwosideKeeper.PickupLogger.AddEntry("Valid Arrow check", (int)(System.nanoTime()-time));time=System.nanoTime(); /** * MUST BE HANDLED AFTER EVERYTHING ELSE. @@ -8249,6 +8396,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.getItem().setItemStack(remaining[0]); } } + TwosideKeeper.PickupLogger.AddEntry("Filter Cube Check", (int)(System.nanoTime()-time));time=System.nanoTime(); //TwosideKeeper.log("(1)Item is "+ev.getItem().getItemStack(), 0); if (ev.getItem().getItemStack().getType().isBlock() && InventoryUtils.isCarryingVacuumCube(p)) { @@ -8264,6 +8412,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ev.getItem().setItemStack(remaining[0]); } } + TwosideKeeper.PickupLogger.AddEntry("Vacuum Cube Check", (int)(System.nanoTime()-time));time=System.nanoTime(); //ItemCubeUtils.pickupAndAddItemCubeToGraph(ev.getItem().getItemStack(), p); @@ -8277,6 +8426,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { PlayPickupParticle(ev.getPlayer(),ev.getItem()); ev.getItem().remove(); ItemSet.updateItemSets(ev.getPlayer()); + TwosideKeeper.PickupLogger.AddEntry("Update Item Sets", (int)(System.nanoTime()-time));time=System.nanoTime(); return; } public static void PlayPickupParticle(Player p, Item item) { @@ -8309,6 +8459,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static boolean AutoEquipItem(ItemStack item, Player p) { PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + if (PlayerMode.getPlayerMode(p)==PlayerMode.NORMAL && PlayerUtils.PlayerIsInCombat(p)) { + return false; + } if (item.getType().toString().contains("BOOTS") || item.getType().toString().contains("LEGGINGS") || item.getType().toString().contains("CHESTPLATE") || @@ -8370,7 +8523,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return true; } else if (armor.getType().toString().contains("_AXE") && - (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) && + PlayerMode.getPlayerMode(p)!=PlayerMode.RANGER && + ((p.getEquipment().getItemInMainHand().getType()==Material.AIR) || p.getInventory().getExtraContents()[0]==null) && pd.equipweapons) { if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) { p.getEquipment().setItemInMainHand(armor); @@ -10076,140 +10230,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } return null; } - public static void updateTitle(final Player p, boolean headshot, boolean preemptive) { - if (preemptive) { - updateTitle(p,ChatColor.BLUE+"!"); - /* - Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - public void run() { - updateTitle(p); - } - },15);*/ - } else { - updateTitle(p, headshot); - } - } - - - public static void updateTitle(final Player p, boolean headshot) { - if (headshot) { - updateTitle(p,ChatColor.DARK_RED+"HEADSHOT !"); - TwosideKeeper.log("Run here.", 5); - /* - Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - public void run() { - updateTitle(p); - } - },15);*/ - } else { - updateTitle(p); - } - } - public static void updateTitle(final Player p, PlayerStructure pd) { - Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() { - public void run() { - DecimalFormat df = new DecimalFormat("0.0"); - updateTitle(p,ChatColor.AQUA+""+df.format(pd.damagedata.getLastDamageDealt())); - } - },1); - } - - public static void updateTitle(final Player p) { - updateTitle(p, ""); - } - - public static void updateTitle(final Player p, final String message1) { - //Updates the target title for this player. - PlayerStructure pd = (PlayerStructure)playerdata.get(p.getUniqueId()); - final PlayerStructure pd2=pd; - Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("TwosideKeeper"), new Runnable() { - @SuppressWarnings("deprecation") - public void run() { - if (Bukkit.getPlayer(pd2.name)!=null && pd2.target!=null) { - String MonsterName = pd2.target.getType().toString().toLowerCase(); - MonsterName = GenericFunctions.getDisplayName(pd2.target); - - final String finalMonsterName = MonsterName; - String heartdisplay = "", remainingheartdisplay = ""; - int color1=0,color2=1; - double health=pd2.target.getHealth(); - double maxhealth=pd2.target.getMaxHealth(); - final double orghealth = health; - if (health>20) { - while (health>20) { - color1++; - color2++; - health-=20; - } - } - for (int i=0;i20) { - if (orghealth>20) { - for (int i=0;i<10;i++) { - heartdisplay+=Character.toString('♥'); - } - } else { - for (int i=0;i<10;i++) { - heartdisplay+=Character.toString('♡'); - } - } - } else { - for (int i=0;i2000) { - finalheartdisplay=GetHeartColor(GetFactorialAmt(pd2.target.getHealth()))+FinalHealthDisplay(pd2.target.getHealth())+" / "+FinalHealthDisplay(pd2.target.getMaxHealth()); - p.sendTitle(message1, finalMonsterName+" "+finalheartdisplay+" "+ChatColor.RESET); - } else { - p.sendTitle(message1, finalMonsterName+" "+finalheartdisplay+" "+ChatColor.RESET+ChatColor.DARK_GRAY+"x"+(int)(pd2.target.getHealth()/20+1)); - } - }} - - private String FinalHealthDisplay(double maxHealth) { - DecimalFormat df = new DecimalFormat("0"); - if (maxHealth>=1000000) { - return df.format(maxHealth/1000000)+"M"; - } else { - return df.format(maxHealth/1000)+"k"; - } - } - - private int GetFactorialAmt(double health) { - double startingamt = health; - int numb = 0; - while (startingamt>1000) { - startingamt/=1000; - numb++; - } - return numb; - }} - ,1); - if (Bukkit.getPlayer(pd2.name)!=null) { - if (pd.title_task!=-1) { - Bukkit.getScheduler().cancelTask(pd.title_task); - pd.title_task=-1; - } - pd.title_task=Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("TwosideKeeper"), new Runnable() { - @SuppressWarnings("deprecation") - public void run() { - if (Bukkit.getPlayer(pd2.name)!=null) { - PlayerStructure pd = (PlayerStructure)playerdata.get(p.getUniqueId()); - pd.title_task=-1; - p.sendTitle("",""); - } - } - },15); - } - } /* @@ -10518,7 +10539,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { return tc; } - private void displayTitle(Player shooter, PlayerStructure pd, int flags) { + /* private void displayTitle(Player shooter, PlayerStructure pd, int flags) { if (!pd.damagelogging) { updateTitle(shooter,CustomDamage.isFlagSet(flags, CustomDamage.IS_HEADSHOT),CustomDamage.isFlagSet(flags, CustomDamage.IS_PREEMPTIVE)); } else { @@ -10535,7 +10556,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { DecimalFormat df = new DecimalFormat("0.00"); updateTitle(shooter,col+""+df.format(pd.damagedealt)); } - } + }*/ public static void logHealth(final LivingEntity l,final double hp,final double dmg, Entity damager) { Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() { diff --git a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java index d11defd..6286c38 100644 --- a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java +++ b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java @@ -266,6 +266,9 @@ final class runServerHeartbeat implements Runnable { AutoConsumeFoods(p); TwosideKeeper.HeartbeatLogger.AddEntry("Auto Consume Food", (int)(System.nanoTime()-time));time=System.nanoTime(); } + + updateCustomTitle(p, pd); + TwosideKeeper.HeartbeatLogger.AddEntry("Update Custom Title", (int)(System.nanoTime()-time));time=System.nanoTime(); } TwosideKeeper.HeartbeatLogger.AddEntry(ChatColor.BOLD+"->Not AFK Functions"+ChatColor.RESET, (int)(System.nanoTime()-notafktime)); @@ -347,6 +350,11 @@ final class runServerHeartbeat implements Runnable { TwosideKeeper.HeartbeatLogger.AddEntry(ChatColor.LIGHT_PURPLE+"Total Server Heartbeat", (int)(System.nanoTime()-totaltime));totaltime=System.nanoTime(); } + private void updateCustomTitle(Player p, PlayerStructure pd) { + //pd.customtitle.updateTitle(p); + pd.customtitle.checkExpiredTitles(); + } + private void removeRegenerationStacks(Player p) { if (Buff.hasBuff(p, "REGENERATION")) { Buff b = Buff.getBuff(p, "REGENERATION"); @@ -725,9 +733,11 @@ final class runServerHeartbeat implements Runnable { pd.vendetta_amt=0; pd.thorns_amt=0; pd.weaponcharges=0; + pd.customtitle.updateSideTitleStats(Bukkit.getPlayer(pd.name)); } if (pd.vendetta_amt>0 && pd.lastvendettastack+200