properly.
>Fixed Bad Memory leaks that caused eventual server slowdowns.
>Leader Wither loot now appears in a series of chests for collection
rather than being dispersed all over the ground.
>The Elite Zombie no longer completely stops players it is leashing
onto, but instead slowing them down.
>The Elite Zombie's running speed has been decreased by 35%.
>The Elite Zombie's cooldowns and timings on mechanics have been
modified.
>The Elite Zombie's Stored Energy attack now knocks the player hit very
far back.
>The Elite Zombie's health has been increased dramatically. The Elite
Zombie no longer has a Resistance IX buff.
if(!(y==0&&m.getTarget().getLocation().getY()>m.getLocation().getY())||!m.getLocation().add(x,y,z).getBlock().getType().isSolid()){//Player is higher than zombie. Don't break blocks in front of it. Climb up them. Unless it's lava.
if(!(y==0&&m.getTarget().getLocation().getY()>m.getLocation().getY())||!m.getLocation().add(x,y,z).getBlock().getType().isSolid()){//Player is higher than zombie. Don't break blocks in front of it. Climb up them. Unless it's lava.
if(!(y<0&&(m.getTarget().getLocation().getY()>m.getLocation().getY()-1))){//Player is lower than zombie. Break blocks below it to get to the player.
if(!(y<0&&(m.getTarget().getLocation().getY()>m.getLocation().getY()-1))){//Player is lower than zombie. Break blocks below it to get to the player.
@ -202,7 +205,12 @@ public class SigDrop extends Drop{
@Override
@Override
publicItemStackgetItemStack(){
publicItemStackgetItemStack(){
TwosideKeeper.log("Something went terribly wrong with getItemStack() call. Check to make sure you are using getSingleDrop(Player) and not getSingleDrop()!!!",0);
SHADOWWALKER("Shadow Walker","Increases your speed in dark areas. Damage Reduction increases by [VAL]% in dark areas. Dodge chance increases by [DODGEVAL]% in dark areas.",newdouble[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},
SHADOWWALKER("Shadow Walker","Increases your speed in dark areas. Damage Reduction increases by [VAL]% in dark areas. Dodge chance increases by [DODGEVAL]% in dark areas.",newdouble[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},
SURVIVOR("Survivor","Taking fatal damage will not kill you and instead consumes this ability, removes all debuffs, and restores your health by [VAL]%"+TemporarySkill(),newdouble[]{4,4.25,4.5,4.75,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10},
SURVIVOR("Survivor","Taking fatal damage will not kill you and instead consumes this ability, removes all debuffs, and restores your health by [VAL]%"+TemporarySkill(true),newdouble[]{4,4.25,4.5,4.75,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10},
DODGE("Dodge","You have a [VAL]% chance to dodge incoming damage from any damage source.",newdouble[]{0.1,0.125,0.15,0.175,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.45,0.5,0.55},
DODGE("Dodge","You have a [VAL]% chance to dodge incoming damage from any damage source.",newdouble[]{0.1,0.125,0.15,0.175,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.45,0.5,0.55},
@ -110,16 +110,16 @@ public enum ArtifactAbility {
//General abilities
//General abilities
AUTOREPAIR("Auto Repair","1% chance every second to repair [VAL] durability to the artifact item\n\nThe item must be sitting in your hotbar or must be equipped for this ability to work. This ability is less effective with no sunlight!",newdouble[]{3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,10,15},
AUTOREPAIR("Auto Repair","1% chance every second to repair [VAL] durability to the artifact item\n\nThe item must be sitting in your hotbar or must be equipped for this ability to work. This ability is less effective with no sunlight!",newdouble[]{3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,10,15},
GREED("Greed","Increases Drop rate by [VAL]% . Health is halved, health regeneration is halved. Each kill has a [GREEDCHANCE]% chance to consume the Greed buff."+TemporarySkill(),newdouble[]{1,2,3,4,5,7,9,11,13,15,17,19,25,35,50},
GREED("Greed","Increases Drop rate by [VAL]% . Health is halved, health regeneration is halved. Each kill has a [GREEDCHANCE]% chance to consume the Greed buff."+TemporarySkill(true),newdouble[]{1,2,3,4,5,7,9,11,13,15,17,19,25,35,50},
/*GROWTH("Growth",ChatColor.GRAY+"[Unimplemented] Increases artifact EXP gained by [VAL]% . Health is halved, health regeneration is halved, and damage reduction is halved. Consumes one level of Growth per level up.",newdouble[]{100,100,100,100,100,100,100,100,100,100},
GROWTH("Growth","Recovers 20% Potential to your Artifact."+TemporarySkill(false),newdouble[]{100,100,100,100,100,100,100,100,100,100},
REMOVE_CURSE("Remove Curse",ChatColor.GRAY+"[Unimplemented] Removes a level of a curse from the Artifact.",newdouble[]{-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0},
/*REMOVE_CURSE("Remove Curse",ChatColor.GRAY+"[Unimplemented] Removes a level of a curse from the Artifact.",newdouble[]{-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0},
EXP_MULT("Mega XP",ChatColor.GRAY+"[Unimplemented] Increases experience dropped from monsters by [VAL]% .",newdouble[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},
/*EXP_MULT("Mega XP",ChatColor.GRAY+"[Unimplemented] Increases experience dropped from monsters by [VAL]% .",newdouble[]{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},
p.sendMessage(ChatColor.DARK_AQUA+"A level of "+ChatColor.YELLOW+"Greed"+ChatColor.DARK_AQUA+" has been knocked off of your "+((item.hasItemMeta()&&item.getItemMeta().hasDisplayName())?item.getItemMeta().getDisplayName():UserFriendlyMaterialName(item)));
p.sendMessage(ChatColor.DARK_AQUA+"A level of "+ChatColor.YELLOW+"Greed"+ChatColor.DARK_AQUA+" has been knocked off of your "+((item.hasItemMeta()&&item.getItemMeta().hasDisplayName())?item.getItemMeta().getDisplayName():UserFriendlyMaterialName(item)));
AwakenedArtifact.setMaxAP(item,AwakenedArtifact.getMaxAP(item)-1);//We knock off one Max AP because it's a temporary ability!!
p.sendMessage(ChatColor.DARK_AQUA+"A level of "+ChatColor.YELLOW+"Greed"+ChatColor.DARK_AQUA+" has been knocked off of your "+((item.hasItemMeta()&&item.getItemMeta().hasDisplayName())?item.getItemMeta().getDisplayName():UserFriendlyMaterialName(item)));
p.sendMessage(ChatColor.DARK_AQUA+"A level of "+ChatColor.YELLOW+"Greed"+ChatColor.DARK_AQUA+" has been knocked off of your "+((item.hasItemMeta()&&item.getItemMeta().hasDisplayName())?item.getItemMeta().getDisplayName():UserFriendlyMaterialName(item)));
brokeone=true;
brokeone=true;
return;
return;
@ -3430,15 +3436,14 @@ public class GenericFunctions {
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,18,"[Normal] Mega Armor",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,18,"[Normal] Mega Armor",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,19,"[Normal] Mega Set Armor",SigDrop.NONHARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,19,"[Normal] Mega Set Armor",SigDrop.NONHARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Mega Tool",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Mega Tool",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Mega Weapon",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Mega Weapon",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,2,"[Normal] Mega Set Weapon",SigDrop.NONHARDENED,SigDrop.SET,SigDrop.WEAPON,LivingEntityDifficulty.NORMAL));
aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,2,"[Normal] Mega Set Weapon",SigDrop.NONHARDENED,SigDrop.SET,SigDrop.WEAPON,LivingEntityDifficulty.NORMAL));
/*aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Hardened Mega Armor",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
/*aPlugin.API.Chests.LOOT_NORMAL.addDrop(newSigDrop(1,1,"[Normal] Hardened Mega Armor",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.NORMAL));
@ -96,17 +97,17 @@ public class Loot {
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,20,"[Dangerous] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,20,"[Dangerous] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,20,"[Dangerous] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,20,"[Dangerous] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,60,"[Dangerous] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DANGEROUS.addDrop(newSigDrop(1,60,"[Dangerous] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.DANGEROUS));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,40,"[Deadly] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,40,"[Deadly] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,40,"[Deadly] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,40,"[Deadly] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,120,"[Deadly] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_DEADLY.addDrop(newSigDrop(1,120,"[Deadly] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,60,"[Hellfire] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,60,"[Hellfire] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,60,"[Hellfire] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,60,"[Hellfire] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,180,"[Hellfire] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_HELLFIRE.addDrop(newSigDrop(1,180,"[Hellfire] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.HELLFIRE));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,1800,"[End] Mega Armor",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,1800,"[End] Mega Armor",SigDrop.NONHARDENED,SigDrop.NONSET,SigDrop.ARMOR,LivingEntityDifficulty.END));
@ -172,9 +173,30 @@ public class Loot {
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,60,"[End] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,60,"[End] Hardened Mega Tool",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.TOOL,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,60,"[End] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,60,"[End] Hardened Mega Weapon",SigDrop.HARDENED,SigDrop.NONSET,SigDrop.WEAPON,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,180,"[End] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM.addDrop(newSigDrop(1,180,"[End] Hardened Mega Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.ARMOR,LivingEntityDifficulty.END));
aPlugin.API.Chests.LOOT_CUSTOM_5.addDrop(newSigDrop(1,40,"[Leader Wither] Set Weapon",SigDrop.NONHARDENED,SigDrop.SET,SigDrop.WEAPON,LivingEntityDifficulty.DEADLY));
aPlugin.API.Chests.LOOT_CUSTOM_5.addDrop(newSigDrop(1,5,"[Leader Wither] Hardened Set Weapon",SigDrop.HARDENED,SigDrop.SET,SigDrop.WEAPON,LivingEntityDifficulty.DEADLY));
@ -5073,6 +5322,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
log("Setting a monster with Difficulty "+MonsterController.getMonsterDifficulty((Monster)m).name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
log("Setting a monster with Difficulty "+MonsterController.getMonsterDifficulty((Monster)m).name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5);
ms.SetLeader(true);
ms.SetLeader(true);
}
}
if(minstanceofWither){
ms.SetLeader(true);
}
}
}
}
}
@ -5094,6 +5346,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener {