Implemented Temporary Block system for future combat purposes. Added
Wind Slash effect and mechanic. Optimized functions.
This commit is contained in:
parent
6b2c6e3d11
commit
17c29a33df
Binary file not shown.
@ -36,6 +36,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Loot;
|
|||||||
import sig.plugin.TwosideKeeper.HelperStructures.MonsterDifficulty;
|
import sig.plugin.TwosideKeeper.HelperStructures.MonsterDifficulty;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.PlayerMode;
|
import sig.plugin.TwosideKeeper.HelperStructures.PlayerMode;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.APIUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
|
||||||
|
|
||||||
public class EliteZombie extends EliteMonster{
|
public class EliteZombie extends EliteMonster{
|
||||||
@ -524,7 +525,7 @@ public class EliteZombie extends EliteMonster{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TwosideKeeper.log("Selected block "+b.toString(), 5);
|
TwosideKeeper.log("Selected block "+b.toString(), 5);
|
||||||
if (!aPlugin.API.isExplosionProof(b) && b.getType()!=Material.STAINED_GLASS) {
|
if (!APIUtils.isExplosionProof(b) && b.getType()!=Material.STAINED_GLASS) {
|
||||||
Material type = b.getType();
|
Material type = b.getType();
|
||||||
Byte data = b.getData();
|
Byte data = b.getData();
|
||||||
storedblocks.put(b, type);
|
storedblocks.put(b, type);
|
||||||
|
@ -128,6 +128,7 @@ public class CustomDamage {
|
|||||||
* @return Whether or not this attack actually was applied. Returns false if it was dodged, nodamageticks, cancelled, etc.
|
* @return Whether or not this attack actually was applied. Returns false if it was dodged, nodamageticks, cancelled, etc.
|
||||||
*/
|
*/
|
||||||
static public boolean ApplyDamage(double damage, Entity damager, LivingEntity target, ItemStack weapon, String reason, int flags) {
|
static public boolean ApplyDamage(double damage, Entity damager, LivingEntity target, ItemStack weapon, String reason, int flags) {
|
||||||
|
long time = System.nanoTime();
|
||||||
if (!isFlagSet(flags,CONTROLLED)) {
|
if (!isFlagSet(flags,CONTROLLED)) {
|
||||||
TwosideKeeper.damagequeue++;
|
TwosideKeeper.damagequeue++;
|
||||||
if (TwosideKeeper.damagequeue>8) {
|
if (TwosideKeeper.damagequeue>8) {
|
||||||
@ -171,6 +172,7 @@ public class CustomDamage {
|
|||||||
//TwosideKeeper.log("Inside of here.", 0);
|
//TwosideKeeper.log("Inside of here.", 0);
|
||||||
DealDamageToEntity(dmg, damager, target, weapon, reason, flags);
|
DealDamageToEntity(dmg, damager, target, weapon, reason, flags);
|
||||||
addToLoggerTotal(damager,dmg);
|
addToLoggerTotal(damager,dmg);
|
||||||
|
TwosideKeeper.HeartbeatLogger.AddEntry("Damage Calculations", (int)(System.nanoTime()-time));time=System.nanoTime();
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -92,6 +92,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.PlayerMode;
|
|||||||
import sig.plugin.TwosideKeeper.HelperStructures.WorldShop;
|
import sig.plugin.TwosideKeeper.HelperStructures.WorldShop;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArrayUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArrayUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArtifactUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArtifactUtils;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.BlockUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.DebugUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.DebugUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
|
||||||
@ -3937,6 +3938,9 @@ public class GenericFunctions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ONLY FOR BLITZEN LIGHTNING STRIKE
|
||||||
|
*/
|
||||||
public static void DealDamageToNearbyMobs(Location l, double basedmg, int range, Entity damager, int flags) {
|
public static void DealDamageToNearbyMobs(Location l, double basedmg, int range, Entity damager, int flags) {
|
||||||
List<LivingEntity> nearbyentities = getNearbyMobs(l,range);
|
List<LivingEntity> nearbyentities = getNearbyMobs(l,range);
|
||||||
for (LivingEntity ent : nearbyentities) {
|
for (LivingEntity ent : nearbyentities) {
|
||||||
@ -3946,10 +3950,16 @@ public class GenericFunctions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Line Drive variant.
|
||||||
|
*/
|
||||||
public static void DealDamageToNearbyMobs(Location l, double basedmg, int range, boolean knockup, double knockupamt, Entity damager, ItemStack weapon, boolean isLineDrive) {
|
public static void DealDamageToNearbyMobs(Location l, double basedmg, int range, boolean knockup, double knockupamt, Entity damager, ItemStack weapon, boolean isLineDrive) {
|
||||||
DealDamageToNearbyMobs(l,basedmg,range,knockup,knockupamt,damager,weapon,isLineDrive,(isLineDrive)?"Line Drive":null);
|
DealDamageToNearbyMobs(l,basedmg,range,knockup,knockupamt,damager,weapon,isLineDrive,(isLineDrive)?"Line Drive":null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this to customize dealing damage to nearby mobs.
|
||||||
|
*/
|
||||||
public static void DealDamageToNearbyMobs(Location l, double basedmg, double range, boolean knockup, double knockupamt, Entity damager, ItemStack weapon, boolean isLineDrive, String reason) {
|
public static void DealDamageToNearbyMobs(Location l, double basedmg, double range, boolean knockup, double knockupamt, Entity damager, ItemStack weapon, boolean isLineDrive, String reason) {
|
||||||
Collection<Entity> ents = l.getWorld().getNearbyEntities(l, range, range, range);
|
Collection<Entity> ents = l.getWorld().getNearbyEntities(l, range, range, range);
|
||||||
//We cleared the non-living entities, deal damage to the rest.
|
//We cleared the non-living entities, deal damage to the rest.
|
||||||
@ -4544,12 +4554,7 @@ public class GenericFunctions {
|
|||||||
for (int j=0;j<50;j++) {
|
for (int j=0;j<50;j++) {
|
||||||
newpos.getWorld().playEffect(newpos, Effect.FLAME, 60);
|
newpos.getWorld().playEffect(newpos, Effect.FLAME, 60);
|
||||||
}
|
}
|
||||||
if (newpos2.getBlock().getType()!=Material.AIR &&
|
if (!BlockUtils.isPassThrough(newpos2)) {
|
||||||
!newpos2.getBlock().isLiquid() &&
|
|
||||||
!(newpos2.getBlock().getType()==Material.STEP) &&
|
|
||||||
!(newpos2.getBlock().getType()==Material.WOOD_STEP) &&
|
|
||||||
!(newpos2.getBlock().getType()==Material.PURPUR_SLAB) &&
|
|
||||||
!(newpos2.getBlock().getType()==Material.STONE_SLAB2)) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("TwosideKeeper"), new Runnable() {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("TwosideKeeper"), new Runnable() {
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package sig.plugin.TwosideKeeper.HelperStructures.Effects;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
|
import sig.plugin.TwosideKeeper.TwosideKeeper;
|
||||||
|
|
||||||
|
public class ReplaceBlockTask implements Runnable{
|
||||||
|
String str;
|
||||||
|
|
||||||
|
public ReplaceBlockTask(String str) {
|
||||||
|
this.str=str;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (TwosideKeeper.temporaryblocks.containsKey(str)) {
|
||||||
|
TemporaryBlock tb = TwosideKeeper.temporaryblocks.get(str);
|
||||||
|
CleanupTemporaryBlock(tb);
|
||||||
|
TwosideKeeper.temporaryblocks.remove(TemporaryBlock.getLocationKey(tb));
|
||||||
|
TwosideKeeper.temporaryblocks.remove(TemporaryBlock.getLocationKey(tb, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CleanupTemporaryBlock(TemporaryBlock tb) {
|
||||||
|
if (tb.getBlock()!=null &&
|
||||||
|
tb.getBlock().getType()==tb.getConvertedMaterial() &&
|
||||||
|
tb.getBlock().getData()==tb.getConvertedData()) {
|
||||||
|
tb.getBlock().setType(tb.getOriginalMaterial());
|
||||||
|
tb.getBlock().setData(tb.getOriginalData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,223 @@
|
|||||||
|
package sig.plugin.TwosideKeeper.HelperStructures.Effects;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import sig.plugin.TwosideKeeper.TwosideKeeper;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.APIUtils;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils;
|
||||||
|
|
||||||
|
public class TemporaryBlock {
|
||||||
|
Material origmat;
|
||||||
|
Material convertedmat;
|
||||||
|
byte origdata;
|
||||||
|
byte converteddata;
|
||||||
|
int duration;
|
||||||
|
String specialKey;
|
||||||
|
Block bl;
|
||||||
|
|
||||||
|
public Material getOriginalMaterial() {
|
||||||
|
return origmat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getConvertedMaterial() {
|
||||||
|
return convertedmat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getOriginalData() {
|
||||||
|
return origdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getConvertedData() {
|
||||||
|
return converteddata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialKey() {
|
||||||
|
return specialKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getBlock() {
|
||||||
|
return bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TemporaryBlock(Block b, Material convertedmat, int duration) {
|
||||||
|
this.origmat = b.getType();
|
||||||
|
this.convertedmat = convertedmat;
|
||||||
|
this.origdata = b.getData();
|
||||||
|
this.converteddata = b.getData();
|
||||||
|
this.duration = duration;
|
||||||
|
this.specialKey = "";
|
||||||
|
this.bl=b;
|
||||||
|
Block tempblock = getBlockToModify(b);
|
||||||
|
if (tempblock!=null) {
|
||||||
|
modifyBlock(this.bl);
|
||||||
|
}
|
||||||
|
setupStructureAndScheduler();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TemporaryBlock(Block b, Material convertedmat, byte converteddata, int duration) {
|
||||||
|
this.origmat = b.getType();
|
||||||
|
this.convertedmat = convertedmat;
|
||||||
|
this.origdata = b.getData();
|
||||||
|
this.converteddata = converteddata;
|
||||||
|
this.duration = duration;
|
||||||
|
this.specialKey = "";
|
||||||
|
this.bl=b;
|
||||||
|
Block tempblock = getBlockToModify(b);
|
||||||
|
if (tempblock!=null) {
|
||||||
|
this.bl = tempblock;
|
||||||
|
modifyBlock(this.bl);
|
||||||
|
}
|
||||||
|
setupStructureAndScheduler();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TemporaryBlock(Block b, Material convertedmat, byte converteddata, int duration, String specialKey) {
|
||||||
|
this.origmat = b.getType();
|
||||||
|
this.convertedmat = convertedmat;
|
||||||
|
this.origdata = b.getData();
|
||||||
|
this.converteddata = converteddata;
|
||||||
|
this.duration = duration;
|
||||||
|
this.specialKey = specialKey;
|
||||||
|
this.bl=b;
|
||||||
|
Block tempblock = getBlockToModify(b);
|
||||||
|
if (tempblock!=null) {
|
||||||
|
this.bl = tempblock;
|
||||||
|
modifyBlock(this.bl);
|
||||||
|
}
|
||||||
|
setupStructureAndScheduler();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void modifyBlock(Block b) {
|
||||||
|
if (b!=null && !APIUtils.isExplosionProof(b)) {
|
||||||
|
b.setType(convertedmat);
|
||||||
|
b.setData(converteddata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupStructureAndScheduler() {
|
||||||
|
if (bl!=null) {
|
||||||
|
if (!TwosideKeeper.temporaryblocks.containsKey(getLocationKey(bl))) {
|
||||||
|
AddToTemporaryBlockStructure(this);
|
||||||
|
}
|
||||||
|
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin,
|
||||||
|
new ReplaceBlockTask(getLocationKey(this)),
|
||||||
|
duration);
|
||||||
|
//TwosideKeeper.log(TextUtils.outputHashmap(TwosideKeeper.temporaryblocks),0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddToTemporaryBlockStructure(TemporaryBlock tb) {
|
||||||
|
if (tb.getSpecialKey().length()>0) {
|
||||||
|
TwosideKeeper.temporaryblocks.put(getLocationKey(tb), tb);
|
||||||
|
}
|
||||||
|
TwosideKeeper.temporaryblocks.put(getLocationKey(tb,false), tb);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getLocationKey(Block bl) {
|
||||||
|
return getLocationKey(bl, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getLocationKey(TemporaryBlock tb) {
|
||||||
|
return tb.getLocationKey(tb.getBlock(), tb.getSpecialKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getLocationKey(TemporaryBlock tb, boolean includeSpecialKey) {
|
||||||
|
return tb.getLocationKey(tb.getBlock(), (includeSpecialKey)?tb.getSpecialKey():"");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getLocationKey(Block bl, String specialKey) {
|
||||||
|
if (bl!=null) {
|
||||||
|
StringBuilder sb = new StringBuilder(Integer.toString(bl.getLocation().getBlockX()));
|
||||||
|
sb.append("_");
|
||||||
|
sb.append(Integer.toString(bl.getLocation().getBlockY()));
|
||||||
|
sb.append("_");
|
||||||
|
sb.append(Integer.toString(bl.getLocation().getBlockZ()));
|
||||||
|
sb.append("_");
|
||||||
|
sb.append(bl.getLocation().getWorld().getName());
|
||||||
|
sb.append("_");
|
||||||
|
sb.append(specialKey);
|
||||||
|
return sb.toString();
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Block getBlockToModify(Block b) {
|
||||||
|
//Attempt to detect areas above and below ground to place this modified block.
|
||||||
|
int yoffset = 0;
|
||||||
|
while (yoffset<=5) {
|
||||||
|
Block checkblock = b.getRelative(0, yoffset, 0);
|
||||||
|
Block checkblock2 = b.getRelative(0, yoffset+1, 0);
|
||||||
|
if (checkblock!=null && checkblock2!=null) {
|
||||||
|
if ((checkblock.getType()==Material.AIR || checkblock.isLiquid() || checkblock.getType().isTransparent())) {
|
||||||
|
yoffset = adjustYOffset(yoffset);
|
||||||
|
//TwosideKeeper.log(Integer.toString(yoffset), 0);
|
||||||
|
} else {
|
||||||
|
if ((checkblock2.getType()==Material.AIR || checkblock2.isLiquid())) {
|
||||||
|
this.origmat = checkblock.getType();
|
||||||
|
this.origdata = checkblock.getData();
|
||||||
|
return b.getRelative(0, yoffset, 0);
|
||||||
|
} else {
|
||||||
|
yoffset = adjustYOffset(yoffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
yoffset = adjustYOffset(yoffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int adjustYOffset(int yoffset) {
|
||||||
|
yoffset=(yoffset>-5 && yoffset<=0)?(yoffset-1):(yoffset<0)?1:(yoffset+1);
|
||||||
|
return yoffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder("TemporaryBlock{");
|
||||||
|
sb.append("orig:(");sb.append(origmat);sb.append(",");sb.append(origdata);sb.append(")");
|
||||||
|
sb.append(",");
|
||||||
|
sb.append("converted:(");sb.append(convertedmat);sb.append(",");sb.append(converteddata);sb.append(")");
|
||||||
|
sb.append(",");
|
||||||
|
sb.append("duration:");sb.append(duration);
|
||||||
|
sb.append(",");
|
||||||
|
sb.append("key:");sb.append(specialKey);
|
||||||
|
sb.append(",");
|
||||||
|
sb.append("block:");sb.append(bl);
|
||||||
|
sb.append("}");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTemporaryBlock(Block b) {
|
||||||
|
return TwosideKeeper.temporaryblocks.containsKey(TemporaryBlock.getLocationKey(b));
|
||||||
|
}
|
||||||
|
public static boolean isStandingOnSpecialBlock(Player p, String specialKey) {
|
||||||
|
//return TwosideKeeper.temporaryblocks.containsKey(TemporaryBlock.getLocationKey(b));
|
||||||
|
Block b = p.getLocation().getBlock();
|
||||||
|
if (b!=null) {
|
||||||
|
return TwosideKeeper.temporaryblocks.containsKey(TemporaryBlock.getLocationKey(b,specialKey));
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static boolean isInRangeOfSpecialBlock(Player p, double range, String specialKey) {
|
||||||
|
Block b = p.getLocation().getBlock();
|
||||||
|
while (range-->0 && b.getLocation().getBlockY()>0) {
|
||||||
|
if (TwosideKeeper.temporaryblocks.containsKey(TemporaryBlock.getLocationKey(b,specialKey))) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
b = b.getRelative(0, -1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public static TemporaryBlock getTemporaryBlock(Block b) {
|
||||||
|
if (TwosideKeeper.temporaryblocks.containsKey(TemporaryBlock.getLocationKey(b))) {
|
||||||
|
return TwosideKeeper.temporaryblocks.get(TemporaryBlock.getLocationKey(b));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package sig.plugin.TwosideKeeper.HelperStructures.Effects;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Particle;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import sig.plugin.TwosideKeeper.CustomDamage;
|
||||||
|
import sig.plugin.TwosideKeeper.TwosideKeeper;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.BlockUtils;
|
||||||
|
|
||||||
|
public class WindSlash {
|
||||||
|
Location loc;
|
||||||
|
Player sourcep;
|
||||||
|
double dmg;
|
||||||
|
long lasteffect;
|
||||||
|
long death_time;
|
||||||
|
final static int EFFECT_DENSITY = 20;
|
||||||
|
final static int EFFECT_FREQUENCY = 4;
|
||||||
|
final static int SLASH_SIZE = 3; //Radius.
|
||||||
|
final static Particle EFFECT_PARTICLE = Particle.FIREWORKS_SPARK;
|
||||||
|
final static float SPEED_MULT = 3.5f;
|
||||||
|
|
||||||
|
public WindSlash(Location loc, Player p, double dmg, int tick_duration) {
|
||||||
|
this.loc=loc.clone();
|
||||||
|
this.sourcep=p;
|
||||||
|
this.dmg=dmg;
|
||||||
|
this.death_time = TwosideKeeper.getServerTickTime()+tick_duration;
|
||||||
|
this.lasteffect=TwosideKeeper.getServerTickTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean runTick() {
|
||||||
|
if (!moveWindSlash()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
createParticles();
|
||||||
|
damageNearbyTargets();
|
||||||
|
if (TwosideKeeper.getServerTickTime()>death_time) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void damageNearbyTargets() {
|
||||||
|
GenericFunctions.DealDamageToNearbyMobs(loc, dmg, SLASH_SIZE, false, 0, sourcep, sourcep.getEquipment().getItemInMainHand(), false, "Wind Slash");
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean moveWindSlash() {
|
||||||
|
Location origloc = loc.clone();
|
||||||
|
Vector move = origloc.getDirection().setY(origloc.getDirection().getY()/1.4).multiply(SPEED_MULT);
|
||||||
|
float dist = SPEED_MULT;
|
||||||
|
loc.add(move);
|
||||||
|
while (dist-->0) {
|
||||||
|
if (!BlockUtils.isPassThrough(origloc.add(origloc.getDirection()))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
//TwosideKeeper.log("New Location: "+loc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createParticles() {
|
||||||
|
loc.getWorld().spawnParticle(Particle.SWEEP_ATTACK, loc.clone().add(0,-SLASH_SIZE/2,0), 2);
|
||||||
|
for (int i=0;i<EFFECT_DENSITY;i++) {
|
||||||
|
Location randloc = loc.clone();
|
||||||
|
loc.getWorld().spawnParticle(EFFECT_PARTICLE, randloc.add(randloc.getDirection().setY(randloc.getDirection().getY()/1.4).multiply(Math.random())).clone().add(0,-SLASH_SIZE/2,0), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -43,7 +43,22 @@ public enum ItemSet {
|
|||||||
DONNER(5,5, 10,10, 2,1, 0,0),
|
DONNER(5,5, 10,10, 2,1, 0,0),
|
||||||
BLITZEN(10,10, 3,3, 5,5, 0,0),
|
BLITZEN(10,10, 3,3, 5,5, 0,0),
|
||||||
RUDOLPH(5,5, 10,10, 2,1, 0,0),
|
RUDOLPH(5,5, 10,10, 2,1, 0,0),
|
||||||
OLIVE(3,2, 10,10, 2,1, 0,0);
|
OLIVE(3,2, 10,10, 2,1, 0,0),
|
||||||
|
WINDRY(2,2, 1,1, 1,0, 1,0),
|
||||||
|
LUCI(2,2, 4,4, 2,2, 2,2),
|
||||||
|
SHARD(2,1, 10,10, 20,20, 10,10),
|
||||||
|
TOXIN(2,2, 20,5, 10,3, 10,3),
|
||||||
|
PROTECTOR(5,2, 10,5, 10,10, 1,1),
|
||||||
|
SUSTENANCE(8,4, 2,1, 2,2, 10,10),
|
||||||
|
LEGION(3,1, 12,12, 1,1, 1,1),
|
||||||
|
PRIDE(10,10, 2,1, 2,2, 1,1),
|
||||||
|
ASSASSIN(5,5, 0,0, 0,0, 0,0),
|
||||||
|
STEALTH(5,5, 0,0, 0,0, 0,0);
|
||||||
|
|
||||||
|
final static String WINDCHARGE_LABEL = ChatColor.BOLD+""+ChatColor.GRAY+"Wind Charge"+ChatColor.RESET;
|
||||||
|
final static String WINDCHARGE_PLURAL_LABEL = ChatColor.BOLD+""+ChatColor.GRAY+"Wind Charges"+ChatColor.RESET;
|
||||||
|
final static String ABILITY_LABEL = ChatColor.BOLD+""+ChatColor.GOLD;
|
||||||
|
final static String ABILITY_LABEL_END = ""+ChatColor.RESET;
|
||||||
|
|
||||||
public static ItemSet[] bauble_sets;
|
public static ItemSet[] bauble_sets;
|
||||||
int baseval;
|
int baseval;
|
||||||
@ -60,11 +75,22 @@ public enum ItemSet {
|
|||||||
ItemSet.DARNYS,
|
ItemSet.DARNYS,
|
||||||
ItemSet.ALIKAHN,
|
ItemSet.ALIKAHN,
|
||||||
ItemSet.LORASAADI,
|
ItemSet.LORASAADI,
|
||||||
|
ItemSet.SHARD,
|
||||||
|
ItemSet.TOXIN,
|
||||||
};
|
};
|
||||||
public static final ItemSet[] MELEE = new ItemSet[]{
|
public static final ItemSet[] MELEE = new ItemSet[]{
|
||||||
ItemSet.DAWNTRACKER,
|
ItemSet.DAWNTRACKER,
|
||||||
ItemSet.PANROS,
|
ItemSet.PANROS,
|
||||||
ItemSet.SONGSTEEL,
|
ItemSet.SONGSTEEL,
|
||||||
|
ItemSet.WINDRY,
|
||||||
|
ItemSet.LORASYS,
|
||||||
|
ItemSet.LUCI,
|
||||||
|
ItemSet.PROTECTOR,
|
||||||
|
ItemSet.SUSTENANCE,
|
||||||
|
ItemSet.LEGION,
|
||||||
|
ItemSet.PRIDE,
|
||||||
|
ItemSet.ASSASSIN,
|
||||||
|
ItemSet.STEALTH,
|
||||||
};
|
};
|
||||||
public static final ItemSet[] TRINKET = new ItemSet[]{
|
public static final ItemSet[] TRINKET = new ItemSet[]{
|
||||||
ItemSet.GLADOMAIN,
|
ItemSet.GLADOMAIN,
|
||||||
@ -454,6 +480,56 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" "+GenericFunctions.CapitalizeFirstLetters(set.name())+" Set");
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" "+GenericFunctions.CapitalizeFirstLetters(set.name())+" Set");
|
||||||
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Cooldown Reduction");
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Cooldown Reduction");
|
||||||
break;
|
break;
|
||||||
|
case WINDRY:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" "+GenericFunctions.CapitalizeFirstLetters(set.name())+" Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" Damage");
|
||||||
|
break;
|
||||||
|
case ASSASSIN:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Assassin Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Cooldown Reduction");
|
||||||
|
break;
|
||||||
|
case LEGION:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Legion Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"-"+ItemSet.GetBaseAmount(set, tier, 1)+"% Damage Pool Reduction");
|
||||||
|
break;
|
||||||
|
case LUCI:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Striker Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Luci Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Damage Reduction");
|
||||||
|
break;
|
||||||
|
case PRIDE:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Barbarian Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Pride Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"-"+ItemSet.GetBaseAmount(set, tier, 1)+"% Lifesteal Stacks");
|
||||||
|
break;
|
||||||
|
case PROTECTOR:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Protector Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Damage Reduction");
|
||||||
|
break;
|
||||||
|
case SHARD:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Shard Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Dodge Chance");
|
||||||
|
break;
|
||||||
|
case STEALTH:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Slayer Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Stealth Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Movement Speed");
|
||||||
|
break;
|
||||||
|
case SUSTENANCE:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Defender Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Sustenance Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+" Health");
|
||||||
|
break;
|
||||||
|
case TOXIN:
|
||||||
|
lore.add(ChatColor.LIGHT_PURPLE+"Ranger Gear");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.BOLD+"T"+tier+" Toxin Set");
|
||||||
|
lore.add(ChatColor.YELLOW+"+"+ItemSet.GetBaseAmount(set, tier, 1)+"% Debuff Chance");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lore.add("");
|
lore.add("");
|
||||||
@ -464,7 +540,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
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+" 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+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Critical Chance");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Line Drive");
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Powered Line Drive"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.GRAY+" ");
|
lore.add(ChatColor.GRAY+" ");
|
||||||
@ -477,7 +553,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Max Health");
|
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+" 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+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage Reduction");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Vendetta");
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Vendetta"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Blocking stores 40% of mitigation damage.");
|
lore.add(ChatColor.GRAY+" Blocking stores 40% of mitigation damage.");
|
||||||
lore.add(ChatColor.GRAY+" 1% of damage is stored as thorns true 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+" Shift+Left-Click with a shield to unleash");
|
||||||
@ -490,7 +566,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Debuff Resistance");
|
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+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Lifesteal");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Max Health");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Max Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Powered Mock");
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Powered Mock"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.GRAY+" Mock cooldown decreases from");
|
lore.add(ChatColor.GRAY+" Mock cooldown decreases from");
|
||||||
@ -534,7 +610,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+(ItemSet.GetBaseAmount(set, tier, 4)/20d)+"s Graceful Dodge");
|
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+" Gives you invulnerability and "+(ItemSet.GetBaseAmount(set, tier, 4)/4)+" absorption");
|
||||||
lore.add(ChatColor.GRAY+" health for each successful dodge.");
|
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.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Boosts All Modes of Ranger"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
||||||
@ -550,7 +626,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.GRAY+" ("+(ItemSet.GetBaseAmount(set, tier, 4)*10)+"% Damage Reduction) every 5 seconds of sprinting,");
|
lore.add(ChatColor.GRAY+" ("+(ItemSet.GetBaseAmount(set, tier, 4)*10)+"% Damage Reduction) every 5 seconds of sprinting,");
|
||||||
lore.add(ChatColor.GRAY+" and with every Tumble. Each hit taken removes one");
|
lore.add(ChatColor.GRAY+" and with every Tumble. Each hit taken removes one");
|
||||||
lore.add(ChatColor.GRAY+" stack of Resist. Caps at Resist 10. Lasts 20 seconds.");
|
lore.add(ChatColor.GRAY+" stack of Resist. Caps at Resist 10. Lasts 20 seconds.");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger");
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Boosts All Modes of Ranger"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
||||||
@ -562,7 +638,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Max Health");
|
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+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Max Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Regen / 5 seconds");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Regen / 5 seconds");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" Boosts All Modes of Ranger");
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Boosts All Modes of Ranger"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
||||||
@ -575,7 +651,7 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" 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+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Execution Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" per 20% Missing Health");
|
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.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Boosts All Modes of Ranger"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
lore.add(ChatColor.WHITE+" +50% Armor Penetration");
|
||||||
lore.add(ChatColor.WHITE+" +15 Damage");
|
lore.add(ChatColor.WHITE+" +15 Damage");
|
||||||
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
lore.add(ChatColor.YELLOW+" Close Range Mode: "+ChatColor.WHITE+"Tumble Invincibility increased by 0.5s");
|
||||||
@ -640,88 +716,251 @@ public enum ItemSet {
|
|||||||
lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"of levels you have. Drains XP equal to");
|
lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"of levels you have. Drains XP equal to");
|
||||||
lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"the number of levels you have per hit.");
|
lore.add(ChatColor.GRAY+" "+ChatColor.WHITE+"the number of levels you have per hit.");
|
||||||
}break;
|
}break;
|
||||||
case BLITZEN:
|
case BLITZEN:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
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+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Storm Onward!");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Storm Onward!"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Attacks occasionally send Lightning bolts");
|
lore.add(ChatColor.GRAY+" Attacks occasionally send Lightning bolts");
|
||||||
lore.add(ChatColor.GRAY+" down on foes dealing true damage.");
|
lore.add(ChatColor.GRAY+" down on foes dealing true damage.");
|
||||||
break;
|
break;
|
||||||
case COMET:
|
case COMET:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" More Health For You");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" More Health For You"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Right-Clicking players will take away");
|
lore.add(ChatColor.GRAY+" Right-Clicking players will take away");
|
||||||
lore.add(ChatColor.GRAY+" 10% of your health to heal 20% of");
|
lore.add(ChatColor.GRAY+" 10% of your health to heal 20% of");
|
||||||
lore.add(ChatColor.GRAY+" the targeted ally's health.");
|
lore.add(ChatColor.GRAY+" the targeted ally's health.");
|
||||||
break;
|
break;
|
||||||
case CUPID:
|
case CUPID:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Linked for Life");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Linked for Life"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Right-Clicking players will link yourself");
|
lore.add(ChatColor.GRAY+" Right-Clicking players will link yourself");
|
||||||
lore.add(ChatColor.GRAY+" to them. Teleporting via any means sends");
|
lore.add(ChatColor.GRAY+" to them. Teleporting via any means sends");
|
||||||
lore.add(ChatColor.GRAY+" you both to the new position.");
|
lore.add(ChatColor.GRAY+" you both to the new position.");
|
||||||
break;
|
break;
|
||||||
case DANCER:
|
case DANCER:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
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+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Can't Catch Me!");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Can't Catch Me!"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Changing your movement direction constantly");
|
lore.add(ChatColor.GRAY+" Changing your movement direction constantly");
|
||||||
lore.add(ChatColor.GRAY+" makes you invulnerable to incoming attacks.");
|
lore.add(ChatColor.GRAY+" makes you invulnerable to incoming attacks.");
|
||||||
break;
|
break;
|
||||||
case DASHER:
|
case DASHER:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
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+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Marathon Runner");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Marathon Runner"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Sprinting will restore missing hunger.");
|
lore.add(ChatColor.GRAY+" Sprinting will restore missing hunger.");
|
||||||
break;
|
break;
|
||||||
case DONNER:
|
case DONNER:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Come At Me");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Come At Me"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Monsters attacking your party members");
|
lore.add(ChatColor.GRAY+" Monsters attacking your party members");
|
||||||
lore.add(ChatColor.GRAY+" will automatically be provoked to you.");
|
lore.add(ChatColor.GRAY+" will automatically be provoked to you.");
|
||||||
break;
|
break;
|
||||||
case OLIVE:
|
case OLIVE:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Right Back At You");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Right Back At You"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Gain 20 Absorption Health each time");
|
lore.add(ChatColor.GRAY+" Gain 20 Absorption Health each time");
|
||||||
lore.add(ChatColor.GRAY+" damage is taken. (30 sec cooldown)");
|
lore.add(ChatColor.GRAY+" damage is taken. (30 sec cooldown)");
|
||||||
break;
|
break;
|
||||||
case PRANCER:
|
case PRANCER:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
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+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Will You Just Sit Down?");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Will You Just Sit Down?"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Your next strike ignores 50% of the");
|
lore.add(ChatColor.GRAY+" Your next strike ignores 50% of the");
|
||||||
lore.add(ChatColor.GRAY+" target's armor. (10 sec cooldown)");
|
lore.add(ChatColor.GRAY+" target's armor. (10 sec cooldown)");
|
||||||
break;
|
break;
|
||||||
case RUDOLPH:
|
case RUDOLPH:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Light the Way");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Light the Way"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" You and your party gain Permanent");
|
lore.add(ChatColor.GRAY+" You and your party gain Permanent");
|
||||||
lore.add(ChatColor.GRAY+" Night Vision.");
|
lore.add(ChatColor.GRAY+" Night Vision.");
|
||||||
break;
|
break;
|
||||||
case VIXEN:
|
case VIXEN:
|
||||||
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
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+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Damage");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Health");
|
||||||
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Untouchable, Unkillable");
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Untouchable, Unkillable"+ABILITY_LABEL_END);
|
||||||
lore.add(ChatColor.GRAY+" Increases Dodge Chance by 20%. Dodging");
|
lore.add(ChatColor.GRAY+" Increases Dodge Chance by 20%. Dodging");
|
||||||
lore.add(ChatColor.GRAY+" successfully restores 10% of your max");
|
lore.add(ChatColor.GRAY+" successfully restores 10% of your max");
|
||||||
lore.add(ChatColor.GRAY+" health.");
|
lore.add(ChatColor.GRAY+" health.");
|
||||||
break;
|
break;
|
||||||
|
case WINDRY:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Attacks build up "+WINDCHARGE_PLURAL_LABEL+".");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+" "+WINDCHARGE_PLURAL_LABEL+" cap at "+(tier*10)+" stacks");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" "+(ItemSet.GetBaseAmount(set, tier, 2)!=1?WINDCHARGE_PLURAL_LABEL:WINDCHARGE_LABEL)+" per hit");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Armor Pen per "+WINDCHARGE_LABEL);
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Critical Chance per "+WINDCHARGE_LABEL);
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Wind Slash"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" Press the drop key to send a Wind Slash forward,");
|
||||||
|
lore.add(ChatColor.GRAY+" knocking up all targets hit and dealing "+tier);
|
||||||
|
lore.add(ChatColor.GRAY+" damage per "+WINDCHARGE_LABEL+" stack. Consumes");
|
||||||
|
lore.add(ChatColor.GRAY+" all "+WINDCHARGE_PLURAL_LABEL+".");
|
||||||
|
lore.add(ChatColor.GRAY+" ");
|
||||||
|
lore.add(ChatColor.GRAY+" Gain +"+(tier*5)+" wind charges for each killing blow dealt");
|
||||||
|
lore.add(ChatColor.GRAY+" with Wind Slash and gain "+(tier)+" Absorption Health.");
|
||||||
|
break;
|
||||||
|
case ASSASSIN:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Increases in power based on "+ChatColor.BOLD+"Total Tier Amount");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"of all baubles in your bauble pouch.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T9 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Assassinate enables you to jump to target blocks.");
|
||||||
|
lore.add(ChatColor.WHITE+" Cooldown of Assassinate decreases by 70% when");
|
||||||
|
lore.add(ChatColor.WHITE+" jumping to blocks.");
|
||||||
|
if (tier>=2) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T18 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Decreases cooldown of Assassinate by 50% when");
|
||||||
|
lore.add(ChatColor.WHITE+" a backstab occurs.");
|
||||||
|
if (tier>=3) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T27 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Backstabs deal 6x normal damage.");
|
||||||
|
if (tier>=4) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T40 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" +30% Cooldown Reduction");
|
||||||
|
lore.add(ChatColor.WHITE+" +100% Critical Strike Chance");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LEGION:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Lifesteal");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Damage per Weapon Charge");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage per 100 Damage Pool");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Undying Rage"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" When taking fatal damage, removes all Damage");
|
||||||
|
lore.add(ChatColor.GRAY+" Pool stacks and prevents your health from");
|
||||||
|
lore.add(ChatColor.GRAY+" going below 1 for "+(tier+6)+" seconds.");
|
||||||
|
lore.add(ChatColor.GRAY+" ");
|
||||||
|
lore.add(ChatColor.GRAY+" (120s Cooldown)");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 6 - "+ChatColor.WHITE+"");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Lifesteal");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Health Regeneration");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Maximum Health");
|
||||||
|
break;
|
||||||
|
case LUCI:
|
||||||
|
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+" Adds "+ItemSet.GetBaseAmount(set, tier, 3)+"% Damage");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" "+ChatColor.GRAY+" for every 1% Dodge Chance");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" Adds "+ItemSet.GetBaseAmount(set, tier, 4)+"% Damage");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" "+ChatColor.GRAY+" for every 1% Damage Reduction");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Beast Within"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" Press the drop key to obtain a buff lasting "+(tier+6));
|
||||||
|
lore.add(ChatColor.GRAY+" seconds, giving you 100% Dodge Chance and");
|
||||||
|
lore.add(ChatColor.GRAY+" Damage Reduction. Beast Within's Cooldown");
|
||||||
|
lore.add(ChatColor.GRAY+" decreases by 1 second for each successful");
|
||||||
|
lore.add(ChatColor.GRAY+" Dodge performed.");
|
||||||
|
lore.add(ChatColor.GRAY+" ");
|
||||||
|
lore.add(ChatColor.GRAY+" (120s Cooldown)");
|
||||||
|
break;
|
||||||
|
case PRIDE:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Weapon Charges per hit");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" "+ABILITY_LABEL+"Power Swing"+ABILITY_LABEL_END+" (Right-Click) provides double");
|
||||||
|
lore.add(" "+ChatColor.WHITE+" the lifesteal stacks and increases Regeneration");
|
||||||
|
lore.add(" "+ChatColor.WHITE+" level by "+ItemSet.GetBaseAmount(set, tier, 3)+" for 15 seconds. (Max. 10 Levels)");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" "+ABILITY_LABEL+"Forceful Strike"+ABILITY_LABEL_END+" (Shift+Left-Click) applies");
|
||||||
|
lore.add(" "+ChatColor.WHITE+" Poison "+ItemSet.GetBaseAmount(set, tier, 4)+" to everything it hits for 15 seconds.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ChatColor.WHITE+" "+ABILITY_LABEL+"Sweep Up"+ABILITY_LABEL_END+" (Shift+Right-Click) heals");
|
||||||
|
lore.add(" "+ChatColor.WHITE+" half the health it deals as HP directly.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 6 - "+ChatColor.WHITE+"");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Lifesteal");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Health Regeneration");
|
||||||
|
lore.add(ChatColor.WHITE+" +"+(tier*25)+"% Maximum Health");
|
||||||
|
break;
|
||||||
|
case PROTECTOR:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+PlayerMode.SLAYER.getColor()+PlayerMode.SLAYER.getName()+"s"+ChatColor.GOLD+" do not benefit from party effects");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"of this set. "+PlayerMode.RANGER.getColor()+PlayerMode.RANGER.getName()+"s"+ChatColor.GOLD+" receive only half the effects.");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Damage Reduction to other party members");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Health to other party members.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ABILITY_LABEL+" Reinforce"+ABILITY_LABEL_END+" - Each hit taken restores");
|
||||||
|
lore.add(" "+ChatColor.WHITE+" "+ItemSet.GetBaseAmount(set, tier, 4)+"Health to your party members.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Unstoppable Team"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" Press the swap item key to channel for 1 second,");
|
||||||
|
lore.add(ChatColor.GRAY+" creating a "+(tier*20)+" Health shield for 30");
|
||||||
|
lore.add(ChatColor.GRAY+" seconds on all party members.");
|
||||||
|
lore.add(ChatColor.GRAY+" ");
|
||||||
|
lore.add(ChatColor.GRAY+" (150 second cooldown)");
|
||||||
|
break;
|
||||||
|
case SHARD:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Headshot Damage");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Critical Damage");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+" Health");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Shrapnel Bombs"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" When arrows land or hit a target, they explode");
|
||||||
|
lore.add(ChatColor.GRAY+" into shrapnel, dealing damage to all nearby targets");
|
||||||
|
lore.add(ChatColor.GRAY+" and dealing ticks of additional fire damage for 10");
|
||||||
|
lore.add(ChatColor.GRAY+" seconds. Shrapnel stacks infinitely on a target.");
|
||||||
|
break;
|
||||||
|
case STEALTH:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Increases in power based on "+ChatColor.BOLD+"Total Tier Amount");
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"of all baubles in your bauble pouch.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T9 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Stealth does not cause durability to decrease.");
|
||||||
|
lore.add(ChatColor.WHITE+" Stealth does not get removed when getting hit.");
|
||||||
|
if (tier>=2) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T18 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Going from Visible to Stealth will remove");
|
||||||
|
lore.add(ChatColor.WHITE+" all aggro from nearby targets. While in");
|
||||||
|
lore.add(ChatColor.WHITE+" Stealth mode, you deal 50% more damage.");
|
||||||
|
if (tier>=3) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T27 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Each kill gives a stack of Strength");
|
||||||
|
lore.add(ChatColor.WHITE+" (Max. 20 stacks). Getting hit removes");
|
||||||
|
lore.add(ChatColor.WHITE+" a level of Strength.");
|
||||||
|
if (tier>=4) {
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" T40 - ");
|
||||||
|
lore.add(ChatColor.WHITE+" Recovers 1 Heart (2 HP) every 5 seconds");
|
||||||
|
lore.add(ChatColor.WHITE+" while in Stealth mode.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SUSTENANCE:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+" Lifesteal Stacks every hit taken");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+" Regeneration Level per hit");
|
||||||
|
lore.add(ChatColor.GRAY+" (Max. Regeneration "+WorldShop.toRomanNumeral(Math.min(2*tier,10))+")");
|
||||||
|
lore.add(ChatColor.GRAY+" Decays at 1 Regeneration Level per second.");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Healing per Regeneration tick");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Share the Life"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" Increases lifesteal stacks for other party members");
|
||||||
|
lore.add(ChatColor.GRAY+" by "+(tier)+" whenever you get hit.");
|
||||||
|
break;
|
||||||
|
case TOXIN:
|
||||||
|
lore.add(ChatColor.GOLD+""+ChatColor.ITALIC+"Set Bonus:");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 2 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 2)+"% Chance of applying Bleeding "+WorldShop.toRomanNumeral(tier)+" to target.");
|
||||||
|
lore.add(ChatColor.GRAY+" (Bleed deals faster damage over time compared to Poison.");
|
||||||
|
lore.add(ChatColor.GRAY+" it is not affected by Poison Resistance.)");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 3 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 3)+"% Chance of applying Infection "+WorldShop.toRomanNumeral(tier)+" to target.");
|
||||||
|
lore.add(ChatColor.GRAY+" (Infection deals damage over time and applies all debuffs");
|
||||||
|
lore.add(ChatColor.GRAY+" this target has to nearby targets.)");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 4 - "+ChatColor.WHITE+" +"+ItemSet.GetBaseAmount(set, tier, 4)+"% Chance of applying Cripple "+WorldShop.toRomanNumeral(tier)+" to target.");
|
||||||
|
lore.add(ChatColor.GRAY+" (Cripple slows the target and decreases target's damage");
|
||||||
|
lore.add(ChatColor.GRAY+" by 10% per level.)");
|
||||||
|
lore.add(ChatColor.DARK_AQUA+" 5 - "+ABILITY_LABEL+" Fire Cesspool"+ABILITY_LABEL_END);
|
||||||
|
lore.add(ChatColor.GRAY+" Shooting arrows at the ground converts the land into");
|
||||||
|
lore.add(ChatColor.GRAY+" a temporary fire pool, applying stacking Burn to all");
|
||||||
|
lore.add(ChatColor.GRAY+" enemy targets in the fire pool. (Burn deals more damage");
|
||||||
|
lore.add(ChatColor.GRAY+" as the number of stacks increase.)");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return lore;
|
return lore;
|
||||||
}
|
}
|
||||||
@ -808,7 +1047,7 @@ public enum ItemSet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TwosideKeeper.log("Offhand: "+p.getInventory().getExtraContents()[0]+";;"+item+ChatColor.RESET+"Is equal? "+p.getInventory().getExtraContents()[0].equals(item)+";; Is Bauble Pouch? "+BaublePouch.isBaublePouch(item), 5);
|
//TwosideKeeper.log("Offhand: "+p.getInventory().getExtraContents()[0]+";;"+item+ChatColor.RESET+"Is equal? "+p.getInventory().getExtraContents()[0].equals(item)+";; Is Bauble Pouch? "+BaublePouch.isBaublePouch(item), 5);
|
||||||
}
|
}
|
||||||
TwosideKeeper.log("Updated HashMap for player "+p.getName()+". New Map: \n"+TextUtils.outputHashmap(map), 5);
|
TwosideKeeper.log("Updated HashMap for player "+p.getName()+". New Map: \n"+TextUtils.outputHashmap(map), 5);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package sig.plugin.TwosideKeeper.HelperStructures.Utils;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
|
public class APIUtils {
|
||||||
|
public static boolean isExplosionProof(Block b) {
|
||||||
|
if (b!=null) {
|
||||||
|
return (aPlugin.API.isExplosionProof(b) || BlockUtils.isSign(b));
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -64,4 +64,23 @@ public class BlockUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if a block can be passed through by regular means (A player can get past it).
|
||||||
|
* Usually used for detecting when abilities stop.
|
||||||
|
*/
|
||||||
|
public static boolean isPassThrough(Location l) {
|
||||||
|
return l.getBlock().getType()==Material.AIR ||
|
||||||
|
l.getBlock().isLiquid() ||
|
||||||
|
l.getBlock().getType()==Material.STEP ||
|
||||||
|
l.getBlock().getType()==Material.WOOD_STEP ||
|
||||||
|
l.getBlock().getType()==Material.PURPUR_SLAB ||
|
||||||
|
l.getBlock().getType()==Material.STONE_SLAB2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSign(Block b) {
|
||||||
|
return b.getType()==Material.SIGN ||
|
||||||
|
b.getType()==Material.WALL_SIGN ||
|
||||||
|
b.getType()==Material.SIGN_POST;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -838,7 +838,7 @@ public class WorldShop {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWorldShopSign(Block b) {
|
public static boolean isWorldShopSign(Block b) {
|
||||||
if (b!=null && (b.getType()==Material.SIGN || b.getType()==Material.WALL_SIGN || b.getType()==Material.SIGN_POST) && b.getState() instanceof Sign) {
|
if (b!=null && BlockUtils.isSign(b) && b.getState() instanceof Sign) {
|
||||||
Sign s = (Sign)b.getState();
|
Sign s = (Sign)b.getState();
|
||||||
return isWorldShopSign(s);
|
return isWorldShopSign(s);
|
||||||
} else {
|
} else {
|
||||||
|
@ -244,8 +244,11 @@ import sig.plugin.TwosideKeeper.HelperStructures.Common.RecipeCategory;
|
|||||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.RecipeLinker;
|
import sig.plugin.TwosideKeeper.HelperStructures.Common.RecipeLinker;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Effects.EarthWaveTask;
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.EarthWaveTask;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Effects.LavaPlume;
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.LavaPlume;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.ReplaceBlockTask;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.TemporaryBlock;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Effects.TemporaryIce;
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.TemporaryIce;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Effects.TemporaryLava;
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.TemporaryLava;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Effects.WindSlash;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArrayUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArrayUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArtifactUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ArtifactUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.BlockUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.BlockUtils;
|
||||||
@ -255,6 +258,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
|
|||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
|
||||||
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils;
|
||||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.Classes.SoundData;
|
import sig.plugin.TwosideKeeper.HelperStructures.Utils.Classes.SoundData;
|
||||||
import sig.plugin.TwosideKeeper.HolidayEvents.Christmas;
|
import sig.plugin.TwosideKeeper.HolidayEvents.Christmas;
|
||||||
@ -488,6 +492,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
public static List<JobRecipe> jobrecipes = new ArrayList<JobRecipe>();
|
public static List<JobRecipe> jobrecipes = new ArrayList<JobRecipe>();
|
||||||
public static List<Camera> cameras = new ArrayList<Camera>();
|
public static List<Camera> cameras = new ArrayList<Camera>();
|
||||||
public static List<Arena> arenas = new ArrayList<Arena>();
|
public static List<Arena> arenas = new ArrayList<Arena>();
|
||||||
|
public static List<WindSlash> windslashes = new ArrayList<WindSlash>();
|
||||||
|
public static HashMap<String,TemporaryBlock> temporaryblocks = new HashMap<String,TemporaryBlock>();
|
||||||
|
|
||||||
//public static stats StatCommand = new stats();
|
//public static stats StatCommand = new stats();
|
||||||
|
|
||||||
@ -851,6 +857,12 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TwosideKeeper.HeartbeatLogger.AddEntry("Temporary Camera Handling", (int)(System.nanoTime()-time));time=System.nanoTime();
|
TwosideKeeper.HeartbeatLogger.AddEntry("Temporary Camera Handling", (int)(System.nanoTime()-time));time=System.nanoTime();
|
||||||
|
for (WindSlash slash : windslashes) {
|
||||||
|
if (!slash.runTick()) {
|
||||||
|
ScheduleRemoval(windslashes,slash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TwosideKeeper.HeartbeatLogger.AddEntry("Temporary Wind Slash Handling", (int)(System.nanoTime()-time));time=System.nanoTime();
|
||||||
if ((int)(System.nanoTime()-totaltime)/1000000d>50) {
|
if ((int)(System.nanoTime()-totaltime)/1000000d>50) {
|
||||||
TwosideKeeper.log("WARNING! Structure Handling took longer than 1 tick! "+((int)(System.nanoTime()-totaltime)/1000000d)+"ms", 0);
|
TwosideKeeper.log("WARNING! Structure Handling took longer than 1 tick! "+((int)(System.nanoTime()-totaltime)/1000000d)+"ms", 0);
|
||||||
}
|
}
|
||||||
@ -1180,6 +1192,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
arena.Cleanup();
|
arena.Cleanup();
|
||||||
}
|
}
|
||||||
log(ChatColor.YELLOW+" "+(System.currentTimeMillis()-betweentime)+"ms",CLEANUP_DEBUG);
|
log(ChatColor.YELLOW+" "+(System.currentTimeMillis()-betweentime)+"ms",CLEANUP_DEBUG);
|
||||||
|
betweentime = System.currentTimeMillis();
|
||||||
|
log("Cleaning up TemporaryBlocks ["+temporaryblocks.size()+"]",CLEANUP_DEBUG);
|
||||||
|
for (String ss : temporaryblocks.keySet()) {
|
||||||
|
TemporaryBlock tb = temporaryblocks.get(ss);
|
||||||
|
ReplaceBlockTask.CleanupTemporaryBlock(tb);
|
||||||
|
}
|
||||||
|
log(ChatColor.YELLOW+" "+(System.currentTimeMillis()-betweentime)+"ms",CLEANUP_DEBUG);
|
||||||
long endtime = System.currentTimeMillis();
|
long endtime = System.currentTimeMillis();
|
||||||
log("Cleanup Maintenance completed. Total Time: "+(endtime-starttime)+"ms.",CLEANUP_DEBUG);
|
log("Cleanup Maintenance completed. Total Time: "+(endtime-starttime)+"ms.",CLEANUP_DEBUG);
|
||||||
}
|
}
|
||||||
@ -1848,6 +1867,25 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case "TESTSLASH":{
|
||||||
|
windslashes.add(new WindSlash(p.getLocation().add(0,p.getEyeHeight(),0),p,10,200));
|
||||||
|
}break;
|
||||||
|
case "TEMPBLOCK":{
|
||||||
|
for (int i=-5;i<=5;i++) {
|
||||||
|
for (int j=-5;j<=5;j++) {
|
||||||
|
new TemporaryBlock(p.getLocation().getBlock().getRelative(i, 0, j),Material.STAINED_GLASS,(byte)6,200,"TEST");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//new TemporaryBlock(p.getLocation().getBlock(),Material.STAINED_GLASS,(byte)6,200,"TEST");
|
||||||
|
}break;
|
||||||
|
case "TEMPBLOCK_TEST":{
|
||||||
|
TwosideKeeper.log("Is temporary block? "+TemporaryBlock.isTemporaryBlock(p.getLocation().getBlock()), 0);
|
||||||
|
TwosideKeeper.log("Is on special block? "+TemporaryBlock.isStandingOnSpecialBlock(p, "TEST"),0);
|
||||||
|
TwosideKeeper.log("Range of special block? "+TemporaryBlock.isInRangeOfSpecialBlock(p,5,"TEST"), 0);
|
||||||
|
TwosideKeeper.log("Range of fake special block? "+TemporaryBlock.isInRangeOfSpecialBlock(p,5,"TEST2"), 0);
|
||||||
|
//new TemporaryBlock(p.getLocation().getBlock(),Material.STAINED_GLASS,(byte)6,200,"TEST");
|
||||||
|
//TwosideKeeper.log(TextUtils.outputHashmap(TwosideKeeper.temporaryblocks), 0);
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4978,7 +5016,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
ItemSet.updateItemSets(ev.getPlayer());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6828,6 +6866,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||||
public void monsterDeathEvent(final EntityDeathEvent ev) {
|
public void monsterDeathEvent(final EntityDeathEvent ev) {
|
||||||
log("Has died.",5);
|
log("Has died.",5);
|
||||||
|
if (ev.getEntity() instanceof Player) {
|
||||||
|
return; //We do not handle players in here!!
|
||||||
|
}
|
||||||
if (livingentitydata.containsKey(ev.getEntity().getUniqueId())){ev.setDroppedExp(ev.getDroppedExp()+5);}
|
if (livingentitydata.containsKey(ev.getEntity().getUniqueId())){ev.setDroppedExp(ev.getDroppedExp()+5);}
|
||||||
if (ev.getEntity() instanceof Snowman) {
|
if (ev.getEntity() instanceof Snowman) {
|
||||||
Snowman snowy = (Snowman)ev.getEntity();
|
Snowman snowy = (Snowman)ev.getEntity();
|
||||||
@ -7732,6 +7773,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TemporaryBlock.isTemporaryBlock(ev.getBlock())) {
|
||||||
|
ev.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user