package sig.plugin.TwosideKeeper.HelperStructures; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import sig.plugin.TwosideKeeper.TwosideKeeper; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; public enum ItemSet { PANROS(1,1, 3,2, 10,10, 20,10), SONGSTEEL(4,2, 6,2, 8,8, 20,10), DAWNTRACKER(4,4, 20,10, 20,10, 6,4), LORASYS(2,2, 0,0, 0,0, 0,0), JAMDAK(3,3, 5,1, 10,1, 10,2), //Graceful Dodge is in ticks. DARNYS(2,1, 10,5, 20,5, 1,1), ALIKAHN(3,1, 15,6, 30,10, 12,6), LORASAADI(4,1, 4,2, 8,6, 8,3), MOONSHADOW(4,2, 1,1, 8,8, 15,7), GLADOMAIN(1,1, 12,10, 8,8, 1,1), WOLFSBANE(2,1, 15,10, 10,5, 15,10), ALUSTINE(10,10, 10,-1, 5,-1, 6,4); 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 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) { return GetSet(item)!=null; } public static ItemSet GetSet(ItemStack item) { if ((GenericFunctions.isEquip(item) || GenericFunctions.isSkullItem(item)) && item.getItemMeta().hasLore()) { List lore = item.getItemMeta().getLore(); for (int i=0;i lore = item.getItemMeta().getLore(); for (int i=0;i lore = item.getItemMeta().getLore(); for (int i=0;i=5) { return true; } } } return false; } public static List GetSetBonusCount(ItemStack[] equips, 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 (ItemStack item : equips) { ItemSet temp = ItemSet.GetSet(item); if (temp!=null) { int tier = ItemSet.GetTier(item); if (ItemSet.GetTierSetCount(equips, set, tier, ent)>=count) { if (!mapping.contains(tier)) { mapping.add(tier); } } } } return mapping; } public static boolean HasSetBonusBasedOnSetBonusCount(ItemStack[] equips, Player p, ItemSet set, int count) { //Similar to HasFullSet, but lets you decide how many pieces to check for from that particular set and matching tiers. return ItemSet.GetSetBonusCount(equips, p, set, count).size()>0; } public static double TotalBaseAmountBasedOnSetBonusCount(ItemStack[] equips, Player p, ItemSet set, int count, int set_bonus) { double amt = 0.0; List mapping = ItemSet.GetSetBonusCount(equips, p, set, count); for (Integer tier : mapping) { amt+=ItemSet.GetBaseAmount(set, tier, set_bonus); } return amt; } public static Collection 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)+"% Block Chance"); }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)+" Health"); }break; case LORASYS:{ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Lorasys Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" Damage"); }break; case JAMDAK:{ lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Jamdak Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Dodge Chance"); }break; case DARNYS:{ lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Darnys Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Dodge Chance"); }break; case ALIKAHN:{ lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Alikahn Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Dodge Chance"); }break; case LORASAADI:{ lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Lorasaadi Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Dodge Chance"); }break; case GLADOMAIN:{ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Amulet"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Gladomain Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" HP"); }break; case MOONSHADOW:{ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Trinket"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Moonshadow Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Crit Damage"); }break; case WOLFSBANE:{ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Ornament"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Wolfsbane Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Critical Chance"); }break; case ALUSTINE:{ lore.add(ChatColor.LIGHT_PURPLE+"Slayer Charm"); lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Alustine Set"); lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% EXP Gain"); }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 Health (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 25% of mitigation damage."); lore.add(ChatColor.GRAY+" 1% of damage is stored as thorns true damage."); lore.add(ChatColor.GRAY+" Shift+Left-Click with a shield to unleash"); lore.add(ChatColor.GRAY+" all of your stored 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)+"% Debuff Resistance"); 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+"Bonus Effects"); 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."); }break; case JAMDAK: { lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Dodge Chance"); 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)/20d)+"s Graceful Dodge"); lore.add(ChatColor.GRAY+" Gives you invulnerability and "+(ItemSet.GetBaseAmount(set, tier, 4)/4)+" absorption"); lore.add(ChatColor.GRAY+" health for each successful dodge."); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Close Range Mode:"); lore.add(ChatColor.GRAY+" Increases Tumble Invincibility from"); lore.add(ChatColor.GRAY+" 1 -> 3 seconds"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Sniper Mode:"); lore.add(ChatColor.GRAY+" Increases Critical Damage by +100%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Debilitation Mode:"); lore.add(ChatColor.GRAY+" Increases Armor Penetration by +50%."); }break; case DARNYS: { lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Damage Reduction"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Damage Reduction"); lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Swift Aegis "+WorldShop.toRomanNumeral(ItemSet.GetBaseAmount(set, tier, 4))); lore.add(ChatColor.GRAY+" Builds "+ItemSet.GetBaseAmount(set, tier, 4)+" stack"+((ItemSet.GetBaseAmount(set, tier, 4))!=1?"s":"")+" of Resistance every"); lore.add(ChatColor.GRAY+" 5 seconds of sprinting, and for every"); lore.add(ChatColor.GRAY+" Tumble. Each hit removes one stack of"); lore.add(ChatColor.GRAY+" Resistance. Caps at Resistance 10."); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Close Range Mode:"); lore.add(ChatColor.GRAY+" Increases Tumble Invincibility from"); lore.add(ChatColor.GRAY+" 1 -> 3 seconds"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Sniper Mode:"); lore.add(ChatColor.GRAY+" Increases Critical Damage by +100%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Debilitation Mode:"); lore.add(ChatColor.GRAY+" Increases Armor Penetration by +50%."); }break; case ALIKAHN: { 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)+" Max Health"); lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Health Regen / 5 seconds"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Close Range Mode:"); lore.add(ChatColor.GRAY+" Increases Tumble Invincibility from"); lore.add(ChatColor.GRAY+" 1 -> 3 seconds"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Sniper Mode:"); lore.add(ChatColor.GRAY+" Increases Critical Damage by +100%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Debilitation Mode:"); lore.add(ChatColor.GRAY+" Increases Armor Penetration by +50%."); }break; case LORASAADI:{ 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)+" Damage"); lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Execution Damage"); lore.add(ChatColor.DARK_AQUA+" per 20% Missing Health"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Close Range Mode:"); lore.add(ChatColor.GRAY+" Increases Tumble Invincibility from"); lore.add(ChatColor.GRAY+" 1 -> 3 seconds"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Sniper Mode:"); lore.add(ChatColor.GRAY+" Increases Critical Damage by +100%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Debilitation Mode:"); lore.add(ChatColor.GRAY+" Increases Armor Penetration by +50%."); }break; case GLADOMAIN:{ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Cooldown Reduction"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Dodge Chance"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Life Saver "); lore.add(ChatColor.GRAY+" When about to be killed, puts you into"); lore.add(ChatColor.GRAY+" stealth, applies Speed IV for 10 seconds, adds"); lore.add(ChatColor.GRAY+" invulnerability, and de-aggros all current"); lore.add(ChatColor.GRAY+" targets."); lore.add(ChatColor.WHITE+" 5 Minute Cooldown"); lore.add(ChatColor.DARK_AQUA+" 7 - "+ChatColor.WHITE+" Provides the Following Bonuses:"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"A successful Assassination grants 100%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Critical Strike Chance and 100% Dodge"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"chance for the next hit. Dodge Chance"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"increases by +"+(5+ItemSet.GetBaseAmount(set, tier, 4))+"% per 1m/sec of movement"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"speed."); }break; case MOONSHADOW:{ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" Applies Poison "+WorldShop.toRomanNumeral(ItemSet.GetBaseAmount(set, tier, 2))+ChatColor.GRAY+" (0:15)"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Damage"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Critical Chance"); lore.add(ChatColor.DARK_AQUA+" 7 - "+ChatColor.WHITE+" Provides the Following Bonuses:"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Strength Cap Increases to 40. 2 Stacks per kill."); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Successful Assassinations apply damage"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"in an AoE Range."); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Slayers can drop aggro by sneaking"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"for Three seconds."); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"While in Stealth Mode you gain 40%"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Dodge Chance"); }break; case WOLFSBANE:{ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" Recovers "+ItemSet.GetBaseAmount(set, tier, 2)+"% Cooldown on Assassination per kill"); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" Applies Speed V when Assassination is casted. Suppresses"); lore.add(ChatColor.DARK_AQUA+" "+ChatColor.WHITE+" the target for "+(ItemSet.GetBaseAmount(set, tier, 3)/20d)+"s"); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Gain "+(ItemSet.GetBaseAmount(set, tier, 4)/20d)+" seconds of invulnerability after"); lore.add(ChatColor.DARK_AQUA+" "+ChatColor.WHITE+" Assassination is casted."); lore.add(ChatColor.DARK_AQUA+" 7 - "+ChatColor.WHITE+" Provides the Following Bonuses:"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Backstabs heal 2 HP (1 Heart). Assassination cooldown reduced"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"to 2 seconds when used on a target closer than 5 meters."); }break; case ALUSTINE:{ lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:"); lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" Gain immunity to Explosions."); lore.add(ChatColor.DARK_AQUA+" "+ChatColor.WHITE+" Consumes "+ItemSet.GetBaseAmount(set, tier, 2)+" XP per absorbed hit."); lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" Resists all fire, poison, and wither damage."); lore.add(ChatColor.DARK_AQUA+" "+ChatColor.WHITE+" Consumes "+ItemSet.GetBaseAmount(set, tier, 3)+" XP per absorbed hit."); lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Backstabs spill "+ItemSet.GetBaseAmount(set, tier, 4)+" XP out from the target hit."); lore.add(ChatColor.DARK_AQUA+" "+ChatColor.WHITE+" Has a "+Math.min((ItemSet.GetBaseAmount(set, tier, 4)/20d)*100d,100)+"% chance to restore 2 HP (1 Heart) on XP gain."); lore.add(ChatColor.DARK_AQUA+" 7 - "+ChatColor.WHITE+" Provides the Following Bonuses:"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"Deal additional base damage equal to the"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"number of levels you have. Drains XP equal"); lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"to the number of levels you have per hit."); }break; } return lore; } public static void SetItemSet(ItemStack item, ItemSet set) { //Convert this item to a different set. boolean found=false; if (isSetItem(item) && item.getItemMeta().hasLore()) { List lore = item.getItemMeta().getLore(); for (int i=0;i