diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar
index 16b9f23..8018c85 100644
Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ
diff --git a/src/plugin.yml b/src/plugin.yml
index 97e4984..abf4475 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,6 +1,6 @@
name: TwosideKeeper
main: sig.plugin.TwosideKeeper.TwosideKeeper
-version: 3.7.3
+version: 3.7.3a
commands:
money:
description: Tells the player the amount of money they are holding.
diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
index a613d04..7113828 100644
--- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
+++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java
@@ -2058,7 +2058,7 @@ public class GenericFunctions {
+ ChatColor.WHITE+"->Hitting mobs as a Defender aggros them to you.\n"
+ ChatColor.GRAY+"->Knockback from attacks reduced by 75% while blocking.\n"
+ ChatColor.WHITE+"- "+ChatColor.BOLD+"Rejuvenation"+ChatColor.RESET+ChatColor.WHITE+"\n"
- + ChatColor.GRAY+"->Knockback from attacks reduced by 75% while blocking.\n"
+ + ChatColor.GRAY+"->Dropping your shield will give you Regeneration X for 10 seconds and 2 seconds of invulnerability.\n"
;
}
case "striker":{
@@ -2069,7 +2069,7 @@ public class GenericFunctions {
+ ChatColor.GRAY+"->Every 10% of missing health increases your damage by 10%. (Ex. 99% damage increase at 99% lost hp.)\n"
+ ChatColor.WHITE+"->Getting hit increases Speed by 1 Level. Stacks up to Speed V (Lasts five seconds.)\n"
+ ChatColor.GRAY+"->Swinging your weapon stops nearby flying arrows. Each arrow deflected will give you a Strength buff. Stacks up to Strength V (Lasts five seconds.)\n"
- + ChatColor.WHITE+"->Throwing your weapon will perform a line drive. Enemies you charge through take x7 your base damage. This costs 5% of your durability (Unbreaking decreases this amount.)\n"
+ + ChatColor.WHITE+"->Dropping your weapon will perform a line drive. Enemies you charge through take x7 your base damage. This costs 5% of your durability (Unbreaking decreases this amount.)\n"
+ ChatColor.GRAY+"->Strikers have a 20% chance to dodge incoming attacks from any damage source while moving.\n"
+ ChatColor.WHITE+"->Hitting a target when they have not noticed you yet does x3 normal damage.\n"
;
@@ -2083,7 +2083,7 @@ public class GenericFunctions {
+ ChatColor.WHITE+"You have immunity to all Thorns damage.\n"
+ ChatColor.GRAY+"Shift-Right Click to change Bow Modes.\n"
+ ChatColor.WHITE+"- "+ChatColor.BOLD+"Close Range Mode (Default):"+ChatColor.RESET+ChatColor.WHITE+" \n"
- + ChatColor.GRAY+" You gain the ability to deal headshots from any distance, even directly onto an enemy's face. Each kill made in this mode gives you 100% dodge chance for the next hit taken. You can tumble and gain invulnerability for 1 second by pressing shift + left-click.\n"
+ + ChatColor.GRAY+" You gain the ability to deal headshots from any distance, even directly onto an enemy's face. Each kill made in this mode gives you 100% dodge chance for the next hit taken. You can tumble and gain invulnerability for 1 second by dropping your bow. Sneak while dropping it to tumble backwards.\n"
+ ChatColor.WHITE+"- "+ChatColor.BOLD+"Sniping Mode:"+ChatColor.RESET+ChatColor.WHITE+" \n"
+ ChatColor.GRAY+" Headshot collision area increases by x3. Headshots will deal an extra x0.25 damage for each headshot landed, up to a cap of 8 stacks. Each stack also increases your Slowness level by 1.\n"
+ ChatColor.WHITE+" Arrows are lightning-fast in Sniping Mode.\n"
@@ -2469,58 +2469,6 @@ public class GenericFunctions {
return pd.hasfullrangerset;
}
- public static double CalculateDodgeChance(Player p) {
- double dodgechance = 0.0d;
- dodgechance+=(ArtifactAbility.calculateValue(ArtifactAbility.DODGE, p.getEquipment().getItemInMainHand().getEnchantmentLevel(Enchantment.LUCK), ArtifactAbility.getEnchantmentLevel(ArtifactAbility.DODGE, p.getEquipment().getItemInMainHand()))/100d);
-
- for (int i=0;i
=0 && p.getLocation().add(0,0,0).getBlock().getLightLevel()<=4) {
- dodgechance+=0.01*p.getEquipment().getArmorContents()[i].getEnchantmentLevel(Enchantment.LUCK);
- }
- ItemStack equip = p.getEquipment().getArmorContents()[i];
- if (isRanger(p) && equip!=null
- && equip.getType()!=Material.AIR &&
- equip.hasItemMeta() && equip.getItemMeta().hasLore()) {
- if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Jamdak Set")) {
- dodgechance+=0.03;
- } else
- if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Darnys Set")) {
- dodgechance+=0.05;
- } else
- if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Alikahn Set")) {
- dodgechance+=0.08;
- } else
- if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Lorasaadi Set")) {
- dodgechance+=0.11;
- }
- }
- }
-
- PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
-
- if (ArtifactAbility.containsEnchantment(ArtifactAbility.SHADOWWALKER, p.getEquipment().getItemInMainHand()) &&
- p.isOnGround() && p.getLocation().getY()>=0 && p.getLocation().add(0,0,0).getBlock().getLightLevel()<=4) {
- dodgechance+=0.01*p.getEquipment().getItemInMainHand().getEnchantmentLevel(Enchantment.LUCK);
- }
-
- if (ItemSet.GetSetCount(ItemSet.PANROS, p)>=3) {
- dodgechance+=0.20;
- }
-
- if (isStriker(p) &&
- pd.velocity>0) {
- dodgechance+=0.2;
- }
- if (isRanger(p)) {
- dodgechance+=0.5;
- }
- if (pd.fulldodge) {
- dodgechance = 1.0;
- }
- return dodgechance;
- }
-
public static ItemStack applyModeName(ItemStack item) {
if (item!=null &&
item.getType()!=Material.AIR &&
@@ -2918,4 +2866,26 @@ public class GenericFunctions {
ent.getEquipment().getBoots()
};
}
+
+ public static void updateSetItems(Player player) {
+ TwosideKeeper.log("Inventory is size "+player.getInventory().getSize(),2);
+ for (int i=0;i newlore = new ArrayList();
+
+ if (GenericFunctions.isHardenedItem(player.getInventory().getItem(i))) {
+ newlore.add(ChatColor.GRAY+"Breaks Remaining: "+ChatColor.YELLOW+GenericFunctions.getHardenedItemBreaks(player.getInventory().getItem(i)));
+ }
+ newlore.addAll(ItemSet.GenerateLore(set, tier));
+ ItemMeta m = player.getInventory().getItem(i).getItemMeta();
+ m.setLore(newlore);
+ player.getInventory().getItem(i).setItemMeta(m);
+ }
+ }
+ }
}
diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java
index 3031f3d..66555d6 100644
--- a/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java
+++ b/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java
@@ -1,28 +1,45 @@
package sig.plugin.TwosideKeeper.HelperStructures;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import sig.plugin.TwosideKeeper.TwosideKeeper;
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
public enum ItemSet {
- PANROS(1,2,3),
- SONGSTEEL(4,6,10),
- DAWNTRACKER(3,5,8),
- LORASYS(0,0,0);
+ PANROS(1,1, 3,2, 10,10, 20,10),
+ SONGSTEEL(4,4, 6,2, 8,4, 20,10),
+ DAWNTRACKER(3,2, 2,1, 6,4, 4,2),
+ LORASYS(0,0, 0,0, 0,0, 0,0);
- int val1;
- int val2;
- int val3;
+ int baseval;
+ int increase_val;
+ int baseval_bonus2;
+ int increase_val_bonus2;
+ int baseval_bonus3;
+ int increase_val_bonus3;
+ int baseval_bonus4;
+ int increase_val_bonus4;
- ItemSet(int val1,int val2, int val3) {
- this.val1=val1;
- this.val2=val2;
- this.val3=val3;
+ ItemSet(int baseval,int increase_val,
+ int baseval2,int increase_val2,
+ int baseval3,int increase_val3,
+ int baseval4,int increase_val4) {
+ this.baseval=baseval;
+ this.increase_val=increase_val;
+ this.baseval_bonus2=baseval2;
+ this.increase_val_bonus2=increase_val2;
+ this.baseval_bonus3=baseval3;
+ this.increase_val_bonus3=increase_val3;
+ this.baseval_bonus4=baseval4;
+ this.increase_val_bonus4=increase_val4;
}
public static boolean isSetItem(ItemStack item) {
@@ -57,19 +74,29 @@ public enum ItemSet {
TwosideKeeper.log(ChatColor.RED+"[ERROR] Could not detect proper tier of "+item.toString()+"!", 1);
return 0;
}
-
- public int GetBaseAmount(ItemStack item) {
- switch (GetTier(item)) {
+
+ public static int GetBaseAmount(ItemSet set, int tier, int stat) {
+ //stat will be 1 for the base value, 2 for the 2-piece set bonus, 3 for the 3-piece set bonus, and 4 for the 4-piece set bonus.
+ switch (stat) {
+ case 1:{
+ return set.baseval+((tier-1)*set.increase_val);
+ }
+ case 2:{
+ return set.baseval_bonus2+((tier-1)*set.increase_val_bonus2);
+ }
case 3:{
- return this.val2;
+ return set.baseval_bonus3+((tier-1)*set.increase_val_bonus3);
}
case 4:{
- return this.val3;
- }
- default:{
- return this.val1;
+ return set.baseval_bonus4+((tier-1)*set.increase_val_bonus4);
}
}
+ TwosideKeeper.log(ChatColor.RED+"Error occurred while attempting to grab the Base Amount!!!", 1);
+ return -1;
+ }
+
+ public int GetBaseAmount(ItemStack item) {
+ return baseval+((GetTier(item)-1)*increase_val);
}
public static int GetSetCount(ItemSet set, LivingEntity ent) {
@@ -85,4 +112,140 @@ public enum ItemSet {
TwosideKeeper.log("Currently have "+count+" pieces from the "+set.name()+" set.", 5);
return count;
}
+
+ public static int GetTierSetCount(ItemSet set, int tier, LivingEntity ent) {
+ int count = 0;
+ for (int i=0;i=5) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public static List GetSetBonusCount(LivingEntity ent, ItemSet set, int count) {
+ //Return a mapping of all tier values that meet the count requirement for that set.
+ List mapping = new ArrayList();
+ for (int i=0;i=count) {
+ if (!mapping.contains(tier)) {
+ mapping.add(tier);
+ }
+ }
+ }
+ }
+ return mapping;
+ }
+
+ public static double TotalBaseAmountBasedOnSetBonusCount(Player p, ItemSet set, int count, int set_bonus) {
+ double amt = 0.0;
+ for (int i=0;i GenerateLore(ItemSet set, int tier) {
+ List lore = new ArrayList();
+ switch (set) {
+ case PANROS:{
+ lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
+ lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Panros Set");
+ lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" Damage");
+ }break;
+ case SONGSTEEL:{
+ lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
+ lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Songsteel Set");
+ lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" Health");
+ }break;
+ case DAWNTRACKER:{
+ lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
+ lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Dawntracker Set");
+ lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Lifesteal");
+ }break;
+ case LORASYS:{
+ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
+ lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Lorasys Set");
+ lore.add(ChatColor.YELLOW+"???");
+ }break;
+ }
+
+ lore.add("");
+
+ switch (set) {
+ case PANROS:{
+ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
+ lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
+ lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Dodge Chance");
+ lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Critical Chance");
+ lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Line Drive");
+ lore.add(ChatColor.GRAY+" Press the drop key while performing the");
+ lore.add(ChatColor.GRAY+" first line drive to line drive a second");
+ lore.add(ChatColor.GRAY+" time in another direction.");
+ }break;
+ case SONGSTEEL:{
+ 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 (30 seconds)");
+ lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage Reduction");
+ lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Vendetta");
+ lore.add(ChatColor.GRAY+" Blocking stores 30% of mitigation damage.");
+ lore.add(ChatColor.GRAY+" Attacking with a shield unleashes all stored");
+ lore.add(ChatColor.GRAY+" mitigation damage.");
+ }break;
+ case DAWNTRACKER:{
+ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
+ lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
+ 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)+" Damage");
+ lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Mock");
+ lore.add(ChatColor.GRAY+" Mock debuff duration increases from");
+ lore.add(ChatColor.GRAY+" 10->20 seconds, making it stackable.");
+ }break;
+ case LORASYS:{
+ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
+ lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" ???");
+ lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" ???");
+ lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" ???");
+ lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" ???");
+ }break;
+ }
+ return lore;
+ }
}
diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Loot.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Loot.java
index 82efe1e..39caa1b 100644
--- a/src/sig/plugin/TwosideKeeper/HelperStructures/Loot.java
+++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Loot.java
@@ -132,23 +132,28 @@ public class Loot {
String set_name = "";
String prefix = "";
prefix = (hardened)?(ChatColor.LIGHT_PURPLE+""+ChatColor.BOLD+"Hardened Mega "):(ChatColor.AQUA+""+ChatColor.BOLD+"Mega ");
+ ItemSet set = null;
switch (type) {
case 0:{
+ set = ItemSet.PANROS;
set_name = prefix+"Panros Striker "+GenericFunctions.UserFriendlyMaterialName(item.getType()); //Striker set.
}break;
case 1:{
+ set = ItemSet.SONGSTEEL;
if (item.getType().toString().contains("SWORD")) {
item.setType(Material.SHIELD);
}
set_name = prefix+"Songsteel Defender "+GenericFunctions.UserFriendlyMaterialName(item.getType()); //Defender set.
}break;
case 2:{
+ set = ItemSet.DAWNTRACKER;
if (item.getType().toString().contains("SWORD")) {
item.setType(Material.valueOf(item.getType().toString().replace("SWORD","")+"AXE"));
}
set_name = prefix+"Dawntracker Barbarian "+GenericFunctions.UserFriendlyMaterialName(item.getType());
}break;
case 3:{
+ set = ItemSet.LORASYS;
if (item.getType().toString().contains("SWORD")) {
//Convert Slayer weapon here. ???
}
@@ -158,125 +163,9 @@ public class Loot {
if (item.getItemMeta().hasLore()) {
lore = item.getItemMeta().getLore();
}
- if (item.getType().toString().contains("STONE") || item.getType().toString().contains("IRON")) { //This is a tier 1/2 piece.
- int tier = (item.getType().toString().contains("STONE")?1:2);
- switch (type) {
- case 0:{
- lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Panros Set");
- lore.add(ChatColor.YELLOW+"+1 Damage");
- }break;
- case 1:{
- lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Songsteel Set");
- lore.add(ChatColor.YELLOW+"+4 Health");
- }break;
- case 2:{
- lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Dawntracker Set");
- lore.add(ChatColor.YELLOW+"+3% Lifesteal");
- }break;
- case 3:{
- lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Lorasys Set");
- lore.add(ChatColor.YELLOW+"???");
- }break;
- }
- } else
- if (item.getType().toString().contains("DIAMOND")) { //This is a tier 3 piece.
- switch (type) {
- case 0:{
- lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T3 Panros Set");
- lore.add(ChatColor.YELLOW+"+2 Damage");
- }break;
- case 1:{
- lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T3 Songsteel Set");
- lore.add(ChatColor.YELLOW+"+6 Health");
- }break;
- case 2:{
- lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T3 Dawntracker Set");
- lore.add(ChatColor.YELLOW+"+5% Lifesteal");
- }break;
- case 3:{
- lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T3 Lorasys Set");
- lore.add(ChatColor.YELLOW+"???");
- }break;
- }
- } else
- if (item.getType().toString().contains("GOLD")) { //This is a tier 4 piece.
- switch (type) {
- case 0:{
- lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T4 Panros Set");
- lore.add(ChatColor.YELLOW+"+3 Damage");
- }break;
- case 1:{
- lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T4 Songsteel Set");
- lore.add(ChatColor.YELLOW+"+10 Health");
- }break;
- case 2:{
- lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T4 Dawntracker Set");
- lore.add(ChatColor.YELLOW+"+8% Lifesteal");
- }break;
- case 3:{
- lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T4 Lorasys Set");
- lore.add(ChatColor.YELLOW+"???");
- }break;
- }
- } else
- {
- lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
- lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T4 Songsteel Set");
- lore.add(ChatColor.YELLOW+"+10 Health");
- }
-
- lore.add("");
-
- switch (type) {
- case 0:{
- lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
- lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +5 Damage");
- lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +20% Dodge Chance");
- lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +40% Critical Chance");
- lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Line Drive");
- lore.add(ChatColor.GRAY+" Press the drop key while performing the");
- lore.add(ChatColor.GRAY+" first line drive to line drive a second");
- lore.add(ChatColor.GRAY+" time in another direction.");
- }break;
- case 1:{
- lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
- lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +8 Max Health");
- lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +12 Absorption (30 seconds)");
- lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +30% Damage Reduction");
- lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Vendetta");
- lore.add(ChatColor.GRAY+" Blocking stores 30% of mitigation damage.");
- lore.add(ChatColor.GRAY+" Attacking with a shield unleashes all stored");
- lore.add(ChatColor.GRAY+" mitigation damage.");
- }break;
- case 2:{
- lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
- lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +3 Damage");
- lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +10% Lifesteal");
- lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +6 Damage");
- lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Mock");
- lore.add(ChatColor.GRAY+" Mock debuff duration increases from");
- lore.add(ChatColor.GRAY+" 10->20 seconds, making it stackable.");
- }break;
- case 3:{
- lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
- lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" ???");
- lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" ???");
- lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" ???");
- lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" ???");
- }break;
- }
+ int tier = 0;
+ do {tier++;} while(Math.random()<=0.25);
+ lore.addAll(ItemSet.GenerateLore(set,tier));
ItemMeta m = item.getItemMeta();
m.setLore(lore);
m.setDisplayName(set_name);
diff --git a/src/sig/plugin/TwosideKeeper/NewCombat.java b/src/sig/plugin/TwosideKeeper/NewCombat.java
index e71e371..a5bc603 100644
--- a/src/sig/plugin/TwosideKeeper/NewCombat.java
+++ b/src/sig/plugin/TwosideKeeper/NewCombat.java
@@ -511,7 +511,7 @@ public class NewCombat {
ItemSet set = ItemSet.GetSet(GenericFunctions.getEquipment(shooter)[i]);
if (set!=null) {
if (set==ItemSet.PANROS) {
- double dmg = set.GetBaseAmount(GenericFunctions.getEquipment(shooter)[i]);
+ double dmg = ItemSet.GetBaseAmount(set,ItemSet.GetTier(GenericFunctions.getEquipment(shooter)[i]),1);
addToPlayerLogger(ent,"Set Piece Damage",dmg);
basedmg += dmg;
}
@@ -531,20 +531,14 @@ public class NewCombat {
aPlugin.API.sendActionBarMessage(p, ChatColor.YELLOW+"Vendetta: "+ChatColor.GREEN+Math.round(pd.vendetta_amt)+" dmg stored");
}
}
- }
+ double dmg = ItemSet.TotalBaseAmountBasedOnSetBonusCount(p,ItemSet.PANROS,2,2);
+ addToPlayerLogger(ent,"Set Bonus",dmg);
+ basedmg += dmg;
- if (ItemSet.GetSetCount(ItemSet.PANROS, shooter)>=2) {
- double dmg = 5;
+ dmg = ItemSet.TotalBaseAmountBasedOnSetBonusCount(p,ItemSet.DAWNTRACKER,2,2);
addToPlayerLogger(ent,"Set Bonus",dmg);
basedmg += dmg;
- }
- if (ItemSet.GetSetCount(ItemSet.DAWNTRACKER, shooter)>=2) {
- double dmg = 3;
- addToPlayerLogger(ent,"Set Bonus",dmg);
- basedmg += dmg;
- }
- if (ItemSet.GetSetCount(ItemSet.DAWNTRACKER, shooter)>=4) {
- double dmg = 3;
+ dmg = ItemSet.TotalBaseAmountBasedOnSetBonusCount(p,ItemSet.DAWNTRACKER,4,4);
addToPlayerLogger(ent,"Set Bonus",dmg);
basedmg += dmg;
}
@@ -843,8 +837,8 @@ public class NewCombat {
if (shooter instanceof Player) {
Player p = (Player)shooter;
critchance += (GenericFunctions.isStriker(p)?0.2:0.0);
+ critchance += ItemSet.TotalBaseAmountBasedOnSetBonusCount(p,ItemSet.PANROS,4,4)/100d;
}
- critchance += (ItemSet.GetSetCount(ItemSet.PANROS, shooter)>=4)?0.4:0.0;
}
return critchance;
}
@@ -1167,9 +1161,7 @@ public class NewCombat {
if (ArtifactAbility.containsEnchantment(ArtifactAbility.GREED, p.getEquipment().getItemInMainHand())) {
dmgreduction /= Math.pow(ArtifactAbility.getEnchantmentLevel(ArtifactAbility.GREED, p.getEquipment().getItemInMainHand()),2);
}
- if (ItemSet.GetSetCount(ItemSet.SONGSTEEL, p)>=4) {
- dmgreduction *= 1.3;
- }
+ dmgreduction *= 1.0+(ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.SONGSTEEL, 4, 4)/100d);
}
//Blocking: -((p.isBlocking())?ev.getDamage()*0.33:0) //33% damage will be reduced if we are blocking.
@@ -1223,9 +1215,7 @@ public class NewCombat {
}
}
}
- if (ItemSet.GetSetCount(ItemSet.DAWNTRACKER, p)>=3) {
- lifestealpct += 0.10;
- }
+ lifestealpct += ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.DAWNTRACKER, 3, 3)/100d;
return lifestealpct;
}
@@ -1364,7 +1354,7 @@ public class NewCombat {
p.removePotionEffect(PotionEffectType.DAMAGE_RESISTANCE);
p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE,100,resistlevel));
}
- if (p.isBlocking() && ItemSet.GetSetCount(ItemSet.SONGSTEEL, p)>=5) {
+ if (p.isBlocking() && ItemSet.hasFullSet(p, ItemSet.SONGSTEEL)) {
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.vendetta_amt+=(dmg-CalculateDamageReduction(dmg,target,damager))*0.3;
aPlugin.API.sendActionBarMessage(p, ChatColor.YELLOW+"Vendetta: "+ChatColor.GREEN+Math.round(pd.vendetta_amt)+" dmg stored");
@@ -1440,6 +1430,56 @@ public class NewCombat {
private static boolean DamageIsSmallerThanAbsorptionAmount(double finaldmg, double healthabs) {
return finaldmg<=healthabs;
}
+
+ public static double CalculateDodgeChance(Player p) {
+ double dodgechance = 0.0d;
+ dodgechance+=(ArtifactAbility.calculateValue(ArtifactAbility.DODGE, p.getEquipment().getItemInMainHand().getEnchantmentLevel(Enchantment.LUCK), ArtifactAbility.getEnchantmentLevel(ArtifactAbility.DODGE, p.getEquipment().getItemInMainHand()))/100d);
+
+ for (int i=0;i=0 && p.getLocation().add(0,0,0).getBlock().getLightLevel()<=4) {
+ dodgechance+=0.01*p.getEquipment().getArmorContents()[i].getEnchantmentLevel(Enchantment.LUCK);
+ }
+ ItemStack equip = p.getEquipment().getArmorContents()[i];
+ if (GenericFunctions.isRanger(p) && equip!=null
+ && equip.getType()!=Material.AIR &&
+ equip.hasItemMeta() && equip.getItemMeta().hasLore()) {
+ if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Jamdak Set")) {
+ dodgechance+=0.03;
+ } else
+ if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Darnys Set")) {
+ dodgechance+=0.05;
+ } else
+ if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Alikahn Set")) {
+ dodgechance+=0.08;
+ } else
+ if (equip.getItemMeta().getLore().contains(ChatColor.GOLD+""+ChatColor.BOLD+"Lorasaadi Set")) {
+ dodgechance+=0.11;
+ }
+ }
+ }
+
+ PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
+
+ if (ArtifactAbility.containsEnchantment(ArtifactAbility.SHADOWWALKER, p.getEquipment().getItemInMainHand()) &&
+ p.isOnGround() && p.getLocation().getY()>=0 && p.getLocation().add(0,0,0).getBlock().getLightLevel()<=4) {
+ dodgechance+=0.01*p.getEquipment().getItemInMainHand().getEnchantmentLevel(Enchantment.LUCK);
+ }
+
+ dodgechance+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(p,ItemSet.PANROS,3,3)/100d;
+
+ if (GenericFunctions.isStriker(p) &&
+ pd.velocity>0) {
+ dodgechance+=0.2;
+ }
+ if (GenericFunctions.isRanger(p)) {
+ dodgechance+=0.5;
+ }
+ if (pd.fulldodge) {
+ dodgechance = 1.0;
+ }
+ return dodgechance;
+ }
}
diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java
index 70e08f8..cee6505 100644
--- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java
+++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java
@@ -447,13 +447,14 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
public void run(){
for (int i=0;i=3) {
+ double absorption_amt = ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.SONGSTEEL, 3, 3);
+ if (absorption_amt>0) {
if (p.hasPotionEffect(PotionEffectType.ABSORPTION)) {
int oldlv = GenericFunctions.getPotionEffectLevel(PotionEffectType.ABSORPTION, p)+1;
p.removePotionEffect(PotionEffectType.ABSORPTION);
- p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION,599,2+oldlv));
+ p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION,599,(int)(absorption_amt/4)+oldlv));
} else {
- p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION,599,2));
+ p.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION,599,(int)(absorption_amt/4)));
}
}
}
@@ -1230,7 +1231,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
//LEAVE: Sound.NOTE_PLING, 8, 0.7f);
//MESSAGE: Sound.NOTE_STICKS, 0.6f, 0.85f);
}
- }
+ }
if (SERVER_TYPE==ServerType.MAIN && !restarting_server) {
Bukkit.getScheduler().runTaskAsynchronously(this, pluginupdater);
@@ -1238,6 +1239,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
playerdata.put(ev.getPlayer().getUniqueId(), new PlayerStructure(ev.getPlayer(),getServerTickTime()));
log("[TASK] New Player Data has been added. Size of array: "+playerdata.size(),4);
+ GenericFunctions.updateSetItems(ev.getPlayer());
+
//Update player max health. Check equipment too.
setPlayerMaxHealth(ev.getPlayer());
ev.getPlayer().getScoreboard().getTeam(ev.getPlayer().getName().toLowerCase()).setSuffix(createHealthbar(((ev.getPlayer().getHealth())/ev.getPlayer().getMaxHealth())*100,ev.getPlayer()));
@@ -2791,7 +2794,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
!pd.target.isDead()) {
pd.target.setNoDamageTicks(0);
}
- boolean ex_version = ItemSet.GetSetCount(ItemSet.PANROS, ev.getPlayer())+((ItemSet.isSetItem(ev.getItemDrop().getItemStack())&&ItemSet.GetSet(ev.getItemDrop().getItemStack()).equals(ItemSet.PANROS))?1:0)>=5;
+ boolean ex_version = ItemSet.hasFullSet(ev.getPlayer(), ItemSet.PANROS);
ev.getItemDrop().setPickupDelay(0);
Vector facing = ev.getPlayer().getLocation().getDirection();
if (!second_charge) {
@@ -3766,7 +3769,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
//final double pcthp = ((p.getHealth())/p.getMaxHealth())*100;
- double dodgechance = GenericFunctions.CalculateDodgeChance(p);
+ double dodgechance = NewCombat.CalculateDodgeChance(p);
if (ev.getCause()==DamageCause.THORNS &&
GenericFunctions.isRanger(p)) {
@@ -3968,7 +3971,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (p.hasPotionEffect(PotionEffectType.GLOWING)) {
ev.setCancelled(true);
}
- double dodgechance = GenericFunctions.CalculateDodgeChance(p);
+ double dodgechance = NewCombat.CalculateDodgeChance(p);
if (ev.getCause()==DamageCause.THORNS &&
GenericFunctions.isRanger(p)) {
dodgechance=1;
@@ -5818,9 +5821,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
}
- if (ItemSet.GetSetCount(ItemSet.SONGSTEEL, p)>=2) {
- hp += 8;
- }
+ hp+=ItemSet.TotalBaseAmountBasedOnSetBonusCount(p, ItemSet.SONGSTEEL, 2, 2);
/*
if (p.hasPotionEffect(PotionEffectType.ABSORPTION)) {
@@ -6126,7 +6127,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Damage Reduction: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format((1.0-store1)*100)+"%");
p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Life Steal: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(NewCombat.calculateLifeStealAmount(p)*100)+"%");
p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Critical Strike Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format((NewCombat.calculateCriticalStrikeChance(p.getEquipment().getItemInMainHand(), p))*100)+"%");
- p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Dodge Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format((GenericFunctions.CalculateDodgeChance(p))*100)+"%");
+ p.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Dodge Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format((NewCombat.CalculateDodgeChance(p))*100)+"%");
TextComponent f = new TextComponent(ChatColor.GRAY+""+ChatColor.ITALIC+"Current Mode: ");
f.addExtra(GenericFunctions.PlayerModeName(p));
p.spigot().sendMessage(f);