v3 of TwosideKeeper plugin. Compatible with Minecraft v1.9.2. Now being retired. A Bukkit Plugin designed to improve the server experience for other players while adding in new conveniences and features.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TwosideKeeper/src/sig/plugin/TwosideKeeper/HelperStructures/ItemSet.java

477 lines
24 KiB

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<String> lore = item.getItemMeta().getLore();
for (int i=0;i<lore.size();i++) {
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T") && !lore.get(i).contains("Recipe")) {
//This is the tier line.
return ItemSet.valueOf(lore.get(i).replace(ChatColor.GOLD+""+ChatColor.BOLD+"T", "").split(" ")[1].toUpperCase());
}
}
}
return null;
}
public static int GetTier(ItemStack item) {
if (isSetItem(item) &&
item.getItemMeta().hasLore()) {
List<String> lore = item.getItemMeta().getLore();
for (int i=0;i<lore.size();i++) {
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T")) {
//This is the tier line.
return Integer.parseInt(lore.get(i).replace(ChatColor.GOLD+""+ChatColor.BOLD+"T", "").split(" ")[0]);
}
}
TwosideKeeper.log(ChatColor.RED+"[ERROR] Could not detect proper tier of "+item.toString()+"!", 1);
}
return 0;
}
public static void SetTier(ItemStack item, int tier) {
boolean found=false;
if (isSetItem(item) &&
item.getItemMeta().hasLore()) {
List<String> lore = item.getItemMeta().getLore();
for (int i=0;i<lore.size();i++) {
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T")) {
//This is the tier line.
int oldtier=GetTier(item);
//TwosideKeeper.log("In lore: "+lore.get(i)+". Old tier: "+oldtier,2);
lore.set(i, lore.get(i).replace("T"+oldtier, "T"+tier));
found=true;
break;
}
}
ItemMeta m = item.getItemMeta();
m.setLore(lore);
item.setItemMeta(m);
GenericFunctions.UpdateItemLore(item); //Update this item now that we upgraded the tier.
GenericFunctions.ConvertSetColor(item, GetSet(item));
if (!found) {
TwosideKeeper.log(ChatColor.RED+"[ERROR] Could not detect proper tier of "+item.toString()+"!", 1);
}
}
}
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 set.baseval_bonus3+((tier-1)*set.increase_val_bonus3);
}
case 4:{
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(ItemStack[] equips, ItemSet set, LivingEntity ent) {
int count = 0;
for (ItemStack item : equips) {
ItemSet temp = ItemSet.GetSet(item);
if (temp!=null) {
if (temp.equals(set)) {
count++;
}
}
}
TwosideKeeper.log("Currently have "+count+" pieces from the "+set.name()+" set.", 5);
return count;
}
public static int GetTierSetCount(ItemStack[] equips, ItemSet set, int tier, LivingEntity ent) {
int count = 0;
for (ItemStack item : equips) {
ItemSet temp = ItemSet.GetSet(item);
if (temp!=null) {
if (temp.equals(set) && GetTier(item)==tier) {
count++;
}
}
}
TwosideKeeper.log("Currently have "+count+" pieces from the "+set.name()+" set of Tier +"+tier+".", 5);
return count;
}
public static int GetTotalBaseAmount(ItemStack[] equips, LivingEntity ent, ItemSet set) {
int count = 0;
for (ItemStack item : equips) {
ItemSet temp = ItemSet.GetSet(item);
if (temp!=null) {
if (temp.equals(set)) {
count += set.GetBaseAmount(item);
}
}
}
TwosideKeeper.log("Base Total of all equipment from this set is "+count, 5);
return count;
}
public static boolean hasFullSet(ItemStack[] equips, LivingEntity ent, ItemSet set) {
//Return a mapping of all tier values that meet the count requirement for that set.
for (ItemStack item : equips) {
ItemSet temp = ItemSet.GetSet(item);
if (temp!=null) {
int tier = ItemSet.GetTier(item);
int detectedsets = ItemSet.GetTierSetCount(equips, set, tier, ent);
TwosideKeeper.log("Sets: "+detectedsets, 5);
if (detectedsets>=5) {
return true;
}
}
}
return false;
}
public static List<Integer> 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<Integer> mapping = new ArrayList<Integer>();
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<Integer> mapping = ItemSet.GetSetBonusCount(equips, p, set, count);
for (Integer tier : mapping) {
amt+=ItemSet.GetBaseAmount(set, tier, set_bonus);
}
return amt;
}
public static Collection<? extends String> GenerateLore(ItemSet set, int tier) {
List<String> lore = new ArrayList<String>();
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<String> lore = item.getItemMeta().getLore();
for (int i=0;i<lore.size();i++) {
if (lore.get(i).contains(ChatColor.GOLD+""+ChatColor.BOLD+"T")) {
//This is the tier line.
ItemSet oldset=GetSet(item);
//TwosideKeeper.log("In lore: "+lore.get(i)+". Old tier: "+oldtier,2);
//lore.set(i, lore.get(i).replace("T"+oldtier, "T"+tier));
lore.set(i, lore.get(i).replace(GenericFunctions.CapitalizeFirstLetters(oldset.name()), GenericFunctions.CapitalizeFirstLetters(set.name())));
found=true;
break;
}
}
ItemMeta m = item.getItemMeta();
m.setLore(lore);
item.setItemMeta(m);
GenericFunctions.UpdateItemLore(item); //Update this item now that we upgraded the tier.
if (!found) {
TwosideKeeper.log(ChatColor.RED+"[ERROR] Could not detect proper tier of "+item.toString()+"!", 1);
}
}
}
}