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