diff --git a/.classpath b/.classpath index e94ecb9..77a8fb2 100644 --- a/.classpath +++ b/.classpath @@ -5,6 +5,6 @@ - + diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 46d2b1b..7ec7163 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index 2846e8b..2591e00 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.10.9 +version: 3.10.9a loadbefore: [aPlugin] commands: money: diff --git a/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java b/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java index 08f67e2..eb584c1 100644 --- a/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java +++ b/src/sig/plugin/TwosideKeeper/AwakenedArtifact.java @@ -97,9 +97,9 @@ public class AwakenedArtifact { item = addMaxAP(item,totalval/1000); item = setEXP(item,totalval%1000); item = addAP(item,totalval/1000); - double potentialred = 10.0d; - potentialred *= 1 - (5+GenericFunctions.getAbilityValue(ArtifactAbility.PRESERVATION, artifact))/100d; - TwosideKeeper.log("Potential reduction is reduced by "+(10-potentialred), 4); + double potentialred = 0.1d * getPotential(item); //5 + potentialred *= 1d - (5d+GenericFunctions.getAbilityValue(ArtifactAbility.PRESERVATION, artifact))/100d; + TwosideKeeper.log("Potential is reduced by "+(potentialred)+"% from "+getPotential(item), 0); if (getPotential(item)>potentialred) { item = setPotential(item,(int)(getPotential(item)-potentialred)); if (Math.random() < (potentialred % 1)) { @@ -111,7 +111,7 @@ public class AwakenedArtifact { } } p.sendMessage("Your "+artifact.getItemMeta().getDisplayName()+ChatColor.RESET+" has upgraded to "+ChatColor.YELLOW+"Level "+getLV(artifact)+"!"); - TextComponent tc1 = new TextComponent("You have "+getAP(item)+" Ability Point"+((getAP(item)==1)?"":"s")+" to spend! "); + TextComponent tc1 = new TextComponent("You have "+getAP(item)+" Ability Point"+((getAP(item)==1)?"":"s")+" to spend!"); TextComponent tc = new TextComponent(ChatColor.GREEN+"["+Character.toString((char)0x25b2)+"]"); tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,new ComponentBuilder("Click to upgrade abilities on this artifact. "+ChatColor.GREEN+"Available AP: "+ChatColor.BLUE+AwakenedArtifact.getAP(item)).create())); diff --git a/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java b/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java index f3ea297..40232d7 100644 --- a/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java +++ b/src/sig/plugin/TwosideKeeper/Boss/EliteGuardian.java @@ -11,6 +11,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import sig.plugin.TwosideKeeper.EliteMonster; +import sig.plugin.TwosideKeeper.HelperStructures.Common.Camera; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; public class EliteGuardian extends EliteMonster{ @@ -18,6 +19,7 @@ public class EliteGuardian extends EliteMonster{ boolean cutsceneplayed=false; STATE state = STATE.WAITINGFORCUTSCENE; int cutscenetimer=0; + Camera cam; public EliteGuardian(Monster m) { super(m); @@ -41,14 +43,17 @@ public class EliteGuardian extends EliteMonster{ switch (state) { case PASSIVE: m.setAI(true); + m.setInvulnerable(false); break; case WAITINGFORCUTSCENE: + m.setInvulnerable(true); List nearby = GenericFunctions.getNearbyPlayers(m.getLocation(), 4); if (nearby.size()>0) { List nearby2 = GenericFunctions.getNearbyPlayers(m.getLocation(), 16); //Play the cutscene for all of these players. for (Player p : nearby2) { p.setVelocity(new Vector(0,0,0)); + targetlist.add(p); if (cutscenetimer==0) { p.setGameMode(GameMode.SPECTATOR); p.setSpectatorTarget(m); @@ -58,11 +63,13 @@ public class EliteGuardian extends EliteMonster{ GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.BLINDNESS, 40, 1, m); } cutscenetimer++; - if (cutscenetimer>100) { + if (cutscenetimer>20) { state=STATE.PASSIVE; //Play the cutscene for all of these players. - for (Player p : nearby2) { - p.setGameMode(GameMode.SURVIVAL); + for (Player p : targetlist) { + if (p!=null && p.isValid() && p.isOnline()) { + p.setGameMode(GameMode.SURVIVAL); + } } } } @@ -71,6 +78,16 @@ public class EliteGuardian extends EliteMonster{ default: break; } + + for (Player p : targetlist) { + adjustMiningFatigue(p); + } + } + + private void adjustMiningFatigue(Player p) { + if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING) && ((GenericFunctions.getPotionEffectLevel(PotionEffectType.SLOW_DIGGING, p)==2 && GenericFunctions.getPotionEffectDuration(PotionEffectType.SLOW_DIGGING, p)>=4800) || (GenericFunctions.getPotionEffectLevel(PotionEffectType.SLOW_DIGGING, p)==20 && GenericFunctions.getPotionEffectDuration(PotionEffectType.SLOW_DIGGING, p)<4800))) { + GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.SLOW_DIGGING, 6000, 20, p, true); + } } public void runHitEvent(LivingEntity damager, double dmg) { diff --git a/src/sig/plugin/TwosideKeeper/Boss/SendMiningFatigueToAllNearbyElderGuardians.java b/src/sig/plugin/TwosideKeeper/Boss/SendMiningFatigueToAllNearbyElderGuardians.java new file mode 100644 index 0000000..5feb33b --- /dev/null +++ b/src/sig/plugin/TwosideKeeper/Boss/SendMiningFatigueToAllNearbyElderGuardians.java @@ -0,0 +1,31 @@ +package sig.plugin.TwosideKeeper.Boss; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Guardian; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import sig.plugin.TwosideKeeper.EliteMonster; +import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; + +public class SendMiningFatigueToAllNearbyElderGuardians extends BukkitRunnable { + + @Override + public void run() { + for (EliteMonster em : TwosideKeeper.elitemonsters) { + if (em.getMonster() instanceof Guardian) { + //Apply Mining Fatigue 100 to all players. + for (Player p : Bukkit.getOnlinePlayers()) { + if (!p.hasPotionEffect(PotionEffectType.SLOW_DIGGING) || GenericFunctions.getPotionEffectDuration(PotionEffectType.SLOW_DIGGING,p)<1200 || + GenericFunctions.getPotionEffectLevel(PotionEffectType.SLOW_DIGGING, p)<20) { + //p.getWorld().playEffect(p.getLocation(), Effect., arg2); + GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.SLOW_DIGGING, 6000, 20, p, true); + } + } + } + } + } + +} diff --git a/src/sig/plugin/TwosideKeeper/CustomDamage.java b/src/sig/plugin/TwosideKeeper/CustomDamage.java index 994cf1d..0d8ba67 100644 --- a/src/sig/plugin/TwosideKeeper/CustomDamage.java +++ b/src/sig/plugin/TwosideKeeper/CustomDamage.java @@ -10,6 +10,7 @@ import org.bukkit.Achievement; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Difficulty; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -1577,6 +1578,12 @@ public class CustomDamage { if (damager instanceof Player && target instanceof Player && !damager.getWorld().getPVP()) { return true; //Cancel all PvP related events. } + 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. + } + if (target.isInvulnerable()) { + return true; //Cancel any damage events when the target is invulnerable. + } if (isFlagSet(flags,IGNORE_DAMAGE_TICK)) { GenericFunctions.removeNoDamageTick(target, damager); } @@ -2383,10 +2390,15 @@ public class CustomDamage { dmg += ItemSet.TotalBaseAmountBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter),(Player)shooter, ItemSet.OLIVE, 3, 3); if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter), (Player)shooter, ItemSet.PANROS, 5) || ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter,true), (Player)shooter, ItemSet.DAWNTRACKER, 5) || - ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter), (Player)shooter, ItemSet.LORASYS, 1) || + (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter), (Player)shooter, ItemSet.LORASYS, 1) && + ItemSet.GetBaubleTier((Player)shooter)>=9) || GenericFunctions.HasFullRangerSet((Player)shooter)) { dmg += 15; } + if ((ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter), (Player)shooter, ItemSet.LORASYS, 1) && + ItemSet.GetBaubleTier((Player)shooter)>=40) && ItemSet.GetTier(shooter.getEquipment().getItemInMainHand())>=4) { + dmg += 55; + } } return dmg; @@ -2599,6 +2611,17 @@ public class CustomDamage { if (reason!=null && reason.equalsIgnoreCase("power swing")) { critchance += 1.0d; } + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(shooter), (Player)shooter, ItemSet.LORASYS, 1)) { + if (ItemSet.GetBaubleTier((Player)shooter)>=18 && ItemSet.GetTier(shooter.getEquipment().getItemInMainHand())>=2) { + critchance += 0.1d; + } + if (ItemSet.GetBaubleTier((Player)shooter)>=27 && ItemSet.GetTier(shooter.getEquipment().getItemInMainHand())>=3) { + critchance += 0.2d; + } + if (ItemSet.GetBaubleTier((Player)shooter)>=40 && ItemSet.GetTier(shooter.getEquipment().getItemInMainHand())>=4) { + critchance += 0.45d; + } + } } } return critchance; @@ -2750,7 +2773,8 @@ public class CustomDamage { if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p,true), p, ItemSet.DAWNTRACKER, 5)) { finaldmg += dmg*0.5; } else - if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p), p, ItemSet.LORASYS, 1)) { + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p), p, ItemSet.LORASYS, 1) && + ItemSet.GetBaubleTier(p)>=9) { finaldmg += dmg*0.5; } finaldmg += dmg*aPlugin.API.getPlayerBonuses(p).getBonusArmorPenetration(); @@ -2956,6 +2980,9 @@ public class CustomDamage { if (pd.rage_time>TwosideKeeper.getServerTickTime()) { lifestealpct += (pd.rage_amt/2)*0.01; } + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p, true), p, ItemSet.DAWNTRACKER,6)) { + lifestealpct+=0.25d*ItemSet.GetTier(p.getEquipment().getItemInMainHand()); + } if (reason!=null && reason.equalsIgnoreCase("sweep up")) { lifestealpct*=2; } @@ -3096,6 +3123,9 @@ public class CustomDamage { double cooldown = 0.0; cooldown+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(GenericFunctions.getBaubles(p), p, ItemSet.GLADOMAIN, 2, 2)/100d; cooldown+=ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(p), p, ItemSet.VIXEN)/100d; + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p), p, ItemSet.LORASYS, 1) && ItemSet.GetBaubleTier(p)>=40 && ItemSet.GetTier(p.getEquipment().getItemInMainHand())>=4) { + cooldown += 0.45d; + } return cooldown; } diff --git a/src/sig/plugin/TwosideKeeper/DeathManager.java b/src/sig/plugin/TwosideKeeper/DeathManager.java index 72dfedc..885f3ad 100644 --- a/src/sig/plugin/TwosideKeeper/DeathManager.java +++ b/src/sig/plugin/TwosideKeeper/DeathManager.java @@ -35,13 +35,15 @@ public class DeathManager { Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() { @Override public void run() { - GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.LEVITATION,15,-2,p,true); - GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.JUMP,15,100,p,true); + //GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.LEVITATION,15,-2,p,true); + //GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.JUMP,15,100,p,true); p.setVelocity(new Vector(0,0,0)); CustomDamage.removeIframe(p); Location loc = p.getLocation(); if (p.getBedSpawnLocation()!=null) {loc.setY(p.getBedSpawnLocation().getY());} p.teleport(loc); + GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.LEVITATION,p); + GenericFunctions.logAndRemovePotionEffectFromEntity(PotionEffectType.JUMP,p); }},1); PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); //pd.deathloot.clear(); diff --git a/src/sig/plugin/TwosideKeeper/EliteMonster.java b/src/sig/plugin/TwosideKeeper/EliteMonster.java index 9a8f29a..528285c 100644 --- a/src/sig/plugin/TwosideKeeper/EliteMonster.java +++ b/src/sig/plugin/TwosideKeeper/EliteMonster.java @@ -263,7 +263,7 @@ public class EliteMonster { currentdps = dpslist.get(p.getName()); } dpslist.put(p.getName(), currentdps+dmg); - TwosideKeeper.log(p.getName()+"'s Damage: "+dpslist.get(p.getName()), 0); + TwosideKeeper.log(p.getName()+"'s Damage: "+dpslist.get(p.getName()), 5); } last_regen_time=TwosideKeeper.getServerTickTime(); } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Camera.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Camera.java new file mode 100644 index 0000000..48b9d83 --- /dev/null +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/Camera.java @@ -0,0 +1,71 @@ +package sig.plugin.TwosideKeeper.HelperStructures.Common; + +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import sig.plugin.TwosideKeeper.TwosideKeeper; + +public class Camera { + ArmorStand camera_ent; + HashMap camera_viewerlocs; + public Camera(Location startingloc,Player...viewers) { + camera_ent = (ArmorStand)startingloc.getWorld().spawnEntity(startingloc, EntityType.ARMOR_STAND); + camera_ent.setGravity(false); + camera_ent.setVisible(false); + camera_ent.setInvulnerable(true); + camera_ent.setArms(false); + for (Player p : viewers) { + AddCameraViewer(p); + } + } + public void AddCameraViewer(Player p) { + camera_viewerlocs.put(p.getUniqueId(), p.getLocation()); + p.setGameMode(GameMode.SPECTATOR); + p.setSpectatorTarget(camera_ent); + } + public void removeCameraViewer(Player p) { + if (camera_viewerlocs.containsKey(p.getUniqueId())) { + p.setGameMode(GameMode.SURVIVAL); + p.teleport(camera_viewerlocs.get(p.getUniqueId())); + camera_viewerlocs.remove(p.getUniqueId()); + } + } + public boolean runTick() { + if (camera_ent==null || !camera_ent.isValid() || camera_viewerlocs.size()==0) { + return false; + } + for (UUID id : camera_viewerlocs.keySet()) { + Player p = Bukkit.getPlayer(id); + if (p!=null && p.isValid()) { + p.setGameMode(GameMode.SPECTATOR); + if (p.getSpectatorTarget()==null || !(p.getSpectatorTarget() instanceof ArmorStand)) { + //If this player is on multiple cameras for some reason, we don't want to overwrite the previous camera. + p.setSpectatorTarget(camera_ent); + } + } else { + TwosideKeeper.ScheduleRemoval(camera_viewerlocs, p); + } + } + return true; + } + public ArmorStand getEnt() { + return camera_ent; + } + public void Cleanup() { + for (UUID id : camera_viewerlocs.keySet()) { + Player p = Bukkit.getPlayer(id); + if (p!=null && p.isValid()) { + p.setGameMode(GameMode.SURVIVAL); + p.teleport(camera_viewerlocs.get(id)); + } + } + } +} diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 9839569..89c216c 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -986,6 +986,19 @@ public class GenericFunctions { } } } + case PRISMARINE:{ + switch (type.getDurability()) { + case 0:{ + return "Prismarine"; + } + case 1:{ + return "Prismarine Bricks"; + } + case 2:{ + return "Dark Prismarine"; + } + } + } case SULPHUR:{ return "Gunpowder"; } @@ -2886,11 +2899,38 @@ public class GenericFunctions { TwosideKeeper.log(ChatColor.RED+" This should not be overwritten due to no FORCE!", TwosideKeeper.POTION_DEBUG_LEVEL); } } - Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() { - public void run() { - p.addPotionEffect(new PotionEffect(type,ticks,amplifier),force); - } - },1); + if (ticks==1 && amplifier==0) { + //Force it to be added. + TwosideKeeper.log("Removing "+type.getName(), 5); + Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() { + public void run() { + p.addPotionEffect(new PotionEffect(type,ticks,amplifier),true); + } + },1); + } else + if (p.hasPotionEffect(type)) { + if (GenericFunctions.getPotionEffectLevel(type,p)= duration) { + //if (tick_duration+BUFFER >= duration) { logAndApplyPotionEffectToEntity(neweffect.getType(), neweffect.getDuration(),neweffect.getAmplifier(), p, true); - } + //} } else { PotionEffect neweffect = new PotionEffect(type,tick_duration,incr_amt-1); logAndApplyPotionEffectToEntity(neweffect.getType(), neweffect.getDuration(),neweffect.getAmplifier(), p, true); @@ -4320,7 +4360,7 @@ public class GenericFunctions { } } if (Math.random()<=removechance/100) { - if (type!=null && (!type.equals(PotionEffectType.WEAKNESS) || level<9)) { + if (type!=null && (!type.equals(PotionEffectType.WEAKNESS) || level<9) && (!type.equals(PotionEffectType.SLOW_DIGGING) || (level!=2 && level!=20))) { GenericFunctions.logAndRemovePotionEffectFromEntity(type,p); p.sendMessage(ChatColor.DARK_GRAY+"You successfully resisted the application of "+ChatColor.WHITE+GenericFunctions.CapitalizeFirstLetters(type.getName().replace("_", " "))); } @@ -4487,6 +4527,14 @@ public class GenericFunctions { for (int j=0;j<50;j++) { newpos.getWorld().playEffect(newpos, Effect.FLAME, 60); } + if (newpos2.getBlock().getType()!=Material.AIR && + !newpos2.getBlock().isLiquid() && + !(newpos2.getBlock().getType()==Material.STEP) && + !(newpos2.getBlock().getType()==Material.WOOD_STEP) && + !(newpos2.getBlock().getType()==Material.PURPUR_SLAB) && + !(newpos2.getBlock().getType()==Material.STONE_SLAB2)) { + break; + } Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("TwosideKeeper"), new Runnable() { public void run() { DealDamageToNearbyMobs(newpos2, dmgdealt, 2, true, 0.4d, p, weaponused, true); @@ -4530,7 +4578,7 @@ public class GenericFunctions { } if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getBaubles(player), player, ItemSet.WOLFSBANE, 7) && target.getLocation().distanceSquared(originalloc)<=25) { - pd.lastassassinatetime = TwosideKeeper.getServerTickTime()-TwosideKeeper.ASSASSINATE_COOLDOWN+40; + pd.lastassassinatetime = TwosideKeeper.getServerTickTime()-GetModifiedCooldown(TwosideKeeper.ASSASSINATE_COOLDOWN,player)+40; if (name!=Material.SKULL_ITEM || pd.lastlifesavertime+GetModifiedCooldown(TwosideKeeper.LIFESAVER_COOLDOWN,player)=1 && + ItemSet.GetBaubleTier(p)>=27 && ItemSet.GetTier(p.getEquipment().getItemInMainHand())>=3) { + return; + } else { + if (!aPlugin.API.isAFK(p)) { + ItemStack[] inv = p.getInventory().getContents(); + for (int i=0;i<9;i++) { + if (inv[i]!=null && + isTool(inv[i]) && inv[i].getType()!=Material.BOW) { + aPlugin.API.damageItem(p.getInventory(), inv[i], 1); + } } } } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java index 7956d06..a7d42e0 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import sig.plugin.TwosideKeeper.TwosideKeeper; +import sig.plugin.TwosideKeeper.HelperStructures.Common.BaublePouch; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; public enum ItemSet { @@ -24,9 +25,9 @@ public enum ItemSet { DARNYS(2,1, 10,5, 20,5, 1,1), ALIKAHN(3,1, 15,6, 30,10, 1,1), LORASAADI(4,1, 4,2, 8,6, 8,3), - MOONSHADOW(4,2, 1,1, 8,8, 15,7), + MOONSHADOW(6,3, 1,1, 8,8, 15,7), GLADOMAIN(1,1, 12,4, 8,4, 1,1), - WOLFSBANE(2,1, 15,10, 10,5, 15,10), + WOLFSBANE(3,2, 15,10, 10,5, 15,10), ALUSTINE(3,2, 300,-30, 50,-5, 6,2), DASHER(5,5, 3,3, 5,5, 0,0), DANCER(5,1, 3,3, 5,5, 0,0), @@ -439,22 +440,41 @@ public enum ItemSet { lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Lifesteal"); lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Max Health"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Mock"); - lore.add(ChatColor.WHITE+" +50% Armor Penetration"); - lore.add(ChatColor.WHITE+" +15 Damage"); - lore.add(ChatColor.GRAY+" "); + lore.add(ChatColor.WHITE+" +50% Armor Penetration"); + lore.add(ChatColor.WHITE+" +15 Damage"); lore.add(ChatColor.GRAY+" Mock cooldown decreases from"); lore.add(ChatColor.GRAY+" 20 -> 10 seconds, making it stackable."); lore.add(ChatColor.GRAY+" All Lifesteal Stacks and Weapon Charges"); lore.add(ChatColor.GRAY+" gained are doubled."); + lore.add(ChatColor.DARK_AQUA+" 6 - "+ChatColor.WHITE+""); + lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Lifesteal"); + lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Health Regeneration"); + lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Maximum Health"); }break; case LORASYS:{ - lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Bonus Effects"); - lore.add(ChatColor.WHITE+" +50% Armor Penetration"); - lore.add(ChatColor.WHITE+" +15 Damage"); - lore.add(ChatColor.GRAY+" "); - lore.add(ChatColor.WHITE+" Stealth does not cause durability to decrease."); - lore.add(ChatColor.WHITE+" Hitting enemies with Thorns does not damage you."); - lore.add(ChatColor.WHITE+" Each kill restores 2 Hearts (4 HP) instead of 1."); + lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Increases in power based on "+ChatColor.BOLD+"Total Tier Amount"); + lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"of all baubles in your bauble pouch."); + lore.add(ChatColor.DARK_AQUA+" T9 - "); + lore.add(ChatColor.WHITE+" +50% Armor Penetration"); + lore.add(ChatColor.WHITE+" +15 Damage"); + if (tier>=2) { + lore.add(ChatColor.DARK_AQUA+" T18 - "); + lore.add(ChatColor.WHITE+" +10% Critical Chance"); + lore.add(ChatColor.WHITE+" Hitting enemies with Thorns does not damage you."); + lore.add(ChatColor.WHITE+" Each kill restores 2 Hearts (4 HP) instead of 1."); + if (tier>=3) { + lore.add(ChatColor.DARK_AQUA+" T27 - "); + lore.add(ChatColor.WHITE+" +20% Critical Chance"); + lore.add(ChatColor.WHITE+" Stealth does not cause durability to decrease."); + lore.add(ChatColor.WHITE+" Each kill restores 3 Hearts (6 HP) instead of 2."); + if (tier>=4) { + lore.add(ChatColor.DARK_AQUA+" T40 - "); + lore.add(ChatColor.WHITE+" +55 Damage"); + lore.add(ChatColor.WHITE+" +45% Critical Chance"); + lore.add(ChatColor.WHITE+" +20% Cooldown Reduction"); + } + } + } }break; case JAMDAK: { lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); @@ -681,4 +701,16 @@ public enum ItemSet { } } } + + public static int GetBaubleTier(Player p) { + int tier = 0; + if (BaublePouch.isBaublePouch(p.getEquipment().getItemInOffHand())) { + int id = BaublePouch.getBaublePouchID(p.getEquipment().getItemInOffHand()); + List contents = BaublePouch.getBaublePouchContents(id); + for (ItemStack item : contents) { + tier += ItemSet.GetTier(item); + } + } + return tier; + } } diff --git a/src/sig/plugin/TwosideKeeper/MonsterController.java b/src/sig/plugin/TwosideKeeper/MonsterController.java index 8d6fee1..aab58ec 100644 --- a/src/sig/plugin/TwosideKeeper/MonsterController.java +++ b/src/sig/plugin/TwosideKeeper/MonsterController.java @@ -239,7 +239,7 @@ public class MonsterController { if (GenericFunctions.PercentBlocksAroundArea(ent.getLocation().getBlock(),Material.AIR,16,8,16)>=75 && GenericFunctions.AllNaturalBlocks(ent.getLocation().getBlock(),16,8,16) && ent.getNearbyEntities(64, 32, 64).size()<=3) { - TwosideKeeper.LAST_ELITE_SPAWN=TwosideKeeper.getServerTickTime(); + TwosideKeeper.LAST_ELITE_SPAWN=TwosideKeeper.getServerTickTime(); return true; } } diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index ac48533..f628138 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -22,6 +22,7 @@ import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Color; import org.bukkit.Effect; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; @@ -192,6 +193,7 @@ import net.md_5.bungee.api.chat.TextComponent; import net.minecraft.server.v1_9_R1.EnumParticle; import net.minecraft.server.v1_9_R1.MinecraftServer; import sig.plugin.AutoPluginUpdate.AnnounceUpdateEvent; +import sig.plugin.TwosideKeeper.Boss.SendMiningFatigueToAllNearbyElderGuardians; import sig.plugin.TwosideKeeper.Events.EntityDamagedEvent; import sig.plugin.TwosideKeeper.Events.PlayerDodgeEvent; import sig.plugin.TwosideKeeper.HelperStructures.AnvilItem; @@ -221,6 +223,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.WorldShopSession; import sig.plugin.TwosideKeeper.HelperStructures.Common.ArrowQuiver; import sig.plugin.TwosideKeeper.HelperStructures.Common.BaublePouch; import sig.plugin.TwosideKeeper.HelperStructures.Common.BlockModifyQueue; +import sig.plugin.TwosideKeeper.HelperStructures.Common.Camera; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Common.Habitation; import sig.plugin.TwosideKeeper.HelperStructures.Common.ItemContainer; @@ -463,6 +466,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static List temporary_chunks = new ArrayList(); public static List blockqueue = new ArrayList(); public static List jobrecipes = new ArrayList(); + public static List cameras = new ArrayList(); long LastClearStructureTime = 0; public static final Set isNatural = ImmutableSet.of(Material.CLAY, Material.DIRT, Material.GRASS, @@ -496,7 +500,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public static long lastPigmanAggroTime = 0; public static long pigmanAggroCount = 0; - + public static Plugin plugin; public int sleepingPlayers=0; public static List validsetitems = new ArrayList(); @@ -788,6 +792,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener { for (Player p : Bukkit.getOnlinePlayers()) { runServerHeartbeat.runFilterCubeCollection(p); runServerHeartbeat.runVacuumCubeSuckup(p); + if (PlayerStructure.GetPlayerStructure(p).last_rejuvenate+200>TwosideKeeper.getServerTickTime()) { + GenericFunctions.HealEntity(p, 5); + } /*if (p.getVehicle() instanceof EnderDragon) { EnderDragon ed = (EnderDragon)p.getVehicle(); ed.setVelocity(p.getLocation().getDirection().multiply(2.0f)); @@ -804,6 +811,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ScheduleRemoval(temporary_ice_list,tl); } } + for (Camera cam : cameras) { + if (!cam.runTick()) { + ScheduleRemoval(cameras,cam); + } + } } private void UpdateLavaBlock(Block lavamod) { @@ -876,10 +888,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } totalregen += ItemSet.TotalBaseAmountBasedOnSetBonusCount(GenericFunctions.getEquipment(p), p, ItemSet.ALIKAHN, 4, 4)/2; - totalregen += totalregen*pd.pctbonusregen; if (p.hasPotionEffect(PotionEffectType.REGENERATION)) { totalregen += (GenericFunctions.getPotionEffectLevel(PotionEffectType.REGENERATION, p)+1)*baseregen; } + totalregen += (totalregen+baseregen)*pd.pctbonusregen; + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p, true), p, ItemSet.DAWNTRACKER,6)) { + totalregen += (totalregen+baseregen) * (0.25d*ItemSet.GetTier(p.getEquipment().getItemInMainHand())); + } return totalregen+baseregen; } } @@ -1039,6 +1054,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { getServer().getScheduler().runTaskLaterAsynchronously(this, new DiscordStatusUpdater(), 300l); getServer().getScheduler().scheduleSyncRepeatingTask(this, new ReapplyAbsorptionHeartsFromSet(),0l,600l); + //getServer().getScheduler().scheduleSyncRepeatingTask(this, new SendMiningFatigueToAllNearbyElderGuardians(),0l,600l); //This is the constant timing method. getServer().getScheduler().scheduleSyncRepeatingTask(this, new runServerHeartbeat(this), 20l, 20l); @@ -1763,13 +1779,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //Arrow newar = p.getWorld().spawnArrow(p.getLocation(), p.getLocation().getDirection(), 1f, 12f); //GenericFunctions.setBowMode(p.getEquipment().getItemInMainHand(), BowMode.SNIPE); //p.sendMessage("This is bow mode "+GenericFunctions.getBowMode(p.getEquipment().getItemInMainHand())); - for (int i=0;i0) { + ItemSet.GetSetCount(GenericFunctions.getEquipment((Player)ev.getEntity()), ItemSet.LORASYS, (Player)ev.getEntity())>0 && + ItemSet.GetBaubleTier((Player)ev.getEntity())>=18 && ItemSet.GetTier(((Player)ev.getEntity()).getEquipment().getItemInMainHand())>=2) { dmgdealt=0.0; } } @@ -6279,6 +6309,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) public void onEndermanTeleport(EntityTeleportEvent ev) { + if (ev.getEntity() instanceof Player) { + Player p = (Player)ev.getEntity(); + if (p.getGameMode()==GameMode.SPECTATOR) { + ev.setCancelled(true); //Cancel all teleport events done in spectator mode, by anything. + return; + } + } if (GenericFunctions.isSuppressed(ev.getEntity())) { ev.setTo(ev.getFrom()); @@ -6466,7 +6503,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } LivingEntityStructure ms = LivingEntityStructure.getLivingEntityStructure(m); if (ms.getElite()) { - log("In here 2",5); + log("Target reason is "+ev.getReason(),5); EliteMonster em = null; for (int i=0;igetServerTickTime()) { //Successful Assassination. - pd.lastassassinatetime=getServerTickTime()-GenericFunctions.GetModifiedCooldown(TwosideKeeper.ASSASSINATE_COOLDOWN,p); + pd.lastassassinatetime=0; ItemStack[] inv = p.getInventory().getContents(); for (int i=0;i<9;i++) { if (inv[i]!=null && (inv[i].getType()!=Material.SKULL_ITEM || pd.lastlifesavertime+GenericFunctions.GetModifiedCooldown(TwosideKeeper.LIFESAVER_COOLDOWN,p)0)?4:2; + int restore_amt = 2; + if (ItemSet.GetSetCount(GenericFunctions.getEquipment(p), ItemSet.LORASYS, p)>0) { + if (ItemSet.GetBaubleTier(p)>=18 && ItemSet.GetTier((p).getEquipment().getItemInMainHand())>=2) { + restore_amt = 4; + } else + if (ItemSet.GetBaubleTier(p)>=27 && ItemSet.GetTier((p).getEquipment().getItemInMainHand())>=3) { + restore_amt = 6; + } + } if (pd.slayermodehp+restore_amt Defender HP and Regeneration", (int)(System.nanoTime()-time));time = System.nanoTime(); if (PlayerMode.isBarbarian(p)) { @@ -9353,8 +9412,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.DARNYS, 4, 4)+ ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.LORASAADI, 4, 4)+ ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.JAMDAK, 4, 4);*/ - + + if (ItemSet.HasSetBonusBasedOnSetBonusCount(GenericFunctions.getEquipment(p, true), p, ItemSet.DAWNTRACKER,6)) { + hp+=0.25d*ItemSet.GetTier(p.getEquipment().getItemInMainHand()); + } + if (PlayerMode.getPlayerMode(p)==PlayerMode.NORMAL) { + TwosideKeeper.log("Player Mode is Normal.", 0); hp+=10; } TwosideKeeper.HeartbeatLogger.AddEntry("----====]> Adventurer Mode HP Calculation", (int)(System.nanoTime()-time));time = System.nanoTime(); diff --git a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java index 5d6b7df..806a12f 100644 --- a/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java +++ b/src/sig/plugin/TwosideKeeper/runServerHeartbeat.java @@ -275,7 +275,7 @@ final class runServerHeartbeat implements Runnable { AdventurerModeSetExhaustion(p); TwosideKeeper.HeartbeatLogger.AddEntry("Adventurer Mode Exhaustion", (int)(System.nanoTime()-time));time=System.nanoTime(); - //CalculateHealthRegeneration(serverTickTime, p, pd, equips); + CalculateHealthRegeneration(serverTickTime, p, pd, equips); ResetSwordCombo(serverTickTime, p, pd); TwosideKeeper.HeartbeatLogger.AddEntry("Reset Sword Combo", (int)(System.nanoTime()-time));time=System.nanoTime(); @@ -291,6 +291,9 @@ final class runServerHeartbeat implements Runnable { GivePartyNightVision(p); TwosideKeeper.HeartbeatLogger.AddEntry("Party Night Vision", (int)(System.nanoTime()-time));time=System.nanoTime(); + + adjustMiningFatigue(p); + TwosideKeeper.HeartbeatLogger.AddEntry("Adjust Mining Fatigue", (int)(System.nanoTime()-time));time=System.nanoTime(); } //TwosideKeeper.outputArmorDurability(p,">"); } @@ -321,6 +324,12 @@ final class runServerHeartbeat implements Runnable { TwosideKeeper.HeartbeatLogger.AddEntry("Reset Pigman Aggro", (int)(System.nanoTime()-time));time=System.nanoTime(); } + private void adjustMiningFatigue(Player p) { + if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING) && ((GenericFunctions.getPotionEffectLevel(PotionEffectType.SLOW_DIGGING, p)==2))) { + GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.SLOW_DIGGING, 6000, 20, p, true); + } + } + private void resetPigmanAggro() { if (TwosideKeeper.lastPigmanAggroTime+20=16) { - - if (PlayerMode.getPlayerMode(p)!=PlayerMode.SLAYER || pd.lastcombat+(20*60)TwosideKeeper.getServerTickTime()) { - totalregen += totalregen*pd.pctbonusregen; - } - totalregen += totalregen*((PlayerMode.getPlayerMode(p)==PlayerMode.NORMAL)?0.5d:0d); - p.setHealth((p.getHealth()+totalregen>p.getMaxHealth())?p.getMaxHealth():p.getHealth()+totalregen); - - if (PlayerMode.getPlayerMode(p)==PlayerMode.SLAYER) { - pd.slayermodehp=p.getHealth(); - } - } - } + if (PlayerMode.isDefender(p)) { + GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.REGENERATION,60,(p.isBlocking())?3:1,p,false); } } @@ -650,12 +623,11 @@ final class runServerHeartbeat implements Runnable { ItemStack[] remaining = InventoryUtils.insertItemsInFilterCube(p, it.getItemStack()); if (remaining.length==0) { SoundUtils.playGlobalSound(p.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(it.getItemStack())); + TwosideKeeper.PlayPickupParticle(p,it); it.remove(); - return; } } else { it.remove(); - return; } } count++; @@ -683,7 +655,6 @@ final class runServerHeartbeat implements Runnable { double xvel = 0; double yvel = 0; double zvel = 0; - count++; if (deltax>0.25) { xvel=-SPD*(Math.min(10, Math.abs(deltax))); } else @@ -715,6 +686,7 @@ final class runServerHeartbeat implements Runnable { ItemStack[] remaining = InventoryUtils.insertItemsInVacuumCube(p, ((Item) ent).getItemStack()); if (remaining.length==0) { SoundUtils.playGlobalSound(p.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(((Item) ent).getItemStack())); + TwosideKeeper.PlayPickupParticle(p,(Item)ent); ent.remove(); return; } @@ -722,6 +694,10 @@ final class runServerHeartbeat implements Runnable { ent.remove(); return; } + count++; + if (count>8) { + return; + } } } else { if (pd.vacuumsuckup) { @@ -743,9 +719,6 @@ final class runServerHeartbeat implements Runnable { } else { ent.setVelocity(ent.getVelocity().setZ(-SPD*(10-Math.min(10,Math.abs(p.getLocation().getZ()-ent.getLocation().getZ()))))); }*/ - if (count>8) { - return; - } } } }