Just more converting
This commit is contained in:
parent
f5a7f35d94
commit
baafa62713
@ -16,7 +16,7 @@ import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.game.games.smash.perks.cow.PerkCowAngryHerd;
|
||||
import nautilus.game.arcade.game.games.smash.perks.cow.PerkCowMilkSpiral;
|
||||
import nautilus.game.arcade.game.games.smash.perks.cow.PerkCowMooshroomMadness;
|
||||
import nautilus.game.arcade.game.games.smash.perks.cow.SmashCow;
|
||||
import nautilus.game.arcade.game.games.smash.perks.cow.PerkCowStampede;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
@ -31,7 +31,7 @@ public class KitCow extends SmashKit2
|
||||
new PerkCowStampede(),
|
||||
new PerkCowAngryHerd(),
|
||||
new PerkCowMilkSpiral(),
|
||||
new PerkCowMooshroomMadness()
|
||||
new SmashCow()
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.MILK_BUCKET);
|
||||
|
@ -1,38 +1,27 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import mineplex.core.common.util.*;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSlime;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkSlimeRocket;
|
||||
import nautilus.game.arcade.kit.perks.PerkSlimeSlam;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitSlime extends SmashKit
|
||||
public class KitSlime extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(6, 1.75, 0.35, 3),
|
||||
@ -77,18 +66,24 @@ public class KitSlime extends SmashKit
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
null,
|
||||
null,
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSlime(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Slime", KitAvailability.Free, DESCRIPTION, PERKS, EntityType.SLIME, IN_HAND, "Giga Slime", 24000, Sound.SLIME_ATTACK);
|
||||
super(manager, "Slime", KitAvailability.Free, PERKS, EntityType.SLIME, IN_HAND, DisguiseSlime.class);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
DisguiseSlime disguise = (DisguiseSlime) Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
disguise.SetSize(3);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -99,103 +94,4 @@ public class KitSlime extends SmashKit
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
player.getInventory().remove(Material.IRON_SWORD);
|
||||
player.getInventory().remove(Material.IRON_AXE);
|
||||
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
//Disguise
|
||||
DisguiseSlime disguise = new DisguiseSlime(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
|
||||
disguise.SetSize(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activateSuperCustom(Player player)
|
||||
{
|
||||
DisguiseBase disguise = Manager.GetDisguise().getDisguise(player);
|
||||
if (disguise != null && disguise instanceof DisguiseSlime)
|
||||
{
|
||||
DisguiseSlime slime = (DisguiseSlime) disguise;
|
||||
|
||||
slime.SetSize(14);
|
||||
Manager.GetDisguise().updateDisguise(slime);
|
||||
}
|
||||
|
||||
player.setExp(0.99f);
|
||||
|
||||
Manager.GetCondition().Factory().Speed("Giga Slime", player, player, 20, 2, false, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivateSuperCustom(Player player)
|
||||
{
|
||||
Manager.GetCondition().EndCondition(player, ConditionType.SPEED, "Giga Slime");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void immunityDamagee(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetDamageePlayer() == null || event.GetDamagerEntity(true) == null)
|
||||
return;
|
||||
|
||||
if (this.isSuperActive(event.GetDamageePlayer()))
|
||||
event.SetCancelled(getSuperName());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void immunityDamager(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
return;
|
||||
|
||||
if (event.GetDamagerPlayer(true) == null)
|
||||
return;
|
||||
|
||||
if (isSuperActive(event.GetDamagerPlayer(true)))
|
||||
event.SetCancelled(getSuperName());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void collide(UpdateEvent event)
|
||||
{
|
||||
for (Player player : getSuperActive())
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (player.equals(other))
|
||||
continue;
|
||||
|
||||
if (Manager.isSpectator(other))
|
||||
continue;
|
||||
|
||||
if (UtilMath.offset(player.getLocation().add(0, 3, 0), other.getLocation()) < 5)
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(other, player, null,
|
||||
DamageCause.CUSTOM, 8, true, false, false,
|
||||
player.getName(), GetName());
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.SLIME, other.getLocation().add(0, 0.6, 0), 1f, 1f, 1f, 0, 20,
|
||||
ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
player.getWorld().playSound(other.getLocation(), Sound.SLIME_ATTACK, 3f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,11 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSnowman;
|
||||
@ -7,21 +13,18 @@ import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import nautilus.game.arcade.kit.perks.PerkArcticAura;
|
||||
import nautilus.game.arcade.kit.perks.PerkBlizzard;
|
||||
import nautilus.game.arcade.kit.perks.PerkDamageSnow;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkIcePath;
|
||||
import nautilus.game.arcade.kit.perks.PerkSnowTurret;
|
||||
|
||||
public class KitSnowman extends SmashKit
|
||||
public class KitSnowman extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(6, 1.4, 0.3, 6),
|
||||
@ -69,33 +72,22 @@ public class KitSnowman extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSnowman(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Snowman", KitAvailability.Gem, 5000, DESCRIPTION, PERKS, EntityType.SNOWMAN, IN_HAND, "Snow Turret", 0, Sound.STEP_SNOW);
|
||||
setSuperCharges(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
|
||||
super(manager, "Snowman", KitAvailability.Gem, 5000, PERKS, EntityType.SNOWMAN, IN_HAND, DisguiseSnowman.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -103,16 +95,5 @@ public class KitSnowman extends SmashKit
|
||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3]);
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
|
||||
//Disguise
|
||||
DisguiseSnowman disguise = new DisguiseSnowman(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,11 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSpider;
|
||||
@ -7,21 +13,16 @@ import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import nautilus.game.arcade.kit.perks.PerkNeedler;
|
||||
import nautilus.game.arcade.kit.perks.PerkSpiderLeap;
|
||||
import nautilus.game.arcade.kit.perks.PerkSpidersNest;
|
||||
import nautilus.game.arcade.kit.perks.PerkWebShot;
|
||||
|
||||
public class KitSpider extends SmashKit
|
||||
public class KitSpider extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(6, 1.5, 0.25, 6),
|
||||
@ -78,55 +79,32 @@ public class KitSpider extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSpider(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Spider", KitAvailability.Free, DESCRIPTION, PERKS, EntityType.SPIDER, IN_HAND, "Spider Nest", 30000, Sound.SPIDER_DEATH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
{
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
|
||||
if (Manager.GetGame().GetState() == GameState.Recruit)
|
||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3], PLAYER_ITEMS[4]);
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
|
||||
super(manager, "Spider", KitAvailability.Free, PERKS, EntityType.SPIDER, IN_HAND, DisguiseSpider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
//Disguise
|
||||
DisguiseSpider disguise = new DisguiseSpider(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
disguise(player);
|
||||
|
||||
if (Manager.GetGame().GetState() == GameState.Prepare)
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
|
||||
if (Manager.GetGame().GetState() == GameState.Recruit)
|
||||
{
|
||||
player.setExp(0.99F);
|
||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3], PLAYER_ITEMS[4]);
|
||||
}
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
player.setExp(0.99F);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,12 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseWitch;
|
||||
@ -7,21 +14,16 @@ import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import nautilus.game.arcade.kit.perks.PerkBatForm;
|
||||
import nautilus.game.arcade.kit.perks.PerkBatWave;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkWitchPotion;
|
||||
|
||||
public class KitWitch extends SmashKit
|
||||
public class KitWitch extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(6, 1.5, 0.3, 5),
|
||||
@ -74,20 +76,22 @@ public class KitWitch extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
public KitWitch(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Witch", KitAvailability.Gem, 6000, DESCRIPTION, PERKS, EntityType.WITCH, IN_HAND, "Bat Form", 20000, Sound.BAT_HURT);
|
||||
super(manager, "Witch", KitAvailability.Gem, 6000, PERKS, EntityType.WITCH, IN_HAND, DisguiseWitch.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -97,48 +101,4 @@ public class KitWitch extends SmashKit
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
player.getInventory().remove(Material.IRON_SPADE);
|
||||
player.getInventory().remove(Material.IRON_AXE);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[4]);
|
||||
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
//Disguise
|
||||
DisguiseWitch disguise = new DisguiseWitch(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activateSuperCustom(Player player)
|
||||
{
|
||||
for (Perk perk : GetPerks())
|
||||
if (perk instanceof PerkDoubleJump)
|
||||
((PerkDoubleJump) perk).disableForPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivateSuperCustom(Player player)
|
||||
{
|
||||
for (Perk perk : GetPerks())
|
||||
if (perk instanceof PerkDoubleJump)
|
||||
((PerkDoubleJump) perk).enableForPlayer(player);
|
||||
}
|
||||
}
|
||||
|
@ -1,143 +0,0 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkSkullShot;
|
||||
|
||||
public class KitWither extends SmashKit
|
||||
{
|
||||
public KitWither(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Wither", KitAvailability.Gem, 5000,
|
||||
|
||||
new String[]
|
||||
{
|
||||
},
|
||||
|
||||
new Perk[]
|
||||
{
|
||||
new PerkSmashStats(6, 1.2, 0.3, 6),
|
||||
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
|
||||
new PerkSkullShot(),
|
||||
},
|
||||
EntityType.ZOMBIE,
|
||||
new ItemStack(Material.BOW),
|
||||
"", 0, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
{
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(new ItemStack(Material.ARROW));
|
||||
|
||||
ItemStack head = ItemStackFactory.Instance.CreateStack(Material.SKULL_ITEM, (byte)1, 1);
|
||||
player.getInventory().setHelmet(head);
|
||||
|
||||
ItemStack armor = new ItemStack(Material.LEATHER_CHESTPLATE);
|
||||
LeatherArmorMeta meta = (LeatherArmorMeta)armor.getItemMeta();
|
||||
meta.setColor(Color.BLACK);
|
||||
armor.setItemMeta(meta);
|
||||
player.getInventory().setChestplate(armor);
|
||||
|
||||
ItemStack legs = new ItemStack(Material.LEATHER_LEGGINGS);
|
||||
LeatherArmorMeta metaLegs = (LeatherArmorMeta)armor.getItemMeta();
|
||||
metaLegs.setColor(Color.BLACK);
|
||||
armor.setItemMeta(metaLegs);
|
||||
player.getInventory().setLeggings(legs);
|
||||
|
||||
ItemStack boots = new ItemStack(Material.LEATHER_BOOTS);
|
||||
LeatherArmorMeta metaBoots = (LeatherArmorMeta)armor.getItemMeta();
|
||||
metaBoots.setColor(Color.BLACK);
|
||||
boots.setItemMeta(metaBoots);
|
||||
player.getInventory().setBoots(boots);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void InvisibilityUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
return;
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (!HasKit(player))
|
||||
continue;
|
||||
|
||||
if (player.getInventory().getChestplate() == null)
|
||||
continue;
|
||||
|
||||
Manager.GetCondition().Factory().Invisible("Wither Invis", player, player, 1.9, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entity SpawnEntity(Location loc)
|
||||
{
|
||||
EntityType type = _entityType;
|
||||
if (type == EntityType.PLAYER)
|
||||
type = EntityType.ZOMBIE;
|
||||
|
||||
LivingEntity entity = (LivingEntity) Manager.GetCreature().SpawnEntity(loc, type);
|
||||
|
||||
entity.setRemoveWhenFarAway(false);
|
||||
entity.setCustomName(GetAvailability().GetColor() + GetName() + " Kit");
|
||||
entity.setCustomNameVisible(true);
|
||||
entity.getEquipment().setItemInHand(_itemInHand);
|
||||
|
||||
Manager.GetCondition().Factory().Invisible("Kit Invis", entity, entity, 7777, 0, false, false, false);
|
||||
|
||||
UtilEnt.Vegetate(entity);
|
||||
|
||||
SpawnCustom(entity);
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpawnCustom(LivingEntity ent)
|
||||
{
|
||||
ItemStack head = ItemStackFactory.Instance.CreateStack(Material.SKULL_ITEM, (byte)1, 1);
|
||||
ent.getEquipment().setHelmet(head);
|
||||
|
||||
ItemStack armor = new ItemStack(Material.LEATHER_CHESTPLATE);
|
||||
LeatherArmorMeta meta = (LeatherArmorMeta)armor.getItemMeta();
|
||||
meta.setColor(Color.BLACK);
|
||||
armor.setItemMeta(meta);
|
||||
ent.getEquipment().setChestplate(armor);
|
||||
}
|
||||
}
|
@ -1,16 +1,5 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSkeleton;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
@ -19,10 +8,25 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Skeleton.SkeletonType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitWitherSkeleton extends SmashKit
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSkeleton;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkWitherForm;
|
||||
import nautilus.game.arcade.kit.perks.PerkWitherImage;
|
||||
import nautilus.game.arcade.kit.perks.PerkWitherSkull;
|
||||
import net.minecraft.server.v1_8_R3.MobSpawnerAbstract.a;
|
||||
|
||||
public class KitWitherSkeleton extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(6, 1.2, 0.3, 6),
|
||||
@ -68,21 +72,33 @@ public class KitWitherSkeleton extends SmashKit
|
||||
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET)
|
||||
};
|
||||
|
||||
|
||||
public KitWitherSkeleton(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Wither Skeleton", KitAvailability.Gem, 6000, DESCRIPTION, PERKS, EntityType.SKELETON, IN_HAND, "Wither Form", 18000, Sound.WITHER_SPAWN);
|
||||
super(manager, "Wither Skeleton", KitAvailability.Gem, 6000, PERKS, EntityType.SKELETON, IN_HAND, DisguiseSkeleton.class);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void giveSuperItems(Player player)
|
||||
// {
|
||||
// player.getInventory().remove(Material.IRON_SWORD);
|
||||
// player.getInventory().remove(Material.IRON_AXE);
|
||||
//
|
||||
// player.getInventory().addItem(PLAYER_ITEMS[3]);
|
||||
//
|
||||
// UtilInv.Update(player);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -92,31 +108,23 @@ public class KitWitherSkeleton extends SmashKit
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
player.getInventory().remove(Material.IRON_SWORD);
|
||||
player.getInventory().remove(Material.IRON_AXE);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ARMOR[3]);
|
||||
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
public void disguise(Player player)
|
||||
{
|
||||
//Disguise
|
||||
DisguiseSkeleton disguise = new DisguiseSkeleton(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
GameTeam gameTeam = Manager.GetGame().GetTeam(player);
|
||||
|
||||
if (gameTeam != null)
|
||||
{
|
||||
disguise.setName(gameTeam.GetColor() + player.getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
disguise.setName(player.getName());
|
||||
|
||||
}
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
disguise.SetSkeletonType(SkeletonType.WITHER);
|
||||
disguise.hideArmor();
|
||||
|
@ -1,29 +1,26 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import mineplex.core.disguise.disguises.DisguiseWolf;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkWolf;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitWolf extends SmashKit
|
||||
public class KitWolf extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(5, 1.6, 0.25, 5),
|
||||
@ -66,23 +63,24 @@ public class KitWolf extends SmashKit
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
null,
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.IRON_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
|
||||
public KitWolf(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Wolf", KitAvailability.Gem, 4000, DESCRIPTION, PERKS, EntityType.WOLF, IN_HAND, "Frenzy", 30000, Sound.WOLF_HOWL);
|
||||
super(manager, "Wolf", KitAvailability.Gem, 4000, PERKS, EntityType.WOLF, IN_HAND, DisguiseWolf.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -92,53 +90,4 @@ public class KitWolf extends SmashKit
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
//Disguise
|
||||
DisguiseWolf disguise = new DisguiseWolf(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activateSuperCustom(Player player)
|
||||
{
|
||||
Manager.GetCondition().Factory().Strength(GetName(), player, player, 30, 1, false, false, false);
|
||||
Manager.GetCondition().Factory().Speed(GetName(), player, player, 30, 2, false, false, false);
|
||||
Manager.GetCondition().Factory().Regen(GetName(), player, player, 30, 2, false, false, false);
|
||||
|
||||
DisguiseBase disguise = Manager.GetDisguise().getDisguise(player);
|
||||
if (disguise instanceof DisguiseWolf)
|
||||
{
|
||||
((DisguiseWolf) disguise).setAngry(true);
|
||||
Manager.GetDisguise().updateDisguise(disguise);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivateSuperCustom(Player player)
|
||||
{
|
||||
DisguiseBase disguise = Manager.GetDisguise().getDisguise(player);
|
||||
if (disguise instanceof DisguiseWolf)
|
||||
{
|
||||
((DisguiseWolf) disguise).setAngry(false);
|
||||
Manager.GetDisguise().updateDisguise(disguise);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,5 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseZombie;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
@ -18,7 +7,24 @@ import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitZombie extends SmashKit
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDeathsGrasp;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkFletcher;
|
||||
import nautilus.game.arcade.kit.perks.PerkKnockbackArrow;
|
||||
import nautilus.game.arcade.kit.perks.PerkNightLivingDead;
|
||||
import nautilus.game.arcade.kit.perks.PerkOvercharge;
|
||||
import nautilus.game.arcade.kit.perks.PerkZombieBile;
|
||||
|
||||
public class KitZombie extends SmashKit2
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
};
|
||||
@ -69,9 +75,9 @@ public class KitZombie extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
@ -82,8 +88,10 @@ public class KitZombie extends SmashKit
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveCoreItems(Player player)
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
@ -94,27 +102,4 @@ public class KitZombie extends SmashKit
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveSuperItems(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
giveCoreItems(player);
|
||||
|
||||
//Disguise
|
||||
DisguiseZombie disguise = new DisguiseZombie(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.setName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.setName(player.getName());
|
||||
|
||||
disguise.setCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
}
|
||||
|
@ -49,8 +49,10 @@ public class PerkInferno extends SmashPerk
|
||||
public void EnergyUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!hasPerk(player))
|
||||
|
@ -11,14 +11,14 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class PerkCowMooshroomMadness extends SmashUltimate
|
||||
public class SmashCow extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final long DURATION = 30000;
|
||||
private static final int DAMAGE_BUFF = 1;
|
||||
private static final int HEALTH = 30;
|
||||
|
||||
public PerkCowMooshroomMadness()
|
||||
public SmashCow()
|
||||
{
|
||||
super("Mooshroom Madness", new String[] {}, Sound.COW_IDLE, DURATION);
|
||||
}
|
@ -0,0 +1,422 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.slime;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.disguise.disguises.DisguiseSlime;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 6000;
|
||||
private static final float ENERGY_PER_TICK = 0.004F;
|
||||
private static final int KNOCKBACK_MAGNITUDE = 3;
|
||||
|
||||
private Map<UUID, Long> _charge = new HashMap<>();
|
||||
private Map<Slime, UUID> _owner = new HashMap<>();
|
||||
private Map<Slime, Long> _lastAttack = new HashMap<>();
|
||||
|
||||
public PerkSlimeRocket()
|
||||
{
|
||||
super("Slime Rocket", new String[] { C.cYellow + "Hold/Release Block" + C.cGray + " to use " + C.cGreen + "Slime Rocket" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void EnergyUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int size = 1;
|
||||
if (player.getExp() > 0.8)
|
||||
{
|
||||
size = 3;
|
||||
}
|
||||
else if (player.getExp() > 0.55)
|
||||
{
|
||||
size = 2;
|
||||
}
|
||||
|
||||
DisguiseSlime slime = (DisguiseSlime) Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
if (slime != null && slime.GetSize() != size)
|
||||
{
|
||||
slime.SetSize(size);
|
||||
Manager.GetDisguise().updateDisguise(slime);
|
||||
}
|
||||
|
||||
if (player.isBlocking())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp((float) Math.min(0.999, player.getExp() + ENERGY_PER_TICK));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSword(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UtilPlayer.message(player, F.main("Skill", "You are charging " + F.skill(GetName()) + "."));
|
||||
|
||||
_charge.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void ChargeRelease(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<UUID> chargeIterator = _charge.keySet().iterator();
|
||||
|
||||
while (chargeIterator.hasNext())
|
||||
{
|
||||
UUID key = chargeIterator.next();
|
||||
Player player = UtilPlayer.searchExact(key);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
chargeIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
long time = _charge.get(key);
|
||||
|
||||
// Charge
|
||||
if (player.isBlocking())
|
||||
{
|
||||
// Energy Depleted
|
||||
if (player.getExp() < 0.1)
|
||||
{
|
||||
FireRocket(player);
|
||||
chargeIterator.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
double elapsed = Math.min(3, (double) (System.currentTimeMillis() - time) / 1000d);
|
||||
|
||||
// Use Energy
|
||||
if (!UtilTime.elapsed(time, 3000))
|
||||
{
|
||||
player.setExp((float) Math.max(0, player.getExp() - 0.01f));
|
||||
}
|
||||
|
||||
// AutoFire
|
||||
if (UtilTime.elapsed(time, 5000))
|
||||
{
|
||||
FireRocket(player);
|
||||
chargeIterator.remove();
|
||||
}
|
||||
|
||||
// Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.SLIME_WALK, 0.5f, (float) (0.5 + 1.5 * (elapsed / 3d)));
|
||||
UtilParticle.PlayParticle(ParticleType.SLIME, player.getLocation().add(0, 1, 0), (float) (elapsed / 6d), (float) (elapsed / 6d), (float) (elapsed / 6d), 0, (int) (elapsed * 5),
|
||||
ViewDist.LONGER, UtilServer.getPlayers());
|
||||
}
|
||||
}
|
||||
// Release
|
||||
else
|
||||
{
|
||||
FireRocket(player);
|
||||
chargeIterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void FireRocket(Player player)
|
||||
{
|
||||
double charge = Math.min(3, (double) (System.currentTimeMillis() - _charge.get(player.getUniqueId())) / 1000d);
|
||||
|
||||
// Spawn Slime
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
Slime slime = player.getWorld().spawn(player.getEyeLocation(), Slime.class);
|
||||
slime.setSize(1);
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
// Size
|
||||
slime.setSize(Math.max(1, (int) charge));
|
||||
|
||||
slime.setMaxHealth(5 + charge * 7);
|
||||
slime.setHealth(slime.getMaxHealth());
|
||||
|
||||
_owner.put(slime, player.getUniqueId());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Skill", "You released " + F.skill(GetName()) + "."));
|
||||
|
||||
slime.leaveVehicle();
|
||||
player.eject();
|
||||
|
||||
UtilAction.velocity(slime, player.getLocation().getDirection(), 1 + charge / 2d, false, 0, 0.2, 10, true);
|
||||
|
||||
Manager.GetProjectile().AddThrow(slime, player, this, -1, true, true, true, true, null, 0, 0, null, 0, UpdateType.FASTEST, 1f);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void SlimeTarget(EntityTargetEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_owner.containsKey(event.getEntity()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) event.getTarget(), UtilPlayer.searchExact(_owner.get(event.getEntity().getUniqueId()))))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (_owner.get(event.getEntity()).equals(event.getTarget()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(data.getThrown() instanceof Slime))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Slime slime = (Slime) data.getThrown();
|
||||
|
||||
if (target instanceof Player && data.getThrower() instanceof Player)
|
||||
{
|
||||
Player targetPlayer = (Player) target;
|
||||
Player throwerPlayer = (Player) data.getThrower();
|
||||
|
||||
if (isTeamDamage(targetPlayer, throwerPlayer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 3 + slime.getSize() * 3, true, true, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void SlimeDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (!(event.GetDamagerEntity(false) instanceof Slime))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Slime slime = (Slime) event.GetDamagerEntity(false);
|
||||
|
||||
// Attack Rate
|
||||
if (_lastAttack.containsKey(slime) && !UtilTime.elapsed(_lastAttack.get(slime), 500))
|
||||
{
|
||||
event.SetCancelled("Slime Attack Rate");
|
||||
return;
|
||||
}
|
||||
|
||||
_lastAttack.put(slime, System.currentTimeMillis());
|
||||
|
||||
// Get Owner
|
||||
UUID key = _owner.get(slime);
|
||||
Player owner = UtilPlayer.searchExact(key);
|
||||
|
||||
if (owner == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isTeamDamage(owner, event.GetDamageePlayer()))
|
||||
{
|
||||
event.SetCancelled("Team Damage");
|
||||
return;
|
||||
}
|
||||
|
||||
if (owner != null && owner.equals(event.GetDamageeEntity()))
|
||||
{
|
||||
event.SetCancelled("Owner Damage");
|
||||
}
|
||||
else
|
||||
{
|
||||
event.AddMod("Slime Damage", "Negate", -event.GetDamageInitial(), false);
|
||||
event.AddMod("Slime Damage", "Attack", 2 * slime.getSize(), true);
|
||||
event.AddKnockback("Slime Knockback", 2);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void SlimeClean(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Slime> slimeIterator = _owner.keySet().iterator();
|
||||
|
||||
while (slimeIterator.hasNext())
|
||||
{
|
||||
Slime slime = slimeIterator.next();
|
||||
|
||||
// Shrink
|
||||
if (slime.getVehicle() == null)
|
||||
{
|
||||
if (slime.getTicksLived() > 120)
|
||||
{
|
||||
slime.setTicksLived(1);
|
||||
|
||||
Manager.GetBlood().Effects(null, slime.getLocation(), 6 + 6 * slime.getSize(), 0.2 + 0.1 * slime.getSize(), null, 1f, 1f, Material.SLIME_BALL, (byte) 0, 15, false);
|
||||
|
||||
if (slime.getSize() <= 1)
|
||||
{
|
||||
slime.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
slime.setSize(slime.getSize() - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!slime.isValid())
|
||||
{
|
||||
slimeIterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
slimeIterator = _lastAttack.keySet().iterator();
|
||||
|
||||
while (slimeIterator.hasNext())
|
||||
{
|
||||
Slime slime = slimeIterator.next();
|
||||
|
||||
if (!slime.isValid())
|
||||
{
|
||||
slimeIterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,185 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.slime;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkSlimeSlam extends SmashPerk
|
||||
{
|
||||
|
||||
private static final int COOLDOWN = 6000;
|
||||
private static final int HIT_BOX = 2;
|
||||
private static final int START_TIME = 1000;
|
||||
private static final int DAMAGE = 7;
|
||||
private static final int KNOCKBACK_MAGNITUDE = 2;
|
||||
|
||||
private Map<UUID, Long> _live = new HashMap<>();
|
||||
|
||||
public PerkSlimeSlam()
|
||||
{
|
||||
super("Slime Slam", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to " + C.cGreen + "Slime Slam" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Leap(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 1.2, true);
|
||||
|
||||
// Record
|
||||
_live.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void End(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<Player> alivePlayers = Manager.GetGame().GetPlayers(true);
|
||||
|
||||
// Collide
|
||||
for (Player player : alivePlayers)
|
||||
{
|
||||
if (!_live.containsKey(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Player other : alivePlayers)
|
||||
{
|
||||
if (UtilPlayer.isSpectator(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (other.equals(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilMath.offset(player, other) < HIT_BOX)
|
||||
{
|
||||
doSlam(player, other);
|
||||
_live.remove(player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End
|
||||
for (Player player : alivePlayers)
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
|
||||
if (!UtilEnt.isGrounded(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!_live.containsKey(key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilTime.elapsed(_live.get(key), START_TIME))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_live.remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
public void doSlam(Player damager, LivingEntity damagee)
|
||||
{
|
||||
// Recoil Event
|
||||
if (!isSuperActive(damager))
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(damager, damagee, null, DamageCause.CUSTOM, DAMAGE / 4, true, true, false, damager.getName(), GetName() + " Recoil");
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(damagee, damager, null, DamageCause.CUSTOM, DAMAGE, true, true, false, damager.getName(), GetName());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName()) + "."));
|
||||
UtilPlayer.message(damagee, F.main("Game", F.name(damager.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,138 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.slime;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import mineplex.core.disguise.disguises.DisguiseSlime;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashSlime extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final long DURATION = 24000;
|
||||
private static final int HIT_BOX = 5;
|
||||
private static final int DAMAGE = 8;
|
||||
|
||||
public SmashSlime()
|
||||
{
|
||||
super("Giga Slime", new String[] {}, Sound.SLIME_ATTACK, DURATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
player.getInventory().remove(Material.IRON_SWORD);
|
||||
player.getInventory().remove(Material.IRON_AXE);
|
||||
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
if (disguise != null && disguise instanceof DisguiseSlime)
|
||||
{
|
||||
DisguiseSlime slime = (DisguiseSlime) disguise;
|
||||
|
||||
slime.SetSize(14);
|
||||
Manager.GetDisguise().updateDisguise(slime);
|
||||
}
|
||||
|
||||
player.setExp(0.99f);
|
||||
|
||||
Manager.GetCondition().Factory().Speed(GetName(), player, player, 20, 2, false, false, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.cancel(player);
|
||||
|
||||
Manager.GetCondition().EndCondition(player, ConditionType.SPEED, GetName());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void immunityDamagee(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetDamageePlayer() == null || event.GetDamagerEntity(true) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isUsingUltimate(event.GetDamageePlayer()))
|
||||
{
|
||||
event.SetCancelled(GetName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void immunityDamager(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetDamagerPlayer(true) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isUsingUltimate(event.GetDamagerPlayer(true)))
|
||||
{
|
||||
event.SetCancelled(GetName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void collide(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<Player> alivePlayers = Manager.GetGame().GetPlayers(true);
|
||||
|
||||
for (Player player : alivePlayers)
|
||||
{
|
||||
for (Player other : alivePlayers)
|
||||
{
|
||||
if (player.equals(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilPlayer.isSpectator(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilMath.offset(player.getLocation().add(0, 3, 0), other.getLocation()) < HIT_BOX)
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, DAMAGE, true, false, false, player.getName(), GetName());
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.SLIME, other.getLocation().add(0, 0.6, 0), 1f, 1f, 1f, 0, 20, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
player.getWorld().playSound(other.getLocation(), Sound.SLIME_ATTACK, 3f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.snowman;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkArcticAura extends Perk
|
||||
{
|
||||
|
||||
private static final int DURATION = 2000;
|
||||
private static final int RANGE = 5;
|
||||
|
||||
public PerkArcticAura()
|
||||
{
|
||||
super("Arctic Aura", new String[] { "You freeze things around you, slowing enemies." });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void SnowAura(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
double range = RANGE * player.getExp();
|
||||
|
||||
Map<Block, Double> blocks = UtilBlock.getInRadius(player.getLocation(), range);
|
||||
|
||||
for (Block block : blocks.keySet())
|
||||
{
|
||||
Manager.GetBlockRestore().snow(block, (byte) 1, (byte) 1, (long) (DURATION * (1 + blocks.get(block))), 250, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,173 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.snowman;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkBlizzard extends Perk
|
||||
{
|
||||
|
||||
private static final float MAX_ENERGY = 0.99F;
|
||||
private static final float ENERGY_PER_TICK = 1 / 60;
|
||||
private static final float ENERGY_PER_USE = 1 / 9;
|
||||
private static final int SNOWBALL_PER_USE = 4;
|
||||
|
||||
private Map<Projectile, Player> _snowball = new HashMap<>();
|
||||
|
||||
public PerkBlizzard()
|
||||
{
|
||||
super("Blizzard", new String[] { C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Blizzard" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void EnergyUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player.isBlocking())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp(Math.min(MAX_ENERGY, player.getExp() + ENERGY_PER_TICK));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Snow(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTEST)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!player.isBlocking())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Energy
|
||||
if (player.getExp() < 0.1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp(Math.max(0, player.getExp() - ENERGY_PER_USE));
|
||||
|
||||
for (int i = 0; i < SNOWBALL_PER_USE; i++)
|
||||
{
|
||||
Snowball snow = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Snowball.class);
|
||||
double x = 0.1 - (UtilMath.r(20) / 100d);
|
||||
double y = UtilMath.r(20) / 100d;
|
||||
double z = 0.1 - (UtilMath.r(20) / 100d);
|
||||
snow.setShooter(player);
|
||||
snow.setVelocity(player.getLocation().getDirection().add(new Vector(x, y, z)).multiply(2));
|
||||
_snowball.put(snow, player);
|
||||
}
|
||||
|
||||
// Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 0.1f, 0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void Snowball(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetCause() != DamageCause.PROJECTILE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Projectile proj = event.GetProjectile();
|
||||
|
||||
if (proj == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(proj instanceof Snowball))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_snowball.containsKey(proj))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.SetCancelled("Blizzard");
|
||||
|
||||
UtilAction.velocity(damagee, proj.getVelocity().multiply(0.15).add(new Vector(0, 0.15, 0)));
|
||||
|
||||
// Damage Event
|
||||
if (damagee instanceof Player)
|
||||
{
|
||||
if (Recharge.Instance.use((Player) damagee, GetName(), 200, false, false))
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(damagee, event.GetDamagerEntity(true), null, DamageCause.CUSTOM, 1, false, true, false, UtilEnt.getName(event.GetDamagerEntity(true)), GetName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void SnowballForm(ProjectileHitEvent event)
|
||||
{
|
||||
Projectile proj = event.getEntity();
|
||||
|
||||
if (!(proj instanceof Snowball))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_snowball.remove(proj) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Manager.GetBlockRestore().snow(proj.getLocation().getBlock(), (byte) 1, (byte) 7, 2000, 250, 0);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.snowman;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkDamageSnow extends Perk
|
||||
{
|
||||
private int _damage;
|
||||
private double _knockback;
|
||||
|
||||
public PerkDamageSnow(int damage, double knockback)
|
||||
{
|
||||
super("Snow Attack", new String[] { C.cGray + "+" + damage + " Damage and " + (int) ((knockback - 1) * 100) + "% Knockback to enemies on snow.", });
|
||||
|
||||
_damage = damage;
|
||||
_knockback = knockback;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetDamageeEntity().getLocation().getBlock().getType() != Material.SNOW)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(damager) || UtilPlayer.isSpectator(damager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddMod(damager.getName(), GetName(), _damage, false);
|
||||
event.AddKnockback("Knockback Snow", _knockback);
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.snowman;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.data.IcePathData;
|
||||
|
||||
public class PerkIcePath extends Perk
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 12000;
|
||||
private static final long MELT_TIME = 6000;
|
||||
|
||||
private Set<IcePathData> _data = new HashSet<>();
|
||||
|
||||
public PerkIcePath()
|
||||
{
|
||||
super("Ice Path", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to " + C.cGreen + "Ice Path" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Skill(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.teleport(player.getLocation().add(0, 1, 0));
|
||||
UtilAction.velocity(player, new Vector(0, 0.5, 0));
|
||||
|
||||
_data.add(new IcePathData(player));
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Freeze(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<IcePathData> dataIterator = _data.iterator();
|
||||
|
||||
while (dataIterator.hasNext())
|
||||
{
|
||||
IcePathData data = dataIterator.next();
|
||||
|
||||
Block block = data.GetNextBlock();
|
||||
|
||||
if (block == null)
|
||||
{
|
||||
dataIterator.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, 79);
|
||||
Manager.GetBlockRestore().add(block, 79, (byte) 0, MELT_TIME);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,202 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.snowman;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.entity.Snowman;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashSnowman extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final int TURRET_HEALTH = 40;
|
||||
private static final int MAX_TICKS = 400;
|
||||
private static final int RATE = 250;
|
||||
private static final float KNOCKBACK_MAGNITUDE = 2.5F;
|
||||
|
||||
private Map<Projectile, Player> _snowball = new HashMap<>();
|
||||
|
||||
private Map<Snowman, Player> _turret = new HashMap<>();
|
||||
|
||||
public SmashSnowman()
|
||||
{
|
||||
super("Snow Turret", new String[] {}, Sound.STEP_SNOW, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
Game game = Manager.GetGame();
|
||||
|
||||
game.CreatureAllowOverride = true;
|
||||
Snowman ent = player.getWorld().spawn(player.getEyeLocation(), Snowman.class);
|
||||
game.CreatureAllowOverride = false;
|
||||
|
||||
UtilEnt.Vegetate(ent);
|
||||
UtilEnt.ghost(ent, true, false);
|
||||
|
||||
ent.setMaxHealth(TURRET_HEALTH);
|
||||
ent.setHealth(TURRET_HEALTH);
|
||||
|
||||
UtilAction.velocity(ent, player.getLocation().getDirection(), 1, false, 0, 0.2, 1, false);
|
||||
|
||||
_turret.put(ent, player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateSnowman(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Snowman> turretIter = _turret.keySet().iterator();
|
||||
|
||||
while (turretIter.hasNext())
|
||||
{
|
||||
Snowman snowman = turretIter.next();
|
||||
Player player = _turret.get(snowman);
|
||||
|
||||
if (snowman.getTicksLived() > MAX_TICKS)
|
||||
{
|
||||
UtilParticle.PlayParticle(ParticleType.SNOWBALL_POOF, snowman.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12, ViewDist.LONG, UtilServer.getPlayers());
|
||||
turretIter.remove();
|
||||
snowman.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
Player target = UtilPlayer.getClosest(snowman.getLocation(), player);
|
||||
|
||||
if (target == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
snowman.setTarget(target);
|
||||
|
||||
// Snowball
|
||||
double mult = 1 + Math.min(3, UtilMath.offset(snowman, target) / 16);
|
||||
double heightBonus = UtilMath.offset(snowman, target) / 140;
|
||||
Vector rand = new Vector((Math.random() - 0.5) * 0.2, (Math.random() - 0.5) * 0.2, (Math.random() - 0.5) * 0.2);
|
||||
|
||||
_snowball.put(snowman.launchProjectile(Snowball.class, UtilAlg.getTrajectory(snowman.getLocation(), target.getLocation()).multiply(mult).add(rand).add(new Vector(0, heightBonus, 0))),
|
||||
player);
|
||||
|
||||
// Look dir
|
||||
UtilEnt.CreatureMoveFast(snowman, target.getLocation(), 0.1f);
|
||||
|
||||
// Sound
|
||||
snowman.getWorld().playSound(snowman.getLocation(), Sound.STEP_SNOW, 0.6f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void snowballHit(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetCause() != DamageCause.PROJECTILE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Projectile proj = event.GetProjectile();
|
||||
|
||||
if (proj == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(proj instanceof Snowball))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_snowball.containsKey(proj))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.SetCancelled("Turret");
|
||||
|
||||
if (damagee.equals(_snowball.get(proj)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UtilAction.velocity(damagee, proj.getVelocity().multiply(0.3).add(new Vector(0, 0.3, 0)));
|
||||
|
||||
// Damage Event
|
||||
if (!(damagee instanceof LivingEntity))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use((Player) damagee, GetName() + " Hit", RATE, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(damagee, _snowball.get(proj), null, DamageCause.PROJECTILE, 2, false, true, false, UtilEnt.getName(_snowball.get(proj)), GetName());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void damageCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (_turret.containsKey(event.GetDamageeEntity()))
|
||||
{
|
||||
event.SetCancelled("Turret Immunity");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clean(ProjectileHitEvent event)
|
||||
{
|
||||
_snowball.remove(event.getEntity());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,186 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.spider;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkNeedler extends SmashPerk
|
||||
{
|
||||
|
||||
private static final long COOLDOWN_NORMAL = 2000;
|
||||
private static final long COOLDOWN_SMASH = 600;
|
||||
private static final float DAMAGE = 1.1F;
|
||||
private static final int MAX_TICKS = 300;
|
||||
|
||||
private Map<UUID, Integer> _active = new HashMap<>();
|
||||
private Set<Arrow> _arrows = new HashSet<>();
|
||||
|
||||
public PerkNeedler()
|
||||
{
|
||||
super("Needler", new String[] { C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Needler" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSword(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), isSuperActive(player) ? COOLDOWN_SMASH : COOLDOWN_NORMAL, !isSuperActive(player), !isSuperActive(player)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_active.put(player.getUniqueId(), 8);
|
||||
|
||||
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
for (Player cur : UtilServer.getPlayers())
|
||||
{
|
||||
UUID key = cur.getUniqueId();
|
||||
|
||||
if (!_active.containsKey(key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!cur.isBlocking())
|
||||
{
|
||||
_active.remove(key);
|
||||
continue;
|
||||
}
|
||||
|
||||
int count = _active.get(key) - 1;
|
||||
|
||||
if (count <= 0)
|
||||
{
|
||||
_active.remove(key);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
_active.put(key, count);
|
||||
}
|
||||
|
||||
Arrow arrow = cur.getWorld().spawnArrow(cur.getEyeLocation().add(cur.getLocation().getDirection()), cur.getLocation().getDirection(), 1.2f, 6);
|
||||
arrow.setShooter(cur);
|
||||
_arrows.add(arrow);
|
||||
|
||||
// Sound
|
||||
cur.getWorld().playSound(cur.getLocation(), Sound.SPIDER_IDLE, 0.8f, 2f);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void ArrowDamamge(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetProjectile() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetDamagerPlayer(true) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.GetProjectile() instanceof Arrow))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
|
||||
if (!hasPerk(damager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.SetCancelled("Needler Cancel");
|
||||
|
||||
event.GetProjectile().remove();
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(event.GetDamageeEntity(), damager, null, DamageCause.THORNS, DAMAGE, true, true, false, damager.getName(), GetName());
|
||||
|
||||
if (!isTeamDamage(damager, event.GetDamageePlayer()))
|
||||
{
|
||||
Manager.GetCondition().Factory().Poison(GetName(), event.GetDamageeEntity(), damager, 2, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Clean(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Iterator<Arrow> arrowIterator = _arrows.iterator(); arrowIterator.hasNext();)
|
||||
{
|
||||
Arrow arrow = arrowIterator.next();
|
||||
|
||||
if (arrow.isOnGround() || !arrow.isValid() || arrow.getTicksLived() > MAX_TICKS)
|
||||
{
|
||||
arrowIterator.remove();
|
||||
arrow.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,170 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.spider;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerToggleFlightEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSpiderLeap extends Perk
|
||||
{
|
||||
|
||||
private static final float ENERGY_PER_TICK = 1 / 80;
|
||||
private static final float ENERGY_PER_LEAP = 1 / 6;
|
||||
|
||||
private Set<UUID> _secondJump = new HashSet<>();
|
||||
|
||||
public PerkSpiderLeap()
|
||||
{
|
||||
super("Spider Leap", new String[] { C.cYellow + "Tap Jump Twice" + C.cGray + " to " + C.cGreen + "Spider Leap", C.cYellow + "Hold Crouch" + C.cGray + " to " + C.cGreen + "Wall Climb", C.cWhite
|
||||
+ "Wall Climb requires Energy (Experience Bar)."
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void WallClimb(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!player.isSneaking())
|
||||
{
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)))
|
||||
{
|
||||
player.setExp((float) Math.min(0.999, player.getExp() + ENERGY_PER_TICK));
|
||||
_secondJump.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp((float) Math.max(0, player.getExp() - ENERGY_PER_TICK));
|
||||
|
||||
if (player.getExp() <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.usable(player, GetName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Block block : UtilBlock.getSurrounding(player.getLocation().getBlock(), true))
|
||||
{
|
||||
if (!UtilBlock.airFoliage(block) && !block.isLiquid())
|
||||
{
|
||||
UtilAction.velocity(player, new Vector(0, 0.2, 0));
|
||||
|
||||
if (!_secondJump.contains(player.getUniqueId()))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
_secondJump.add(player.getUniqueId());
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void FlightHop(PlayerToggleFlightEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
player.setFlying(false);
|
||||
|
||||
// Disable Flight
|
||||
player.setAllowFlight(false);
|
||||
|
||||
if (player.getExp() < ENERGY_PER_LEAP)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Velocity
|
||||
UtilAction.velocity(player, 1.0, 0.2, 1.0, true);
|
||||
|
||||
// Energy
|
||||
player.setExp((float) Math.max(0, player.getExp() - ENERGY_PER_LEAP));
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.SPIDER_IDLE, 1f, 1.5f);
|
||||
|
||||
Recharge.Instance.use(player, GetName(), 500, false, false);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void FlightUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,143 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.spider;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkWebShot extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private static final long COOLDOWN_NORMAL = 10000;
|
||||
private static final long COOLDOWN_SMASH = 1000;
|
||||
private static final int WEBS = 20;
|
||||
|
||||
public PerkWebShot()
|
||||
{
|
||||
super("Spin Web", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Spin Web" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void ShootWeb(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), isSuperActive(player) ? COOLDOWN_SMASH : COOLDOWN_NORMAL, !isSuperActive(player), !isSuperActive(player)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
// Boost
|
||||
UtilAction.velocity(player, 1.2, 0.2, 1.2, true);
|
||||
|
||||
for (int i = 0; i < WEBS; i++)
|
||||
{
|
||||
Item ent = player.getWorld().dropItem(player.getLocation().add(0, 0.5, 0), ItemStackFactory.Instance.CreateStack(Material.WEB, (byte) 0, 1, "Web " + player.getName() + " " + i));
|
||||
|
||||
Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5);
|
||||
random.normalize();
|
||||
random.multiply(0.2);
|
||||
|
||||
UtilAction.velocity(ent, player.getLocation().getDirection().multiply(-1).add(random), 1 + Math.random() * 0.4, false, 0, 0.2, 10, false);
|
||||
Manager.GetProjectile().AddThrow(ent, player, this, -1, true, true, true, true, 0.5f);
|
||||
}
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
|
||||
// Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.SPIDER_IDLE, 2f, 0.6f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
if (target != null)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
|
||||
Manager.GetBlockRestore().add(target.getLocation().getBlock(), 30, (byte) 0, 3000);
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 6, false, false, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
|
||||
UtilAction.zeroVelocity(target);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Web(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
Web(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
Web(data);
|
||||
}
|
||||
|
||||
public void Web(ProjectileUser data)
|
||||
{
|
||||
Location loc = data.getThrown().getLocation();
|
||||
data.getThrown().remove();
|
||||
|
||||
if (data.getThrown().getTicksLived() > 3)
|
||||
{
|
||||
Manager.GetBlockRestore().add(loc.getBlock(), 30, (byte) 0, 2000);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.spider;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashSpider extends SmashUltimate
|
||||
{
|
||||
private static final long DURATION = 30000;
|
||||
|
||||
private Map<LivingEntity, Double> _preHealth = new HashMap<>();
|
||||
|
||||
public SmashSpider()
|
||||
{
|
||||
super("Spider Nest", new String[] {}, Sound.SPIDER_DEATH, DURATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
// Nest
|
||||
Map<Block, Double> blocks = UtilBlock.getInRadius(player.getLocation().getBlock(), 16);
|
||||
|
||||
for (Block block : blocks.keySet())
|
||||
{
|
||||
if (blocks.get(block) > 0.07)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilBlock.airFoliage(block))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (block.getY() > player.getLocation().getY() + 10)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (block.getY() < player.getLocation().getY() - 10)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Manager.GetBlockRestore().add(block, 30, (byte) 0, (long) (DURATION + 5000 * Math.random()));
|
||||
}
|
||||
|
||||
// Regen
|
||||
Manager.GetCondition().Factory().Regen(GetName(), player, player, 30, 0, false, false, false);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void damagePre(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK && event.GetCause() != DamageCause.PROJECTILE && event.GetCause() != DamageCause.CUSTOM)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUsingUltimate(damager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_preHealth.put(damagee, damagee.getHealth());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void damagePost(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
return;
|
||||
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUsingUltimate(damager))
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
if (!_preHealth.containsKey(damagee))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double diff = (_preHealth.remove(damagee) - damagee.getHealth()) / 2d;
|
||||
|
||||
if (diff <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
damager.setMaxHealth(Math.min(60, damager.getMaxHealth() + diff));
|
||||
damager.setHealth(damager.getHealth() + diff);
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.HEART, damager.getLocation().add(0, 1, 0), 0, 0, 0, 0, 1, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.RED_DUST, damagee.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
if (event.GetCause() == DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
damager.getWorld().playSound(damager.getLocation(), Sound.SPIDER_IDLE, 1.5f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,312 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Bat;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkBatWave extends SmashPerk
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 8000;
|
||||
private static final long LEASH_COOLDOWN = 500;
|
||||
private static final long HIT_COOLDOWN = 200;
|
||||
private static final int HIT_BOX = 2;
|
||||
private static final int DAMAGE = 3;
|
||||
private static final float KNOCKBACK_MAGNITUDE = 1.75F;
|
||||
|
||||
private static final String LEASH = "Leash Bats";
|
||||
private static final String HIT = "Hit By Bat";
|
||||
|
||||
private Map<UUID, Long> _active = new HashMap<>();
|
||||
private Map<UUID, Location> _direction = new HashMap<>();
|
||||
private Map<UUID, List<Bat>> _bats = new HashMap<>();
|
||||
private Set<UUID> _pulling = new HashSet<>();
|
||||
private Set<UUID> _allowLeash = new HashSet<>();
|
||||
|
||||
public PerkBatWave()
|
||||
{
|
||||
super("Bat Wave", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + "Bat Wave", C.cYellow + "Double Right-Click" + C.cGray + " with Spade to use "
|
||||
+ C.cGreen + "Bat Leash" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Deactivate(CustomDamageEvent event)
|
||||
{
|
||||
Player player = event.GetDamageePlayer();
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_pulling.remove(player.getUniqueId()))
|
||||
{
|
||||
for (Bat bat : _bats.get(player.getUniqueId()))
|
||||
{
|
||||
bat.setLeashHolder(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSpade(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UUID key = player.getUniqueId();
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, false, true))
|
||||
{
|
||||
if (_active.containsKey(key))
|
||||
{
|
||||
if (!Recharge.Instance.use(player, LEASH, LEASH_COOLDOWN, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_pulling.remove(key))
|
||||
{
|
||||
if (_allowLeash.remove(key))
|
||||
{
|
||||
_pulling.add(key);
|
||||
|
||||
for (Bat bat : _bats.get(key))
|
||||
{
|
||||
bat.setLeashHolder(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (Bat bat : _bats.get(key))
|
||||
{
|
||||
bat.setLeashHolder(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Inform
|
||||
Recharge.Instance.use(player, GetName(), COOLDOWN, true, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Start
|
||||
_direction.put(key, player.getEyeLocation());
|
||||
_active.put(key, System.currentTimeMillis());
|
||||
_allowLeash.add(key);
|
||||
|
||||
_bats.put(key, new ArrayList<Bat>());
|
||||
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
|
||||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
Bat bat = player.getWorld().spawn(player.getEyeLocation(), Bat.class);
|
||||
_bats.get(key).add(bat);
|
||||
}
|
||||
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player cur : UtilServer.getPlayers())
|
||||
{
|
||||
UUID key = cur.getUniqueId();
|
||||
|
||||
if (!_active.containsKey(key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilTime.elapsed(_active.get(key), 2500))
|
||||
{
|
||||
Clear(cur);
|
||||
continue;
|
||||
}
|
||||
|
||||
Location loc = _direction.get(key);
|
||||
|
||||
Vector batVec = new Vector(0, 0, 0);
|
||||
double batCount = 0;
|
||||
|
||||
// Bat Movement
|
||||
for (Bat bat : _bats.get(key))
|
||||
{
|
||||
if (!bat.isValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
batVec.add(bat.getLocation().toVector());
|
||||
batCount++;
|
||||
|
||||
Vector rand = new Vector((Math.random() - 0.5) / 2, (Math.random() - 0.5) / 2, (Math.random() - 0.5) / 2);
|
||||
bat.setVelocity(loc.getDirection().clone().multiply(0.5).add(rand));
|
||||
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (other.equals(cur))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.usable(other, HIT))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.hitBox(bat.getLocation(), other, HIT_BOX, null))
|
||||
{
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(other, cur, null, DamageCause.CUSTOM, DAMAGE, true, true, false, cur.getName(), GetName());
|
||||
|
||||
// Effect
|
||||
bat.getWorld().playSound(bat.getLocation(), Sound.BAT_HURT, 1f, 1f);
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
bat.remove();
|
||||
|
||||
// Recharge on hit
|
||||
Recharge.Instance.useForce(other, HIT, HIT_COOLDOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Player Pull
|
||||
if (_pulling.contains(key))
|
||||
{
|
||||
batVec.multiply(1 / batCount);
|
||||
|
||||
Location batLoc = batVec.toLocation(cur.getWorld());
|
||||
|
||||
UtilAction.velocity(cur, UtilAlg.getTrajectory(cur.getLocation(), batLoc), 0.35, false, 0, 0, 10, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void PlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
Clear(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void PlayerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Clear(event.getEntity());
|
||||
}
|
||||
|
||||
public void Clear(Player player)
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
|
||||
_active.remove(key);
|
||||
_direction.remove(key);
|
||||
_pulling.remove(key);
|
||||
|
||||
if (_bats.containsKey(key))
|
||||
{
|
||||
for (Bat bat : _bats.get(key))
|
||||
{
|
||||
if (bat.isValid())
|
||||
{
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3, ViewDist.LONG, UtilServer.getPlayers());
|
||||
}
|
||||
|
||||
bat.remove();
|
||||
}
|
||||
|
||||
_bats.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,185 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkWitchPotion extends SmashPerk
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 2000;
|
||||
private static final int RANGE_NOMRAL = 3;
|
||||
private static final int RANGE_SMASH = 4;
|
||||
private static final int DAMAGE_NORMAL = 7;
|
||||
private static final int DAMAGE_SMASH = 10;
|
||||
private static final int KNOCKBACK_MAGNITUDE = 2;
|
||||
|
||||
private List<Projectile> _proj = new ArrayList<>();
|
||||
|
||||
public PerkWitchPotion()
|
||||
{
|
||||
super("Daze Potion", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Daze Potion" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Start
|
||||
ThrownPotion potion = player.launchProjectile(ThrownPotion.class);
|
||||
UtilAction.velocity(potion, player.getLocation().getDirection(), 1, false, 0, 0.2, 10, false);
|
||||
|
||||
_proj.add(potion);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Hit(ProjectileHitEvent event)
|
||||
{
|
||||
if (!_proj.remove(event.getEntity()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (player.equals(event.getEntity().getShooter()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(event.getEntity().getShooter() instanceof Player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Player thrower = (Player) event.getEntity().getShooter();
|
||||
|
||||
if (UtilMath.offset(player.getLocation().add(0, 1, 0), event.getEntity().getLocation()) > (isSuperActive(thrower) ? RANGE_SMASH : RANGE_NOMRAL))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
String name = UtilEnt.getName((LivingEntity) event.getEntity().getShooter());
|
||||
|
||||
// Standard
|
||||
if (!isSuperActive(thrower))
|
||||
{
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(player, thrower, null, DamageCause.CUSTOM, DAMAGE_NORMAL, true, true, false, name, GetName());
|
||||
|
||||
Manager.GetCondition().Factory().Slow(GetName(), player, null, 3, 1, true, false, false, false);
|
||||
}
|
||||
// Super Effect
|
||||
else
|
||||
{
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(player, thrower, null, DamageCause.CUSTOM, DAMAGE_SMASH, true, true, false, name, GetName());
|
||||
|
||||
Manager.GetCondition().Factory().Slow(GetName(), player, null, 7, 2, true, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Projectile> potionIterator = _proj.iterator();
|
||||
|
||||
while (potionIterator.hasNext())
|
||||
{
|
||||
Projectile proj = potionIterator.next();
|
||||
|
||||
if (!proj.isValid())
|
||||
{
|
||||
potionIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.MOB_SPELL, proj.getLocation(), 0, 0, 0, 0, 1, ViewDist.LONGER, UtilServer.getPlayers());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,312 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerToggleFlightEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.disguise.disguises.DisguiseBat;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.data.SonicBoomData;
|
||||
|
||||
public class SmashBat extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final long DURATION = 20000;
|
||||
private static final long COOLDOWN = 1200;
|
||||
private static final long MAX_TIME = 12000;
|
||||
private static final int HIT_BOX = 4;
|
||||
private static final int DAMAGE_RADIUS = 10;
|
||||
private static final int DAMAGE = 12;
|
||||
private static final int FLAP_COOLDOWN = 40;
|
||||
private static final int KNOCKBACK_MAGNITUDE = 2;
|
||||
|
||||
private List<SonicBoomData> _sonic = new ArrayList<>();
|
||||
|
||||
public SmashBat()
|
||||
{
|
||||
super("Bat Form", new String[] {}, Sound.BAT_HURT, DURATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
player.getInventory().remove(Material.IRON_SPADE);
|
||||
player.getInventory().remove(Material.IRON_AXE);
|
||||
|
||||
player.getInventory().addItem(new ItemStack(Material.DIAMOND_AXE));
|
||||
|
||||
for (Perk perk : Kit.GetPerks())
|
||||
{
|
||||
if (perk instanceof PerkDoubleJump)
|
||||
{
|
||||
((PerkDoubleJump) perk).disableForPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
Manager.GetDisguise().undisguise(Manager.GetDisguise().getActiveDisguise(player));
|
||||
|
||||
SmashKit2 kit = (SmashKit2) Kit;
|
||||
kit.disguise(player, DisguiseBat.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.cancel(player);
|
||||
|
||||
for (Perk perk : Kit.GetPerks())
|
||||
{
|
||||
if (perk instanceof PerkDoubleJump)
|
||||
{
|
||||
((PerkDoubleJump) perk).enableForPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
Manager.GetDisguise().undisguise(Manager.GetDisguise().getActiveDisguise(player));
|
||||
|
||||
SmashKit2 kit = (SmashKit2) Kit;
|
||||
kit.disguise(player);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void attackCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.GetDamagerPlayer(true);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUsingUltimate(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.SetCancelled("Bat Form Melee Cancel");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW) // Happen before activation of
|
||||
// Super
|
||||
public void sonicBoom(PlayerInteractEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!isUsingUltimate(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getAction() == Action.PHYSICAL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName() + " Screech", COOLDOWN, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.BAT_HURT, 1f, 0.75f);
|
||||
|
||||
_sonic.add(new SonicBoomData(player));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void sonicBoomUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<SonicBoomData> sonicIter = _sonic.iterator();
|
||||
|
||||
while (sonicIter.hasNext())
|
||||
{
|
||||
SonicBoomData data = sonicIter.next();
|
||||
|
||||
// Time Boom
|
||||
if (UtilTime.elapsed(data.Time, MAX_TIME))
|
||||
{
|
||||
sonicIter.remove();
|
||||
explode(data);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Block Boom
|
||||
if (!UtilBlock.airFoliage(data.Location.getBlock()))
|
||||
{
|
||||
sonicIter.remove();
|
||||
explode(data);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Proxy Boom
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player.equals(data.Shooter))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilMath.offset(player.getLocation().add(0, 1, 0), data.Location) < HIT_BOX)
|
||||
{
|
||||
sonicIter.remove();
|
||||
explode(data);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Move
|
||||
data.Location.add(data.Direction.clone().multiply(1));
|
||||
|
||||
// Effect
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.Location, 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
data.Location.getWorld().playSound(data.Location, Sound.FIZZ, 1f, 2f);
|
||||
}
|
||||
}
|
||||
|
||||
private void explode(SonicBoomData data)
|
||||
{
|
||||
// Effect
|
||||
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, data.Location, 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
data.Location.getWorld().playSound(data.Location, Sound.EXPLODE, 1f, 1.5f);
|
||||
|
||||
// Damage
|
||||
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(data.Location, DAMAGE_RADIUS);
|
||||
|
||||
for (LivingEntity cur : targets.keySet())
|
||||
{
|
||||
if (cur.equals(data.Shooter))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(cur, data.Shooter, null, DamageCause.CUSTOM, DAMAGE * targets.get(cur) + 0.5, true, false, false, data.Shooter.getName(), GetName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void flap(PlayerToggleFlightEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (Manager.isSpectator(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUsingUltimate(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
player.setFlying(false);
|
||||
|
||||
// Disable Flight
|
||||
player.setAllowFlight(false);
|
||||
|
||||
// Velocity
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), 0.8, false, 0, 0.8, 1, true);
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, (float) (0.3 + player.getExp()), (float) (Math.random() / 2 + 0.5));
|
||||
|
||||
// Set Recharge
|
||||
Recharge.Instance.use(player, GetName() + " Flap", FLAP_COOLDOWN, false, false);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void flapRecharge(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : ((SmashKit) Kit).getSuperActive())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
else if (Recharge.Instance.usable(player, GetName() + " Flap"))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,291 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.Skeleton.SkeletonType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.TeamSuperSmash;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkWitherImage extends SmashPerk
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 12000;
|
||||
private static final long SWAP_COOLDOWN = 2000;
|
||||
|
||||
private Map<UUID, Skeleton> _skeletons = new HashMap<>();
|
||||
|
||||
public PerkWitherImage()
|
||||
{
|
||||
super("Wither Image", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to " + C.cGreen + "Wither Image", C.cYellow + "Double Right-Click" + C.cGray + " with Axe to " + C.cGreen
|
||||
+ "Wither Swap" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_skeletons.containsKey(player.getUniqueId()))
|
||||
{
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Spawn
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
Skeleton skel = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Skeleton.class);
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
skel.setSkeletonType(SkeletonType.WITHER);
|
||||
|
||||
skel.getEquipment().setItemInHand(player.getItemInHand());
|
||||
skel.setMaxHealth(20);
|
||||
skel.setHealth(skel.getMaxHealth());
|
||||
|
||||
if (Manager.GetGame().GetTeamList().size() > 1)
|
||||
{
|
||||
skel.setCustomName(Manager.GetColor(player) + player.getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
skel.setCustomName(C.cYellow + player.getName());
|
||||
}
|
||||
|
||||
skel.setCustomNameVisible(true);
|
||||
|
||||
UtilAction.velocity(skel, player.getLocation().getDirection(), 1.6, false, 0, 0.2, 10, true);
|
||||
|
||||
_skeletons.put(player.getUniqueId(), skel);
|
||||
|
||||
Recharge.Instance.use(player, "Wither Swap", SWAP_COOLDOWN, false, false);
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1f, 1f);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Recharge.Instance.use(player, "Wither Swap", SWAP_COOLDOWN, true, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Skeleton skel = _skeletons.get(player.getUniqueId());
|
||||
|
||||
Location loc = skel.getLocation();
|
||||
skel.teleport(player.getLocation());
|
||||
player.teleport(loc);
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1f, 2f);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill("Wither Swap") + "."));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityTarget(EntityTargetEvent event)
|
||||
{
|
||||
if (_skeletons.containsValue(event.getEntity()))
|
||||
{
|
||||
if (event.getTarget() instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) event.getTarget(), getOwner((Skeleton) event.getEntity())))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (_skeletons.get(event.getTarget().getUniqueId()).equals(event.getEntity()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void damage(CustomDamageEvent event)
|
||||
{
|
||||
Player damagee = event.GetDamageePlayer();
|
||||
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_skeletons.containsKey(damagee.getUniqueId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damager = event.GetDamagerEntity(false);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_skeletons.get(damagee.getUniqueId()).equals(damager))
|
||||
{
|
||||
event.SetCancelled("Wither Image");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void minionDamageTransfer(CustomDamageEvent event)
|
||||
{
|
||||
LivingEntity damager = event.GetDamagerEntity(true);
|
||||
|
||||
if (damager == null)
|
||||
return;
|
||||
|
||||
if (!_skeletons.containsValue(damager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (UUID uuid : _skeletons.keySet())
|
||||
{
|
||||
Player player = UtilPlayer.searchExact(uuid);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_skeletons.get(uuid).equals(damager))
|
||||
{
|
||||
event.SetDamager(player);
|
||||
event.setKnockbackOrigin(damager.getLocation());
|
||||
event.AddMod(GetName(), "Wither Image", -5.5, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
Iterator<UUID> playerIterator = _skeletons.keySet().iterator();
|
||||
|
||||
while (playerIterator.hasNext())
|
||||
{
|
||||
UUID uuid = playerIterator.next();
|
||||
Player player = UtilPlayer.searchExact(uuid);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
playerIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
Skeleton skel = _skeletons.get(uuid);
|
||||
|
||||
if (!player.isValid() || !skel.isValid() || skel.getTicksLived() > 160 || UtilBlock.liquid(skel.getLocation().getBlock()))
|
||||
{
|
||||
// Effect
|
||||
Manager.GetBlood().Effects(null, skel.getLocation().add(0, 0.5, 0), 12, 0.3, Sound.WITHER_HURT, 1f, 0.75f, Material.BONE, (byte) 0, 40, false);
|
||||
|
||||
playerIterator.remove();
|
||||
skel.remove();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void clean(PlayerDeathEvent event)
|
||||
{
|
||||
Skeleton skel = _skeletons.remove(event.getEntity().getUniqueId());
|
||||
|
||||
if (skel != null)
|
||||
{
|
||||
// Effect
|
||||
Manager.GetBlood().Effects(null, skel.getLocation().add(0, 0.5, 0), 12, 0.3, Sound.WITHER_HURT, 1f, 0.75f, Material.BONE, (byte) 0, 40, false);
|
||||
|
||||
skel.remove();
|
||||
}
|
||||
}
|
||||
|
||||
private Player getOwner(Skeleton skel)
|
||||
{
|
||||
for (UUID uuid : _skeletons.keySet())
|
||||
{
|
||||
Skeleton other = _skeletons.get(uuid);
|
||||
|
||||
if (other.equals(skel))
|
||||
{
|
||||
return UtilPlayer.searchExact(uuid);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,229 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.WitherSkull;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkWitherSkull extends SmashPerk
|
||||
{
|
||||
|
||||
private static final int COOLDOWN_NORMAL = 6000;
|
||||
private static final int COOLDOWN_SMASH = 1000;
|
||||
private static final int DAMAGE = 12;
|
||||
private static final float KNOCKBACK_MAGNITUDE = 1.5F;
|
||||
|
||||
private Map<WitherSkull, Vector> _active = new HashMap<>();
|
||||
private Set<UUID> _ignoreControl = new HashSet<>();
|
||||
|
||||
public PerkWitherSkull()
|
||||
{
|
||||
super("Wither Skull", new String[] { C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Wither Skull" });
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW) // Happen BEFORE super is
|
||||
// triggered
|
||||
public void activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
boolean smash = isSuperActive(player);
|
||||
|
||||
if (!smash)
|
||||
{
|
||||
if (!UtilItem.isSword(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), smash ? COOLDOWN_SMASH : COOLDOWN_NORMAL, !smash, !smash))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Fire
|
||||
WitherSkull skull = player.launchProjectile(WitherSkull.class);
|
||||
|
||||
if (!smash)
|
||||
{
|
||||
skull.setDirection(player.getLocation().getDirection());
|
||||
}
|
||||
|
||||
_active.put(skull, player.getLocation().getDirection().multiply(0.6));
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f);
|
||||
|
||||
// Inform
|
||||
if (!smash)
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
// Control
|
||||
if (!smash)
|
||||
{
|
||||
_ignoreControl.remove(player.getUniqueId());
|
||||
}
|
||||
else
|
||||
{
|
||||
_ignoreControl.add(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void cleanAndControl(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<WitherSkull> skullIterator = _active.keySet().iterator();
|
||||
|
||||
while (skullIterator.hasNext())
|
||||
{
|
||||
WitherSkull skull = skullIterator.next();
|
||||
Player player = (Player) skull.getShooter();
|
||||
|
||||
if (!skull.isValid())
|
||||
{
|
||||
skullIterator.remove();
|
||||
skull.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_ignoreControl.contains(player.getUniqueId()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player.isBlocking() && !_ignoreControl.contains(player.getUniqueId()))
|
||||
{
|
||||
skull.setDirection(player.getLocation().getDirection());
|
||||
skull.setVelocity(player.getLocation().getDirection().multiply(0.6));
|
||||
_active.put(skull, player.getLocation().getDirection().multiply(0.6));
|
||||
}
|
||||
else
|
||||
{
|
||||
_ignoreControl.add(player.getUniqueId());
|
||||
skull.setDirection(_active.get(skull));
|
||||
skull.setVelocity(_active.get(skull));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void explode(EntityExplodeEvent event)
|
||||
{
|
||||
if (!_active.containsKey(event.getEntity()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
WitherSkull skull = (WitherSkull) event.getEntity();
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
|
||||
explode(skull, event.getLocation(), (LivingEntity) skull.getShooter());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void explodeDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetProjectile() != null && event.GetProjectile() instanceof WitherSkull)
|
||||
{
|
||||
event.SetCancelled("Wither Skull Cancel");
|
||||
}
|
||||
}
|
||||
|
||||
private void explode(WitherSkull skull, Location loc, LivingEntity shooter)
|
||||
{
|
||||
double scale = 0.4 + 0.6 * Math.min(1, skull.getTicksLived() / 20d);
|
||||
|
||||
// Players
|
||||
Map<Player, Double> players = UtilPlayer.getInRadius(skull.getLocation(), 6);
|
||||
|
||||
for (Player player : players.keySet())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(player, (LivingEntity) skull.getShooter(), null, DamageCause.CUSTOM, DAMAGE * players.get(player) * scale, true, true, false, UtilEnt.getName(
|
||||
(LivingEntity) skull.getShooter()), GetName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.disguise.disguises.DisguiseWither;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit2;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashWitherSkeleton extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final long DURAITON = 18000;
|
||||
|
||||
public SmashWitherSkeleton()
|
||||
{
|
||||
super("Wither Form", new String[] {}, Sound.WITHER_SPAWN, DURAITON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
Manager.GetDisguise().undisguise(Manager.GetDisguise().getActiveDisguise(player));
|
||||
|
||||
SmashKit2 kit = (SmashKit2) Kit;
|
||||
kit.disguise(player, DisguiseWither.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.cancel(player);
|
||||
|
||||
Manager.GetDisguise().undisguise(Manager.GetDisguise().getActiveDisguise(player));
|
||||
|
||||
SmashKit2 kit = (SmashKit2) Kit;
|
||||
kit.disguise(player);
|
||||
|
||||
player.setFlying(false);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void witherBump(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : ((SmashKit) Kit).getSuperActive())
|
||||
{
|
||||
ArrayList<Location> collisions = new ArrayList<Location>();
|
||||
|
||||
// Bump
|
||||
for (Block block : UtilBlock.getInRadius(player.getLocation().add(0, 0.5, 0), 1.5d).keySet())
|
||||
{
|
||||
if (!UtilBlock.airFoliage(block))
|
||||
{
|
||||
collisions.add(block.getLocation().add(0.5, 0.5, 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
Vector vec = UtilAlg.getAverageBump(player.getLocation(), collisions);
|
||||
|
||||
if (vec == null)
|
||||
continue;
|
||||
|
||||
UtilAction.velocity(player, vec, 0.6, false, 0, 0.4, 10, true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void witherMeleeCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.GetDamagerPlayer(true);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isUsingUltimate(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.SetCancelled("Wither Form Melee Cancel");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void witherFlight(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : ((SmashKit) Kit).getSuperActive())
|
||||
{
|
||||
if (player.isFlying())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setAllowFlight(true);
|
||||
player.setFlying(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,561 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.wolf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import mineplex.core.disguise.disguises.DisguiseWolf;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.condition.ConditionFactory;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashWolf extends SmashUltimate
|
||||
{
|
||||
|
||||
private static final int DURATION = 30000;
|
||||
private static final int TACKLE_COOLDOWN_NORMAL = 8000;
|
||||
private static final int TACKLE_COOLDOWN_SMASH = 1600;
|
||||
private static final int WOLF_HEALTH = 30;
|
||||
private static final float WOLF_HIT_BOX = 2.5F;
|
||||
private static final int WOLF_MAX_TICKS = 70;
|
||||
private static final int TACKLE_DAMAGE = 5;
|
||||
private static final int STRIKE_DAMAGE = 7;
|
||||
|
||||
private static final String CUB_TACKLE = "Cub Tackle";
|
||||
private static final String WOLF_STRIKE = "Wolf Strike";
|
||||
|
||||
private Map<Wolf, UUID> _owner = new HashMap<>();
|
||||
private Map<Wolf, LivingEntity> _tackle = new HashMap<>();
|
||||
|
||||
private Map<UUID, Long> _strike = new HashMap<>();
|
||||
|
||||
private Map<UUID, ArrayList<Long>> _repeat = new HashMap<>();
|
||||
|
||||
private Map<LivingEntity, Long> _tacklestrike = new HashMap<>();
|
||||
|
||||
public SmashWolf()
|
||||
{
|
||||
super("Frenzy", new String[] { C.cGray + "Attacks give +1 Damage for 3 seconds. Stacks.", C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + CUB_TACKLE, C.cYellow
|
||||
+ "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + WOLF_STRIKE, C.cGray + "Wolf Strike deals 300% Knockback to tackled opponents.", }, Sound.WOLF_HOWL, DURATION);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void tackleTrigger(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
boolean smash = isUsingUltimate(player);
|
||||
|
||||
if (!Recharge.Instance.use(player, CUB_TACKLE, smash ? TACKLE_COOLDOWN_SMASH : TACKLE_COOLDOWN_NORMAL, !smash, !smash))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get Nearest Wolf
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
Wolf wolf = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Wolf.class);
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
wolf.setBaby();
|
||||
|
||||
wolf.setAngry(true);
|
||||
|
||||
UtilEnt.Vegetate(wolf);
|
||||
|
||||
wolf.setMaxHealth(WOLF_HEALTH);
|
||||
wolf.setHealth(wolf.getMaxHealth());
|
||||
|
||||
UtilAction.velocity(wolf, player.getLocation().getDirection(), 1.8, false, 0, 0.2, 1.2, true);
|
||||
|
||||
player.getWorld().playSound(wolf.getLocation(), Sound.WOLF_BARK, 1f, 1.8f);
|
||||
|
||||
// Record
|
||||
_owner.put(wolf, player.getUniqueId());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(CUB_TACKLE) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void tackleCollide(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Collide
|
||||
Iterator<Wolf> wolfIterator = _owner.keySet().iterator();
|
||||
|
||||
while (wolfIterator.hasNext())
|
||||
{
|
||||
Wolf wolf = wolfIterator.next();
|
||||
|
||||
// Hit Player
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (Manager.isSpectator(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.hitBox(wolf.getLocation(), other, WOLF_HIT_BOX, null))
|
||||
{
|
||||
if (other.equals(tackleGetOwner(wolf)))
|
||||
{
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
tackleCollideAction(tackleGetOwner(wolf), other, wolf);
|
||||
wolfIterator.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!wolf.isValid() || (UtilEnt.isGrounded(wolf) && wolf.getTicksLived() > WOLF_MAX_TICKS))
|
||||
{
|
||||
wolf.remove();
|
||||
wolfIterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tackleCollideAction(Player damager, LivingEntity damagee, Wolf wolf)
|
||||
{
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_tackle.put(wolf, damagee);
|
||||
|
||||
wolf.setVelocity(new Vector(0, -0.6, 0));
|
||||
UtilAction.zeroVelocity(damagee);
|
||||
|
||||
// Damage
|
||||
Manager.GetDamage().NewDamageEvent(damagee, damager, null, DamageCause.CUSTOM, TACKLE_DAMAGE, false, true, false, damager.getName(), CUB_TACKLE);
|
||||
|
||||
// Sound
|
||||
damagee.getWorld().playSound(damagee.getLocation(), Sound.WOLF_GROWL, 1.5f, 1.5f);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(CUB_TACKLE) + "."));
|
||||
UtilPlayer.message(damagee, F.main("Game", F.name(damager.getName()) + " hit you with " + F.skill(CUB_TACKLE) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void tackleUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Wolf> wolfIterator = _tackle.keySet().iterator();
|
||||
|
||||
while (wolfIterator.hasNext())
|
||||
{
|
||||
Wolf wolf = wolfIterator.next();
|
||||
LivingEntity ent = _tackle.get(wolf);
|
||||
|
||||
if (!wolf.isValid() || !ent.isValid() || wolf.getTicksLived() > WOLF_MAX_TICKS)
|
||||
{
|
||||
wolf.remove();
|
||||
wolfIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilMath.offset(wolf, ent) < WOLF_HIT_BOX)
|
||||
{
|
||||
Manager.GetCondition().Factory().Slow(CUB_TACKLE, ent, wolf, 0.9, 1, false, false, false, false);
|
||||
UtilAction.velocity(ent, new Vector(0, -0.3, 0));
|
||||
}
|
||||
|
||||
// Move
|
||||
Location loc = ent.getLocation();
|
||||
loc.add(UtilAlg.getTrajectory2d(ent, wolf).multiply(1));
|
||||
|
||||
UtilEnt.CreatureMove(wolf, loc, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public Player tackleGetOwner(Wolf wolf)
|
||||
{
|
||||
if (_owner.containsKey(wolf))
|
||||
{
|
||||
return UtilPlayer.searchExact(_owner.get(wolf));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void tackleTargetCancel(EntityTargetEvent event)
|
||||
{
|
||||
if (_owner.containsKey(event.getEntity()))
|
||||
{
|
||||
if (_owner.get(event.getEntity()).equals(event.getTarget()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void tackleDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity damager = event.GetDamagerEntity(false);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (damager instanceof Wolf)
|
||||
{
|
||||
event.SetCancelled("Wolf Cub");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void strikeTrigger(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSpade(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
boolean smash = isUsingUltimate(player);
|
||||
|
||||
if (!Recharge.Instance.use(player, WOLF_STRIKE, smash ? 1600 : 8000, !smash, !smash))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Velocity
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), 1.6, false, 1, 0.2, 1.2, true);
|
||||
|
||||
// Record
|
||||
_strike.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WOLF_BARK, 1f, 1.2f);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(WOLF_STRIKE) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void strikeEnd(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Collide
|
||||
Iterator<UUID> playerIterator = _strike.keySet().iterator();
|
||||
|
||||
while (playerIterator.hasNext())
|
||||
{
|
||||
UUID uuid = playerIterator.next();
|
||||
Player player = UtilPlayer.searchExact(uuid);
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
playerIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (player.equals(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Manager.isSpectator(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.hitBox(player.getLocation().add(0, 1, 0), other, WOLF_HIT_BOX, null))
|
||||
{
|
||||
strikeHit(player, other);
|
||||
playerIterator.remove();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!UtilEnt.isGrounded(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilTime.elapsed(_strike.get(uuid), 1500))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
playerIterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public void strikeHit(Player damager, LivingEntity damagee)
|
||||
{
|
||||
UtilAction.zeroVelocity(damager);
|
||||
|
||||
// Remove tackle
|
||||
Iterator<Wolf> wolfIterator = _tackle.keySet().iterator();
|
||||
|
||||
while (wolfIterator.hasNext())
|
||||
{
|
||||
Wolf wolf = wolfIterator.next();
|
||||
|
||||
if (_tackle.get(wolf).equals(damagee))
|
||||
{
|
||||
wolf.remove();
|
||||
wolfIterator.remove();
|
||||
|
||||
_tacklestrike.put(damagee, System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(damagee, damager, null, DamageCause.CUSTOM, STRIKE_DAMAGE, true, true, false, damager.getName(), WOLF_STRIKE);
|
||||
|
||||
// Sound
|
||||
damagee.getWorld().playSound(damagee.getLocation(), Sound.WOLF_BARK, 1.5f, 1f);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(WOLF_STRIKE) + "."));
|
||||
UtilPlayer.message(damagee, F.main("Game", F.name(damager.getName()) + " hit you with " + F.skill(WOLF_STRIKE) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void strikeKnockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() != null && event.GetReason().contains(WOLF_STRIKE))
|
||||
{
|
||||
if (_tacklestrike.containsKey(event.GetDamageeEntity()) && !UtilTime.elapsed(_tacklestrike.get(event.GetDamageeEntity()), 100))
|
||||
{
|
||||
event.AddKnockback(GetName(), 3.0);
|
||||
|
||||
// Blood
|
||||
event.GetDamageeEntity().getWorld().playEffect(event.GetDamageeEntity().getLocation(), Effect.STEP_SOUND, 55);
|
||||
|
||||
// Double Sound
|
||||
event.GetDamageeEntity().getWorld().playSound(event.GetDamageeEntity().getLocation(), Sound.WOLF_BARK, 2f, 1.5f);
|
||||
}
|
||||
else
|
||||
{
|
||||
event.AddKnockback(GetName(), 1.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void RepeatDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player damager = event.GetDamagerPlayer(false);
|
||||
|
||||
if (damager == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(damager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_repeat.containsKey(damager.getUniqueId()))
|
||||
{
|
||||
_repeat.put(damager.getUniqueId(), new ArrayList<Long>());
|
||||
_repeat.get(damager.getUniqueId()).add(System.currentTimeMillis());
|
||||
|
||||
// Exp
|
||||
damager.setExp(Math.min(0.99F, _repeat.get(damager.getUniqueId()).size() / 9f));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int count = _repeat.get(damager.getUniqueId()).size();
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
event.AddMod(damager.getName(), "Ravage", Math.min(2, count), false);
|
||||
|
||||
// Sound
|
||||
damager.getWorld().playSound(damager.getLocation(), Sound.WOLF_BARK, (float) (0.5 + count * 0.25), (float) (1 + count * 0.25));
|
||||
}
|
||||
|
||||
_repeat.get(damager.getUniqueId()).add(System.currentTimeMillis());
|
||||
|
||||
// Exp
|
||||
damager.setExp(Math.min(0.9999f, _repeat.get(damager.getUniqueId()).size() / 9f));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void RepeatExpire(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<UUID> playerIterator = _repeat.keySet().iterator();
|
||||
|
||||
while (playerIterator.hasNext())
|
||||
{
|
||||
UUID uuid = playerIterator.next();
|
||||
Player player = UtilPlayer.searchExact(uuid);
|
||||
|
||||
Iterator<Long> timeIterator = _repeat.get(uuid).iterator();
|
||||
|
||||
while (timeIterator.hasNext())
|
||||
{
|
||||
long time = timeIterator.next();
|
||||
|
||||
if (UtilTime.elapsed(time, 3000))
|
||||
{
|
||||
timeIterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// Exp
|
||||
player.setExp(Math.min(0.9999f, _repeat.get(player).size() / 9f));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
ConditionFactory factory = Manager.GetCondition().Factory();
|
||||
|
||||
factory.Strength(GetName(), player, player, 30, 1, false, false, false);
|
||||
factory.Speed(GetName(), player, player, 30, 2, false, false, false);
|
||||
factory.Regen(GetName(), player, player, 30, 2, false, false, false);
|
||||
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
if (disguise instanceof DisguiseWolf)
|
||||
{
|
||||
((DisguiseWolf) disguise).setAngry(true);
|
||||
Manager.GetDisguise().updateDisguise(disguise);
|
||||
}
|
||||
|
||||
Recharge.Instance.recharge(player, WOLF_STRIKE);
|
||||
Recharge.Instance.recharge(player, CUB_TACKLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.cancel(player);
|
||||
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
if (disguise instanceof DisguiseWolf)
|
||||
{
|
||||
((DisguiseWolf) disguise).setAngry(false);
|
||||
Manager.GetDisguise().updateDisguise(disguise);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,193 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.zombie;
|
||||
|
||||
import java.time.temporal.WeekFields;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilGear;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkDeathsGrasp extends Perk
|
||||
{
|
||||
private HashMap<LivingEntity, Long> _live = new HashMap<LivingEntity, Long>();
|
||||
private HashMap<LivingEntity, Long> _weakness = new HashMap<LivingEntity, Long>();
|
||||
|
||||
public PerkDeathsGrasp()
|
||||
{
|
||||
super("Deaths Grasp", new String[]
|
||||
{
|
||||
C.cYellow + "Left-Click" + C.cGray + " with Bow to use " + C.cGreen + "Deaths Grasp",
|
||||
C.cGray + "+100% Arrow Damage to enemies thrown by Deaths Grasp"
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void leap(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
if (event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.LEFT_CLICK_BLOCK)
|
||||
return;
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
return;
|
||||
|
||||
if (!UtilGear.isBow(event.getPlayer().getItemInHand()))
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
return;
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), 12000, true, true))
|
||||
return;
|
||||
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), 1.4, false, 0, 0.2, 1.2, true);
|
||||
|
||||
//Record
|
||||
_live.put(player, System.currentTimeMillis());
|
||||
|
||||
//Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
|
||||
//Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_HURT, 1f, 1.4f);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void end(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
//Collide
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
if (_live.containsKey(player))
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
if (!Manager.isSpectator(other))
|
||||
if (!other.equals(player))
|
||||
if (UtilMath.offset(player, other) < 2)
|
||||
{
|
||||
collide(player, other);
|
||||
_live.remove(player);
|
||||
return;
|
||||
}
|
||||
|
||||
//Leap End
|
||||
Iterator<LivingEntity> leapIter = _live.keySet().iterator();
|
||||
|
||||
while (leapIter.hasNext())
|
||||
{
|
||||
LivingEntity ent = leapIter.next();
|
||||
|
||||
if (!UtilEnt.isGrounded(ent))
|
||||
continue;
|
||||
|
||||
if (!UtilTime.elapsed(_live.get(ent), 1000))
|
||||
continue;
|
||||
|
||||
leapIter.remove();
|
||||
}
|
||||
|
||||
//Weakness End
|
||||
Iterator<LivingEntity> weaknessIter = _weakness.keySet().iterator();
|
||||
|
||||
while (weaknessIter.hasNext())
|
||||
{
|
||||
LivingEntity ent = weaknessIter.next();
|
||||
|
||||
if (!UtilEnt.isGrounded(ent))
|
||||
continue;
|
||||
|
||||
if (!UtilTime.elapsed(_weakness.get(ent), 1000))
|
||||
continue;
|
||||
|
||||
weaknessIter.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public void collide(Player damager, LivingEntity damagee)
|
||||
{
|
||||
//Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(damagee, damager, null,
|
||||
DamageCause.CUSTOM, 6, false, true, false,
|
||||
damager.getName(), GetName());
|
||||
|
||||
UtilAction.velocity(damagee, UtilAlg.getTrajectory2d(damagee, damager), 1.6, false, 0, 1.2, 1.8, true);
|
||||
|
||||
UtilAction.zeroVelocity(damager);
|
||||
|
||||
damager.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_HURT, 1f, 0.7f);
|
||||
|
||||
_weakness.put(damagee, System.currentTimeMillis());
|
||||
|
||||
//Inform
|
||||
UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName()) + "."));
|
||||
UtilPlayer.message(damagee, F.main("Game", F.name(damager.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
|
||||
Recharge.Instance.recharge(damager, GetName());
|
||||
Recharge.Instance.use(damager, GetName(), 2000, true, true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void arrowDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetProjectile() == null)
|
||||
return;
|
||||
|
||||
if (!(event.GetProjectile() instanceof Arrow))
|
||||
return;
|
||||
|
||||
if (!_weakness.containsKey(event.GetDamageeEntity()))
|
||||
return;
|
||||
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
if (damager == null) return;
|
||||
|
||||
if (!Kit.HasKit(damager))
|
||||
return;
|
||||
|
||||
if (!Manager.IsAlive(damager))
|
||||
return;
|
||||
|
||||
event.AddMult(GetName(), GetName() + " Combo", 2, true);
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.RED_DUST, event.GetDamageeEntity().getLocation(), 0.5f, 0.5f, 0.5f, 0, 20,
|
||||
ViewDist.MAX, UtilServer.getPlayers());
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, event.GetDamageeEntity().getLocation(), 0, 0, 0, 0, 1,
|
||||
ViewDist.MAX, UtilServer.getPlayers());
|
||||
|
||||
damager.getWorld().playSound(damager.getLocation(), Sound.ZOMBIE_HURT, 1f, 2f);
|
||||
}
|
||||
}
|
@ -0,0 +1,150 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.zombie;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.game.games.smash.TeamSuperSmash;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
import nautilus.game.arcade.kit.perks.data.NightLivingDeadData;
|
||||
|
||||
public class PerkNightLivingDead extends SmashPerk
|
||||
{
|
||||
private ArrayList<NightLivingDeadData> _night = new ArrayList<NightLivingDeadData>();
|
||||
|
||||
private HashSet<Material> _ignoreList = new HashSet<Material>();;
|
||||
|
||||
public PerkNightLivingDead()
|
||||
{
|
||||
super("Night of the Living Dead", new String[]
|
||||
{
|
||||
}, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addSuperCustom(Player player)
|
||||
{
|
||||
_night.add(new NightLivingDeadData(player));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void timeUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
if (_night.isEmpty() && Manager.GetGame().WorldTimeSet != 12000)
|
||||
{
|
||||
Manager.GetGame().WorldTimeSet = (Manager.GetGame().WorldTimeSet + 50)%24000;
|
||||
}
|
||||
else if (!_night.isEmpty() && Manager.GetGame().WorldTimeSet != 18000)
|
||||
{
|
||||
Manager.GetGame().WorldTimeSet = (Manager.GetGame().WorldTimeSet + 50)%24000;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
Iterator<NightLivingDeadData> nightIter = _night.iterator();
|
||||
|
||||
while (nightIter.hasNext())
|
||||
{
|
||||
NightLivingDeadData data = nightIter.next();
|
||||
|
||||
//Expire
|
||||
if (UtilTime.elapsed(data.Time, 30000))
|
||||
{
|
||||
nightIter.remove();
|
||||
|
||||
for (Zombie zombie : data.Zombies)
|
||||
zombie.damage(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
//Spawn
|
||||
if (UtilTime.elapsed(data.LastSpawn, 1000))
|
||||
{
|
||||
Location origin = UtilAlg.Random(Manager.GetGame().GetPlayers(true)).getLocation();
|
||||
Location loc = findSpawn(origin);
|
||||
|
||||
if (Math.abs(loc.getY() - origin.getY()) > 6)
|
||||
continue;
|
||||
|
||||
if (!UtilBlock.airFoliage(loc.getBlock()) || !UtilBlock.airFoliage(loc.getBlock().getRelative(BlockFace.UP)))
|
||||
continue;
|
||||
|
||||
//Set Spawned
|
||||
data.LastSpawn = System.currentTimeMillis();
|
||||
|
||||
//Move Down
|
||||
loc.subtract(0, 1, 0);
|
||||
|
||||
//Spawn
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
Zombie zombie = loc.getWorld().spawn(loc, Zombie.class);
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
data.Zombies.add(zombie);
|
||||
|
||||
//Pop up
|
||||
zombie.setVelocity(new Vector(0,0.4,0));
|
||||
//zombie.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 9999, 1, true));
|
||||
|
||||
//Effect
|
||||
zombie.getWorld().playSound(zombie.getLocation(), Sound.ZOMBIE_IDLE, 1f, 0.75f);
|
||||
|
||||
loc.getWorld().playEffect(loc, Effect.STEP_SOUND, loc.getBlock().getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(EntityTargetEvent event)
|
||||
{
|
||||
for (NightLivingDeadData data : _night)
|
||||
{
|
||||
if (data.Zombies.contains(event.getEntity()))
|
||||
{
|
||||
if (Manager.GetGame() instanceof TeamSuperSmash && event.getTarget() instanceof Player)
|
||||
{
|
||||
TeamSuperSmash smash = (TeamSuperSmash) Manager.GetGame();
|
||||
Player targetPlayer = (Player) event.getTarget();
|
||||
|
||||
if (smash.GetTeam(data.Player).equals(smash.GetTeam(targetPlayer)))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
if (data.Player.equals(event.getTarget()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Location findSpawn(Location area)
|
||||
{
|
||||
return UtilBlock.getHighest(area.getWorld(), (int)(area.getX() + Math.random() * 24 - 12), (int)(area.getZ() + Math.random() * 24 - 12), _ignoreList).getLocation().add(0.5, 0.5, 0.5);
|
||||
}
|
||||
}
|
@ -0,0 +1,252 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.zombie;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkOvercharge extends SmashPerk
|
||||
{
|
||||
private Map<UUID, Integer> _charge = new HashMap<>();
|
||||
private Map<UUID, Long> _chargeLast = new HashMap<>();
|
||||
|
||||
private Map<Arrow, Integer> _arrows = new HashMap<>();
|
||||
|
||||
private int _max;
|
||||
private long _tick;
|
||||
private boolean _useExp;
|
||||
|
||||
public PerkOvercharge(int max, long tick, boolean useExpBar)
|
||||
{
|
||||
super("Corrupted Arrow", new String[] { C.cYellow + "Charge" + C.cGray + " your Bow to use " + C.cGreen + "Corrupted Arrow" });
|
||||
|
||||
_useExp = useExpBar;
|
||||
_max = max;
|
||||
_tick = tick;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void drawBow(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (player.getItemInHand() == null || player.getItemInHand().getType() != Material.BOW)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.getInventory().contains(Material.ARROW))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Start Charge
|
||||
_charge.put(player.getUniqueId(), 0);
|
||||
_chargeLast.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void charge(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player cur : UtilServer.getPlayers())
|
||||
{
|
||||
UUID uuid = cur.getUniqueId();
|
||||
|
||||
// Not Charging
|
||||
if (!_charge.containsKey(uuid))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Max Charge
|
||||
if (_charge.get(uuid) >= _max)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Charge Interval
|
||||
if (_charge.get(uuid) == 0)
|
||||
{
|
||||
if (!UtilTime.elapsed(_chargeLast.get(uuid), 1000))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!UtilTime.elapsed(_chargeLast.get(uuid), _tick))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// No Longer Holding Bow
|
||||
if (cur.getItemInHand() == null || cur.getItemInHand().getType() != Material.BOW)
|
||||
{
|
||||
if (_useExp)
|
||||
{
|
||||
cur.setExp(0f);
|
||||
}
|
||||
|
||||
_charge.remove(uuid);
|
||||
_chargeLast.remove(uuid);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Increase Charge
|
||||
_charge.put(uuid, _charge.get(cur) + 1);
|
||||
|
||||
if (_useExp)
|
||||
{
|
||||
cur.setExp(Math.min(0.99f, _charge.get(cur) / _max));
|
||||
}
|
||||
|
||||
_chargeLast.put(uuid, System.currentTimeMillis());
|
||||
|
||||
// Effect
|
||||
cur.playSound(cur.getLocation(), Sound.CLICK, 1f, 1f + (0.1f * _charge.get(cur)));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void fireBow(EntityShootBowEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Manager.GetGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getProjectile() instanceof Arrow))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (!_charge.containsKey(player.getUniqueId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int charge = _charge.remove(player.getUniqueId());
|
||||
|
||||
if (charge <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Start Barrage
|
||||
_arrows.put((Arrow) event.getProjectile(), charge);
|
||||
|
||||
player.setExp(0f);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void damageBonus(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetProjectile() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_arrows.containsKey(event.GetProjectile()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int charge = _arrows.remove(event.GetProjectile());
|
||||
|
||||
event.AddMod(GetName(), GetName(), charge * 0.9, true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clean(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Iterator<Arrow> arrowIterator = _arrows.keySet().iterator(); arrowIterator.hasNext();)
|
||||
{
|
||||
Arrow arrow = arrowIterator.next();
|
||||
|
||||
if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround() || arrow.getTicksLived() > 120)
|
||||
{
|
||||
arrowIterator.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
UtilParticle.PlayParticle(ParticleType.RED_DUST, arrow.getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void quit(PlayerQuitEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
_charge.remove(player.getUniqueId());
|
||||
_chargeLast.remove(player.getUniqueId());
|
||||
}
|
||||
}
|
@ -0,0 +1,189 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.zombie;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkZombieBile extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private static final int COOLDOWN = 10000;
|
||||
|
||||
private Map<UUID, Long> _active = new HashMap<>();
|
||||
|
||||
public PerkZombieBile()
|
||||
{
|
||||
super("Spew Bile", new String[] { C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Spew Bile" });
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_active.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
|
||||
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void deactivateDeath(PlayerDeathEvent event)
|
||||
{
|
||||
if (!hasPerk(event.getEntity()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_active.remove(event.getEntity().getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<UUID> activeIter = _active.keySet().iterator();
|
||||
|
||||
while (activeIter.hasNext())
|
||||
{
|
||||
UUID uuid = activeIter.next();
|
||||
Player player = UtilPlayer.searchExact(uuid);
|
||||
|
||||
// Expire
|
||||
if (UtilTime.elapsed(_active.get(player.getUniqueId()), 2000))
|
||||
{
|
||||
activeIter.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Sound
|
||||
if (Math.random() > 0.85)
|
||||
{
|
||||
player.getWorld().playSound(player.getLocation(), Sound.BURP, 1f, (float) (Math.random() + 0.5));
|
||||
}
|
||||
|
||||
// Projectiles
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
Vector rand = new Vector((Math.random() - 0.5) * 0.525, (Math.random() - 0.5) * 0.525, (Math.random() - 0.5) * 0.525);
|
||||
|
||||
Item ent = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()).subtract(0, 0.5, 0), new ItemStack(Material.ROTTEN_FLESH));
|
||||
UtilAction.velocity(ent, player.getLocation().getDirection().add(rand), 0.8, false, 0, 0.2, 10, false);
|
||||
Manager.GetProjectile().AddThrow(ent, player, this, System.currentTimeMillis() + 2000, true, true, true, false, 0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void death(PlayerDeathEvent event)
|
||||
{
|
||||
if (_active.containsKey(event.getEntity()))
|
||||
{
|
||||
_active.remove(event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
|
||||
if (target == null)
|
||||
return;
|
||||
|
||||
if (target instanceof Player)
|
||||
if (!Manager.GetGame().IsAlive((Player) target))
|
||||
return;
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, 3, true, false, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
|
||||
data.getThrown().remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
return;
|
||||
|
||||
event.AddKnockback(GetName(), 1);
|
||||
}
|
||||
}
|
@ -12,7 +12,6 @@ import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
@ -22,6 +21,9 @@ import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
@ -35,11 +37,15 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.TeamSuperSmash;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private static final long COOLDOWN = 6000;
|
||||
private static final float ENERGY_PER_TICK = 0.004F;
|
||||
private static final int KNOCKBACK_MAGNITUDE = 3;
|
||||
|
||||
private Map<UUID, Long> _charge = new HashMap<>();
|
||||
private Map<Slime, UUID> _owner = new HashMap<>();
|
||||
private Map<Slime, Long> _lastAttack = new HashMap<>();
|
||||
@ -60,11 +66,15 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
int size = 1;
|
||||
if (player.getExp() > 0.8)
|
||||
{
|
||||
@ -84,9 +94,11 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
}
|
||||
|
||||
if (player.isBlocking())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp((float) Math.min(0.999, player.getExp() + 0.004));
|
||||
player.setExp((float) Math.min(0.999, player.getExp() + ENERGY_PER_TICK));
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,46 +106,69 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
|
||||
if (!event.getPlayer().getItemInHand().getType().toString().contains("_SWORD"))
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSword(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
{
|
||||
return;
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), 6000, true, true))
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
UtilPlayer.message(player, F.main("Skill", "You are charging " + F.skill(GetName()) + "."));
|
||||
|
||||
_charge.put(player, System.currentTimeMillis());
|
||||
_charge.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void ChargeRelease(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
|
||||
Iterator<Player> chargeIterator = _charge.keySet().iterator();
|
||||
}
|
||||
|
||||
Iterator<UUID> chargeIterator = _charge.keySet().iterator();
|
||||
|
||||
while (chargeIterator.hasNext())
|
||||
{
|
||||
Player player = chargeIterator.next();
|
||||
UUID key = chargeIterator.next();
|
||||
Player player = UtilPlayer.searchExact(key);
|
||||
|
||||
long time = _charge.get(player);
|
||||
if (player == null)
|
||||
{
|
||||
chargeIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
long time = _charge.get(key);
|
||||
|
||||
// Charge
|
||||
if (player.isBlocking())
|
||||
@ -178,7 +213,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
|
||||
public void FireRocket(Player player)
|
||||
{
|
||||
double charge = Math.min(3, (double) (System.currentTimeMillis() - _charge.get(player)) / 1000d);
|
||||
double charge = Math.min(3, (double) (System.currentTimeMillis() - _charge.get(player.getUniqueId())) / 1000d);
|
||||
|
||||
// Spawn Slime
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
@ -192,7 +227,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
slime.setMaxHealth(5 + charge * 7);
|
||||
slime.setHealth(slime.getMaxHealth());
|
||||
|
||||
_owner.put(slime, player);
|
||||
_owner.put(slime, player.getUniqueId());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Skill", "You released " + F.skill(GetName()) + "."));
|
||||
@ -209,19 +244,21 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
public void SlimeTarget(EntityTargetEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
if (!_owner.containsKey(event.getEntity()))
|
||||
return;
|
||||
|
||||
if (Manager.GetGame() instanceof TeamSuperSmash && event.getTarget() instanceof Player)
|
||||
{
|
||||
TeamSuperSmash smash = (TeamSuperSmash) Manager.GetGame();
|
||||
Player targetPlayer = (Player) event.getTarget();
|
||||
|
||||
if (smash.GetTeam(_owner.get(event.getEntity())).equals(smash.GetTeam(targetPlayer)))
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_owner.containsKey(event.getEntity()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) event.getTarget(), UtilPlayer.searchExact(_owner.get(event.getEntity().getUniqueId()))))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -235,20 +272,23 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(data.getThrown() instanceof Slime))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Slime slime = (Slime) data.getThrown();
|
||||
|
||||
if (Manager.GetGame() instanceof TeamSuperSmash && target instanceof Player && data.getThrower() instanceof Player)
|
||||
if (target instanceof Player && data.getThrower() instanceof Player)
|
||||
{
|
||||
TeamSuperSmash smash = (TeamSuperSmash) Manager.GetGame();
|
||||
Player targetPlayer = (Player) target;
|
||||
Player throwerPlayer = (Player) data.getThrower();
|
||||
|
||||
if (smash.GetTeam(targetPlayer).equals(smash.GetTeam(throwerPlayer)))
|
||||
if (isTeamDamage(targetPlayer, throwerPlayer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -262,9 +302,11 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), 3.0);
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -297,19 +339,18 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
_lastAttack.put(slime, System.currentTimeMillis());
|
||||
|
||||
// Get Owner
|
||||
Player owner = _owner.get(slime);
|
||||
// if (owner != null)
|
||||
// event.SetDamager(owner); This gives knockback from wrong direction :(
|
||||
UUID key = _owner.get(slime);
|
||||
Player owner = UtilPlayer.searchExact(key);
|
||||
|
||||
if (Manager.GetGame() instanceof TeamSuperSmash)
|
||||
if (owner == null)
|
||||
{
|
||||
TeamSuperSmash smash = (TeamSuperSmash) Manager.GetGame();
|
||||
return;
|
||||
}
|
||||
|
||||
if (smash.GetTeam(owner).equals(smash.GetTeam(event.GetDamageePlayer())))
|
||||
{
|
||||
event.SetCancelled("Team Damage");
|
||||
return;
|
||||
}
|
||||
if (isTeamDamage(owner, event.GetDamageePlayer()))
|
||||
{
|
||||
event.SetCancelled("Team Damage");
|
||||
return;
|
||||
}
|
||||
|
||||
if (owner != null && owner.equals(event.GetDamageeEntity()))
|
||||
@ -328,7 +369,9 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
public void SlimeClean(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<Slime> slimeIterator = _owner.keySet().iterator();
|
||||
|
||||
@ -346,14 +389,20 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
Manager.GetBlood().Effects(null, slime.getLocation(), 6 + 6 * slime.getSize(), 0.2 + 0.1 * slime.getSize(), null, 1f, 1f, Material.SLIME_BALL, (byte) 0, 15, false);
|
||||
|
||||
if (slime.getSize() <= 1)
|
||||
{
|
||||
slime.remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
slime.setSize(slime.getSize() - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!slime.isValid())
|
||||
{
|
||||
slimeIterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
slimeIterator = _lastAttack.keySet().iterator();
|
||||
@ -363,7 +412,9 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
Slime slime = slimeIterator.next();
|
||||
|
||||
if (!slime.isValid())
|
||||
{
|
||||
slimeIterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
@ -15,6 +17,7 @@ import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
@ -23,67 +26,77 @@ import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSpiderLeap extends Perk
|
||||
{
|
||||
private HashSet<Player> _secondJump = new HashSet<Player>();
|
||||
|
||||
public PerkSpiderLeap()
|
||||
private static final float ENERGY_PER_TICK = 1 / 80;
|
||||
private static final float ENERGY_PER_LEAP = 1 / 6;
|
||||
|
||||
private Set<UUID> _secondJump = new HashSet<>();
|
||||
|
||||
public PerkSpiderLeap()
|
||||
{
|
||||
super("Spider Leap", new String[]
|
||||
{
|
||||
C.cYellow + "Tap Jump Twice" + C.cGray + " to " + C.cGreen + "Spider Leap",
|
||||
C.cYellow + "Hold Crouch" + C.cGray + " to " + C.cGreen + "Wall Climb",
|
||||
C.cWhite + "Wall Climb requires Energy (Experience Bar)."
|
||||
|
||||
});
|
||||
super("Spider Leap", new String[] { C.cYellow + "Tap Jump Twice" + C.cGray + " to " + C.cGreen + "Spider Leap", C.cYellow + "Hold Crouch" + C.cGray + " to " + C.cGreen + "Wall Climb", C.cWhite
|
||||
+ "Wall Climb requires Energy (Experience Bar)."
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void WallClimb(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!player.isSneaking())
|
||||
{
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)))
|
||||
{
|
||||
player.setExp((float) Math.min(0.999, player.getExp()+(1f/80f)));
|
||||
_secondJump.remove(player);
|
||||
player.setExp((float) Math.min(0.999, player.getExp() + ENERGY_PER_TICK));
|
||||
_secondJump.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp((float) Math.max(0, player.getExp()-(1f/80f)));
|
||||
|
||||
|
||||
player.setExp((float) Math.max(0, player.getExp() - ENERGY_PER_TICK));
|
||||
|
||||
if (player.getExp() <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.usable(player, GetName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Block block : UtilBlock.getSurrounding(player.getLocation().getBlock(), true))
|
||||
{
|
||||
if (!UtilBlock.airFoliage(block) && !block.isLiquid())
|
||||
{
|
||||
UtilAction.velocity(player, new Vector(0, 0.2, 0));
|
||||
|
||||
if (!_secondJump.contains(player))
|
||||
|
||||
if (!_secondJump.contains(player.getUniqueId()))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
_secondJump.add(player);
|
||||
_secondJump.add(player.getUniqueId());
|
||||
}
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,37 +104,45 @@ public class PerkSpiderLeap extends Perk
|
||||
public void FlightHop(PlayerToggleFlightEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Manager.isSpectator(player))
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
player.setFlying(false);
|
||||
|
||||
//Disable Flight
|
||||
|
||||
// Disable Flight
|
||||
player.setAllowFlight(false);
|
||||
|
||||
if (player.getExp() < (1f/6f))
|
||||
|
||||
if (player.getExp() < ENERGY_PER_LEAP)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//Velocity
|
||||
// Velocity
|
||||
UtilAction.velocity(player, 1.0, 0.2, 1.0, true);
|
||||
|
||||
//Energy
|
||||
player.setExp((float) Math.max(0, player.getExp()-(1f/6f)));
|
||||
|
||||
//Sound
|
||||
|
||||
// Energy
|
||||
player.setExp((float) Math.max(0, player.getExp() - ENERGY_PER_LEAP));
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.SPIDER_IDLE, 1f, 1.5f);
|
||||
|
||||
|
||||
Recharge.Instance.use(player, GetName(), 500, false, false);
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void FlightUpdate(UpdateEvent event)
|
||||
{
|
||||
@ -130,14 +151,20 @@ public class PerkSpiderLeap extends Perk
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user