diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 8602d87..496d94f 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/projectBuilder.xml b/projectBuilder.xml index aa92377..55588ea 100644 --- a/projectBuilder.xml +++ b/projectBuilder.xml @@ -3,6 +3,6 @@ - + \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index b959e2a..1b995ea 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.10.12 +version: 3.10.13 loadbefore: [aPlugin] commands: money: diff --git a/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java b/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java index cdc13f7..5bb2476 100644 --- a/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java +++ b/src/sig/plugin/TwosideKeeper/ActionBarBuffUpdater.java @@ -151,7 +151,11 @@ public class ActionBarBuffUpdater{ if (amplifier==12) { return "Ⅻ"; } else { - return Integer.toString(amplifier); + if (amplifier!=0) { + return Integer.toString(amplifier); + } else { + return ""; + } } } diff --git a/src/sig/plugin/TwosideKeeper/Boss/MegaWither.java b/src/sig/plugin/TwosideKeeper/Boss/MegaWither.java index 9aef167..7e522d3 100644 --- a/src/sig/plugin/TwosideKeeper/Boss/MegaWither.java +++ b/src/sig/plugin/TwosideKeeper/Boss/MegaWither.java @@ -1,5 +1,6 @@ package sig.plugin.TwosideKeeper.Boss; +import org.bukkit.ChatColor; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; import org.bukkit.potion.PotionEffectType; @@ -7,6 +8,7 @@ import org.bukkit.potion.PotionEffectType; import sig.plugin.TwosideKeeper.ChargeZombie; import sig.plugin.TwosideKeeper.EliteMonster; import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.TwosideKeeperAPI; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; public class MegaWither extends EliteMonster{ @@ -27,8 +29,13 @@ public class MegaWither extends EliteMonster{ ignoreAllOtherTargets(); randomlyDropDown(); destroyNearbyBlocks(); + setupName(); } + private void setupName() { + TwosideKeeperAPI.setCustomLivingEntityName(m, ChatColor.DARK_RED+"Mega Wither"); + } + private void destroyNearbyBlocks() { if (targetlist.size()>0) { ChargeZombie.BreakBlocksAroundArea(m, 2); diff --git a/src/sig/plugin/TwosideKeeper/CustomDamage.java b/src/sig/plugin/TwosideKeeper/CustomDamage.java index ed86de2..8967cd4 100644 --- a/src/sig/plugin/TwosideKeeper/CustomDamage.java +++ b/src/sig/plugin/TwosideKeeper/CustomDamage.java @@ -565,6 +565,7 @@ public class CustomDamage { giveAbsorptionHealth(p); reduceKnockback(p); reduceSwiftAegisBuff(p); + restoreHealthToPartyMembersWithProtectorSet(p); if (!isFlagSet(flags,NOAOE)) { if (damage0) { - target.setCustomName(split[0]+ChatColor.RESET+" "+suffix); - } else { - target.setCustomName(split[0]); - } + /*if (target.getCustomName()==null) { + //Setup name. + target.setCustomName(GenericFunctions.CapitalizeFirstLetters(target.getType().name().replace("_", " "))); + } + if (!target.getCustomName().contains(ChatColor.RESET+" ")) { //Append our separator character. + target.setCustomName(target.getCustomName()+ChatColor.RESET+" "); + } + //Now split it using that as our separator. + String[] split = target.getCustomName().split(ChatColor.RESET+" "); + + String suffix = ActionBarBuffUpdater.getActionBarPrefix(target); + + if (suffix.length()>0) { + target.setCustomName(split[0]+ChatColor.RESET+" "+suffix); + } else { + target.setCustomName(split[0]); + }*/ + if (!(target instanceof Player)) { + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(target); + les.suffix_bar=ActionBarBuffUpdater.getActionBarPrefix(target); } } @@ -1817,6 +1835,7 @@ public class CustomDamage { if (!p.isBlocking()) { SoundUtils.playGlobalSound(p.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 3.0f, 1.0f); } else { + refundRejuvenationCooldown(p); SoundUtils.playGlobalSound(p.getLocation(), Sound.BLOCK_ANVIL_LAND, 0.2f, 3.0f); } PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); @@ -1834,6 +1853,12 @@ public class CustomDamage { return true; } + private static void refundRejuvenationCooldown(Player p) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.last_rejuvenate-=40; + aPlugin.API.sendCooldownPacket(p, Material.SHIELD, GenericFunctions.GetRemainingCooldownTime(p, pd.last_rejuvenate, TwosideKeeper.REJUVENATE_COOLDOWN)); + } + private static double GetAttackRate(Entity damager) { double attackrate = 0.0; if (damager instanceof Player) { @@ -2060,6 +2085,7 @@ public class CustomDamage { double darknessdiv = 0; double playermodediv = 0; double witherdiv = 0; + double setbonusdiv = 0; double artifactmult = 0; if (target instanceof LivingEntity) { @@ -2077,6 +2103,15 @@ public class CustomDamage { darknessdiv += ItemSet.GetTotalBaseAmount(p, ItemSet.RUDOLPH)/100d; } dmgreductiondiv += ItemSet.GetTotalBaseAmount(p, ItemSet.LUCI)/100d; + dmgreductiondiv += ItemSet.GetTotalBaseAmount(p, ItemSet.PROTECTOR)/100d; + for (Player pl : PartyManager.getPartyMembers(p)) { + if (!pl.equals(p)) { + if (PlayerMode.getPlayerMode(pl)==PlayerMode.DEFENDER && + ItemSet.HasSetBonusBasedOnSetBonusCount(pl, ItemSet.PROTECTOR, 2)) { + setbonusdiv += 0.1*ItemSet.GetPlayerModeSpecificMult(p); + } + } + } } else { LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(target); if (!les.checkedforcubes) { @@ -2262,6 +2297,7 @@ public class CustomDamage { *(1d-dmgreductiondiv) *(1d-magmacubediv) *(1d-darknessdiv) + *(1d-setbonusdiv) *(1d-((partylevel*10d)/100d)) *(1d-tacticspct) *(1d-playermodediv) diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index c1c2567..a01e50e 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -2547,14 +2547,17 @@ public class GenericFunctions { } public static void RefreshBuffColor(LivingEntity ent, int stackamt) { - if (ent instanceof LivingEntity) { + if (ent instanceof LivingEntity && !(ent instanceof Player)) { LivingEntity m = (LivingEntity)ent; m.setCustomNameVisible(true); + /* if (m.getCustomName()!=null) { m.setCustomName(getDeathMarkColor(stackamt)+ChatColor.stripColor(GenericFunctions.getDisplayName(m))); } else { m.setCustomName(getDeathMarkColor(stackamt)+CapitalizeFirstLetters(m.getType().toString().replace("_", " "))); - } + }*/ + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); + les.prefix=getDeathMarkColor(stackamt)+""; } } @@ -3836,7 +3839,7 @@ public class GenericFunctions { TwosideKeeper.log("dmg mult is "+damage_mult,4); dmg = basedmg * damage_mult; if (ent instanceof Player) {TwosideKeeper.log("Damage is "+dmg, 5);} - CustomDamage.ApplyDamage(dmg, damager, (LivingEntity)ent, null, reason, CustomDamage.NONE); + CustomDamage.ApplyDamage(dmg, damager, (LivingEntity)ent, null, reason, CustomDamage.IGNORE_DAMAGE_TICK); //subtractHealth((LivingEntity)nearbyentities.get(i),null,NewCombat.CalculateDamageReduction(dmg, (LivingEntity)nearbyentities.get(i), null)); } } @@ -4789,14 +4792,19 @@ public class GenericFunctions { if (!TwosideKeeper.suppressed_entities.contains(ent)) { TwosideKeeper.suppressed_entities.add(ent); } - if (ent instanceof LivingEntity) { - //MonsterStructure.getMonsterStructure((Monster)ent).setGlobalGlow(GlowAPI.Color.BLACK); - LivingEntityStructure.GetLivingEntityStructure((LivingEntity)ent).UpdateGlow(); - } else { - GlowAPI.setGlowing(ent, GlowAPI.Color.BLACK, Bukkit.getOnlinePlayers()); - } if (ent instanceof LivingEntity) { LivingEntity l = (LivingEntity)ent; + Buff.addBuff(l, "SUPPRESSION", new Buff("Suppression", ticks, 0, org.bukkit.Color.NAVY, ChatColor.DARK_GRAY+""+ChatColor.BOLD+"✖", false)); + if (!(ent instanceof Player)) { + //MonsterStructure.getMonsterStructure((Monster)ent).setGlobalGlow(GlowAPI.Color.BLACK); + LivingEntityStructure.GetLivingEntityStructure((LivingEntity)ent).UpdateGlow(); + } else { + if (ent instanceof Player) { + Player p = (Player)ent; + aPlugin.API.setPlayerSpeedMultiplier(p, 0); + } + GlowAPI.setGlowing(ent, GlowAPI.Color.BLACK, Bukkit.getOnlinePlayers()); + } //l.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,ticks,99)); TwosideKeeper.log("Base Value: "+l.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue(), 5); l.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0d); @@ -4883,10 +4891,17 @@ public class GenericFunctions { public static String getDisplayName(LivingEntity ent) { //Strips off the suffix of a mob. - if (ent.getCustomName()==null) { + /*if (ent.getCustomName()==null) { return GenericFunctions.CapitalizeFirstLetters(ent.getType().name().replace("_", " ")); } else { return ent.getCustomName().split(ChatColor.RESET+" ")[0]; + }*/ + if (!(ent instanceof Player)) { + LivingEntityStructure struct = LivingEntityStructure.GetLivingEntityStructure(ent); + return struct.getActualName(); + } else { + Player p = (Player)ent; + return p.getName(); } } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java index 2408f16..03f3c6a 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java @@ -551,6 +551,9 @@ public enum ItemSet { lore.add(ChatColor.GRAY+" time in another direction."); }break; case SONGSTEEL:{ + lore.add(ChatColor.WHITE+"Successful blocks reduce the cooldown of "); + lore.add(ABILITY_LABEL+"Rejuvenation"+ABILITY_LABEL_END+" by 2 seconds."); + lore.add(ChatColor.WHITE+""+ChatColor.ITALIC+""); lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Max Health"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Absorption Health (30 seconds)"); @@ -892,9 +895,9 @@ public enum ItemSet { lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"of this set. "+PlayerMode.RANGER.getColor()+PlayerMode.RANGER.getName()+"s"+ChatColor.GOLD+" receive only half the effects."); lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Damage Reduction to other party members"); - lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Health to other party members."); + lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health to other party members."); lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Reinforce"+ABILITY_LABEL_END+" - Each hit taken restores"); - lore.add(" "+ChatColor.WHITE+" "+ItemSet.GetBaseAmount(set, tier, 4)+"Health to your party members."); + lore.add(" "+ChatColor.WHITE+" "+ItemSet.GetBaseAmount(set, tier, 4)+" Health to other party members."); lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Unstoppable Team"+ABILITY_LABEL_END); lore.add(ChatColor.GRAY+" Press the swap item key to channel for 1 second,"); lore.add(ChatColor.GRAY+" creating a "+(tier*20)+" Health shield for 30"); @@ -1119,4 +1122,17 @@ public enum ItemSet { public static int GetTier(ItemStack item) { return GetItemTier(item); } + + /** + * Returns Mode-specific reductions in terms of HP gains. + */ + public static double GetPlayerModeSpecificMult(Player p) { + if (PlayerMode.isSlayer(p)) { + return 0; + } else + if (PlayerMode.isRanger(p)) { + return 0.5; + } else + return 1; + } } diff --git a/src/sig/plugin/TwosideKeeper/LivingEntityStructure.java b/src/sig/plugin/TwosideKeeper/LivingEntityStructure.java index cd4e062..d00ba9a 100644 --- a/src/sig/plugin/TwosideKeeper/LivingEntityStructure.java +++ b/src/sig/plugin/TwosideKeeper/LivingEntityStructure.java @@ -16,7 +16,11 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.DebugUtils; public class LivingEntityStructure { public LivingEntity target; - public String original_name=""; + public String base_name=""; + public String difficulty_modifier=""; + public String prefix=""; + public String suffix=""; + public String suffix_bar=""; public LivingEntity m; public boolean isLeader=false; public boolean isElite=false; @@ -37,22 +41,26 @@ public class LivingEntityStructure { public long lastBurnTick=0; public float MoveSpeedMultBeforeCripple=1f; + final static String MODIFIED_NAME_CODE = ChatColor.RESET+""+ChatColor.RESET+""+ChatColor.RESET; + final static String MODIFIED_NAME_DELIMITER = ChatColor.RESET+";"+ChatColor.RESET; + public LivingEntityStructure(LivingEntity m) { target=null; - original_name=GetOriginalName(m); - //TwosideKeeper.log("Original name is "+original_name, 0); + base_name=GetOriginalName(m); + //TwosideKeeper.log("Original name is "+base_name, 0); this.m=m; this.original_movespd = m.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue(); } public LivingEntityStructure(LivingEntity m, LivingEntity target) { this.target=target; - original_name=GetOriginalName(m); + base_name=GetOriginalName(m); + //TwosideKeeper.log("Original name is "+base_name, 0); this.m=m; this.original_movespd = m.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue(); } public LivingEntityStructure(LivingEntity m, LivingEntity target, BossMonster bm) { this.target=target; - original_name=bm.getName(); + base_name=bm.getName(); this.m=m; this.bm=bm; this.original_movespd = m.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue(); @@ -60,12 +68,48 @@ public class LivingEntityStructure { private String GetOriginalName(LivingEntity m) { if (m.getCustomName()!=null) { - return m.getCustomName(); + //TwosideKeeper.log("Custom Name is "+m.getCustomName(), 0); + if (!isModifiedName(m.getCustomName())) { + //TwosideKeeper.log(" NOT A MODIFIED NAME! "+m.getCustomName(), 0); + return m.getCustomName(); + } else { + String[] splitter = m.getCustomName().split(MODIFIED_NAME_DELIMITER); + difficulty_modifier = splitter[0]; + //TwosideKeeper.log(" Set Difficulty to "+splitter[0], 0); + //TwosideKeeper.log(" Set Base Name to "+splitter[1], 0); + return splitter[1]; + } } else { return GenericFunctions.CapitalizeFirstLetters(m.getType().name().replace("_", " ")); } } + private boolean isModifiedName(String customName) { + return customName.contains(MODIFIED_NAME_DELIMITER); + } + public String getActualName() { + StringBuilder sb = new StringBuilder(prefix); + if (prefix.length()>0 && difficulty_modifier.length()>0) { + sb.append(" "); + } + sb.append(difficulty_modifier); + if (difficulty_modifier.length()>0 && base_name.length()>0) { + sb.append(" "); + } + sb.append(base_name); + if (base_name.length()>0 && suffix.length()>0) { + sb.append(" "); + } + sb.append(suffix); + if (suffix.length()>0 && suffix_bar.length()>0) { + sb.append(" "); + } + sb.append(suffix_bar); + sb.append(MODIFIED_NAME_CODE); + //TwosideKeeper.log(prefix+","+difficulty_modifier+","+base_name+","+suffix+","+suffix_bar, 0); + return sb.toString(); + } + public LivingEntity GetTarget() { if (this.target!=null && !this.target.isDead()) { @@ -79,18 +123,19 @@ public class LivingEntityStructure { } public void SetLeader(boolean leader) { this.isLeader=leader; + //suffix=(suffix.length()>0)?suffix+" Leader":"Leader"; } public void SetElite(boolean elite) { this.isElite=elite; } public boolean hasOriginalName() { - return !this.original_name.equalsIgnoreCase(""); + return !this.base_name.equalsIgnoreCase(""); } public String getOriginalName() { if (hasOriginalName()) { - return this.original_name; + return this.base_name; } else { return ""; } @@ -155,28 +200,32 @@ public class LivingEntityStructure { } public static void UpdateMobName(LivingEntity ent) { - if (ent instanceof LivingEntity) { + if (ent instanceof LivingEntity && !(ent instanceof Player)) { LivingEntity m = (LivingEntity)ent; + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); m.setCustomNameVisible(false); - if (m.getCustomName()!=null) { - m.setCustomName(ChatColor.stripColor(GenericFunctions.getDisplayName(m))); - if (m.getCustomName().contains("Dangerous")) { + 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()); - } - m.setCustomName(ChatColor.DARK_RED+m.getCustomName()+ChatColor.RESET+" "); + } 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 (m.getCustomName().contains(" ")) { + if (les.suffix_bar.length()>0) { m.setCustomNameVisible(true); } + m.setCustomName(actualName); } } } @@ -197,4 +246,20 @@ public class LivingEntityStructure { } } } + public String getUnloadedName() { + StringBuilder sb = new StringBuilder(difficulty_modifier); + sb.append(ChatColor.RESET); + sb.append(";"); + sb.append(ChatColor.RESET); + sb.append(base_name); + return sb.toString(); + } + public static void setCustomLivingEntityName(LivingEntity l, String name) { + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(l); + les.base_name = name; + } + public static String getCustomLivingEntityName(LivingEntity l) { + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(l); + return les.base_name; + } } diff --git a/src/sig/plugin/TwosideKeeper/Monster/Dummy.java b/src/sig/plugin/TwosideKeeper/Monster/Dummy.java index e3779da..0a9284a 100644 --- a/src/sig/plugin/TwosideKeeper/Monster/Dummy.java +++ b/src/sig/plugin/TwosideKeeper/Monster/Dummy.java @@ -15,6 +15,7 @@ import org.bukkit.util.Vector; import sig.plugin.TwosideKeeper.CustomMonster; import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.TwosideKeeperAPI; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Utils.Classes.MovementModifier; @@ -29,7 +30,8 @@ public class Dummy extends CustomMonster{ public Dummy(LivingEntity m) { super(m); - m.setCustomName(ChatColor.MAGIC+" "+ChatColor.RESET+"Test Dummy"+ChatColor.MAGIC+" "); + //m.setCustomName(ChatColor.MAGIC+" "+ChatColor.RESET+"Test Dummy"+ChatColor.MAGIC+" "); + TwosideKeeperAPI.setCustomLivingEntityName(m, ChatColor.MAGIC+" "+ChatColor.RESET+"Test Dummy"+ChatColor.MAGIC+" "); m.setCustomNameVisible(true); this.spawnLoc = m.getLocation(); //m.setCollidable(false); diff --git a/src/sig/plugin/TwosideKeeper/Monster/Wither.java b/src/sig/plugin/TwosideKeeper/Monster/Wither.java index 01a5d35..ec06825 100644 --- a/src/sig/plugin/TwosideKeeper/Monster/Wither.java +++ b/src/sig/plugin/TwosideKeeper/Monster/Wither.java @@ -22,6 +22,7 @@ import sig.plugin.TwosideKeeper.CustomDamage; import sig.plugin.TwosideKeeper.CustomMonster; import sig.plugin.TwosideKeeper.MonsterController; import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.TwosideKeeperAPI; import sig.plugin.TwosideKeeper.HelperStructures.LivingEntityDifficulty; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils; @@ -69,6 +70,7 @@ public class Wither extends CustomMonster{ public void runTick() { if (m instanceof Monster) { RemoveInactivePlayers(); + setupName(); if (activeplayers.size()==0 && dmgbreakdown.size()>0) { DisplayFailedDPSReport(); @@ -120,7 +122,8 @@ public class Wither extends CustomMonster{ MonsterController.convertLivingEntity(ws, LivingEntityDifficulty.HELLFIRE); ws.setMaxHealth(ws.getMaxHealth()*6); ws.setHealth(ws.getMaxHealth()); - ws.setCustomName(ChatColor.RED+"Hellfire Wither Skeleton Minion"); + //ws.setCustomName(ChatColor.RED+"Hellfire Wither Skeleton Minion"); + TwosideKeeperAPI.setCustomLivingEntityName(ws, ChatColor.RED+"Wither Skeleton Minion"); if (((Monster) m).getTarget()!=null && ((Monster) m).getTarget().isValid() && !((Monster) m).getTarget().isDead()) { ws.setTarget(((Monster) m).getTarget()); @@ -130,6 +133,10 @@ public class Wither extends CustomMonster{ } } } + + private void setupName() { + TwosideKeeperAPI.setCustomLivingEntityName(m, ChatColor.DARK_RED+"Leader Wither"); + } private void RemoveInactivePlayers() { for (Player pl : activeplayers) { diff --git a/src/sig/plugin/TwosideKeeper/MonsterController.java b/src/sig/plugin/TwosideKeeper/MonsterController.java index 56a2dd1..fddcd6e 100644 --- a/src/sig/plugin/TwosideKeeper/MonsterController.java +++ b/src/sig/plugin/TwosideKeeper/MonsterController.java @@ -818,7 +818,7 @@ public class MonsterController { } public static LivingEntityDifficulty getLivingEntityDifficulty(LivingEntity m) { - if (m.getCustomName()!=null) { + /*if (m.getCustomName()!=null) { if (m.getCustomName().contains("Dangerous")) { return LivingEntityDifficulty.DANGEROUS; } else @@ -839,12 +839,32 @@ public class MonsterController { } } else { return LivingEntityDifficulty.NORMAL; + }*/ + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); + String difficulty_modifier = les.difficulty_modifier; + if (difficulty_modifier.contains("Dangerous")) { + return LivingEntityDifficulty.DANGEROUS; + } else + if (difficulty_modifier.contains("Deadly")) { + return LivingEntityDifficulty.DEADLY; + } else + if (difficulty_modifier.contains("Hellfire")) { + return LivingEntityDifficulty.HELLFIRE; + } else + if (difficulty_modifier.contains("Elite")) { + return LivingEntityDifficulty.ELITE; + } else + if (difficulty_modifier.contains("End ")) { + return LivingEntityDifficulty.END; + } else + { + return LivingEntityDifficulty.NORMAL; } } @Deprecated public static MonsterDifficulty getMonsterDifficulty(Monster m) { - if (m.getCustomName()!=null) { + /*if (m.getCustomName()!=null) { if (m.getCustomName().contains("Dangerous")) { return MonsterDifficulty.DANGEROUS; } else @@ -865,6 +885,26 @@ public class MonsterController { } } else { return MonsterDifficulty.NORMAL; + }*/ + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); + String difficulty_modifier = les.difficulty_modifier; + if (difficulty_modifier.contains("Dangerous")) { + return MonsterDifficulty.DANGEROUS; + } else + if (difficulty_modifier.contains("Deadly")) { + return MonsterDifficulty.DEADLY; + } else + if (difficulty_modifier.contains("Hellfire")) { + return MonsterDifficulty.HELLFIRE; + } else + if (difficulty_modifier.contains("Elite")) { + return MonsterDifficulty.ELITE; + } else + if (difficulty_modifier.contains("End ")) { + return MonsterDifficulty.END; + } else + { + return MonsterDifficulty.NORMAL; } } @@ -882,7 +922,10 @@ public class MonsterController { MonsterName = "guardian boss"; } } - m.setCustomName(prefix.equalsIgnoreCase("")?"":(prefix+" ")+GenericFunctions.CapitalizeFirstLetters(MonsterName.replaceAll("_", " ")+(isZombieLeader(m)?" Leader":""))); + //m.setCustomName(prefix.equalsIgnoreCase("")?"":(prefix+" ")+GenericFunctions.CapitalizeFirstLetters(MonsterName.replaceAll("_", " ")+(isZombieLeader(m)?" Leader":""))); + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(m); + les.difficulty_modifier = prefix; + les.suffix = (isZombieLeader(m)?"Leader":""); } public static LivingEntity convertLivingEntity(LivingEntity m, LivingEntityDifficulty led) { diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index 3cff636..d3f360e 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -427,7 +427,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static final int EARTHWAVE_COOLDOWN=100; public static final int ERUPTION_COOLDOWN=100; public static final int LINEDRIVE_COOLDOWN=240; - public static final int REJUVENATE_COOLDOWN=2400; + public static final int REJUVENATE_COOLDOWN=6000; public static final int ASSASSINATE_COOLDOWN=200; public static final int LIFESAVER_COOLDOWN=6000; public static final int ARROWBARRAGE_COOLDOWN=2400; @@ -793,10 +793,16 @@ public class TwosideKeeper extends JavaPlugin implements Listener { for (Entity e : suppressed_entities) { if (e==null || !e.isValid() || GenericFunctions.getSuppressionTime(e)<=0) { - if (e!=null && e.isValid() && e instanceof LivingEntity) { + if (e!=null && e.isValid() && (e instanceof LivingEntity && !(e instanceof Player))) { LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure((LivingEntity)e); ((LivingEntity)e).getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(les.original_movespd); ((LivingEntity)e).setAI(true); + } else { + if (e instanceof Player) { + Player p = (Player)e; + aPlugin.API.setPlayerSpeedMultiplier(p, 1); + } + GlowAPI.setGlowing(e, null, Bukkit.getOnlinePlayers()); } ScheduleRemoval(suppressed_entities,e); } @@ -1194,6 +1200,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ReplaceBlockTask.CleanupTemporaryBlock(tb); } log(ChatColor.YELLOW+" "+(System.currentTimeMillis()-betweentime)+"ms",CLEANUP_DEBUG); + log("Resetting Mob Names ["+livingentitydata.size()+"]",CLEANUP_DEBUG); + for (UUID id : livingentitydata.keySet()) { + //TemporaryBlock tb = temporaryblocks.get(ss); + //ReplaceBlockTask.CleanupTemporaryBlock(tb); + LivingEntityStructure les = livingentitydata.get(id); + les.m.setCustomName(les.getUnloadedName()); + TwosideKeeper.log("Saving unloaded monster "+les.getUnloadedName(), 0); + } + log(ChatColor.YELLOW+" "+(System.currentTimeMillis()-betweentime)+"ms",CLEANUP_DEBUG); long endtime = System.currentTimeMillis(); log("Cleanup Maintenance completed. Total Time: "+(endtime-starttime)+"ms.",CLEANUP_DEBUG); } @@ -1648,12 +1663,33 @@ public class TwosideKeeper extends JavaPlugin implements Listener { new ItemStack(Material.GOLD_CHESTPLATE), new ItemStack(Material.GOLD_LEGGINGS), new ItemStack(Material.GOLD_BOOTS), + new ItemStack(Material.GOLD_SWORD), + new ItemStack(Material.GOLD_AXE), + new ItemStack(Material.SHIELD), }) { List lore = new ArrayList(); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+Integer.parseInt(args[2])+" "+ItemSet.valueOf(args[1])+" Set"); ItemMeta m = item.getItemMeta(); m.setLore(lore); item.setItemMeta(m); + TwosideKeeperAPI.addHardenedItemBreaks(item, 999999); + p.getWorld().dropItemNaturally(p.getLocation(), item); + } + }break; + case "GIVEFULLRANGERSET":{ + for (ItemStack item : new ItemStack[]{ + new ItemStack(Material.LEATHER_HELMET), + new ItemStack(Material.LEATHER_CHESTPLATE), + new ItemStack(Material.LEATHER_LEGGINGS), + new ItemStack(Material.LEATHER_BOOTS), + new ItemStack(Material.BOW), + }) { + List lore = new ArrayList(); + lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+Integer.parseInt(args[2])+" "+ItemSet.valueOf(args[1])+" Set"); + ItemMeta m = item.getItemMeta(); + m.setLore(lore); + item.setItemMeta(m); + TwosideKeeperAPI.addHardenedItemBreaks(item, 999999); p.getWorld().dropItemNaturally(p.getLocation(), item); } }break; @@ -1894,6 +1930,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener { /*tbn.getPlayersOnNodeViaDistanceSearch(); tbn.getPlayersOnNodeViaNearbyEntities();*/ }break; + case "SUPPRESSME":{ + GenericFunctions.addSuppressionTime(p, 200); + }break; } } @@ -3150,17 +3189,17 @@ public class TwosideKeeper extends JavaPlugin implements Listener { LivingEntity shooter = CustomDamage.getDamagerEntity(proj); if (shooter!=null && shooter instanceof Player) { Player p = (Player)shooter; - if (ItemSet.hasFullSet(p, ItemSet.SHARD)) { - GenericFunctions.DealExplosionDamageToEntities(ev.getEntity().getLocation(), 40f+shooter.getHealth()*0.1, 2, shooter, "Shrapnel Explosion"); + /*if (ItemSet.hasFullSet(p, ItemSet.SHARD)) { + //GenericFunctions.DealExplosionDamageToEntities(ev.getEntity().getLocation(), 40f+shooter.getHealth()*0.1, 2, shooter, "Shrapnel Explosion"); aPlugin.API.sendSoundlessExplosion(ev.getEntity().getLocation(), 1); SoundUtils.playGlobalSound(ev.getEntity().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.6f, 0.5f); - } - else - if (!proj.hasMetadata("FIREPOOL") && ItemSet.hasFullSet(p, ItemSet.TOXIN)) { - //new TemporaryBlockNode(proj.getLocation(),3,100,"FIREPOOL",Particle.DRIP_LAVA,40); + } + else */ + /*if (!proj.hasMetadata("FIREPOOL") && ItemSet.hasFullSet(p, ItemSet.TOXIN)) { + new TemporaryBlockNode(proj.getLocation(),3,100,"FIREPOOL",Particle.DRIP_LAVA,40); TemporaryBlock.createTemporaryBlockCircle(proj.getLocation().add(0,-2,0), 2, Material.REDSTONE_BLOCK, (byte)0, 100, "FIRECESSPOOL"); proj.setMetadata("FIREPOOL", new FixedMetadataValue(this,true)); - } + }*/ } if (ev.getEntity() instanceof Arrow) { @@ -3231,6 +3270,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } if (ev.getPlayer().getEquipment().getItemInMainHand().getType()==Material.NAME_TAG && (ev.getRightClicked() instanceof LivingEntity)) { + if (ev.getPlayer().getEquipment().getItemInMainHand().hasItemMeta() && + ev.getPlayer().getEquipment().getItemInMainHand().getItemMeta().hasDisplayName()) { + if (!(ev.getRightClicked() instanceof Player)) { + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure((LivingEntity)ev.getRightClicked()); + les.base_name = ev.getPlayer().getEquipment().getItemInMainHand().getItemMeta().getDisplayName(); + } + } + } + /*if (ev.getPlayer().getEquipment().getItemInMainHand().getType()==Material.NAME_TAG && (ev.getRightClicked() instanceof LivingEntity)) { //TwosideKeeper.log("Check this out.", 2); LivingEntity m = (LivingEntity)ev.getRightClicked(); //MonsterController.convertMonster(m,md); @@ -3246,7 +3294,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } },1); } - + */ if (PlayerMode.getPlayerMode(p)==PlayerMode.BARBARIAN && ev.getRightClicked() instanceof LivingEntity) { aPlugin.API.swingOffHand(p); if (pd.weaponcharges>=10 && (pd.weaponcharges<30 || !p.isSneaking())) { @@ -6056,6 +6104,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } + for (Entity e : ev.getChunk().getEntities()) { + if (e instanceof LivingEntity) { + LivingEntity l = (LivingEntity)e; + if (l.isValid()) { + LivingEntityStructure les = LivingEntityStructure.GetLivingEntityStructure(l); + l.setCustomName(les.getUnloadedName()); + } + } + } } public void updateMonsterFlags(LivingEntity m) { @@ -9739,9 +9796,20 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.LORASAADI, 4, 4)+ ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.JAMDAK, 4, 4);*/ hp+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.SHARD, 4, 4); + TwosideKeeper.HeartbeatLogger.AddEntry("----====]> Shard HP Calculation", (int)(System.nanoTime()-time));time = System.nanoTime(); if (ItemSet.HasSetBonusBasedOnSetBonusCount(p, ItemSet.DAWNTRACKER,6)) { hp+=0.25d*ItemSet.GetItemTier(p.getEquipment().getItemInMainHand()); } + TwosideKeeper.HeartbeatLogger.AddEntry("----====]> Dawntracker bonus HP Calculation", (int)(System.nanoTime()-time));time = System.nanoTime(); + + for (Player pl : PartyManager.getPartyMembers(p)) { + if (!pl.equals(p)) { + if (PlayerMode.getPlayerMode(pl)==PlayerMode.DEFENDER) { + hp+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(pl, ItemSet.PROTECTOR, 3, 3)*ItemSet.GetPlayerModeSpecificMult(p); + } + } + } + TwosideKeeper.HeartbeatLogger.AddEntry("----====]> Protector Set Calculation", (int)(System.nanoTime()-time));time = System.nanoTime(); if (PlayerMode.getPlayerMode(p)==PlayerMode.NORMAL) { TwosideKeeper.log("Player Mode is Normal.", 5); diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java index 0875418..a2bb8c4 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java @@ -102,6 +102,20 @@ public final class TwosideKeeperAPI { public static LivingEntityDifficulty getLivingEntityDifficulty(LivingEntity m) { return MonsterController.getLivingEntityDifficulty(m); } + /** + * Sets the custom display name for a Living Entity. Because Sig's Plugin handles + * its naming internally, you have to force a name through this method for it to appear, + * otherwise it gets reset. + */ + public static void setCustomLivingEntityName(LivingEntity m, String name) { + LivingEntityStructure.setCustomLivingEntityName(m,name); + } + /** + * Retrieves the base display name for a LivingEntity. + */ + public static String getCustomLivingEntityName(LivingEntity m) { + return LivingEntityStructure.getCustomLivingEntityName(m); + } //Christmas Commands. public static ItemStack getSmallCandyItem() { diff --git a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java index effa51e..d23ea05 100644 --- a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java +++ b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java @@ -21,6 +21,7 @@ import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Animals; import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; @@ -431,7 +432,7 @@ final class runServerHeartbeat implements Runnable { } if (Buff.hasBuff(ent, "BLEEDING") && les.lastBleedingTick<=TwosideKeeper.getServerTickTime()) { Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{ - if (ent!=null) { + if (ent!=null && Buff.hasBuff(ent, "BLEEDING")) { CustomDamage.ApplyDamage((Buff.getBuff(ent, "BLEEDING").getAmplifier()), null, ent, null, "Bleeding", CustomDamage.IGNOREDODGE|CustomDamage.TRUEDMG|CustomDamage.IGNORE_DAMAGE_TICK); les.lastBleedingTick=TwosideKeeper.getServerTickTime(); //SoundUtils.playLocalSound((Player)ent, Sound.ENTITY_GENERIC_EXTINGUISH_FIRE, 1.0f, 1.0f); @@ -1087,16 +1088,17 @@ final class runServerHeartbeat implements Runnable { TwosideKeeper.ScheduleRemoval(TwosideKeeper.custommonsters, id); TwosideKeeper.ScheduleRemoval(data, id); TwosideKeeper.ScheduleRemoval(TwosideKeeper.habitat_data.startinglocs, id); - ms.m.setCustomName(ms.getOriginalName()); + ms.m.setCustomName(ms.getUnloadedName()); + //TwosideKeeper.log("Saving unloaded monster "+ms.getUnloadedName(), 0); TwosideKeeper.log("Removed Monster Structure for "+id+".", 5); TwosideKeeper.HeartbeatLogger.AddEntry("Monster Management - Removed Monster Structure Data.", (int)(System.nanoTime()-time));time=System.nanoTime(); } else { AddEliteStructureIfOneDoesNotExist(ms); TwosideKeeper.HeartbeatLogger.AddEntry("Monster Management - Add Elite Structure", (int)(System.nanoTime()-time));time=System.nanoTime(); - if (ms.GetTarget()!=null && ms.GetTarget().isValid() && !ms.GetTarget().isDead() && ms.m.hasAI() && !Dummy.isDummy(ms.m)) { + if (!(ms.m instanceof Animals) && ms.GetTarget()!=null && ms.GetTarget().isValid() && !ms.GetTarget().isDead() && ms.m.hasAI() && !Dummy.isDummy(ms.m)) { //Randomly move this monster a tiny bit in case they are stuck. - double xdir=((ms.m.getLocation().getX()>ms.GetTarget().getLocation().getX())?-0.25:0.25)+(Math.random()/8)-(Math.random()/8); - double zdir=((ms.m.getLocation().getZ()>ms.GetTarget().getLocation().getZ())?-0.25:0.25)+(Math.random()/8)-(Math.random()/8); + double xdir=((ms.m.getLocation().getX()>ms.GetTarget().getLocation().getX())?-0.1:0.1)+(Math.random()/8)-(Math.random()/8); + double zdir=((ms.m.getLocation().getZ()>ms.GetTarget().getLocation().getZ())?-0.1:0.1)+(Math.random()/8)-(Math.random()/8); ms.m.setVelocity(ms.m.getVelocity().add(new Vector(xdir,0,zdir))); TwosideKeeper.HeartbeatLogger.AddEntry("Monster Management - Randomly Move this Monster", (int)(System.nanoTime()-time));time=System.nanoTime(); }