Merge branch 'master' of ssh://dev.mineplex.com:7999/min/Mineplex

Conflicts:
	Plugins/Mineplex.Hub/src/mineplex/hub/gadget/gadgets/Halloween2013_BatGun.java
	Plugins/Mineplex.Hub/src/mineplex/hub/gadget/gadgets/Halloween2013_Helmet.java
	Plugins/Mineplex.Hub/src/mineplex/hub/gadget/types/ArmorGadget.java
	Plugins/Mineplex.Hub/src/mineplex/hub/gadget/types/Gadget.java
	Plugins/Mineplex.Hub/src/mineplex/hub/gadget/types/ItemGadget.java
	Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/MobGhast.java
This commit is contained in:
Jonathan Williams 2013-10-26 08:53:38 -05:00
commit 9bc9cc2bb8
60 changed files with 1456 additions and 347 deletions

View File

@ -2,6 +2,7 @@ package mineplex.core.common.util;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import mineplex.core.common.util.UtilParticle.ParticleType;
import net.minecraft.server.v1_6_R3.Packet63WorldParticles; import net.minecraft.server.v1_6_R3.Packet63WorldParticles;
import org.bukkit.Location; import org.bukkit.Location;
@ -104,4 +105,10 @@ public class UtilParticle
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
} }
public static void PlayParticle(ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count)
{
for (Player player : UtilServer.getPlayers())
PlayParticle(player, type, location, offsetX, offsetY, offsetZ, speed, count);
}
} }

View File

@ -291,8 +291,7 @@ public class Explosion extends MiniPlugin
blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData())); blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData()));
if (cur.getTypeId() != 98 || cur.getData() != 0) cur.setType(Material.AIR);
cur.setType(Material.AIR);
} }
//DELAY //DELAY

View File

@ -1,12 +1,5 @@
package mineplex.hub; package mineplex.hub;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.HashMap; import java.util.HashMap;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -46,6 +39,7 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilWorld;
import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.DisguiseManager;
@ -87,11 +81,9 @@ public class HubManager extends MiniClientPlugin<HubClient>
private String _pigStacker = "0 - Nobody"; private String _pigStacker = "0 - Nobody";
public String DragonTextA = "Mineplex";
public String DragonTextB = "";
private boolean _shuttingDown; private boolean _shuttingDown;
private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, DonationManager donationManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager) public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, DonationManager donationManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager)
{ {
@ -121,50 +113,6 @@ public class HubManager extends MiniClientPlugin<HubClient>
_partyManager = partyManager; _partyManager = partyManager;
_tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator); _tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator);
_visibilityManager = new VisibilityManager(this); _visibilityManager = new VisibilityManager(this);
DragonTextB = GetDragonText();
}
public String GetDragonText()
{
File file = new File("DragonText.dat");
//Write If Blank
if (!file.exists())
{
try
{
FileWriter fstream = new FileWriter(file);
BufferedWriter out = new BufferedWriter(fstream);
out.write("Home of Premium Game Modes");
out.close();
}
catch (Exception e)
{
System.out.println("Error: Game World GetId Write Exception");
}
}
String line = "Home of Premium Game Modes";
//Read
try
{
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
line = br.readLine();
in.close();
}
catch (Exception e)
{
System.out.println("Error: Game World GetId Read Exception");
}
return line;
} }
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
@ -322,6 +270,8 @@ public class HubManager extends MiniClientPlugin<HubClient>
player.getScoreboard().resetScores(event.getPlayer()); player.getScoreboard().resetScores(event.getPlayer());
_scoreboards.remove(event.getPlayer()); _scoreboards.remove(event.getPlayer());
_portalTime.remove(event.getPlayer().getName());
} }
@EventHandler @EventHandler
@ -631,4 +581,23 @@ public class HubManager extends MiniClientPlugin<HubClient>
} }
} }
} }
public void SetPortalDelay(Entity ent)
{
if (ent instanceof Player)
_portalTime.put(((Player)ent).getName(), System.currentTimeMillis());
}
public boolean CanPortal(Player player)
{
//Riding
if (player.getVehicle() != null || player.getPassenger() != null)
return false;
//Portal Delay
if (!_portalTime.containsKey(player.getName()))
return true;
return UtilTime.elapsed(_portalTime.get(player.getName()), 5000);
}
} }

View File

@ -8,6 +8,7 @@ import mineplex.core.MiniPlugin;
import mineplex.hub.HubManager; import mineplex.hub.HubManager;
import mineplex.hub.gadget.gadgets.Halloween2013_BatGun; import mineplex.hub.gadget.gadgets.Halloween2013_BatGun;
import mineplex.hub.gadget.gadgets.Halloween2013_Helmet; import mineplex.hub.gadget.gadgets.Halloween2013_Helmet;
import mineplex.hub.gadget.gadgets.PaintballGun;
import mineplex.hub.gadget.types.ArmorGadget; import mineplex.hub.gadget.types.ArmorGadget;
import mineplex.hub.gadget.types.ArmorGadget.ArmorSlot; import mineplex.hub.gadget.types.ArmorGadget.ArmorSlot;
import mineplex.hub.gadget.types.Gadget; import mineplex.hub.gadget.types.Gadget;
@ -32,6 +33,10 @@ public class GadgetManager extends MiniPlugin
{ {
_gadgets = new HashSet<Gadget>(); _gadgets = new HashSet<Gadget>();
//Items
_gadgets.add(new PaintballGun(this));
//Halloween 2013
_gadgets.add(new Halloween2013_BatGun(this)); _gadgets.add(new Halloween2013_BatGun(this));
_gadgets.add(new Halloween2013_Helmet(this)); _gadgets.add(new Halloween2013_Helmet(this));
} }

View File

@ -1,5 +1,9 @@
package mineplex.hub.gadget.gadgets; package mineplex.hub.gadget.gadgets;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Bat; import org.bukkit.entity.Bat;
@ -7,16 +11,40 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent; 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.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.recharge.Recharge; import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.gadget.GadgetManager; import mineplex.hub.gadget.GadgetManager;
import mineplex.hub.gadget.types.ItemGadget; import mineplex.hub.gadget.types.ItemGadget;
public class Halloween2013_BatGun extends ItemGadget public class Halloween2013_BatGun extends ItemGadget
{ {
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
private HashMap<Player, Location> _velocity = new HashMap<Player, Location>();
private HashMap<Player, ArrayList<Bat>> _bats = new HashMap<Player, ArrayList<Bat>>();
public Halloween2013_BatGun(GadgetManager manager) public Halloween2013_BatGun(GadgetManager manager)
{ {
super(manager, "Halloween2013_BatGun", "Bat Gun", 10000, Material.COAL_BLOCK, (byte)0); super(manager, "Gadget_Halloween2013_BatGun", "Bat Blaster", 10000, new String[]
{
C.cWhite + "Launch waves of annoying bats",
C.cWhite + "at people you don't like!",
},
Material.IRON_BARDING, (byte)0);
} }
@Override @Override
@ -29,12 +57,20 @@ public class Halloween2013_BatGun extends ItemGadget
public void Disable(Player player) public void Disable(Player player)
{ {
this.RemoveItem(player); this.RemoveItem(player);
Clear(player);
} }
@EventHandler @EventHandler
public void ItemUse(PlayerInteractEvent event) public void Activate(PlayerInteractEvent event)
{ {
if (event.getAction() == Action.PHYSICAL) if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!UtilGear.isMat(event.getPlayer().getItemInHand(), Material.IRON_BARDING))
return; return;
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -42,16 +78,94 @@ public class Halloween2013_BatGun extends ItemGadget
if (!IsActive(player)) if (!IsActive(player))
return; return;
if (!Recharge.Instance.use(player, GetName(), 10000, true)) if (!Recharge.Instance.use(player, GetName(), 8000, true))
return; return;
for (int i=0 ; i<10 ; i++) //Start
{ _velocity.put(player, player.getEyeLocation());
Bat bat = player.getWorld().spawn(player.getEyeLocation(), Bat.class); _active.put(player, System.currentTimeMillis());
bat.setVelocity(player.getLocation().getDirection().multiply(2));
}
player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, 2f, 1f); _bats.put(player, new ArrayList<Bat>());
player.getWorld().playSound(player.getLocation(), Sound.BAT_HURT, 2f, 1f);
for (int i=0 ; i<16 ; i++)
_bats.get(player).add(player.getWorld().spawn(player.getEyeLocation(), Bat.class));
//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())
{
if (!_active.containsKey(cur))
continue;
if (UtilTime.elapsed(_active.get(cur), 3000))
{
Clear(cur);
continue;
}
Location loc = _velocity.get(cur);
//Bat Movement
for (Bat bat : _bats.get(cur))
{
if (!bat.isValid())
continue;
Vector rand = new Vector((Math.random() - 0.5)/3, (Math.random() - 0.5)/3, (Math.random() - 0.5)/3);
bat.setVelocity(loc.getDirection().clone().multiply(0.5).add(rand));
for (Player other : UtilServer.getPlayers())
{
if (other.equals(cur))
continue;
if (!Recharge.Instance.usable(other, "Hit by Bat"))
continue;
if (UtilEnt.hitBox(bat.getLocation(), other, 2, null))
{
//Damage Event
UtilAction.velocity(other, UtilAlg.getTrajectory(cur, other), 0.4, false, 0, 0.2, 10, true);
//Effect
bat.getWorld().playSound(bat.getLocation(), Sound.BAT_HURT, 1f, 1f);
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3);
bat.remove();
//Recharge on hit
Recharge.Instance.useForce(other, "Hit by Bat", 200);
//No Portal
Manager.Manager.SetPortalDelay(other);
}
}
}
}
}
public void Clear(Player player)
{
_active.remove(player);
_velocity.remove(player);
if (_bats.containsKey(player))
{
for (Bat bat : _bats.get(player))
{
if (bat.isValid())
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3);
bat.remove();
}
_bats.remove(player);
}
} }
} }

View File

@ -3,9 +3,8 @@ package mineplex.hub.gadget.gadgets;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.disguise.disguises.DisguiseSkeleton; import mineplex.core.disguise.disguises.DisguiseSkeleton;
import mineplex.hub.gadget.GadgetManager; import mineplex.hub.gadget.GadgetManager;
@ -15,7 +14,16 @@ public class Halloween2013_Helmet extends ArmorGadget
{ {
public Halloween2013_Helmet(GadgetManager manager) public Halloween2013_Helmet(GadgetManager manager)
{ {
super(manager, "Halloween2013_Helmet", "Pumpkin Kings Head", -1, ArmorSlot.Helmet, Material.PUMPKIN, (byte)0); super(manager, "Gadget_Halloween2013_Helmet", "Pumpkin Kings Head", new String[]
{
C.cWhite + "Transforms the wearer into",
C.cWhite + "the dreaded Pumpkin King!",
"",
C.cYellow + "Earned by defeating the Pumpkin King",
C.cYellow + "in the 2013 Halloween Horror Event.",
},
ArmorSlot.Helmet, Material.PUMPKIN, (byte)0);
} }
@Override @Override
@ -50,12 +58,5 @@ public class Halloween2013_Helmet extends ArmorGadget
Manager.Manager.GetDisguise().undisguise(player); Manager.Manager.GetDisguise().undisguise(player);
} }
@EventHandler
public void TOGGLE(PlayerDropItemEvent event)
{
if (!this.IsActive(event.getPlayer()))
Enable(event.getPlayer());
else
Disable(event.getPlayer());
}
} }

View File

@ -0,0 +1,113 @@
package mineplex.hub.gadget.gadgets;
import java.util.HashSet;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.recharge.Recharge;
import mineplex.hub.gadget.GadgetManager;
import mineplex.hub.gadget.types.ItemGadget;
public class PaintballGun extends ItemGadget
{
private HashSet<Projectile> _balls = new HashSet<Projectile>();
public PaintballGun(GadgetManager manager)
{
super(manager, "Gadget_PaintballGun", "Paintball Gun", new String[]
{
C.cWhite + "PEW PEW PEW PEW!",
},
Material.GOLD_BARDING, (byte)0);
}
@Override
public void Enable(Player player)
{
this.ApplyItem(player);
}
@Override
public void Disable(Player player)
{
this.RemoveItem(player);
}
@EventHandler
public void Shoot(PlayerInteractEvent event)
{
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (event.getPlayer().getItemInHand().getType() != Material.GOLD_BARDING)
return;
Player player = event.getPlayer();
if (!IsActive(player))
return;
if (!Recharge.Instance.use(player, GetName(), 400, false))
return;
event.setCancelled(true);
Projectile proj = player.launchProjectile(EnderPearl.class);
proj.setVelocity(proj.getVelocity().multiply(2));
_balls.add(proj);
//Sound
player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 1.5f, 1.2f);
}
@EventHandler
public void Paint(ProjectileHitEvent event)
{
Location loc = event.getEntity().getLocation().add(event.getEntity().getVelocity());
byte color = 2;
double r = Math.random();
if (r > 0.8) color = 4;
else if (r > 0.6) color = 5;
else if (r > 0.4) color = 9;
else if (r > 0.2) color = 14;
for (Block block : UtilBlock.getInRadius(loc, 1.5d).keySet())
{
if (!UtilBlock.solid(block))
continue;
Manager.Manager.GetBlockRestore().Add(block, 35, color, 4000);
}
loc.getWorld().playEffect(loc, Effect.STEP_SOUND, 49);
}
@EventHandler
public void Teleport(PlayerTeleportEvent event)
{
if (event.getCause() == TeleportCause.ENDER_PEARL)
event.setCancelled(true);
}
}

View File

@ -22,15 +22,17 @@ public abstract class ArmorGadget extends Gadget
private Material _material; private Material _material;
private byte _data; private byte _data;
public ArmorGadget(GadgetManager manager, String code, String name, int cost, ArmorSlot slot, Material mat, byte data) public ArmorGadget(GadgetManager manager, String code, String name, String[] desc, ArmorSlot slot, Material mat, byte data)
{ {
super(manager, code, name, cost); super(manager, code, name, desc);
_slot = slot; _slot = slot;
_material = mat; _material = mat;
_data = data; _data = data;
} }
public ArmorSlot GetSlot() public ArmorSlot GetSlot()
{ {
return _slot; return _slot;

View File

@ -19,15 +19,15 @@ public abstract class Gadget implements Listener
private String _code; private String _code;
private String _name; private String _name;
private int _cost; private String[] _desc;
public Gadget(GadgetManager manager, String code, String name, int cost) public Gadget(GadgetManager manager, String code, String name, String[] desc)
{ {
Manager = manager; Manager = manager;
_code = code; _code = code;
_name = name; _name = name;
_cost = cost; _desc = desc;
Manager.GetPlugin().getServer().getPluginManager().registerEvents(this, Manager.GetPlugin()); Manager.GetPlugin().getServer().getPluginManager().registerEvents(this, Manager.GetPlugin());
} }
@ -37,16 +37,16 @@ public abstract class Gadget implements Listener
return _name; return _name;
} }
public String[] GetDesc()
{
return _desc;
}
public String GetCode() public String GetCode()
{ {
return _code; return _code;
} }
public int getCost()
{
return _cost;
}
public HashSet<Player> GetOwners() public HashSet<Player> GetOwners()
{ {
return _owners; return _owners;

View File

@ -16,9 +16,9 @@ public abstract class ItemGadget extends Gadget
private Material _material; private Material _material;
private byte _data; private byte _data;
public ItemGadget(GadgetManager manager, String code, String name, int cost, Material mat, byte data) public ItemGadget(GadgetManager manager, String code, String name, String[] desc, Material mat, byte data)
{ {
super(manager, code, name, cost); super(manager, code, name, desc);
_material = mat; _material = mat;
_data = data; _data = data;
@ -38,7 +38,7 @@ public abstract class ItemGadget extends Gadget
{ {
Manager.RemoveItem(player); Manager.RemoveItem(player);
player.getInventory().setItem(3, ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName()))); player.getInventory().setItem(2, ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
_active.add(player); _active.add(player);
@ -47,7 +47,7 @@ public abstract class ItemGadget extends Gadget
public void RemoveItem(Player player) public void RemoveItem(Player player)
{ {
player.getInventory().setItem(3, null); player.getInventory().setItem(2, null);
_active.remove(player); _active.remove(player);

View File

@ -33,10 +33,12 @@ public class NewsManager extends MiniPlugin
{ {
"New Game: " + C.cGold + C.Bold + "Halloween Horror" + ChatColor.RESET + "! Limited time!", "New Game: " + C.cGold + C.Bold + "Halloween Horror" + ChatColor.RESET + "! Limited time!",
"New Super Smash Mobs Kit: " + C.cYellow + C.Bold + "Witch" + ChatColor.RESET + "!", "New Super Smash Mobs Kit: " + C.cYellow + C.Bold + "Witch" + ChatColor.RESET + "!",
"New Halloween Hub Items! Limited time to unlock!", "Halloween Hub Items! Limited time to unlock!",
"New Hub Mount: " + C.cYellow + C.Bold + "Horse of Horror" + ChatColor.RESET + "!", "Halloween Sale! " + C.cGreen + C.Bold + "50% OFF" + ChatColor.RESET + " everything!",
"New Hub Mount: " + C.cYellow + C.Bold + "Infernal Horror" + ChatColor.RESET + "!",
"New Hub Gadget: " + C.cYellow + C.Bold + "Pumpkin Kings Head" + ChatColor.RESET + "!", "New Hub Gadget: " + C.cYellow + C.Bold + "Pumpkin Kings Head" + ChatColor.RESET + "!",
"New Hub Gadget: " + C.cYellow + C.Bold + "Bat Cannon" + ChatColor.RESET + "!", "New Hub Gadget: " + C.cYellow + C.Bold + "Bat Blaster" + ChatColor.RESET + "!",
"Halloween Sale! " + C.cGreen + C.Bold + "50% OFF" + ChatColor.RESET + " everything!",
}; };
} }

View File

@ -1,6 +1,5 @@
package mineplex.hub.modules; package mineplex.hub.modules;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import org.bukkit.GameMode; import org.bukkit.GameMode;
@ -26,7 +25,6 @@ import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.projectile.IThrown; import mineplex.core.projectile.IThrown;
@ -44,7 +42,7 @@ public class StackerManager extends MiniPlugin implements IThrown
private HashSet<Player> _disabled = new HashSet<Player>(); private HashSet<Player> _disabled = new HashSet<Player>();
private HashSet<Entity> _tempStackShift = new HashSet<Entity>(); private HashSet<Entity> _tempStackShift = new HashSet<Entity>();
private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
private int _slot = 7; private int _slot = 7;
@ -97,7 +95,6 @@ public class StackerManager extends MiniPlugin implements IThrown
{ {
_disabled.remove(event.getPlayer()); _disabled.remove(event.getPlayer());
_tempStackShift.remove(event.getPlayer()); _tempStackShift.remove(event.getPlayer());
_portalTime.remove(event.getPlayer().getName());
} }
public boolean CanStack(LivingEntity ent) public boolean CanStack(LivingEntity ent)
@ -192,8 +189,8 @@ public class StackerManager extends MiniPlugin implements IThrown
UtilPlayer.message(stackee, F.main("Stacker", "Push " + F.skill("Crouch") + " to escape!")); UtilPlayer.message(stackee, F.main("Stacker", "Push " + F.skill("Crouch") + " to escape!"));
//Portal Delay //Portal Delay
SetPortalDelay(stacker); Manager.SetPortalDelay(stacker);
SetPortalDelay(stackee); Manager.SetPortalDelay(stackee);
event.setCancelled(true); event.setCancelled(true);
} }
@ -252,8 +249,8 @@ public class StackerManager extends MiniPlugin implements IThrown
_projectileManager.AddThrow(throwee, thrower, this, -1, true, false, true, false, 2.4d); _projectileManager.AddThrow(throwee, thrower, this, -1, true, false, true, false, 2.4d);
//Portal Delay //Portal Delay
SetPortalDelay(thrower); Manager.SetPortalDelay(thrower);
SetPortalDelay(throwee); Manager.SetPortalDelay(throwee);
} }
@Override @Override
@ -272,7 +269,7 @@ public class StackerManager extends MiniPlugin implements IThrown
while (rider != null) while (rider != null)
{ {
//Portal Delay //Portal Delay
SetPortalDelay(rider); Manager.SetPortalDelay(rider);
rider.leaveVehicle(); rider.leaveVehicle();
rider.setVelocity(new Vector(0.25 - Math.random()/2, Math.random()/2, 0.25 - Math.random()/2)); rider.setVelocity(new Vector(0.25 - Math.random()/2, Math.random()/2, 0.25 - Math.random()/2));
@ -285,7 +282,7 @@ public class StackerManager extends MiniPlugin implements IThrown
data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.HURT, 1f, 1f); data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.HURT, 1f, 1f);
//Portal Delay //Portal Delay
SetPortalDelay(target); Manager.SetPortalDelay(target);
} }
@Override @Override
@ -299,23 +296,4 @@ public class StackerManager extends MiniPlugin implements IThrown
{ {
} }
public void SetPortalDelay(Entity ent)
{
if (ent instanceof Player)
_portalTime.put(((Player)ent).getName(), System.currentTimeMillis());
}
public boolean CanPortal(Player player)
{
//Riding
if (player.getVehicle() != null || player.getPassenger() != null)
return false;
//Portal Delay
if (!_portalTime.containsKey(player.getName()))
return true;
return UtilTime.elapsed(_portalTime.get(player.getName()), 5000);
}
} }

View File

@ -38,6 +38,7 @@ public class Mount implements Listener
private String _code; private String _code;
private String _name; private String _name;
private String[] _desc;
private Color _color; private Color _color;
private Style _style; private Style _style;
@ -45,12 +46,13 @@ public class Mount implements Listener
private double _jump; private double _jump;
private Material _armor; private Material _armor;
public Mount(MountManager manager, String code, String name, Color color, Style style, Variant variant, double jump, Material armor) public Mount(MountManager manager, String code, String name, String[] desc, Color color, Style style, Variant variant, double jump, Material armor)
{ {
Manager = manager; Manager = manager;
_code = code; _code = code;
_name = name; _name = name;
_desc = desc;
_color = color; _color = color;
_style = style; _style = style;
_variant = variant; _variant = variant;
@ -65,6 +67,11 @@ public class Mount implements Listener
return _name; return _name;
} }
public String[] GetDesc()
{
return _desc;
}
public String GetCode() public String GetCode()
{ {
return _code; return _code;

View File

@ -11,6 +11,10 @@ public class Mule extends Mount
{ {
public Mule(MountManager manager) public Mule(MountManager manager)
{ {
super(manager, "MountMule", "Horse of Horror", Color.BLACK, Style.BLACK_DOTS, Variant.MULE, 1.0, null); super(manager, "Mount_Mule", "Horse of Horror", new String[]
{
"Muley muley!"
},
Color.BLACK, Style.BLACK_DOTS, Variant.MULE, 1.0, null);
} }
} }

View File

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.event.player.PlayerToggleSneakEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ParticleType;
@ -20,14 +21,13 @@ public class Undead extends Mount
{ {
public Undead(MountManager manager) public Undead(MountManager manager)
{ {
super(manager, "MountHalloween2013", "Horse of Horror", Color.BLACK, Style.BLACK_DOTS, Variant.SKELETON_HORSE, 0.8, null); super(manager, "Mount_Halloween2013", "Infernal Horror", new String[]
} {
C.cWhite + "The most ghastly horse in",
@EventHandler C.cWhite + "existance, from the pits of",
public void Test(PlayerToggleSneakEvent event) C.cWhite + "the Nether."
{ },
if (event.getPlayer().isSneaking()) Color.BLACK, Style.BLACK_DOTS, Variant.SKELETON_HORSE, 0.8, null);
this.Enable(event.getPlayer());
} }
@EventHandler @EventHandler
@ -65,4 +65,20 @@ public class Undead extends Mount
} }
} }
} }
@EventHandler
public void Toggle(PlayerToggleSneakEvent event)
{
if (event.getPlayer().isSneaking())
return;
if (IsActive(event.getPlayer()))
{
this.Disable(event.getPlayer());
}
else
{
this.Enable(event.getPlayer());
}
}
} }

View File

@ -120,7 +120,7 @@ public class ServerManager extends MiniPlugin
Player player = (Player)event.getEntity(); Player player = (Player)event.getEntity();
if (!_stackerManager.CanPortal(player)) if (!_hubManager.CanPortal(player))
{ {
UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hubManager.GetSpawn()), 1, true, 0.8, 0, 1, true); UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hubManager.GetSpawn()), 1, true, 0.8, 0, 1, true);
return; return;

View File

@ -26,7 +26,7 @@ public class KitArcher extends Kit
new Perk[] new Perk[]
{ {
new PerkFletcher(20, 3, true), new PerkFletcher(20, 3, true),
new PerkBarrage(5, 250, true), new PerkBarrage(5, 250, true, false),
}, },
EntityType.ZOMBIE, EntityType.ZOMBIE,
new ItemStack(Material.BOW)); new ItemStack(Material.BOW));

View File

@ -28,7 +28,7 @@ public class KitHumanMarksman extends Kit
}, },
new Perk[] new Perk[]
{ {
new PerkBarrage(5, 250, true), new PerkBarrage(5, 250, true, false),
new PerkFletcher(2, 4, false), new PerkFletcher(2, 4, false),
}, },
EntityType.ZOMBIE, EntityType.ZOMBIE,

View File

@ -31,7 +31,7 @@ public class KitSkeleton extends Kit
new Perk[] new Perk[]
{ {
new PerkFletcher(3, 2, false), new PerkFletcher(3, 2, false),
new PerkBarrage(5, 250, true) new PerkBarrage(5, 250, true, false)
}, },
EntityType.SLIME, EntityType.SLIME,
null); null);

View File

@ -1,21 +1,30 @@
package nautilus.game.arcade.game.games.halloween; package nautilus.game.arcade.game.games.halloween;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityBreakDoorEvent; import org.bukkit.event.entity.EntityBreakDoorEvent;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -37,6 +46,7 @@ public class Halloween extends SoloGame
private ArrayList<WaveBase> _waves; private ArrayList<WaveBase> _waves;
private int _wave = 0; private int _wave = 0;
private int _maxMobs = 100;
private HashSet<CreatureBase> _mobs = new HashSet<CreatureBase>(); private HashSet<CreatureBase> _mobs = new HashSet<CreatureBase>();
private PumpkinKing _king; private PumpkinKing _king;
@ -53,9 +63,10 @@ public class Halloween extends SoloGame
new String[] new String[]
{ {
"Do not die.",
"Work as a team!", "Work as a team!",
"Revive fallen allies!", "Defeat the waves of monsters",
"Defeat the hordes of monsters" "Kill the Pumpkin King"
}); });
this.DamagePvP = false; this.DamagePvP = false;
@ -80,23 +91,22 @@ public class Halloween extends SoloGame
_spawns.add(WorldData.GetDataLocs("BLUE")); _spawns.add(WorldData.GetDataLocs("BLUE"));
_waves = new ArrayList<WaveBase>(); _waves = new ArrayList<WaveBase>();
//_waves.add(new Wave1(this)); _waves.add(new Wave1(this));
//_waves.add(new Wave2(this)); _waves.add(new Wave2(this));
//_waves.add(new Wave3(this)); _waves.add(new Wave3(this));
//_waves.add(new Wave4(this)); _waves.add(new Wave4(this));
_waves.add(new Wave5(this)); _waves.add(new Wave5(this));
//_waves.add(new Wave6(this));
_waves.add(new WaveBoss(this)); _waves.add(new WaveBoss(this));
_waves.add(new WaveVictory(this)); _waves.add(new WaveVictory(this));
} }
@EventHandler @EventHandler(priority = EventPriority.MONITOR)
public void TeamGen(GameStateChangeEvent event) public void TeamGen(GameStateChangeEvent event)
{ {
if (event.GetState() != GameState.Live) if (event.GetState() != GameState.Live)
return; return;
GetTeamList().add(new GameTeam("Halloween Monsters", ChatColor.RED, WorldData.GetDataLocs("RED"))); GetTeamList().add(new GameTeam("Pumpkin King", ChatColor.RED, WorldData.GetDataLocs("RED")));
} }
@EventHandler @EventHandler
@ -198,6 +208,9 @@ public class Halloween extends SoloGame
if (_wave >= _waves.size()) if (_wave >= _waves.size())
{ {
for (Player player : GetPlayers(false))
Manager.GetGame().AddGems(player, 30, "Killing the Pumpkin King", false);
SetState(GameState.End); SetState(GameState.End);
SetCustomWinLine("You defeated the Pumpkin King!!!"); SetCustomWinLine("You defeated the Pumpkin King!!!");
AnnounceEnd(this.GetTeamList().get(0)); AnnounceEnd(this.GetTeamList().get(0));
@ -214,9 +227,87 @@ public class Halloween extends SoloGame
} }
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void Door(EntityBreakDoorEvent event) public void Explosion(EntityExplodeEvent event)
{ {
System.out.println("Door Break"); if (event.getEntity() instanceof Fireball)
{
event.blockList().clear();
Collection<Block> blocks = UtilBlock.getInRadius(event.getLocation(), 3.5d).keySet();
Iterator<Block> blockIterator = blocks.iterator();
while (blockIterator.hasNext())
{
Block block = blockIterator.next();
if (block.getY() < 4)
blockIterator.remove();
}
Manager.GetExplosion().BlockExplosion(blocks, event.getLocation(), false);
}
}
@EventHandler
public void ItemSpawn(ItemSpawnEvent event)
{
Material type = event.getEntity().getItemStack().getType();
if (type == Material.DIAMOND_AXE || type == Material.FIRE || type == Material.SNOW_BALL)
return;
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.MONITOR)
public void GemAward(CustomDamageEvent event)
{
if (event.IsCancelled())
return;
Player player = event.GetDamagerPlayer(true);
if (player == null) return;
for (int i=0 ; i<event.GetDamage() ; i++)
Manager.GetGame().AddGems(player, 0.01, "Damage", true);
}
public int GetMaxMobs()
{
return _maxMobs;
}
private long _helpTimer = 0;
private int _helpIndex = 0;
private String[] _help = new String[]
{
C.cAqua + "Work together with your team mates.",
C.cGreen + "Each kit gives a buff to nearby allies.",
C.cAqua + "Kill monsters to keep their numbers down.",
C.cGreen + "Kill giants quickly.",
C.cAqua + "Defend your team mates from monsters.",
C.cGreen + "Stick together to survive.",
};
@EventHandler
public void StateUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
if (this.GetState() != GameState.Recruit)
return;
if (!UtilTime.elapsed(_helpTimer, 8000))
return;
_helpTimer = System.currentTimeMillis();
Announce(C.cWhite + C.Bold + "TIP " + ChatColor.RESET + _help[_helpIndex]);
_helpIndex = (_helpIndex + 1)%_help.length;
} }
} }

View File

@ -84,6 +84,9 @@ public abstract class CreatureBase<T extends LivingEntity>
public Location GetRoamTarget() public Location GetRoamTarget()
{ {
if (Math.random() > 0.75)
return GetPlayerTarget();
Vector vec = new Vector(UtilMath.r(80) - 40, 0, UtilMath.r(80) - 40); Vector vec = new Vector(UtilMath.r(80) - 40, 0, UtilMath.r(80) - 40);
return vec.toLocation(Host.GetSpectatorLocation().getWorld()); return vec.toLocation(Host.GetSpectatorLocation().getWorld());
} }

View File

@ -25,7 +25,7 @@ public class MobCreeper extends CreatureBase<Creeper>
@Override @Override
public void SpawnCustom(Creeper ent) public void SpawnCustom(Creeper ent)
{ {
ent.setCustomName("Creeper");
} }
@Override @Override
@ -43,7 +43,7 @@ public class MobCreeper extends CreatureBase<Creeper>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
if (event.getType() != UpdateType.SEC) if (event.getType() != UpdateType.SLOW)
return; return;
//New Target via Distance //New Target via Distance

View File

@ -1,7 +1,9 @@
package nautilus.game.arcade.game.games.halloween.creatures; package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -11,9 +13,12 @@ import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftGhast; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftGhast;
import org.bukkit.entity.Ghast; import org.bukkit.entity.Ghast;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.util.Vector;
public class MobGhast extends CreatureBase<Ghast> public class MobGhast extends CreatureBase<Ghast>
{ {
private Location _loc;
public MobGhast(Game game, Location loc) public MobGhast(Game game, Location loc)
{ {
super(game, null, Ghast.class, loc); super(game, null, Ghast.class, loc);
@ -22,7 +27,13 @@ public class MobGhast extends CreatureBase<Ghast>
@Override @Override
public void SpawnCustom(Ghast ent) public void SpawnCustom(Ghast ent)
{ {
UtilEnt.Vegetate(ent); //UtilEnt.Vegetate(ent);
_loc = ent.getLocation();
ent.setMaxHealth(80);
ent.setHealth(80);
ent.setCustomName("Ghast");
} }
@Override @Override
@ -40,17 +51,34 @@ public class MobGhast extends CreatureBase<Ghast>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
/*
if (event.getType() == UpdateType.TICK) if (event.getType() == UpdateType.TICK)
Move(); Move();
if (event.getType() == UpdateType.FAST)
Destroy();
*/
}
private void Destroy()
{
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 0, 0), 8d).keySet(), GetEntity().getLocation(), true);
} }
private void Move() private void Move()
{ {
if (GetTarget() == null) SetTarget(GetPlayerTarget().add(0, 20, 0));
SetTarget(GetPlayerTarget());
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 30)
return;
Vector dir = UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget());
((CraftGhast)GetEntity()).getHandle().setPositionRotation(
_loc.getX(), _loc.getY(), _loc.getZ(),
UtilAlg.GetYaw(dir), UtilAlg.GetPitch(dir));
_loc.add(dir.multiply(0.25));
((CraftGhast)GetEntity()).getHandle().i = GetTarget().getX();
((CraftGhast)GetEntity()).getHandle().j = GetTarget().getY();
((CraftGhast)GetEntity()).getHandle().bn = GetTarget().getZ();
} }
} }

View File

@ -29,8 +29,10 @@ public class MobGiant extends CreatureBase<Giant>
{ {
_tpLoc = ent.getLocation(); _tpLoc = ent.getLocation();
ent.setMaxHealth(120); ent.setMaxHealth(300);
ent.setHealth(120); ent.setHealth(300);
ent.setCustomName("Giant");
} }
@Override @Override
@ -55,15 +57,15 @@ public class MobGiant extends CreatureBase<Giant>
if (event.getType() == UpdateType.TICK) if (event.getType() == UpdateType.TICK)
Move(); Move();
if (event.getType() == UpdateType.FASTER) if (event.getType() == UpdateType.FAST)
Destroy(); Destroy();
} }
private void Destroy() private void Destroy()
{ {
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 8, 0), 6d).keySet(), GetEntity().getLocation().add(0, 8, 0), false); Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 8, 0), 6d).keySet(), GetEntity().getLocation().add(0, 8, 0), false);
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 2, 0), 3.5d).keySet(), GetEntity().getLocation(), true); Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 2, 0), 5d).keySet(), GetEntity().getLocation(), true);
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 0, 0), 3.5d).keySet(), GetEntity().getLocation(), true); Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 0, 0), 5d).keySet(), GetEntity().getLocation(), true);
} }
private void Move() private void Move()
@ -85,7 +87,10 @@ public class MobGiant extends CreatureBase<Giant>
_tpLoc.setPitch(UtilAlg.GetPitch(dir)); _tpLoc.setPitch(UtilAlg.GetPitch(dir));
_tpLoc.setYaw(UtilAlg.GetYaw(dir)); _tpLoc.setYaw(UtilAlg.GetYaw(dir));
_tpLoc.add(dir.multiply(0.1)); double speed = Math.min(0.30, 0.15 + (GetEntity().getTicksLived() / 12000d));
_tpLoc.add(dir.multiply(speed));
//Move //Move
GetEntity().teleport(_tpLoc); GetEntity().teleport(_tpLoc);

View File

@ -30,6 +30,8 @@ public class MobPigZombie extends CreatureBase<Zombie>
Host.Manager.GetDisguise().disguise(disguise); Host.Manager.GetDisguise().disguise(disguise);
Host.Manager.GetCondition().Factory().Speed("Speed", ent, ent, 99999, 1, false, false, false); Host.Manager.GetCondition().Factory().Speed("Speed", ent, ent, 99999, 1, false, false, false);
ent.setCustomName("Nether Zombie");
} }
@Override @Override
@ -47,7 +49,7 @@ public class MobPigZombie extends CreatureBase<Zombie>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
if (event.getType() == UpdateType.FAST) if (event.getType() == UpdateType.SLOW)
Move(); Move();
} }
@ -83,11 +85,11 @@ public class MobPigZombie extends CreatureBase<Zombie>
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12)); target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f); nav.a(target.getX(), target.getY(), target.getZ(), 1f);
} }
else else
{ {
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f); nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1f);
} }
} }
} }

View File

@ -28,6 +28,9 @@ public class MobSkeletonArcher extends CreatureBase<Skeleton>
public void SpawnCustom(Skeleton ent) public void SpawnCustom(Skeleton ent)
{ {
ent.getEquipment().setItemInHand(new ItemStack(Material.BOW)); ent.getEquipment().setItemInHand(new ItemStack(Material.BOW));
ent.setCustomName("Skeleton Archer");
Host.Manager.GetCondition().Factory().Speed("Speed", ent, ent, 99999, 0, false, false, false);
} }
@Override @Override
@ -45,7 +48,7 @@ public class MobSkeletonArcher extends CreatureBase<Skeleton>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
if (event.getType() != UpdateType.SEC) if (event.getType() != UpdateType.SLOW)
return; return;
//New Target via Distance //New Target via Distance

View File

@ -3,6 +3,8 @@ package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguiseSkeleton;
import mineplex.core.disguise.disguises.DisguiseSpider;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -13,21 +15,26 @@ import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Skeleton; import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class MobSkeletonWarrior extends CreatureBase<Skeleton> public class MobSkeletonWarrior extends CreatureBase<Zombie>
{ {
public MobSkeletonWarrior(Game game, Location loc) public MobSkeletonWarrior(Game game, Location loc)
{ {
super(game, null, Skeleton.class, loc); super(game, null, Zombie.class, loc);
} }
@Override @Override
public void SpawnCustom(Skeleton ent) public void SpawnCustom(Zombie ent)
{ {
ent.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD)); DisguiseSkeleton spider = new DisguiseSkeleton(ent);
Host.Manager.GetDisguise().disguise(spider);
ent.setCustomName("Skeleton Warrior");
ent.getEquipment().setItemInHand(new ItemStack(Material.WOOD_HOE));
Host.Manager.GetCondition().Factory().Speed("Speed", ent, ent, 99999, 0, false, false, false);
} }
@Override @Override
@ -45,7 +52,7 @@ public class MobSkeletonWarrior extends CreatureBase<Skeleton>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
if (event.getType() != UpdateType.FAST) if (event.getType() != UpdateType.SLOW)
return; return;
//New Target via Distance //New Target via Distance

View File

@ -27,7 +27,9 @@ public class MobSpiderLeaper extends CreatureBase<CaveSpider>
@Override @Override
public void SpawnCustom(CaveSpider ent) public void SpawnCustom(CaveSpider ent)
{ {
ent.setCustomName("Leaping Spider");
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 99999, 1, false, false, false);
} }
@Override @Override

View File

@ -1,8 +1,6 @@
package nautilus.game.arcade.game.games.halloween.creatures; package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguiseSpider; import mineplex.core.disguise.disguises.DisguiseSpider;
@ -30,6 +28,7 @@ public class MobSpiderWebber extends CreatureBase<Zombie>
{ {
DisguiseSpider spider = new DisguiseSpider(ent); DisguiseSpider spider = new DisguiseSpider(ent);
Host.Manager.GetDisguise().disguise(spider); Host.Manager.GetDisguise().disguise(spider);
ent.setCustomName("Smashing Spider");
} }
@Override @Override
@ -50,19 +49,8 @@ public class MobSpiderWebber extends CreatureBase<Zombie>
if (event.getType() == UpdateType.FAST) if (event.getType() == UpdateType.FAST)
Move(); Move();
if (event.getType() == UpdateType.SEC) if (event.getType() == UpdateType.SLOW)
Web(); Speed();
}
private void Web()
{
if (GetTarget() == null)
return;
if (Math.random() > 0.5)
return;
} }
private void Move() private void Move()
@ -105,4 +93,14 @@ public class MobSpiderWebber extends CreatureBase<Zombie>
} }
} }
} }
public void Speed()
{
if (GetEntity().getTicksLived() > 3600)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 2, false, false, false);
else if (GetEntity().getTicksLived() > 2400)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 1, false, false, false);
else if (GetEntity().getTicksLived() > 1200)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 0, false, false, false);
}
} }

View File

@ -26,7 +26,7 @@ public class MobZombie extends CreatureBase<Zombie>
public void SpawnCustom(Zombie ent) public void SpawnCustom(Zombie ent)
{ {
Move(); Move();
Host.Manager.GetCondition().Factory().Speed("Zombie", ent, ent, 99999, 0, false, false, false); ent.setCustomName("Zombie");
} }
@Override @Override
@ -38,8 +38,11 @@ public class MobZombie extends CreatureBase<Zombie>
@Override @Override
public void Update(UpdateEvent event) public void Update(UpdateEvent event)
{ {
if (event.getType() == UpdateType.SEC) if (event.getType() == UpdateType.SLOW)
Move(); Move();
if (event.getType() == UpdateType.SLOW)
Speed();
} }
private void Move() private void Move()
@ -88,4 +91,14 @@ public class MobZombie extends CreatureBase<Zombie>
{ {
} }
public void Speed()
{
if (GetEntity().getTicksLived() > 3600)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 2, false, false, false);
else if (GetEntity().getTicksLived() > 2400)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 1, false, false, false);
else if (GetEntity().getTicksLived() > 1200)
Host.Manager.GetCondition().Factory().Speed("Speed", GetEntity(), GetEntity(), 10, 0, false, false, false);
}
} }

View File

@ -14,9 +14,11 @@ import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilDisplay; import mineplex.core.common.util.UtilDisplay;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -25,7 +27,6 @@ import net.minecraft.server.v1_6_R3.EntityArrow;
import net.minecraft.server.v1_6_R3.EntityCreature; import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation; import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.ChatColor;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -94,6 +95,9 @@ public class PumpkinKing extends CreatureBase<Skeleton>
//Attacked King //Attacked King
if (event.GetDamageeEntity().equals(GetEntity())) if (event.GetDamageeEntity().equals(GetEntity()))
{ {
if (event.GetProjectile() != null)
event.GetProjectile().remove();
if (_shields.size() > 0) if (_shields.size() > 0)
{ {
event.SetCancelled("Shielded"); event.SetCancelled("Shielded");
@ -113,6 +117,9 @@ public class PumpkinKing extends CreatureBase<Skeleton>
//Attacked Minion //Attacked Minion
else if (_minions.contains(event.GetDamageeEntity())) else if (_minions.contains(event.GetDamageeEntity()))
{ {
if (event.GetProjectile() != null)
event.GetProjectile().remove();
if (_shields.size() > 0) if (_shields.size() > 0)
{ {
event.SetCancelled("Shielded"); event.SetCancelled("Shielded");
@ -134,6 +141,9 @@ public class PumpkinKing extends CreatureBase<Skeleton>
event.GetProjectile().remove(); event.GetProjectile().remove();
if (event.GetDamagerPlayer(true) == null)
return;
//Effect //Effect
Host.Manager.GetBlood().Effects(event.GetDamageeEntity().getLocation(), 10, 0.2, null, 0f, 0f, Material.FIRE, (byte)0, 10, false); Host.Manager.GetBlood().Effects(event.GetDamageeEntity().getLocation(), 10, 0.2, null, 0f, 0f, Material.FIRE, (byte)0, 10, false);
event.GetDamageeEntity().getWorld().playEffect(event.GetDamageeEntity().getLocation(), Effect.STEP_SOUND, 51); event.GetDamageeEntity().getWorld().playEffect(event.GetDamageeEntity().getLocation(), Effect.STEP_SOUND, 51);
@ -345,7 +355,11 @@ public class PumpkinKing extends CreatureBase<Skeleton>
Location loc = GetEntity().getLocation().add(oX, oY, oZ); Location loc = GetEntity().getLocation().add(oX, oY, oZ);
if (UtilMath.offset(loc, minion.getLocation()) > 16) if (UtilMath.offset(loc, minion.getLocation()) > 16)
loc = minion.getLocation().add(UtilAlg.getTrajectory(minion.getLocation(), GetEntity().getLocation().add(oX, oY, oZ)).multiply(16)); {
Host.Manager.GetBlood().Effects(minion.getLocation(), 10, 0.2, Sound.SKELETON_HURT, 1f, 1f, Material.BONE, (byte)0, 20, false);
minion.teleport(loc);
continue;
}
//Move //Move
EntityCreature ec = ((CraftCreature)minion).getHandle(); EntityCreature ec = ((CraftCreature)minion).getHandle();
@ -381,9 +395,17 @@ public class PumpkinKing extends CreatureBase<Skeleton>
{ {
Arrow arrow = arrowIterator.next(); Arrow arrow = arrowIterator.next();
if (arrow.getLocation().getY() > 30 && arrow.getVelocity().getY() > 0)
{
Player target = Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size()));
arrow.teleport(target.getLocation().add(Math.random() * 8 - 4, Math.random() * 10 + 30, Math.random() * 8 - 4));
arrow.setVelocity(arrow.getVelocity().setY(-0.1));
continue;
}
if (arrow.getTicksLived() > 200 || arrow.isOnGround()) if (arrow.getTicksLived() > 200 || arrow.isOnGround())
{ {
if (arrow.isValid() && Math.random() > 0.90) if (arrow.isValid() && Math.random() > 0.50)
{ {
try try
{ {
@ -417,27 +439,46 @@ public class PumpkinKing extends CreatureBase<Skeleton>
} }
} }
if (GetState() != 1) //Circle
return; if (GetState() == 1)
for (int i=0 ; i<_minions.size() ; i++)
{ {
Skeleton minion = _minions.get(i); for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
if (!minion.isValid()) if (!minion.isValid())
continue; continue;
Vector traj = UtilAlg.getTrajectory2d(GetEntity(), minion); Vector traj = UtilAlg.getTrajectory2d(GetEntity(), minion);
traj.add(new Vector(0,Math.random()*0.2,0)); traj.add(new Vector(0,Math.random()*0.25,0));
Arrow arrow = GetEntity().getWorld().spawnArrow(minion.getEyeLocation().add(traj), traj, 2f, 16f); Arrow arrow = GetEntity().getWorld().spawnArrow(minion.getEyeLocation().add(traj), traj, 2f, 16f);
arrow.setShooter(minion); arrow.setShooter(minion);
_arrows.add(arrow); _arrows.add(arrow);
}
}
//Up
else if (GetState() == 2)
{
for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
if (!minion.isValid())
continue;
Vector traj = new Vector(0,1,0);
Arrow arrow = GetEntity().getWorld().spawnArrow(minion.getEyeLocation().add(traj), traj, 2f, 16f);
arrow.setShooter(minion);
_arrows.add(arrow);
}
} }
} }
@EventHandler @EventHandler
public void ShieldSpawn() public void ShieldSpawn()
{ {
@ -453,7 +494,7 @@ public class PumpkinKing extends CreatureBase<Skeleton>
shieldIterator.remove(); shieldIterator.remove();
} }
if (!UtilTime.elapsed(_shieldSpawn, 3000)) if (!UtilTime.elapsed(_shieldSpawn, 8000))
return; return;
if (_shields.size() >= _shieldsMax) if (_shields.size() >= _shieldsMax)
@ -464,8 +505,22 @@ public class PumpkinKing extends CreatureBase<Skeleton>
int toSpawn = 1; int toSpawn = 1;
if (_shields.size() == 0) if (_shields.size() == 0)
{
toSpawn = _shieldsMax; toSpawn = _shieldsMax;
//Sound
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_HURT, 10f, 1.5f);
if (GetEntity().getTicksLived() > 100)
Host.Announce(C.cAqua + C.Bold + "Flame Shield has regenerated!");
}
else
{
//Sound
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_HURT, 1f, 2f);
}
for (int i=0 ; i<toSpawn ; i++) for (int i=0 ; i<toSpawn ; i++)
{ {
//Spawn //Spawn
@ -487,7 +542,8 @@ public class PumpkinKing extends CreatureBase<Skeleton>
for (int i=0 ; i<_shields.size() ; i++) for (int i=0 ; i<_shields.size() ; i++)
{ {
Slime shield = _shields.get(i); Slime shield = _shields.get(i);
shield.setFireTicks(10);
UtilParticle.PlayParticle(ParticleType.FLAME, shield.getLocation(), 0.1f, 0.1f, 0.1f, 0, 1);
double lead = i * ((2d * Math.PI)/_shields.size()); double lead = i * ((2d * Math.PI)/_shields.size());
@ -543,6 +599,9 @@ public class PumpkinKing extends CreatureBase<Skeleton>
//Target //Target
_minionTargets.put(minion, GetRandomPlayer()); _minionTargets.put(minion, GetRandomPlayer());
//Announce
Host.Announce(C.cAqua + C.Bold + "Kill the Pumpkin Minions!");
} }
} }
} }
@ -556,9 +615,10 @@ public class PumpkinKing extends CreatureBase<Skeleton>
{ {
if (UtilTime.elapsed(_stateTime, 10000)) if (UtilTime.elapsed(_stateTime, 10000))
{ {
double r = Math.random(); if (Math.random() > 0.5)
SetState(1);
SetState(1); else
SetState(2);
} }
} }
//Outward Arrows //Outward Arrows
@ -614,9 +674,11 @@ public class PumpkinKing extends CreatureBase<Skeleton>
{ {
SetState(4); SetState(4);
//Announce
Host.Announce(C.cAqua + C.Bold + "Kill the Pumpkin King!!!");
//Sound //Sound
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_SPAWN, 10f, 1.5f); GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_SPAWN, 10f, 1.5f);
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.ZOMBIE_PIG_ANGRY, 10f, 0.5f);
//Speed //Speed
Host.Manager.GetCondition().Factory().Speed("King Speed", GetEntity(), GetEntity(), 9999, 1, false, false, false); Host.Manager.GetCondition().Factory().Speed("King Speed", GetEntity(), GetEntity(), 9999, 1, false, false, false);
@ -670,4 +732,9 @@ public class PumpkinKing extends CreatureBase<Skeleton>
return Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size())); return Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size()));
} }
public boolean IsFinal()
{
return _minions.size() == 0;
}
} }

View File

@ -7,6 +7,8 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
@ -26,13 +28,14 @@ public class KitFinn extends SmashKit
{ {
"Jake is hiding in his pocket.", "Jake is hiding in his pocket.",
"", "",
"Nearby allies receive " + C.cGreen + "Speed 1"
}, },
new Perk[] new Perk[]
{ {
new PerkInfernoFinn(), new PerkInfernoFinn(),
new PerkBlizzardFinn(), new PerkBlizzardFinn(),
new PerkFletcher(4, 4, false), new PerkFletcher(3, 4, true),
}, },
EntityType.ZOMBIE, new ItemStack(Material.GOLD_SWORD)); EntityType.ZOMBIE, new ItemStack(Material.GOLD_SWORD));
@ -85,4 +88,28 @@ public class KitFinn extends SmashKit
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false); Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
} }
} }
@EventHandler
public void Aura(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
for (Player other : Manager.GetGame().GetPlayers(true))
{
if (other.equals(player))
continue;
if (UtilMath.offset(player, other) > 8)
continue;
Manager.GetCondition().Factory().Speed("Aura", other, player, 1.9, 0, false, false, false);
}
}
}
} }

View File

@ -7,6 +7,8 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
@ -26,14 +28,13 @@ public class KitRobinHood extends SmashKit
{ {
"Trick or treating from the rich...", "Trick or treating from the rich...",
"", "",
"Nearby allies receive " + C.cGreen + "Regeneration 1"
}, },
new Perk[] new Perk[]
{ {
new PerkSpeed(1), new PerkFletcher(1, 4, true),
new PerkRegeneration(0), new PerkBarrage(4, 250, true, true),
new PerkFletcher(1, 4, false),
new PerkBarrage(4, 250, false),
new PerkQuickshotRobinHood() new PerkQuickshotRobinHood()
}, },
@ -86,4 +87,28 @@ public class KitRobinHood extends SmashKit
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false); Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
} }
} }
@EventHandler
public void Aura(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
for (Player other : Manager.GetGame().GetPlayers(true))
{
if (other.equals(player))
continue;
if (UtilMath.offset(player, other) > 8)
continue;
Manager.GetCondition().Factory().Regen("Aura", other, player, 1.9, 0, false, false, false);
}
}
}
} }

View File

@ -7,9 +7,12 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.Perk;
@ -20,18 +23,19 @@ public class KitThor extends SmashKit
{ {
public KitThor(ArcadeManager manager) public KitThor(ArcadeManager manager)
{ {
super(manager, "Thor Costume", KitAvailability.Free, super(manager, "Thor", KitAvailability.Free,
new String[] new String[]
{ {
"Dress up as Thor, and smash those monsters!", "Smash and kill with your Thor Hammer!",
"", "",
"Nearby allies receive " + C.cGreen + "Strength 1"
}, },
new Perk[] new Perk[]
{ {
new PerkKnockbackAttack(2), new PerkKnockbackAttack(2),
new PerkFletcher(4, 4, false), new PerkFletcher(3, 4, true),
new PerkSeismicHammer(), new PerkSeismicHammer(),
new PerkHammerThrow(), new PerkHammerThrow(),
}, },
@ -85,4 +89,38 @@ public class KitThor extends SmashKit
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false); Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
} }
} }
@EventHandler
public void DamageBoost(CustomDamageEvent event)
{
Player damagee = event.GetDamageePlayer();
if (damagee == null) return;
if (HasKit(damagee))
event.AddMod("Thor Boost", "Thor Boost", 4, false);
}
@EventHandler
public void Aura(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
for (Player other : Manager.GetGame().GetPlayers(true))
{
if (other.equals(player))
continue;
if (UtilMath.offset(player, other) > 8)
continue;
Manager.GetCondition().Factory().Strength("Aura", other, player, 1.9, 0, false, false, false);
}
}
}
} }

View File

@ -2,30 +2,29 @@ package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher; import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie; import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonWarrior;
public class Wave1 extends WaveBase public class Wave1 extends WaveBase
{ {
public Wave1(Halloween host) public Wave1(Halloween host)
{ {
super(host, "Zombies and Skeletons and Creepers! OH MY!", 60000, host.GetSpawnSet(1)); super(host, "Skeletons? Farmers? FARMER SKELETONS!!!", 60000, host.GetSpawnSet(1));
} }
@Override @Override
public void Spawn(int tick) public void Spawn(int tick)
{ {
if (UtilTime.elapsed(_start, 20000)) if (UtilTime.elapsed(_start, 15000))
return;
if (Host.GetCreatures().size() > Host.GetMaxMobs())
return; return;
if (tick % 10 == 0) if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn())); Host.AddCreature(new MobSkeletonWarrior(Host, GetSpawn()));
if (tick % 20 == 0) if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn())); Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
} }
} }

View File

@ -4,7 +4,6 @@ import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper; import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant; import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie; import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave2 extends WaveBase public class Wave2 extends WaveBase
@ -17,19 +16,19 @@ public class Wave2 extends WaveBase
@Override @Override
public void Spawn(int tick) public void Spawn(int tick)
{ {
if (UtilTime.elapsed(_start, 20000)) if (UtilTime.elapsed(_start, 15000))
return; return;
if (tick == 0) if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn())); Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (Host.GetCreatures().size() > Host.GetMaxMobs())
return;
if (tick % 10 == 0) if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn())); Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0) if (tick % 25 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn())); Host.AddCreature(new MobCreeper(Host, GetSpawn()));
} }
} }

View File

@ -15,13 +15,13 @@ public class Wave3 extends WaveBase
@Override @Override
public void Spawn(int tick) public void Spawn(int tick)
{ {
if (UtilTime.elapsed(_start, 20000)) if (Host.GetCreatures().size() > Host.GetMaxMobs())
return; return;
if (tick % 10 == 0) if (tick > 200 && tick % 10 == 0 && !UtilTime.elapsed(_start, 25000))
Host.AddCreature(new MobSpiderWebber(Host, GetSpawn())); Host.AddCreature(new MobSpiderWebber(Host, GetSpawn()));
if (tick % 10 == 0) if (tick % 10 == 0 && !UtilTime.elapsed(_start, 15000))
Host.AddCreature(new MobSpiderLeaper(Host, GetSpawn())); Host.AddCreature(new MobSpiderLeaper(Host, GetSpawn()));
} }
} }

View File

@ -1,5 +1,7 @@
package nautilus.game.arcade.game.games.halloween.waves; package nautilus.game.arcade.game.games.halloween.waves;
import org.bukkit.Location;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobGhast; import nautilus.game.arcade.game.games.halloween.creatures.MobGhast;
@ -9,17 +11,26 @@ public class Wave4 extends WaveBase
{ {
public Wave4(Halloween host) public Wave4(Halloween host)
{ {
super(host, "Ghasts (and friends)", 60000, host.GetSpawnSet(3)); super(host, "Ghasts and friends!", 60000, host.GetSpawnSet(3));
} }
@Override @Override
public void Spawn(int tick) public void Spawn(int tick)
{ {
if (UtilTime.elapsed(_start, 20000)) if (UtilTime.elapsed(_start, 25000))
return; return;
if (tick % 100 == 0) if (tick > 0 && tick % 100 == 0)
Host.AddCreature(new MobGhast(Host, GetSpawn().clone().add(0, 30, 0))); {
Location loc = GetSpawn();
loc.setY(30 + 20 * Math.random());
loc.setX(80 * Math.random() - 40);
loc.setZ(80 * Math.random() - 40);
Host.AddCreature(new MobGhast(Host, loc));
}
if (Host.GetCreatures().size() > Host.GetMaxMobs())
return;
if (tick % 20 == 0) if (tick % 20 == 0)
Host.AddCreature(new MobPigZombie(Host, GetSpawn())); Host.AddCreature(new MobPigZombie(Host, GetSpawn()));

View File

@ -1,19 +1,15 @@
package nautilus.game.arcade.game.games.halloween.waves; package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper; import nautilus.game.arcade.game.games.halloween.creatures.*;
import nautilus.game.arcade.game.games.halloween.creatures.MobGhast;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobWitch;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave5 extends WaveBase public class Wave5 extends WaveBase
{ {
public Wave5(Halloween host) public Wave5(Halloween host)
{ {
super(host, "Witches and Wolves", 60000, host.GetSpawnSet(3)); super(host, "Double the Giants! Double the fun!", 60000, host.GetSpawnSet(1));
} }
@Override @Override
@ -23,6 +19,27 @@ public class Wave5 extends WaveBase
return; return;
if (tick == 0) if (tick == 0)
Host.AddCreature(new MobGhast(Host, GetSpawn().clone().add(0, 40, 0))); SpawnBeacons(Host.GetSpawnSet(2));
if (tick == 0)
{
Host.AddCreature(new MobGiant(Host, Host.GetSpawnSet(1).get(UtilMath.r(Host.GetSpawnSet(1).size()))));
Host.AddCreature(new MobGiant(Host, Host.GetSpawnSet(2).get(UtilMath.r(Host.GetSpawnSet(2).size()))));
}
if (Host.GetCreatures().size() > Host.GetMaxMobs())
return;
if (tick % 20 == 0)
{
Host.AddCreature(new MobZombie(Host, Host.GetSpawnSet(1).get(UtilMath.r(Host.GetSpawnSet(1).size()))));
Host.AddCreature(new MobZombie(Host, Host.GetSpawnSet(2).get(UtilMath.r(Host.GetSpawnSet(2).size()))));
}
if (tick % 60 == 0)
{
Host.AddCreature(new MobCreeper(Host, Host.GetSpawnSet(1).get(UtilMath.r(Host.GetSpawnSet(1).size()))));
Host.AddCreature(new MobCreeper(Host, Host.GetSpawnSet(2).get(UtilMath.r(Host.GetSpawnSet(2).size()))));
}
} }
} }

View File

@ -1,35 +0,0 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave6 extends WaveBase
{
public Wave6(Halloween host)
{
super(host, "Fiery Night", 60000, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -1,35 +0,0 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave7 extends WaveBase
{
public Wave7(Halloween host)
{
super(host, "Giants, Zombies, Witches and Ghasts...", 60000, host.GetSpawnSet(0));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.halloween.waves;
import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper; import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie; import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
import nautilus.game.arcade.game.games.halloween.creatures.PumpkinKing; import nautilus.game.arcade.game.games.halloween.creatures.PumpkinKing;
@ -11,7 +12,7 @@ public class WaveBoss extends WaveBase
public WaveBoss(Halloween host) public WaveBoss(Halloween host)
{ {
super(host, "The Pumpkin King", 0, host.GetSpawnSet(3)); super(host, "The Pumpkin King", 0, host.GetSpawnSet(0));
} }
@Override @Override
@ -23,14 +24,21 @@ public class WaveBoss extends WaveBase
Host.AddCreature(_king); Host.AddCreature(_king);
} }
if (Host.GetCreatures().size() < 30) //Increasing difficulty of mobs
if (Host.GetCreatures().size() < 20 + (tick/300) && !_king.IsFinal())
{ {
if (tick % 30 == 0) if (tick % Math.max(5, 20 - tick/600) == 0)
if (Math.random() > 0.10) if (Math.random() > 0.10)
Host.AddCreature(new MobZombie(Host, Host.GetRandomSpawn())); Host.AddCreature(new MobZombie(Host, Host.GetRandomSpawn()));
else else
Host.AddCreature(new MobCreeper(Host, Host.GetRandomSpawn())); Host.AddCreature(new MobCreeper(Host, Host.GetRandomSpawn()));
} }
//Giant every 2 minutes
if (tick % 2400 == 0 && !_king.IsFinal())
{
Host.AddCreature(new MobGiant(Host, GetSpawn()));
}
} }
@Override @Override

View File

@ -25,7 +25,7 @@ public class KitArcher extends Kit
new Perk[] new Perk[]
{ {
new PerkFletcher(20, 3, true), new PerkFletcher(20, 3, true),
new PerkBarrage(5, 250, true), new PerkBarrage(5, 250, true, false),
}, },
EntityType.ZOMBIE, EntityType.ZOMBIE,
new ItemStack(Material.BOW)); new ItemStack(Material.BOW));

View File

@ -47,6 +47,7 @@ public class SuperSmash extends SoloGame
new Kit[] new Kit[]
{ {
new KitWitch(manager),
new KitSkeleton(manager), new KitSkeleton(manager),
new KitGolem(manager), new KitGolem(manager),
new KitSpider(manager), new KitSpider(manager),
@ -64,6 +65,7 @@ public class SuperSmash extends SoloGame
//new KitWither(manager), //new KitWither(manager),
new KitWolf(manager), new KitWolf(manager),
}, },
new String[] new String[]

View File

@ -27,7 +27,7 @@ public class KitBlaze extends SmashKit
{ {
public KitBlaze(ArcadeManager manager) public KitBlaze(ArcadeManager manager)
{ {
super(manager, "Blaze", KitAvailability.Green, super(manager, "Blaze", KitAvailability.Blue,
new String[] new String[]
{ {

View File

@ -40,7 +40,7 @@ public class KitSkeleton extends SmashKit
new PerkKnockbackArrow(2), new PerkKnockbackArrow(2),
new PerkBoneExplosion(), new PerkBoneExplosion(),
new PerkRopedArrow("Roped Arrow", 1, 5000), new PerkRopedArrow("Roped Arrow", 1, 5000),
new PerkBarrage(5, 250, true), new PerkBarrage(5, 250, true, false),
}, },
EntityType.SKELETON, EntityType.SKELETON,
new ItemStack(Material.BOW)); new ItemStack(Material.BOW));

View File

@ -0,0 +1,106 @@
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.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.disguise.disguises.DisguiseWitch;
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.Game.GameState;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.SmashKit;
import nautilus.game.arcade.kit.perks.*;
public class KitWitch extends SmashKit
{
public KitWitch(ArcadeManager manager)
{
super(manager, "Witch", KitAvailability.Blue,
new String[]
{
},
new Perk[]
{
new PerkSmashStats(6, 1.5, 0.15, 5),
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
new PerkWitchPotion(),
new PerkBatWave(),
},
EntityType.WITCH,
new ItemStack(Material.POTION));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1,
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Stun Potion",
new String[]
{
ChatColor.RESET + "Throw a potion that damages and slows",
ChatColor.RESET + "anything it splashes onto!",
}));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SPADE, (byte)0, 1,
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bat Wave",
new String[]
{
ChatColor.RESET + "Release a wave of bats which give",
ChatColor.RESET + "damage and knockback to anything they",
ChatColor.RESET + "collide with.",
}));
if (Manager.GetGame().GetState() == GameState.Recruit)
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.LEASH, (byte)0, 1,
C.cYellow + C.Bold + "Double Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Bat Leash",
new String[]
{
ChatColor.RESET + "Attach a rope to your wave of bats,",
ChatColor.RESET + "causing you to be pulled behind them!",
}));
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE));
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS));
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS));
//Disguise
DisguiseWitch disguise = new DisguiseWitch(player);
disguise.SetName(C.cYellow + player.getName());
disguise.SetCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
@EventHandler
public void Visuals(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
return;
for (Player player : UtilServer.getPlayers())
{
if (!HasKit(player))
continue;
for (Player other : UtilServer.getPlayers())
{
UtilParticle.PlayParticle(other, ParticleType.WITCH_MAGIC, player.getLocation().add(0, 1, 0), 0.25f, 0.5f, 0.25f, 0, 2);
}
}
}
}

View File

@ -22,7 +22,7 @@ public class KitWolf extends SmashKit
{ {
public KitWolf(ArcadeManager manager) public KitWolf(ArcadeManager manager)
{ {
super(manager, "Wolf", KitAvailability.Blue, super(manager, "Wolf", KitAvailability.Green,
new String[] new String[]
{ {

View File

@ -27,7 +27,7 @@ public class KitShredder extends Kit
{ {
new PerkConstructor("Constructor", 4, 6, Material.WOOL, "Wool", false), new PerkConstructor("Constructor", 4, 6, Material.WOOL, "Wool", false),
new PerkFletcher(4, 2, false), new PerkFletcher(4, 2, false),
new PerkBarrage(5, 250, false), new PerkBarrage(5, 250, false, false),
}, },
EntityType.ZOMBIE, EntityType.ZOMBIE,
new ItemStack(Material.BOW)); new ItemStack(Material.BOW));

View File

@ -27,7 +27,7 @@ public class KitSurvivorArcher extends Kit
new Perk[] new Perk[]
{ {
new PerkFletcher(2, 8, true), new PerkFletcher(2, 8, true),
new PerkBarrage(5, 250, true) new PerkBarrage(5, 250, true, false)
}, },
EntityType.SKELETON, EntityType.SKELETON,
new ItemStack(Material.BOW)); new ItemStack(Material.BOW));

View File

@ -10,9 +10,11 @@ import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -23,6 +25,7 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.Perk;
public class PerkBarrage extends Perk public class PerkBarrage extends Perk
@ -36,8 +39,9 @@ public class PerkBarrage extends Perk
private int _max; private int _max;
private long _tick; private long _tick;
private boolean _remove; private boolean _remove;
private boolean _noDelay;
public PerkBarrage(int max, long tick, boolean remove) public PerkBarrage(int max, long tick, boolean remove, boolean noDelay)
{ {
super("Barrage", new String[] super("Barrage", new String[]
{ {
@ -47,6 +51,7 @@ public class PerkBarrage extends Perk
_max = max; _max = max;
_tick = tick; _tick = tick;
_remove = remove; _remove = remove;
_noDelay = noDelay;
} }
@EventHandler @EventHandler
@ -190,6 +195,36 @@ public class PerkBarrage extends Perk
} }
} }
@EventHandler(priority = EventPriority.HIGH)
public void BarrageDamageTime(CustomDamageEvent event)
{
if (!_noDelay)
return;
if (event.GetProjectile() == null)
return;
if (event.GetDamagerPlayer(true) == null)
return;
if (!(event.GetProjectile() instanceof Arrow))
return;
Player damager = event.GetDamagerPlayer(true);
if (!Kit.HasKit(damager))
return;
event.SetCancelled("Barrage Cancel");
event.GetProjectile().remove();
//Damage Event
Manager.GetDamage().NewDamageEvent(event.GetDamageeEntity(), damager, null,
DamageCause.THORNS, event.GetDamage(), true, true, false,
damager.getName(), GetName());
}
@EventHandler @EventHandler
public void BarrageProjectileHit(ProjectileHitEvent event) public void BarrageProjectileHit(ProjectileHitEvent event)
{ {

View File

@ -0,0 +1,250 @@
package nautilus.game.arcade.kit.perks;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
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.block.Action;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
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.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
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.kit.Perk;
public class PerkBatWave extends Perk
{
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
private HashMap<Player, Location> _direction = new HashMap<Player, Location>();
private HashMap<Player, ArrayList<Bat>> _bats = new HashMap<Player, ArrayList<Bat>>();
private HashSet<Player> _pulling = new HashSet<Player>();
private HashSet<Player> _allowLeash = new HashSet<Player>();
public PerkBatWave()
{
super("Bat Wave", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " to use " + C.cGreen + "Bat Wave",
C.cYellow + "Double Right-Click" + C.cGray + " to use " + C.cGreen + "Bat Leash"
});
}
@EventHandler
public void Deactivate(CustomDamageEvent event)
{
Player player = event.GetDamageePlayer();
if (player == null) return;
if (_pulling.remove(player))
{
for (Bat bat : _bats.get(player))
bat.setLeashHolder(null);
}
}
@EventHandler
public void Activate(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_SPADE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 8000, false))
{
if (_active.containsKey(player))
{
if (!Recharge.Instance.use(player, "Leash Bats", 500, false))
return;
if (!_pulling.remove(player))
{
if (_allowLeash.remove(player))
{
_pulling.add(player);
for (Bat bat : _bats.get(player))
bat.setLeashHolder(player);
}
}
else
{
for (Bat bat : _bats.get(player))
bat.setLeashHolder(null);
}
}
else
{
//Inform
Recharge.Instance.use(player, GetName(), 8000, true);
}
}
else
{
//Start
_direction.put(player, player.getEyeLocation());
_active.put(player, System.currentTimeMillis());
_allowLeash.add(player);
_bats.put(player, new ArrayList<Bat>());
for (int i=0 ; i<16 ; i++)
{
Manager.GetGame().CreatureAllowOverride = true;
Bat bat = player.getWorld().spawn(player.getEyeLocation(), Bat.class);
_bats.get(player).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())
{
if (!_active.containsKey(cur))
continue;
if (UtilTime.elapsed(_active.get(cur), 2000))
{
Clear(cur);
continue;
}
Location loc = _direction.get(cur);
Vector batVec = new Vector(0,0,0);
double batCount = 0;
//Bat Movement
for (Bat bat : _bats.get(cur))
{
if (!bat.isValid())
continue;
batVec.add(bat.getLocation().toVector());
batCount++;
Vector rand = new Vector((Math.random() - 0.5)/3, (Math.random() - 0.5)/3, (Math.random() - 0.5)/3);
bat.setVelocity(loc.getDirection().clone().multiply(0.75).add(rand));
for (Player other : Manager.GetGame().GetPlayers(true))
{
if (other.equals(cur))
continue;
if (!Recharge.Instance.usable(other, "Hit by Bat"))
continue;
if (UtilEnt.hitBox(bat.getLocation(), other, 2, null))
{
//Damage Event
Manager.GetDamage().NewDamageEvent(other, cur, null,
DamageCause.CUSTOM, 2.5, 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);
bat.remove();
//Recharge on hit
Recharge.Instance.useForce(other, "Hit by Bat", 200);
}
}
}
//Player Pull
if (_pulling.contains(cur))
{
batVec.multiply(1/batCount);
Location batLoc = batVec.toLocation(cur.getWorld());
UtilAction.velocity(cur, UtilAlg.getTrajectory(cur.getLocation(), batLoc), 0.5, 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)
{
_active.remove(player);
_direction.remove(player);
_pulling.remove(player);
if (_bats.containsKey(player))
{
for (Bat bat : _bats.get(player))
{
if (bat.isValid())
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, bat.getLocation(), 0, 0, 0, 0, 3);
bat.remove();
}
_bats.remove(player);
}
}
@EventHandler
public void Knockback(CustomDamageEvent event)
{
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
return;
event.AddKnockback(GetName(), 1.75);
}
}

View File

@ -85,7 +85,7 @@ public class PerkBlizzardFinn extends Perk
continue; continue;
} }
if (UtilTime.elapsed(_active.get(player), 1500)) if (UtilTime.elapsed(_active.get(player), 2000))
{ {
_active.remove(player); _active.remove(player);
continue; continue;

View File

@ -129,7 +129,7 @@ public class PerkHammerThrow extends Perk implements IThrown
//Damage Event //Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.LIGHTNING, 12, true, true, false, DamageCause.LIGHTNING, 16, true, true, false,
UtilEnt.getName(data.GetThrower()), GetName()); UtilEnt.getName(data.GetThrower()), GetName());
} }

View File

@ -13,6 +13,7 @@ import org.bukkit.util.Vector;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
@ -85,7 +86,7 @@ public class PerkInfernoFinn extends Perk
//Fire //Fire
Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.FIRE)); Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.FIRE));
Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 2, "Inferno"); Manager.GetFire().Add(fire, cur, 0.7, 0, 2, 2, "Inferno");
fire.teleport(cur.getEyeLocation()); fire.teleport(cur.getEyeLocation());
double x = 0.07 - (UtilMath.r(14)/100d); double x = 0.07 - (UtilMath.r(14)/100d);
@ -101,7 +102,7 @@ public class PerkInfernoFinn extends Perk
@EventHandler @EventHandler
public void Refresh(UpdateEvent event) public void Refresh(UpdateEvent event)
{ {
if (event.getType() != UpdateType.SLOWER) if (event.getType() != UpdateType.SLOW)
return; return;
for (Player player : UtilServer.getPlayers()) for (Player player : UtilServer.getPlayers())
@ -112,8 +113,13 @@ public class PerkInfernoFinn extends Perk
if (!Kit.HasKit(player)) if (!Kit.HasKit(player))
continue; continue;
player.getInventory().remove(Material.GOLD_SWORD); if (!UtilGear.isMat(player.getItemInHand(), Material.GOLD_SWORD))
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, "Flaming Sword")); continue;
if (player.getItemInHand().getDurability() == player.getItemInHand().getType().getMaxDurability())
player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability()+1));
else
player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability()-1));
} }
} }
} }

View File

@ -1,6 +1,7 @@
package nautilus.game.arcade.kit.perks; package nautilus.game.arcade.kit.perks;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -52,5 +53,7 @@ public class PerkQuickshotRobinHood extends Perk
Arrow arrow = player.launchProjectile(Arrow.class); Arrow arrow = player.launchProjectile(Arrow.class);
arrow.setVelocity(player.getLocation().getDirection().multiply(2)); arrow.setVelocity(player.getLocation().getDirection().multiply(2));
player.getWorld().playSound(player.getLocation(), Sound.SHOOT_ARROW, 1f, 1f);
} }
} }

View File

@ -0,0 +1,61 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
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.UtilPlayer;
import mineplex.core.recharge.Recharge;
import nautilus.game.arcade.kit.Perk;
public class PerkWitchBroom extends Perk
{
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
public PerkWitchBroom()
{
super("Broomstick", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " to use " + C.cGreen + "Broomstick"
});
}
@EventHandler
public void Activate(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 8000, true))
return;
//Start
_active.put(player, System.currentTimeMillis());
//Inform
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
}
}

View File

@ -0,0 +1,121 @@
package nautilus.game.arcade.kit.perks;
import java.util.ArrayList;
import java.util.Iterator;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.ThrownPotion;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.ProjectileHitEvent;
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.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
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;
public class PerkWitchPotion extends Perk
{
private ArrayList<Projectile> _proj = new ArrayList<Projectile>();
public PerkWitchPotion()
{
super("Stun Potion", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " to use " + C.cGreen + "Paralyze Potion"
});
}
@EventHandler
public void Activate(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 2000, 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 (UtilMath.offset(player.getLocation().add(0,1,0), event.getEntity().getLocation()) > 3)
continue;
//Damage Event
Manager.GetDamage().NewDamageEvent(player, event.getEntity().getShooter(), null,
DamageCause.CUSTOM, 4, false, true, false,
UtilEnt.getName(event.getEntity().getShooter()), GetName());
//Slow
Manager.GetCondition().Factory().Slow(GetName(), player, event.getEntity().getShooter(), 2, 2, false, false, true, 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.FIREWORKS_SPARK, proj.getLocation(), 0, 0, 0, 0, 1);
}
}
}

View File

@ -287,7 +287,7 @@ public class PerkWolf extends Perk
for (Player other : Manager.GetGame().GetPlayers(true)) for (Player other : Manager.GetGame().GetPlayers(true))
if (!player.equals(other)) if (!player.equals(other))
if (other.getGameMode() == GameMode.SURVIVAL) if (other.getGameMode() == GameMode.SURVIVAL)
if (UtilEnt.hitBox(player.getLocation(), other, 2, null)) if (UtilEnt.hitBox(player.getLocation().add(0, 1, 0), other, 2, null))
{ {
StrikeHit(player, other); StrikeHit(player, other);
playerIterator.remove(); playerIterator.remove();

View File

@ -4,6 +4,7 @@ import java.util.Iterator;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilDisplay;
import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
@ -35,6 +36,8 @@ public class GameManager implements Listener
{ {
ArcadeManager Manager; ArcadeManager Manager;
private int _colorId = 0;
public GameManager(ArcadeManager manager) public GameManager(ArcadeManager manager)
{ {
Manager = manager; Manager = manager;
@ -42,6 +45,38 @@ public class GameManager implements Listener
Manager.GetPluginManager().registerEvents(this, Manager.GetPlugin()); Manager.GetPluginManager().registerEvents(this, Manager.GetPlugin());
} }
@EventHandler
public void DisplayIP(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
return;
if (Manager.GetGame() != null && Manager.GetGame().GetState() != GameState.Live)
{
ChatColor col = ChatColor.RED;
if (_colorId == 1) col = ChatColor.YELLOW;
else if (_colorId == 2) col = ChatColor.GREEN;
else if (_colorId == 3) col = ChatColor.AQUA;
_colorId = (_colorId+1)%4;
String text = col + C.Bold + "US.MINEPLEX.COM EU.MINEPLEX.COM";
double health = 1;
if (Manager.GetGame().GetState() == GameState.Prepare)
{
health = (9 - (System.currentTimeMillis() - Manager.GetGame().GetStateTime())/1000d) / 9d;
}
else if (Manager.GetGame().GetState() == GameState.Recruit)
{
if (Manager.GetGame().GetCountdown() >= 0)
health = Manager.GetGame().GetCountdown() / 60d;
}
for (Player player : UtilServer.getPlayers())
UtilDisplay.displayTextBar(Manager.GetPlugin(), player, health, text);
}
}
@EventHandler @EventHandler
public void StateUpdate(UpdateEvent event) public void StateUpdate(UpdateEvent event)
{ {