Sneaky Assassins Changes:

- when you get a kill, give an armor upgrade and 1 smoke bomb
 - Revealer range increased to 12 blocks
 - NPC dies once every 2 seconds
 - Lose 1 hunger every second. Gain 8 when damaging player or NPC
 - Reveal all players every 60 seconds, for 2 seconds
 - Added cloaking back to smoke bomb
 - Power-up is always green and type alternates per player. Power-ups always include smoke bomb and mushroom soup.
 - NPC speed slightly decreased
 - Corrected sword power-up progression
This commit is contained in:
CoderTim 2014-08-05 01:23:24 -04:00
parent e7d3cf9e02
commit 0240d50029
11 changed files with 306 additions and 216 deletions

View File

@ -4,6 +4,7 @@ import mineplex.core.common.util.*;
import mineplex.core.disguise.*;
import mineplex.core.updater.*;
import mineplex.core.updater.event.*;
import mineplex.minecraft.game.core.combat.event.*;
import mineplex.minecraft.game.core.damage.*;
import nautilus.game.arcade.*;
import nautilus.game.arcade.events.*;
@ -12,6 +13,7 @@ import nautilus.game.arcade.game.games.sneakyassassins.kits.*;
import nautilus.game.arcade.game.games.sneakyassassins.npc.*;
import nautilus.game.arcade.game.games.sneakyassassins.powerups.*;
import nautilus.game.arcade.kit.*;
import nautilus.game.arcade.kit.perks.*;
import org.bukkit.*;
import org.bukkit.entity.*;
import org.bukkit.event.*;
@ -37,6 +39,7 @@ public class SneakyAssassins extends SoloGame
private final NpcManager _npcManager;
private PowerUpManager _powerUpManager;
private EntityType _disguiseType = EntityType.VILLAGER;
private int _revealCountdown = 60;
public SneakyAssassins(ArcadeManager manager)
{
@ -56,7 +59,6 @@ public class SneakyAssassins extends SoloGame
this._npcManager = new NpcManager(this, UtilMath.random);
this.DamageTeamSelf = true;
this.HungerSet = 20;
this.PrepareFreeze = false;
}
@ -87,8 +89,6 @@ public class SneakyAssassins extends SoloGame
{
if (event.GetGame() == this)
{
int count = GetTeamList().get(0).GetSpawns().size() - GetTeamList().get(0).GetSize();
for (int i = 0; i < 80; i++)
getNpcManager().spawnNpc();
}
@ -137,6 +137,81 @@ public class SneakyAssassins extends SoloGame
return;
event.AddMod(GetName(), "Sword Damage", damage - event.GetDamage(), false);
damager.setFoodLevel(Math.min(20, damager.getFoodLevel() + 8));
}
@EventHandler
public void onCombatDeath(CombatDeathEvent event)
{
if (event.GetLog().GetKiller() == null)
return;
if (!event.GetLog().GetKiller().IsPlayer())
return;
Player player = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
if (player == null)
return;
ArmorPowerUp.powerUpArmor(player, getPowerUpManager().getRandom());
player.getInventory().addItem(SneakyAssassinKit.SMOKE_BOMB.clone());
}
@EventHandler
public void onDrainHunger(UpdateEvent event)
{
if (event.getType() == UpdateType.SEC && GetState() == GameState.Live)
{
for (Player player : Bukkit.getOnlinePlayers())
{
if (IsAlive(player))
player.setFoodLevel(Math.max(0, player.getFoodLevel() - 1));
}
}
}
@Override
@EventHandler
public void ScoreboardUpdate(UpdateEvent event)
{
super.ScoreboardUpdate(event);
if (event.getType() != UpdateType.FAST)
return;
GetScoreboard().WriteBlank();
GetScoreboard().Write(C.cYellow + "Player Reveal");
GetScoreboard().Write(String.valueOf(Math.max(0, _revealCountdown)) + (_revealCountdown == 1 ? " Second" : " Seconds"));
GetScoreboard().Draw();
}
@EventHandler
public void onRevealCountdown(UpdateEvent event)
{
if (GetState() == GameState.Live && event.getType() == UpdateType.SEC)
{
_revealCountdown--;
if (_revealCountdown == 0)
{
for (Player player : Bukkit.getOnlinePlayers())
{
if (IsAlive(player))
Manager.GetDisguise().undisguise(player);
}
}
else if (_revealCountdown == -2)
{
for (Player player : Bukkit.getOnlinePlayers())
{
if (IsAlive(player))
Manager.GetDisguise().disguise(DisguiseFactory.createDisguise(player, _disguiseType));
}
_revealCountdown = 60;
}
}
}
@EventHandler(ignoreCancelled = true)
@ -167,7 +242,7 @@ public class SneakyAssassins extends SoloGame
@EventHandler(ignoreCancelled = true)
public void onPlayerInteractHanging(PlayerInteractEntityEvent event)
{
if(event.getRightClicked() instanceof Hanging)
if (event.getRightClicked() instanceof Hanging)
event.setCancelled(true);
}

View File

@ -12,6 +12,16 @@ import org.bukkit.inventory.*;
public abstract class SneakyAssassinKit extends Kit
{
public static final ItemStack SMOKE_BOMB = ItemStackFactory.Instance.CreateStack(Material.INK_SACK, (byte) 0, 1,
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Smoke Bomb",
new String[]
{
ChatColor.RESET + "Throw a Smoke Bomb.",
ChatColor.RESET + "Everyone within 6 blocks",
ChatColor.RESET + "gets Blindness for 6 seconds.",
});
public SneakyAssassinKit(ArcadeManager manager, String name, KitAvailability kitAvailability, String[] kitDesc, Perk[] kitPerks, ItemStack itemInHand, EntityType disguiseType)
{
super(manager, name, kitAvailability, kitDesc, kitPerks, disguiseType, itemInHand);
@ -34,14 +44,6 @@ public abstract class SneakyAssassinKit extends Kit
new ItemStack(Material.LEATHER_CHESTPLATE),
new ItemStack(Material.LEATHER_HELMET)
});
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.INK_SACK, (byte) 0, 1,
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Smoke Bomb",
new String[]
{
ChatColor.RESET + "Throw a Smoke Bomb.",
ChatColor.RESET + "Everyone within 6 blocks",
ChatColor.RESET + "gets Blindness for 6 seconds.",
}));
player.getInventory().addItem(SMOKE_BOMB.clone());
}
}

View File

@ -35,9 +35,9 @@ public class NpcManager implements Listener
return _sneakyAssassins;
}
public Collection<? extends Entity> getNpcs()
public Collection<? extends LivingEntity> getNpcs()
{
return getGame().WorldData.World.getEntitiesByClass(getDisguiseType().getEntityClass());
return (Collection<? extends LivingEntity>) getGame().WorldData.World.getEntitiesByClass(getDisguiseType().getEntityClass());
}
public Entity spawnNpc()
@ -69,22 +69,29 @@ public class NpcManager implements Listener
bustle();
}
@EventHandler
public void onKillNpc(UpdateEvent event)
{
if (event.getType() == UpdateType.TWOSEC && getGame().GetState() == Game.GameState.Live)
{
List<LivingEntity> npcs = new ArrayList<>(getNpcs());
if (!npcs.isEmpty())
{
LivingEntity npc = UtilAlg.Random(npcs);
UtilParticle.PlayParticle(UtilParticle.ParticleType.LARGE_SMOKE, npc.getLocation(), 0f, 0f, 0f, 0, 1);
npc.remove();
}
}
}
@EventHandler
public void onEntityDeath(EntityDeathEvent event)
{
try
{
if (event.getEntity().getWorld() == getGame().WorldData.World)
{
event.setDroppedExp(0);
event.getDrops().clear();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void bustle()
{
@ -123,7 +130,7 @@ public class NpcManager implements Listener
}
}
UtilEnt.CreatureMove(npc, location, 0.8f);
UtilEnt.CreatureMove(npc, location, 0.7f);
}
}
}

View File

@ -32,32 +32,26 @@ public class ArmorPowerUp extends PowerUp
)
);
public ArmorPowerUp(PowerUpManager powerUpManager, Location location)
public ArmorPowerUp()
{
super(powerUpManager, PowerUpType.ARMOR, location);
super(PowerUpType.ARMOR);
}
@Override
public boolean powerUpPlayer(Player player)
public boolean powerUpPlayer(Player player, Random random)
{
boolean powerUp1 = powerUpArmor(player);
boolean powerUp2 = powerUpArmor(player);
boolean powerUp1 = powerUpArmor(player, random);
boolean powerUp2 = powerUpArmor(player, random);
if (powerUp1 || powerUp2)
{
UtilPlayer.message(player, F.main("Power-Up", "Your " + F.item("Armor") + " was upgraded."));
return super.powerUpPlayer(player);
}
else
{
UtilPlayer.message(player, F.main("Power-Up", "Your " + F.item("Armor") + " is already fully upgraded!"));
return false;
}
return super.powerUpPlayer(player, random);
}
private boolean powerUpArmor(Player player)
public static boolean powerUpArmor(Player player, Random random)
{
ItemStack[] armor = player.getInventory().getArmorContents();
@ -73,7 +67,7 @@ public class ArmorPowerUp extends PowerUp
if (!upgradeable.isEmpty())
{
int choice = upgradeable.get(getPowerUpManager().getRandom().nextInt(upgradeable.size()));
int choice = upgradeable.get(random.nextInt(upgradeable.size()));
int nextLevel = Math.min(ARMOR_PROGRESSION.get(choice).size() - 1, level + 1);
armor[choice] = new ItemStack(ARMOR_PROGRESSION.get(choice).get(nextLevel));

View File

@ -1,138 +1,33 @@
package nautilus.game.arcade.game.games.sneakyassassins.powerups;
import mineplex.core.common.util.*;
import mineplex.core.updater.*;
import mineplex.core.updater.event.*;
import nautilus.game.arcade.game.games.sneakyassassins.kits.*;
import org.bukkit.*;
import org.bukkit.block.*;
import org.bukkit.entity.*;
import org.bukkit.inventory.*;
import org.bukkit.material.*;
import org.bukkit.util.*;
import java.util.*;
public abstract class PowerUp
{
private final PowerUpManager _powerUpManager;
private final PowerUpType _powerUpType;
private final Location _location;
private Location _effectLocation;
private Block _beaconBlock;
private BlockState[][][] _originalBeaconBlocks = new BlockState[3][2][3];
private Item _item;
public PowerUp(PowerUpManager powerUpManager, PowerUpType powerUpType, Location location)
protected PowerUp(PowerUpType powerUpType)
{
_powerUpManager = powerUpManager;
_powerUpType = powerUpType;
_location = location;
_effectLocation = getLocation().getBlock().getLocation().add(0.5, 0, 0.5);
_effectLocation.setY(250);
}
public PowerUpManager getPowerUpManager()
public boolean powerUpPlayer(Player player, Random random)
{
return _powerUpManager;
}
player.playSound(player.getEyeLocation(), Sound.LEVEL_UP, 2f, 0.8f);
public Location getLocation()
{
return _location;
}
player.getInventory().addItem(SneakyAssassinKit.SMOKE_BOMB.clone());
player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
@SuppressWarnings("deprecation")
public void activate()
{
_beaconBlock = getLocation().getBlock().getRelative(BlockFace.DOWN);
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 2; y++)
{
for (int z = 0; z < 3; z++)
{
Block beaconBaseBlock = _beaconBlock.getRelative(x - 1, y - 1, z - 1);
_originalBeaconBlocks[x][y][z] = beaconBaseBlock.getState();
if (y == 0)
beaconBaseBlock.setType(Material.IRON_BLOCK);
else if (x == 1 && z == 1)
beaconBaseBlock.setType(Material.BEACON);
else
beaconBaseBlock.setTypeIdAndData(Material.STAINED_GLASS.getId(), getPowerUpType().getDyeColor().getWoolData(), false);
}
}
}
}
public void onUpdate(UpdateEvent event)
{
if (event.getType() == UpdateType.FASTEST && _effectLocation != null)
{
FireworkEffect effect = FireworkEffect
.builder()
.flicker(false)
.withColor(getPowerUpType().getColor())
.with(FireworkEffect.Type.BURST)
.trail(false)
.build();
UtilFirework.playFirework(_effectLocation, effect);
_effectLocation.setY(_effectLocation.getY() - 2);
if (_effectLocation.getY() - getLocation().getY() < 2)
{
_effectLocation = null;
Location itemLocation = _beaconBlock.getLocation().add(0.5, 1.5, 0.5);
effect = FireworkEffect
.builder()
.flicker(false)
.withColor(getPowerUpType().getColor())
.with(FireworkEffect.Type.BALL_LARGE)
.trail(true)
.build();
UtilFirework.playFirework(itemLocation, effect);
_item = itemLocation.getWorld().dropItem(itemLocation, new ItemStack(getPowerUpType().getItemType()));
_item.setVelocity(new Vector(0, 0.15, 0));
}
}
}
public Item getItem()
{
return _item;
return true;
}
public PowerUpType getPowerUpType()
{
return _powerUpType;
}
public void remove()
{
if (getItem() != null)
{
getItem().remove();
_item = null;
}
for (int x = 0; x < _originalBeaconBlocks.length; x++)
for (int y = 0; y < _originalBeaconBlocks[x].length; y++)
for (int z = 0; z < _originalBeaconBlocks[x][y].length; z++)
_originalBeaconBlocks[x][y][z].update(true, false);
getPowerUpManager().removePowerUp(this);
}
public boolean powerUpPlayer(Player player)
{
player.playSound(player.getEyeLocation(), Sound.LEVEL_UP, 2f, 0.8f);
return true;
}
}

View File

@ -0,0 +1,126 @@
package nautilus.game.arcade.game.games.sneakyassassins.powerups;
import mineplex.core.common.util.*;
import mineplex.core.updater.*;
import mineplex.core.updater.event.*;
import org.bukkit.*;
import org.bukkit.block.*;
import org.bukkit.entity.*;
import org.bukkit.inventory.*;
import org.bukkit.util.*;
/**
* Created by Tim on 8/5/2014.
*/
public class PowerUpItem
{
private final PowerUpManager _powerUpManager;
private final Location _location;
private Location _effectLocation;
private Block _beaconBlock;
private BlockState[][][] _originalBeaconBlocks = new BlockState[3][2][3];
private Item _item;
public PowerUpItem(PowerUpManager powerUpManager, Location location)
{
_powerUpManager = powerUpManager;
_location = location;
_effectLocation = getLocation().getBlock().getLocation().add(0.5, 0, 0.5);
_effectLocation.setY(250);
}
public PowerUpManager getPowerUpManager()
{
return _powerUpManager;
}
public Location getLocation()
{
return _location;
}
@SuppressWarnings("deprecation")
public void activate()
{
_beaconBlock = getLocation().getBlock().getRelative(BlockFace.DOWN);
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 2; y++)
{
for (int z = 0; z < 3; z++)
{
Block beaconBaseBlock = _beaconBlock.getRelative(x - 1, y - 1, z - 1);
_originalBeaconBlocks[x][y][z] = beaconBaseBlock.getState();
if (y == 0)
beaconBaseBlock.setType(Material.IRON_BLOCK);
else if (x == 1 && z == 1)
beaconBaseBlock.setType(Material.BEACON);
else
beaconBaseBlock.setTypeIdAndData(Material.STAINED_GLASS.getId(), DyeColor.GREEN.getWoolData(), false);
}
}
}
}
public void onUpdate(UpdateEvent event)
{
if (event.getType() == UpdateType.FASTEST && _effectLocation != null)
{
FireworkEffect effect = FireworkEffect
.builder()
.flicker(false)
.withColor(DyeColor.GREEN.getFireworkColor())
.with(FireworkEffect.Type.BURST)
.trail(false)
.build();
UtilFirework.playFirework(_effectLocation, effect);
_effectLocation.setY(_effectLocation.getY() - 2);
if (_effectLocation.getY() - getLocation().getY() < 2)
{
_effectLocation = null;
Location itemLocation = _beaconBlock.getLocation().add(0.5, 1.5, 0.5);
effect = FireworkEffect
.builder()
.flicker(false)
.withColor(DyeColor.GREEN.getFireworkColor())
.with(FireworkEffect.Type.BALL_LARGE)
.trail(true)
.build();
UtilFirework.playFirework(itemLocation, effect);
_item = itemLocation.getWorld().dropItem(itemLocation, new ItemStack(Material.CHEST));
_item.setVelocity(new Vector(0, 0.15, 0));
}
}
}
public Item getItem()
{
return _item;
}
public void remove()
{
if (getItem() != null)
{
getItem().remove();
_item = null;
}
for (int x = 0; x < _originalBeaconBlocks.length; x++)
for (int y = 0; y < _originalBeaconBlocks[x].length; y++)
for (int z = 0; z < _originalBeaconBlocks[x][y].length; z++)
_originalBeaconBlocks[x][y][z].update(true, false);
getPowerUpManager().removePowerUp(this);
}
}

View File

@ -1,5 +1,6 @@
package nautilus.game.arcade.game.games.sneakyassassins.powerups;
import mineplex.core.common.util.*;
import mineplex.core.updater.*;
import mineplex.core.updater.event.*;
import nautilus.game.arcade.events.*;
@ -19,10 +20,10 @@ public class PowerUpManager implements Listener
private final Game _game;
private final Random _random;
private final List<Location> _spawnLocations;
private final List<PowerUp> _powerUps = new ArrayList<>();
private final List<PowerUpItem> _powerUps = new ArrayList<>();
private Location _lastLocation = null;
private int _nextSpawnCountdown = -1;
private final Map<UUID, PowerUp> _powerUpPickUpCooldown = new HashMap<>();
private final Map<UUID, PowerUpType> _lastPowerUpType = new HashMap<>();
public PowerUpManager(Game game, Random random, List<Location> spawnLocations)
{
@ -70,18 +71,18 @@ public class PowerUpManager implements Listener
public void spawnNextPowerUp()
{
PowerUp powerUp = PowerUpType.values()[getRandom().nextInt(PowerUpType.values().length)].spawn(this, nextLocation());
PowerUpItem powerUp = new PowerUpItem(this, nextLocation());
getPowerUps().add(powerUp);
powerUp.activate();
}
public List<PowerUp> getPowerUps()
public List<PowerUpItem> getPowerUps()
{
return _powerUps;
}
boolean removePowerUp(PowerUp powerUp)
boolean removePowerUp(PowerUpItem powerUp)
{
return _powerUps.remove(powerUp);
}
@ -125,7 +126,7 @@ public class PowerUpManager implements Listener
_nextSpawnCountdown--;
}
for (PowerUp powerUp : getPowerUps())
for (PowerUpItem powerUp : getPowerUps())
powerUp.onUpdate(event);
}
@ -149,47 +150,37 @@ public class PowerUpManager implements Listener
@EventHandler
public void onPlayerPickUpPowerUp(final PlayerPickupItemEvent event)
{
if (getGame().GetTeam(event.getPlayer()) != null)
if (getGame().IsPlaying(event.getPlayer()))
{
final PowerUp powerUp = getPowerUpByItem(event.getItem());
final PowerUpItem powerUp = getPowerUpByItem(event.getItem());
if (powerUp != null)
{
event.setCancelled(true);
if (_powerUpPickUpCooldown.get(event.getPlayer().getUniqueId()) != powerUp)
{
if (powerUp.powerUpPlayer(event.getPlayer()))
{
PowerUpType lastType = _lastPowerUpType.get(event.getPlayer().getUniqueId());
if (lastType == null)
lastType = UtilAlg.Random(Arrays.asList(PowerUpType.values()));
int nextIndex = (Arrays.asList(PowerUpType.values()).indexOf(lastType) + 1) % PowerUpType.values().length;
PowerUp pu = PowerUpType.values()[nextIndex].getPowerUp();
pu.powerUpPlayer(event.getPlayer(), getRandom());
powerUp.remove();
_lastPowerUpType.put(event.getPlayer().getUniqueId(), pu.getPowerUpType());
schedulePowerUpSpawn(10);
}
else
{
_powerUpPickUpCooldown.put(event.getPlayer().getUniqueId(), powerUp);
Bukkit.getScheduler().runTaskLater(getPlugin(), new Runnable()
{
@Override
public void run()
{
if (_powerUpPickUpCooldown.get(event.getPlayer().getUniqueId()) == powerUp)
_powerUpPickUpCooldown.remove(event.getPlayer().getUniqueId());
}
}, 40);
}
}
}
}
}
public PowerUp getPowerUpByItem(Item item)
public PowerUpItem getPowerUpByItem(Item item)
{
if (item == null)
return null;
for (PowerUp powerUp : getPowerUps())
for (PowerUpItem powerUp : getPowerUps())
{
if (powerUp.getItem() != null && powerUp.getItem().equals(item))
return powerUp;

View File

@ -31,15 +31,15 @@ public enum PowerUpType
return _color;
}
public PowerUp spawn(PowerUpManager powerUpManager, Location location)
public PowerUp getPowerUp()
{
switch (this)
{
case WEAPON:
return new WeaponPowerUp(powerUpManager, location);
return new WeaponPowerUp();
case ARMOR:
return new ArmorPowerUp(powerUpManager, location);
return new ArmorPowerUp();
default:
return null;

View File

@ -12,18 +12,18 @@ public class WeaponPowerUp extends PowerUp
private static final List<Material> SWORD_PROGRESSION = Arrays.asList(
Material.WOOD_SWORD,
Material.STONE_SWORD,
Material.IRON_SWORD,
Material.GOLD_SWORD,
Material.IRON_SWORD,
Material.DIAMOND_SWORD
);
public WeaponPowerUp(PowerUpManager powerUpManager, Location location)
public WeaponPowerUp()
{
super(powerUpManager, PowerUpType.WEAPON, location);
super(PowerUpType.WEAPON);
}
@Override
public boolean powerUpPlayer(Player player)
public boolean powerUpPlayer(Player player, Random random)
{
for (int swordType = 0; swordType < SWORD_PROGRESSION.size(); swordType++)
{
@ -39,13 +39,13 @@ public class WeaponPowerUp extends PowerUp
UtilPlayer.message(player, F.main("Power-Up", "Your " + F.item("Sword") + " was upgraded."));
return super.powerUpPlayer(player);
return super.powerUpPlayer(player, random);
}
}
}
UtilPlayer.message(player, F.main("Power-Up", "Your " + F.item("Sword") + " is already fully upgraded!"));
return false;
return super.powerUpPlayer(player, random);
}
}

View File

@ -125,7 +125,7 @@ public class PerkRevealer extends Perk implements IThrown
if (player == data.GetThrower())
continue;
if (player.getLocation().getWorld() == data.GetThrown().getWorld() && player.getLocation().distanceSquared(data.GetThrown().getLocation()) <= 25)
if (player.getLocation().getWorld() == data.GetThrown().getWorld() && player.getLocation().distanceSquared(data.GetThrown().getLocation()) <= 12 * 12)
{
RevealedPlayerInfo info = getRevealedPlayers().get(player);

View File

@ -76,21 +76,24 @@ public class PerkSmokebomb extends Perk
event.setCancelled(true);
if(isItemConsumed())
if (isItemConsumed())
{
if(player.getItemInHand().getAmount() > 1)
if (player.getItemInHand().getAmount() > 1)
player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1);
else
player.setItemInHand(null);
}
else
{
if(!Recharge.Instance.use(player, GetName(), GetName(), 20000, true, true))
if (!Recharge.Instance.use(player, GetName(), GetName(), 20000, true, true))
return;
}
//Inform
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
//Action
//Manager.GetCondition().Factory().Cloak(GetName(), player, player, 8, false, false);
Manager.GetCondition().Factory().Cloak(GetName(), player, player, 2, false, false);
//Manager.GetCondition().Factory().Vulnerable(GetName(), player, player, 6, 3, false, false, true);
//Blind
@ -101,16 +104,13 @@ public class PerkSmokebomb extends Perk
LivingEntity living = (LivingEntity) other;
Manager.GetCondition().Factory().Blind(GetName(), living, player, getEffectDuration(), 0, false, false, true);
Manager.GetCondition().Factory().Slow(GetName(), living, player, getEffectDuration(), 1, false, false, true, false);
Manager.GetCondition().Factory().Blind(GetName() + " Effect", living, player, getEffectDuration(), 0, false, false, true);
Manager.GetCondition().Factory().Slow(GetName() + " Effect", living, player, getEffectDuration(), 1, false, false, true, false);
}
//Effects
player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 2f, 0.5f);
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0f, 0f, 0f, 0, 1);
//Inform
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
}
@EventHandler(priority = EventPriority.HIGH)