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;
- }
}
}
}