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

Conflicts:
	Plugins/Libraries/craftbukkit.jar
This commit is contained in:
Jonathan Williams 2013-09-23 13:53:28 -07:00
commit 6d5acd29db
30 changed files with 1996 additions and 91 deletions

View File

@ -125,7 +125,7 @@ public class ProjectileUser
if (_hitBlock) if (_hitBlock)
{ {
Block block = _thrown.getLocation().add(_thrown.getVelocity().normalize().multiply(0.6)).getBlock(); Block block = _thrown.getLocation().add(_thrown.getVelocity().normalize().multiply(0.6)).getBlock();
if (!UtilBlock.airFoliage(block)) if (!UtilBlock.airFoliage(block) && !block.isLiquid())
{ {
_callback.Collide(null, block, this); _callback.Collide(null, block, this);
return true; return true;

View File

@ -82,6 +82,10 @@ public class Recharge extends MiniPlugin
{ {
Get(cur).remove(ability); Get(cur).remove(ability);
//Event
RechargedEvent rechargedEvent = new RechargedEvent(cur, ability);
UtilServer.getServer().getPluginManager().callEvent(rechargedEvent);
if (informSet.contains(ability)) if (informSet.contains(ability))
UtilPlayer.message(cur, F.main("Recharge", "You can use " + F.skill(ability) + ".")); UtilPlayer.message(cur, F.main("Recharge", "You can use " + F.skill(ability) + "."));
} }
@ -143,6 +147,11 @@ public class Recharge extends MiniPlugin
Get(player).put(ability, System.currentTimeMillis()+rechargeEvent.GetRecharge()); Get(player).put(ability, System.currentTimeMillis()+rechargeEvent.GetRecharge());
} }
public void recharge(Player player, String ability)
{
Get(player).remove(ability);
}
@EventHandler @EventHandler
public void clearPlayer(PlayerQuitEvent event) public void clearPlayer(PlayerQuitEvent event)

View File

@ -0,0 +1,39 @@
package mineplex.core.recharge;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class RechargedEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private Player _player;
private String _ability;
public RechargedEvent(Player player, String ability)
{
_player = player;
_ability = ability;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
public Player GetPlayer()
{
return _player;
}
public String GetAbility()
{
return _ability;
}
}

View File

@ -5,6 +5,7 @@ import java.util.HashMap;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl;
import nautilus.game.arcade.game.games.barbarians.Barbarians; import nautilus.game.arcade.game.games.barbarians.Barbarians;
import nautilus.game.arcade.game.games.bridge.Bridge; import nautilus.game.arcade.game.games.bridge.Bridge;
import nautilus.game.arcade.game.games.castlesiege.CastleSiege; import nautilus.game.arcade.game.games.castlesiege.CastleSiege;
@ -20,6 +21,7 @@ import nautilus.game.arcade.game.games.runner.Runner;
import nautilus.game.arcade.game.games.smash.SuperSmash; import nautilus.game.arcade.game.games.smash.SuperSmash;
import nautilus.game.arcade.game.games.snowfight.SnowFight; import nautilus.game.arcade.game.games.snowfight.SnowFight;
import nautilus.game.arcade.game.games.spleef.Spleef; import nautilus.game.arcade.game.games.spleef.Spleef;
import nautilus.game.arcade.game.games.squidshooter.SquidShooter;
import nautilus.game.arcade.game.games.turfforts.TurfForts; import nautilus.game.arcade.game.games.turfforts.TurfForts;
import nautilus.game.arcade.game.games.uhc.UHC; import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival; import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival;
@ -36,6 +38,7 @@ public class GameFactory
public Game CreateGame(GameType gameType, HashMap<String, ChatColor> pastTeams) public Game CreateGame(GameType gameType, HashMap<String, ChatColor> pastTeams)
{ {
if (gameType == GameType.Barbarians) return new Barbarians(_manager); if (gameType == GameType.Barbarians) return new Barbarians(_manager);
else if (gameType == GameType.BaconBrawl) return new BaconBrawl(_manager);
else if (gameType == GameType.Bridge) return new Bridge(_manager); else if (gameType == GameType.Bridge) return new Bridge(_manager);
else if (gameType == GameType.CastleSiege) return new CastleSiege(_manager, pastTeams); else if (gameType == GameType.CastleSiege) return new CastleSiege(_manager, pastTeams);
else if (gameType == GameType.DeathTag) return new DeathTag(_manager); else if (gameType == GameType.DeathTag) return new DeathTag(_manager);
@ -44,13 +47,14 @@ public class GameFactory
else if (gameType == GameType.Evolution) return new Evolution(_manager); else if (gameType == GameType.Evolution) return new Evolution(_manager);
else if (gameType == GameType.HungerGames) return new HungerGames(_manager); else if (gameType == GameType.HungerGames) return new HungerGames(_manager);
else if (gameType == GameType.MineWare) return new MineWare(_manager); else if (gameType == GameType.MineWare) return new MineWare(_manager);
else if (gameType == GameType.MilkCow) return new MilkCow(_manager); else if (gameType == GameType.MilkCow) return new MilkCow(_manager);
else if (gameType == GameType.Quiver) return new Quiver(_manager); else if (gameType == GameType.Quiver) return new Quiver(_manager);
else if (gameType == GameType.Runner) return new Runner(_manager); else if (gameType == GameType.Runner) return new Runner(_manager);
else if (gameType == GameType.SnowFight) return new SnowFight(_manager); else if (gameType == GameType.SnowFight) return new SnowFight(_manager);
else if (gameType == GameType.Smash) return new SuperSmash(_manager); else if (gameType == GameType.Smash) return new SuperSmash(_manager);
else if (gameType == GameType.Spleef) return new Spleef(_manager); else if (gameType == GameType.Spleef) return new Spleef(_manager);
else if (gameType == GameType.TurfWars) return new TurfForts(_manager); else if (gameType == GameType.SquidShooter) return new SquidShooter(_manager);
else if (gameType == GameType.TurfWars) return new TurfForts(_manager);
else if (gameType == GameType.UHC) return new UHC(_manager); else if (gameType == GameType.UHC) return new UHC(_manager);
else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager); else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager);
else return null; else return null;

View File

@ -3,6 +3,7 @@ package nautilus.game.arcade;
public enum GameType public enum GameType
{ {
//Mini //Mini
BaconBrawl("Bacon Brawl"),
Barbarians("A Barbarians Life"), Barbarians("A Barbarians Life"),
Bridge("The Bridges"), Bridge("The Bridges"),
CastleSiege("Castle Siege"), CastleSiege("Castle Siege"),
@ -19,6 +20,7 @@ public enum GameType
Smash("Super Smash Mobs"), Smash("Super Smash Mobs"),
SnowFight("Snow Fight"), SnowFight("Snow Fight"),
Spleef("Super Spleef"), Spleef("Super Spleef"),
SquidShooter("Squid Shooter"),
TurfWars("Turf Wars"), TurfWars("Turf Wars"),
UHC("Ultra Hardcore"), UHC("Ultra Hardcore"),
ZombieSurvival("Zombie Survival"); ZombieSurvival("Zombie Survival");

View File

@ -20,6 +20,7 @@ import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerStateChangeEvent; import nautilus.game.arcade.events.PlayerStateChangeEvent;
import nautilus.game.arcade.game.Game.GameState;
import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.KitAvailability;
@ -158,6 +159,8 @@ public abstract class Game implements Listener
public boolean DisplayLobbySide = true; public boolean DisplayLobbySide = true;
public boolean AutoStart = true; public boolean AutoStart = true;
public GameState KitRegisterState = GameState.Live;
//Addons //Addons
public boolean CompassEnabled = false; public boolean CompassEnabled = false;

View File

@ -0,0 +1,110 @@
package nautilus.game.arcade.game.games.baconbrawl;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.baconbrawl.kits.*;
import nautilus.game.arcade.kit.Kit;
public class BaconBrawl extends SoloGame
{
public BaconBrawl(ArcadeManager manager)
{
super(manager, GameType.BaconBrawl,
new Kit[]
{
new KitPig(manager),
new KitBabyPig(manager),
new KitSheepPig(manager)
},
new String[]
{
"Knock other pigs out of the arena!",
"Last pig in the arena wins!"
});
this.DamageTeamSelf = true;
this.HungerSet = 20;
this.PrepareFreeze = false;
}
@Override
public void EndCheck()
{
if (!IsLive())
return;
if (GetPlayers(true).size() <= 1)
{
if (GetPlayers(true).size() == 1)
GetPlaces().add(0, GetPlayers(true).get(0));
if (GetPlaces().size() >= 1)
AddGems(GetPlaces().get(0), 15, "1st Place", false);
if (GetPlaces().size() >= 2)
AddGems(GetPlaces().get(1), 10, "2nd Place", false);
if (GetPlaces().size() >= 3)
AddGems(GetPlaces().get(2), 5, "3rd Place", false);
for (Player player : GetPlayers(false))
if (player.isOnline())
AddGems(player, 10, "Participation", false);
SetState(GameState.End);
AnnounceEnd(GetPlaces());
}
}
@EventHandler
public void Hunger(UpdateEvent event)
{
if (event.getType() != UpdateType.SLOW)
return;
if (!IsLive())
return;
for (Player player : GetPlayers(true))
{
if (player.getFoodLevel() <= 0)
{
Manager.GetDamage().NewDamageEvent(player, null, null,
DamageCause.STARVATION, 4, false, true, false,
"Starvation", GetName());
}
UtilPlayer.hunger(player, -1);
}
}
@EventHandler
public void HungerRestore(CustomDamageEvent event)
{
Player damager = event.GetDamagerPlayer(true);
if (damager != null)
UtilPlayer.hunger(damager, 2);
}
@EventHandler
public void DamageEvent(CustomDamageEvent event)
{
if (event.GetCause() == DamageCause.ENTITY_ATTACK || event.GetCause() == DamageCause.CUSTOM || event.GetCause() == DamageCause.PROJECTILE)
{
event.GetDamageeEntity().setHealth(event.GetDamageeEntity().getMaxHealth());
event.AddKnockback("Pig Wrestle", 2);
}
}
}

View File

@ -0,0 +1,83 @@
package nautilus.game.arcade.game.games.baconbrawl.kits;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Pig;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.disguise.disguises.DisguiseChicken;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkBaconBlast;
import nautilus.game.arcade.kit.perks.PerkSpeed;
public class KitBabyPig extends Kit
{
public KitBabyPig(ArcadeManager manager)
{
super(manager, "Bebe Piggles", KitAvailability.Green,
new String[]
{
"Tiny pig runs so fast!"
},
new Perk[]
{
new PerkBaconBlast(),
new PerkSpeed(1),
},
EntityType.PIG,
new ItemStack(Material.PORK));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
//Disguise
DisguiseChicken disguise = new DisguiseChicken(player);
disguise.SetName(C.cYellow + player.getName());
disguise.SetCustomNameVisible(true);
disguise.setBaby();
Manager.GetDisguise().disguise(disguise);
}
@Override
public Entity SpawnEntity(Location loc)
{
EntityType type = _entityType;
if (type == EntityType.PLAYER)
type = EntityType.ZOMBIE;
LivingEntity entity = (LivingEntity) Manager.GetCreature().SpawnEntity(loc, type);
entity.setRemoveWhenFarAway(false);
entity.setCustomName(GetAvailability().GetColor() + GetName() + " Kit" + (GetAvailability() == KitAvailability.Blue ? ChatColor.GRAY + " (" + ChatColor.WHITE + "Ultra" + ChatColor.GRAY + ")" : ""));
entity.setCustomNameVisible(true);
entity.getEquipment().setItemInHand(_itemInHand);
if (type == EntityType.PIG)
{
Pig sheep = (Pig)entity;
sheep.setBaby();
}
UtilEnt.Vegetate(entity);
SpawnCustom(entity);
return entity;
}
}

View File

@ -0,0 +1,49 @@
package nautilus.game.arcade.game.games.baconbrawl.kits;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.disguise.disguises.DisguisePig;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkBodySlam;
import nautilus.game.arcade.kit.perks.PerkJump;
public class KitPig extends Kit
{
public KitPig(ArcadeManager manager)
{
super(manager, "El Muchacho Pigo", KitAvailability.Free,
new String[]
{
"Such a fat pig. Oink."
},
new Perk[]
{
new PerkBodySlam(6, 2),
new PerkJump(1),
},
EntityType.PIG,
new ItemStack(Material.PORK));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
//Disguise
DisguisePig disguise = new DisguisePig(player);
disguise.SetName(C.cYellow + player.getName());
disguise.SetCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
}

View File

@ -0,0 +1,84 @@
package nautilus.game.arcade.game.games.baconbrawl.kits;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Sheep;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.disguise.disguises.DisguiseSheep;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkBackstabKnockback;
import nautilus.game.arcade.kit.perks.PerkPigCloak;
public class KitSheepPig extends Kit
{
public KitSheepPig(ArcadeManager manager)
{
super(manager, "'Pig'", KitAvailability.Blue,
new String[]
{
"\"...Oink?\""
},
new Perk[]
{
new PerkPigCloak(),
new PerkBackstabKnockback()
},
EntityType.SHEEP,
new ItemStack(Material.WOOL));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
//Disguise
DisguiseSheep disguise = new DisguiseSheep(player);
disguise.SetName(C.cYellow + player.getName());
disguise.SetCustomNameVisible(true);
disguise.setColor(DyeColor.PINK);
Manager.GetDisguise().disguise(disguise);
}
@Override
public Entity SpawnEntity(Location loc)
{
EntityType type = _entityType;
if (type == EntityType.PLAYER)
type = EntityType.ZOMBIE;
LivingEntity entity = (LivingEntity) Manager.GetCreature().SpawnEntity(loc, type);
entity.setRemoveWhenFarAway(false);
entity.setCustomName(GetAvailability().GetColor() + GetName() + " Kit" + (GetAvailability() == KitAvailability.Blue ? ChatColor.GRAY + " (" + ChatColor.WHITE + "Ultra" + ChatColor.GRAY + ")" : ""));
entity.setCustomNameVisible(true);
entity.getEquipment().setItemInHand(_itemInHand);
if (type == EntityType.SHEEP)
{
Sheep sheep = (Sheep)entity;
sheep.setColor(DyeColor.PINK);
}
UtilEnt.Vegetate(entity);
SpawnCustom(entity);
return entity;
}
}

View File

@ -12,7 +12,6 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.barbarians.kits.*; import nautilus.game.arcade.game.games.barbarians.kits.*;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;

View File

@ -95,6 +95,7 @@ public class DeathTag extends SoloGame
//Undead Team //Undead Team
_chasers = new GameTeam("Chasers", ChatColor.RED, _runners.GetSpawns()); _chasers = new GameTeam("Chasers", ChatColor.RED, _runners.GetSpawns());
_chasers.SetVisible(false);
GetTeamList().add(_chasers); GetTeamList().add(_chasers);
RestrictKits(); RestrictKits();

View File

@ -1,7 +1,10 @@
package nautilus.game.arcade.game.games.hungergames; package nautilus.game.arcade.game.games.hungergames;
import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map.Entry;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Effect; import org.bukkit.Effect;
@ -11,14 +14,20 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest; import org.bukkit.block.Chest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.MapUtil;
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.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;
@ -39,9 +48,12 @@ public class HungerGames extends SoloGame
private HashSet<Location> _openedChest = new HashSet<Location>(); private HashSet<Location> _openedChest = new HashSet<Location>();
private ArrayList<ItemStack> _chestLoot = new ArrayList<ItemStack>(); private ArrayList<ItemStack> _chestLoot = new ArrayList<ItemStack>();
private ArrayList<Location> _redSpread = new ArrayList<Location>(); private ArrayList<Location> _redLocations = new ArrayList<Location>();
private HashSet<String> _redChunks = new HashSet<String>(); private int _spreadType = 0;
private boolean _ignoreLiquids = true;
private ArrayList<Entry<Integer, Integer>> _spreadTypeBlocks;
private HashMap<Player, Long> _redOutTime = new HashMap<Player, Long>();
public HungerGames(ArcadeManager manager) public HungerGames(ArcadeManager manager)
{ {
super(manager, GameType.HungerGames, super(manager, GameType.HungerGames,
@ -68,6 +80,7 @@ public class HungerGames extends SoloGame
this.SpawnDistanceRequirement = 48; this.SpawnDistanceRequirement = 48;
this.Damage = false;
this.DamageSelf = true; this.DamageSelf = true;
this.DamageTeamSelf = true; this.DamageTeamSelf = true;
@ -75,7 +88,32 @@ public class HungerGames extends SoloGame
this.GemMultiplier = 2; this.GemMultiplier = 2;
_spreadType = UtilMath.r(3);
System.out.println("===================");
System.out.println("SPREAD TYPE: " + _spreadType);
System.out.println("===================");
_spreadTypeBlocks = new ArrayList<Entry<Integer, Integer>>();
if (_spreadType == 0)
{
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(159, 14));
}
else if (_spreadType == 1)
{
_ignoreLiquids = false;
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(78, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(79, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(80, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(49, 0));
}
else if (_spreadType == 2)
{
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(87, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(88, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(89, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(153, 0));
}
} }
@Override @Override
@ -266,67 +304,50 @@ public class HungerGames extends SoloGame
Manager.GetCondition().EndCondition(damager, null, "Start Speed"); Manager.GetCondition().EndCondition(damager, null, "Start Speed");
} }
//If an item spawns and no one is there to see it, does it really spawn? No.
@EventHandler
public void ItemSpawn(ItemSpawnEvent event)
{
for (Player player : GetPlayers(true))
if (UtilMath.offset(player, event.getEntity()) < 6)
return;
event.setCancelled(true);
}
@EventHandler @EventHandler
public void RedBorderStart(GameStateChangeEvent event) public void RedBorderStart(GameStateChangeEvent event)
{ {
if (event.GetState() != GameState.Prepare) if (event.GetState() != GameState.Prepare)
return; return;
long time = System.currentTimeMillis();
/*
//X Borders
for (int x=WorldData.MinX/16 ; x<=WorldData.MaxX/16 ; x++)
{
_redChunks.add(UtilWorld.chunkToStr(WorldData.World.getChunkAt(x, WorldData.MinZ/16)));
_redChunks.add(UtilWorld.chunkToStr(WorldData.World.getChunkAt(x, WorldData.MaxZ/16)));
}
//Z Borders
for (int z=WorldData.MinZ/16 ; z<=WorldData.MaxZ/16 ; z++)
{
_redChunks.add(UtilWorld.chunkToStr(WorldData.World.getChunkAt(WorldData.MinX/16, z)));
_redChunks.add(UtilWorld.chunkToStr(WorldData.World.getChunkAt(WorldData.MaxX/16, z)));
}
*/
//Start Red //Start Red
Block block; Block block;
if (true)
{
block = WorldData.World.getHighestBlockAt(0, 0);
while (!UtilBlock.solid(block))
block = block.getRelative(BlockFace.DOWN);
_redSpread.add(block.getLocation());
return;
}
for (int x=WorldData.MinX ; x<=WorldData.MaxX ; x++) for (int x=WorldData.MinX ; x<=WorldData.MaxX ; x++)
{ {
block = WorldData.World.getHighestBlockAt(x, WorldData.MinZ); block = WorldData.World.getHighestBlockAt(x, WorldData.MinZ);
while (!UtilBlock.solid(block)) while (!UtilBlock.solid(block))
block = block.getRelative(BlockFace.DOWN); block = block.getRelative(BlockFace.DOWN);
_redSpread.add(block.getLocation()); _redLocations.add(block.getLocation());
block = WorldData.World.getHighestBlockAt(x, WorldData.MaxZ); block = WorldData.World.getHighestBlockAt(x, WorldData.MaxZ);
while (!UtilBlock.solid(block)) while (!UtilBlock.solid(block))
block = block.getRelative(BlockFace.DOWN); block = block.getRelative(BlockFace.DOWN);
_redSpread.add(block.getLocation()); _redLocations.add(block.getLocation());
} }
for (int z=WorldData.MinZ ; z<=WorldData.MaxZ ; z++) for (int z=WorldData.MinZ ; z<=WorldData.MaxZ ; z++)
{ {
block = WorldData.World.getHighestBlockAt(WorldData.MinX, z); block = WorldData.World.getHighestBlockAt(WorldData.MinX, z);
while (!UtilBlock.solid(block)) while (!UtilBlock.solid(block))
block = block.getRelative(BlockFace.DOWN); block = block.getRelative(BlockFace.DOWN);
_redSpread.add(block.getLocation()); _redLocations.add(block.getLocation());
block = WorldData.World.getHighestBlockAt(WorldData.MaxX, z); block = WorldData.World.getHighestBlockAt(WorldData.MaxX, z);
while (!UtilBlock.solid(block)) while (!UtilBlock.solid(block))
block = block.getRelative(BlockFace.DOWN); block = block.getRelative(BlockFace.DOWN);
_redSpread.add(block.getLocation()); _redLocations.add(block.getLocation());
} }
} }
@ -335,50 +356,56 @@ public class HungerGames extends SoloGame
{ {
if (event.getType() != UpdateType.TICK) if (event.getType() != UpdateType.TICK)
return; return;
if (!IsLive()) if (!IsLive())
return; return;
if (_redSpread.isEmpty()) if (_redLocations.isEmpty())
return; return;
System.out.println(_redSpread.size()); int max = Math.max(5, Math.min(400, _redLocations.size()/10));
int max = Math.max(5, Math.min(400, _redSpread.size()/10));
for (int i=0 ; i<max ; i++) for (int i=0 ; i<max ; i++)
{ {
if (_redSpread.isEmpty()) if (_redLocations.isEmpty())
return; break;
Location loc = _redSpread.get(UtilMath.r(_redSpread.size())); Location loc = _redLocations.remove(UtilMath.r(_redLocations.size()));
RedChangeBlock(loc, 159, (byte)14); //Already Red
if (IsRed(loc.getBlock()))
{
i = Math.max(0, i-1);
continue;
}
//Set to Red
SetRed(loc);
//Spread to Neighbours //Spread to Neighbours
Block block = loc.getBlock(); Block block = loc.getBlock();
RedSpread(block.getRelative(BlockFace.UP)); RedSpread(block.getRelative(BlockFace.UP));
RedSpread(block.getRelative(BlockFace.DOWN)); RedSpread(block.getRelative(BlockFace.DOWN));
if (!RedSpread(block.getRelative(BlockFace.NORTH))) if (!RedSpread(block.getRelative(BlockFace.NORTH)))
{ {
RedSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.UP)); RedSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.UP));
RedSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.DOWN)); RedSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.DOWN));
} }
if (!RedSpread(block.getRelative(BlockFace.EAST))) if (!RedSpread(block.getRelative(BlockFace.EAST)))
{ {
RedSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.UP)); RedSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.UP));
RedSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN)); RedSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN));
} }
if (!RedSpread(block.getRelative(BlockFace.SOUTH))) if (!RedSpread(block.getRelative(BlockFace.SOUTH)))
{ {
RedSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.UP)); RedSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.UP));
RedSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN)); RedSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN));
} }
if (!RedSpread(block.getRelative(BlockFace.WEST))) if (!RedSpread(block.getRelative(BlockFace.WEST)))
{ {
RedSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.UP)); RedSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.UP));
@ -386,46 +413,210 @@ public class HungerGames extends SoloGame
} }
} }
} }
public boolean RedSpread(Block block) public boolean RedSpread(Block block)
{ {
if (block.isLiquid()) //Liquid
if (_ignoreLiquids && block.isLiquid())
{
return false; return false;
}
if (block.getTypeId() == 159 && block.getData() == 14) //Pre-Red
if (IsRed(block))
{
return false; return false;
}
//Boundaries
if (block.getX() < WorldData.MinX) return false; if (!UtilBlock.solid(block) || UtilBlock.airFoliage(block) || block.getType() == Material.CHEST)
if (block.getX() > WorldData.MaxX) return false; {
if (block.getZ() < WorldData.MinZ) return false; if (!block.isLiquid())
if (block.getZ() > WorldData.MaxZ) return false; {
while (block.getType() == Material.VINE)
{
RedChangeBlock(block.getLocation(), 0, (byte)0);
block = block.getRelative(BlockFace.DOWN);
}
//Remove Foliage
if (block.getType() != Material.AIR)
RedChangeBlock(block.getLocation(), 0, (byte)0);
return false;
}
}
//Outside Boundaries
if (block.getX() < WorldData.MinX || block.getX() > WorldData.MaxX || block.getZ() < WorldData.MinZ || block.getZ() > WorldData.MaxZ)
{
return false;
}
//Inside Boundary
if (block.getChunk().getX() == 0 && block.getChunk().getZ() == 0)
{
return false;
}
//Not Visible
if (!UtilBlock.isVisible(block)) if (!UtilBlock.isVisible(block))
return false;
if (!UtilBlock.solid(block) || UtilBlock.airFoliage(block))
{ {
if (block.getType() != Material.AIR)
RedChangeBlock(block.getLocation(), 0, (byte)0);
return false; return false;
} }
//if (_redChunks.contains(UtilWorld.chunkToStr(block.getChunk()))) //Apply
if (!_redSpread.contains(block.getLocation())) _redLocations.add(block.getLocation());
{ return true;
_redSpread.add(block.getLocation());
return true;
}
return false;
} }
public void RedChangeBlock(Location loc, int id, byte data) public void RedChangeBlock(Location loc, int id, byte data)
{ {
MapUtil.ChunkBlockChange(loc, id, data); MapUtil.ChunkBlockChange(loc, id, data);
for (Player player : UtilServer.getPlayers()) for (Player player : UtilServer.getPlayers())
{
if (player.getLocation().getChunk().getX() - loc.getChunk().getX() > 6)
continue;
if (player.getLocation().getChunk().getZ() - loc.getChunk().getZ() > 6)
continue;
player.sendBlockChange(loc, id, data); player.sendBlockChange(loc, id, data);
}
}
public boolean IsRed(Block block)
{
for (Entry<Integer,Integer> entry : _spreadTypeBlocks)
{
if (block.getTypeId() == entry.getKey() && block.getData() == entry.getValue())
return true;
}
return false;
}
public void SetRed(Location loc)
{
//Red
if (_spreadType == 0)
{
RedChangeBlock(loc, 159, (byte)14);
}
//Snow
else if (_spreadType == 1)
{
if (loc.getBlock().getType() == Material.LEAVES) RedChangeBlock(loc, 79, (byte)0);
else if (loc.getBlock().getTypeId() == 8 || loc.getBlock().getTypeId() == 9) RedChangeBlock(loc, 79, (byte)0);
else if (loc.getBlock().getTypeId() == 10 || loc.getBlock().getTypeId() == 11) RedChangeBlock(loc, 49, (byte)0);
else RedChangeBlock(loc, 80, (byte)0);
}
//Nether
else
{
if (loc.getBlock().getType() == Material.LEAVES) RedChangeBlock(loc, 88, (byte)0);
else
{
double r = Math.random();
if (r > 0.1) RedChangeBlock(loc, 87, (byte)0);
else RedChangeBlock(loc, 153, (byte)0);
}
}
}
@EventHandler
public void RedAttack(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
return;
for (Player player : GetPlayers(true))
{
boolean near = false;
for (Block block : UtilBlock.getInRadius(player.getLocation(), 5d).keySet())
{
if (!IsRed(block))
continue;
near = true;
//Red
if (_spreadType == 0)
{
if (block.getRelative(BlockFace.UP).getType() == Material.AIR)
{
block.getRelative(BlockFace.UP).setType(Material.FIRE);
break;
}
}
//Snow
else if (_spreadType == 1)
{
if (Math.random() > 0.8)
{
Vector traj = UtilAlg.getTrajectory(block.getLocation().add(0.5, 1.5, 0.5), player.getLocation());
Snowball ball = player.getWorld().spawn(block.getLocation().add(0.5, 1.5, 0.5).subtract(traj.clone().multiply(8 + UtilMath.r(8))), Snowball.class);
ball.setVelocity(UtilAlg.getTrajectory(ball.getLocation(), player.getEyeLocation().add(0, 3, 0)).add(new Vector(Math.random()-0.5, Math.random()-0.5, Math.random()-0.5).multiply(0.1)));
}
}
//Nether
if (_spreadType == 2)
{
if (block.getRelative(BlockFace.UP).getType() == Material.AIR)
{
block.getRelative(BlockFace.UP).setType(Material.FIRE);
break;
}
}
}
if (!near)
{
if (!UtilEnt.isGrounded(player))
{
Block block = player.getLocation().getBlock();
while (!UtilBlock.solid(block) && block.getY() > 0)
block = block.getRelative(BlockFace.DOWN);
if (IsRed(block) || block.getY() == 0)
near = true;
}
}
if (near)
{
Manager.GetDamage().NewDamageEvent(player, null, null,
DamageCause.VOID, 1, false, true, false,
"Hunger Games", "Border");
player.sendMessage("INFECTION!");
}
}
}
@EventHandler
public void SnowballDamage(CustomDamageEvent event)
{
if (event.GetProjectile() == null)
return;
if (!(event.GetProjectile() instanceof Snowball))
return;
event.AddMod("Snowball", "Snowball", 1, false);
event.AddKnockback("Snowball", 4);
}
@EventHandler
public void DebugCmd(PlayerCommandPreprocessEvent event)
{
} }
} }

View File

@ -35,7 +35,7 @@ public class KitBlaze extends SmashKit
new Perk[] new Perk[]
{ {
new PerkSmashStats(6, 1.5, 0.25, 5), new PerkSmashStats(6, 1.5, 0.15, 5),
new PerkDoubleJump("Double Jump", 1, 1, false), new PerkDoubleJump("Double Jump", 1, 1, false),
new PerkKnockbackFire(1.50), new PerkKnockbackFire(1.50),
new PerkSpeed(0), new PerkSpeed(0),

View File

@ -0,0 +1,208 @@
package nautilus.game.arcade.game.games.squidshooter;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.quiver.QuiverScore;
import nautilus.game.arcade.game.games.squidshooter.kits.*;
import nautilus.game.arcade.kit.Kit;
public class SquidShooter extends SoloGame
{
private ArrayList<QuiverScore> _ranks = new ArrayList<QuiverScore>();
private ArrayList<String> _lastScoreboard = new ArrayList<String>();
public SquidShooter(ArcadeManager manager)
{
super(manager, GameType.SquidShooter,
new Kit[]
{
new KitRifle(manager),
new KitShotgun(manager),
new KitSniper(manager),
},
new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to " + C.cGreen + "Attack",
C.cYellow + "Tap Crouch" + C.cGray + " to use " + C.cGreen + "Squid Thrust",
"First player to 20 kills wins."
});
this.DeathOut = false;
this.DamageSelf = false;
this.DamageTeamSelf = true;
this.PrepareFreeze = false;
this.SpawnDistanceRequirement = 16;
this.CompassEnabled = true;
this.KitRegisterState = GameState.Prepare;
}
@EventHandler(priority = EventPriority.HIGH)
public void GameStateChange(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Live)
return;
GetObjectiveSide().setDisplayName(C.cWhite + C.Bold + "First to " + C.cGold + C.Bold + "20 Kills");
}
@EventHandler
public void Death(CombatDeathEvent event)
{
if (event.GetLog().GetKiller() == null)
return;
if (!event.GetLog().GetKiller().IsPlayer())
return;
Player player = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
if (player == null)
return;
//Score
AddKill(player);
}
public void AddKill(Player player)
{
//Rank
for (QuiverScore score : _ranks)
{
if (score.Player.equals(player))
{
score.Kills += 1;
EndCheck();
return;
}
}
_ranks.add(new QuiverScore(player, 1));
}
private void SortScores()
{
for (int i=0 ; i<_ranks.size() ; i++)
{
for (int j=_ranks.size()-1 ; j>0 ; j--)
{
if (_ranks.get(j).Kills > _ranks.get(j-1).Kills)
{
QuiverScore temp = _ranks.get(j);
_ranks.set(j, _ranks.get(j-1));
_ranks.set(j-1, temp);
}
}
}
}
@Override
@EventHandler
public void ScoreboardUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
//Wipe Last
for (String string : _lastScoreboard)
{
GetScoreboard().resetScores(Bukkit.getOfflinePlayer(string));
}
_lastScoreboard.clear();
SortScores();
//Write New
for (QuiverScore score : _ranks)
{
String out = score.Kills + " " + C.cGreen + score.Player.getName();
if (out.length() >= 16)
out = out.substring(0, 15);
_lastScoreboard.add(out);
GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(score.Kills);
}
}
@EventHandler
public void AirDamage(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTEST)
return;
if (!IsLive())
return;
for (Player player : GetPlayers(true))
{
if (player.getLocation().getBlock().isLiquid())
{
player.setFoodLevel(20);
continue;
}
//Damage
if (player.getFoodLevel() == 0)
player.damage(1);
//Hunger Lower
UtilPlayer.hunger(player, -1);
//Slow
if (UtilEnt.isGrounded(player))
Manager.GetCondition().Factory().Slow("On Land", player, player, 0.9, 2, false, false, false, false);
}
}
@Override
public void EndCheck()
{
if (!IsLive())
return;
SortScores();
if ((!_ranks.isEmpty() && _ranks.get(0).Kills >= 20) || GetPlayers(true).size() <= 1)
{
//Set Places
_places.clear();
for (int i=0 ; i<_ranks.size() ; i++)
_places.add(i, _ranks.get(i).Player);
//Award Gems
if (_ranks.size() >= 1)
AddGems(_ranks.get(0).Player, 20, "1st Place", false);
if (_ranks.size() >= 2)
AddGems(_ranks.get(1).Player, 15, "2nd Place", false);
if (_ranks.size() >= 3)
AddGems(_ranks.get(2).Player, 10, "3rd Place", false);
//Participation
for (Player player : GetPlayers(false))
if (player.isOnline())
AddGems(player, 10, "Participation", false);
SetState(GameState.End);
AnnounceEnd(_places);
}
}
}

View File

@ -0,0 +1,54 @@
package nautilus.game.arcade.game.games.squidshooter.kits;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.disguise.disguises.DisguiseSquid;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkSquidRifle;
import nautilus.game.arcade.kit.perks.PerkSquidSwim;
public class KitRifle extends Kit
{
public KitRifle(ArcadeManager manager)
{
super(manager, "Squid Gunner", KitAvailability.Free,
new String[]
{
"All rounder squid! Fast projectile and reload!"
},
new Perk[]
{
new PerkSquidSwim(),
new PerkSquidRifle()
},
EntityType.SQUID,
new ItemStack(Material.INK_SACK));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
ItemStack helm = ItemStackFactory.Instance.CreateStack(Material.DIAMOND_HELMET);
helm.addEnchantment(Enchantment.OXYGEN, 3);
player.getInventory().setHelmet(helm);
//Disguise
DisguiseSquid disguise = new DisguiseSquid(player);
disguise.SetName(C.cWhite + player.getName());
disguise.SetCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
}

View File

@ -0,0 +1,54 @@
package nautilus.game.arcade.game.games.squidshooter.kits;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.disguise.disguises.DisguiseSquid;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkSquidShotgun;
import nautilus.game.arcade.kit.perks.PerkSquidSwim;
public class KitShotgun extends Kit
{
public KitShotgun(ArcadeManager manager)
{
super(manager, "Squid Blaster", KitAvailability.Green,
new String[]
{
"Fires many slow projectiles."
},
new Perk[]
{
new PerkSquidSwim(),
new PerkSquidShotgun()
},
EntityType.SQUID,
new ItemStack(Material.INK_SACK));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
ItemStack helm = ItemStackFactory.Instance.CreateStack(Material.DIAMOND_HELMET);
helm.addEnchantment(Enchantment.OXYGEN, 3);
player.getInventory().setHelmet(helm);
//Disguise
DisguiseSquid disguise = new DisguiseSquid(player);
disguise.SetName(C.cWhite + player.getName());
disguise.SetCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
}

View File

@ -0,0 +1,54 @@
package nautilus.game.arcade.game.games.squidshooter.kits;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.disguise.disguises.DisguiseSquid;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkSquidSniper;
import nautilus.game.arcade.kit.perks.PerkSquidSwim;
public class KitSniper extends Kit
{
public KitSniper(ArcadeManager manager)
{
super(manager, "Squid Sniper", KitAvailability.Blue,
new String[]
{
"Hitting someone with Ink Sniper recharges it!"
},
new Perk[]
{
new PerkSquidSwim(),
new PerkSquidSniper()
},
EntityType.SQUID,
new ItemStack(Material.INK_SACK));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
ItemStack helm = ItemStackFactory.Instance.CreateStack(Material.DIAMOND_HELMET);
helm.addEnchantment(Enchantment.OXYGEN, 3);
player.getInventory().setHelmet(helm);
//Disguise
DisguiseSquid disguise = new DisguiseSquid(player);
disguise.SetName(C.cWhite + player.getName());
disguise.SetCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
}

View File

@ -0,0 +1,62 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Sound;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkBackstabKnockback extends Perk
{
public PerkBackstabKnockback()
{
super("Backstab", new String[]
{
C.cGray + "+250% Knockback from behind opponents.",
});
}
@EventHandler(priority = EventPriority.HIGH)
public void Damage(CustomDamageEvent event)
{
if (event.IsCancelled())
return;
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
return;
Player damager = event.GetDamagerPlayer(false);
if (damager == null) return;
if (!Kit.HasKit(damager))
return;
LivingEntity damagee = event.GetDamageeEntity();
if (damagee == null) return;
Vector look = damagee.getLocation().getDirection();
look.setY(0);
look.normalize();
Vector from = damager.getLocation().toVector().subtract(damagee.getLocation().toVector());
from.setY(0);
from.normalize();
Vector check = new Vector(look.getX() * -1, 0, look.getZ() * -1);
if (check.subtract(from).length() < 0.8)
{
//Damage
event.AddKnockback("Backstab Knockback", 2.5);
//Effect
damagee.getWorld().playSound(damagee.getLocation(), Sound.PIG_DEATH, 1f, 2f);
return;
}
}
}

View File

@ -0,0 +1,115 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
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.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import nautilus.game.arcade.kit.Perk;
public class PerkBaconBlast extends Perk implements IThrown
{
public PerkBaconBlast()
{
super("Bacon Blast", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Bacon Blast"
});
}
@EventHandler
public void Shoot(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() == null)
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(), 3000, true))
return;
event.setCancelled(true);
UtilInv.Update(player);
org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.PORK, (byte)0, 16));
UtilAction.velocity(ent, player.getLocation().getDirection(), 1, false, 0, 0.2, 10, false);
Manager.GetProjectile().AddThrow(ent, player, this, -1, true, true, true,
null, 1f, 1f,
null, 1, UpdateType.SLOW,
2d);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Effect
player.getWorld().playSound(player.getLocation(), Sound.PIG_IDLE, 2f, 2f);
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.PROJECTILE, 6, true, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
data.GetThrown().getWorld().createExplosion(data.GetThrown().getLocation(), 0.5f);
data.GetThrown().remove();
}
}

View File

@ -86,7 +86,7 @@ public class PerkFirefly extends Perk
FireflyData data = dataIterator.next(); FireflyData data = dataIterator.next();
//Teleport //Teleport
if (!UtilTime.elapsed(data.Time, 1000)) if (!UtilTime.elapsed(data.Time, 1250))
{ {
data.Player.setVelocity(new Vector(0,0,0));//.teleport(data.Location); data.Player.setVelocity(new Vector(0,0,0));//.teleport(data.Location);
data.Player.getWorld().playSound(data.Player.getLocation(), Sound.EXPLODE, 0.2f, 0.6f); data.Player.getWorld().playSound(data.Player.getLocation(), Sound.EXPLODE, 0.2f, 0.6f);
@ -148,7 +148,7 @@ public class PerkFirefly extends Perk
//Damage Event //Damage Event
Manager.GetDamage().NewDamageEvent(other, data.Player, null, Manager.GetDamage().NewDamageEvent(other, data.Player, null,
DamageCause.CUSTOM, 12, true, true, false, DamageCause.CUSTOM, 10, true, true, false,
data.Player.getName(), GetName()); data.Player.getName(), GetName());
UtilPlayer.message(other, F.main("Game", F.elem(Manager.GetColor(data.Player) + data.Player.getName()) + " hit you with " + F.elem(GetName()) + ".")); UtilPlayer.message(other, F.main("Game", F.elem(Manager.GetColor(data.Player) + data.Player.getName()) + " hit you with " + F.elem(GetName()) + "."));
@ -174,7 +174,7 @@ public class PerkFirefly extends Perk
if (!data.Player.equals(event.GetDamageeEntity())) if (!data.Player.equals(event.GetDamageeEntity()))
continue; continue;
if (!UtilTime.elapsed(data.Time, 1000))// && event.GetCause() == DamageCause.PROJECTILE) if (!UtilTime.elapsed(data.Time, 1250))// && event.GetCause() == DamageCause.PROJECTILE)
{ {
dataIterator.remove(); dataIterator.remove();
} }
@ -191,6 +191,6 @@ public class PerkFirefly extends Perk
if (event.GetReason() == null || !event.GetReason().contains(GetName())) if (event.GetReason() == null || !event.GetReason().contains(GetName()))
return; return;
event.AddKnockback(GetName(), 2.5); event.AddKnockback(GetName(), 2);
} }
} }

View File

@ -0,0 +1,104 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Effect;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.recharge.Recharge;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkPigCloak extends Perk
{
public PerkPigCloak()
{
super("Cloak", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to " + C.cGreen + "Cloak"
});
}
@EventHandler
public void Use(PlayerInteractEvent event)
{
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_AXE"))
return;
event.setCancelled(true);
if (!Recharge.Instance.use(player, GetName(), GetName(), 10000, true))
return;
//Action
Manager.GetCondition().Factory().Cloak(GetName(), player, player, 5, false, false);
for (int i=0 ; i<3 ; i++)
{
player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 2f, 0.5f);
player.getWorld().playEffect(player.getLocation(), Effect.STEP_SOUND, 80);
}
//Inform
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
}
@EventHandler(priority = EventPriority.HIGH)
public void EndDamagee(CustomDamageEvent event)
{
if (event.IsCancelled())
return;
Player damagee = event.GetDamageePlayer();
if (damagee == null) return;
if (!Kit.HasKit(damagee))
return;
//End
Manager.GetCondition().EndCondition(damagee, null, GetName());
}
@EventHandler(priority = EventPriority.HIGH)
public void EndDamager(CustomDamageEvent event)
{
if (event.IsCancelled())
return;
Player damager = event.GetDamagerPlayer(true);
if (damager == null) return;
if (!Kit.HasKit(damager))
return;
//End
Manager.GetCondition().EndCondition(damager, null, GetName());
}
@EventHandler
public void EndInteract(PlayerInteractEvent event)
{
if (!Kit.HasKit(event.getPlayer()))
return;
Manager.GetCondition().EndCondition(event.getPlayer(), null, GetName());
}
@EventHandler
public void Reset(PlayerDeathEvent event)
{
//Remove Condition
Manager.GetCondition().EndCondition(event.getEntity(), null, GetName());
}
}

View File

@ -0,0 +1,177 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Sound;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.block.Block;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.recharge.RechargedEvent;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSquidRifle extends Perk implements IThrown
{
private HashMap<Firework, Vector> _fireworks = new HashMap<Firework, Vector>();
public PerkSquidRifle()
{
super("Ink Blaster", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Ink Blaster"
});
}
@EventHandler
public void Recharge(RechargedEvent event)
{
if (!event.GetAbility().equals(GetName()))
return;
event.GetPlayer().playSound(event.GetPlayer().getLocation(), Sound.NOTE_STICKS, 3f, 1f);
}
@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().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 1500, true))
return;
event.setCancelled(true);
UtilInv.Update(player);
//Firework
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL).trail(false).build();
try
{
Vector vel = player.getLocation().getDirection().multiply(1.8);
Firework fw = Manager.GetFirework().launchFirework(player.getEyeLocation().subtract(0, 0.5, 0).add(player.getLocation().getDirection()), effect, vel);
_fireworks.put(fw, vel);
Manager.GetProjectile().AddThrow(fw, player, this, -1, true, true, true,
null, 1f, 1f,
null, 1, UpdateType.SLOW,
2.5d);
}
catch (Exception e)
{
e.printStackTrace();
}
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Effect
player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 1f, 0.75f);
}
@EventHandler
public void FireworkUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
Iterator<Firework> fwIterator = _fireworks.keySet().iterator();
while (fwIterator.hasNext())
{
Firework fw = fwIterator.next();
if (!fw.isValid())
{
fwIterator.remove();
continue;
}
fw.setVelocity(_fireworks.get(fw));
}
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.PROJECTILE, 50, false, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
if (!(data.GetThrown() instanceof Firework))
{
data.GetThrown().remove();
return;
}
Firework fw = (Firework)data.GetThrown();
try
{
Manager.GetFirework().detonateFirework(fw);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,194 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Sound;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.block.Block;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.recharge.RechargedEvent;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSquidShotgun extends Perk implements IThrown
{
private HashMap<Firework, Vector> _fireworks = new HashMap<Firework, Vector>();
public PerkSquidShotgun()
{
super("Ink Shotgun", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Ink Shotgun"
});
}
@EventHandler
public void Recharge(RechargedEvent event)
{
if (!event.GetAbility().equals(GetName()))
return;
event.GetPlayer().playSound(event.GetPlayer().getLocation(), Sound.NOTE_STICKS, 3f, 1f);
}
@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().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 2500, true))
return;
event.setCancelled(true);
UtilInv.Update(player);
//Firework
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.GREEN).with(Type.BURST).trail(false).build();
for (int i=0 ; i<6 ; i++)
{
Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5);
random.normalize();
random.multiply(0.3);
try
{
Vector vel = player.getLocation().getDirection().multiply(1.4).add(random);
Firework fw = Manager.GetFirework().launchFirework(player.getEyeLocation().subtract(0, 0.5, 0).add(player.getLocation().getDirection()), effect, vel);
_fireworks.put(fw, vel);
Manager.GetProjectile().AddThrow(fw, player, this, -1, true, true, true,
null, 1f, 1f,
null, 1, UpdateType.SLOW,
2.5d);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Effect
player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 1f, 0.75f);
}
@EventHandler
public void FireworkUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
Iterator<Firework> fwIterator = _fireworks.keySet().iterator();
while (fwIterator.hasNext())
{
Firework fw = fwIterator.next();
if (!fw.isValid())
{
fwIterator.remove();
continue;
}
fw.setVelocity(_fireworks.get(fw));
}
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.PROJECTILE, 12, false, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
//Recharge
if (data.GetThrower() instanceof Player)
{
Player player = (Player)data.GetThrower();
Recharge.Instance.recharge(player, GetName());
player.playSound(player.getLocation(), Sound.NOTE_STICKS, 3f, 1f);
}
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
if (!(data.GetThrown() instanceof Firework))
{
data.GetThrown().remove();
return;
}
Firework fw = (Firework)data.GetThrown();
try
{
Manager.GetFirework().detonateFirework(fw);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,185 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Sound;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.block.Block;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.recharge.RechargedEvent;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSquidSniper extends Perk implements IThrown
{
private HashMap<Firework, Vector> _fireworks = new HashMap<Firework, Vector>();
public PerkSquidSniper()
{
super("Ink Sniper", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Ink Sniper"
});
}
@EventHandler
public void Recharge(RechargedEvent event)
{
if (!event.GetAbility().equals(GetName()))
return;
event.GetPlayer().playSound(event.GetPlayer().getLocation(), Sound.NOTE_STICKS, 3f, 1f);
}
@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().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 4500, true))
return;
event.setCancelled(true);
UtilInv.Update(player);
//Firework
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.RED).with(Type.BALL_LARGE).trail(false).build();
try
{
Vector vel = player.getLocation().getDirection().multiply(3);
Firework fw = Manager.GetFirework().launchFirework(player.getEyeLocation().subtract(0, 0.5, 0).add(player.getLocation().getDirection()), effect, vel);
_fireworks.put(fw, vel);
Manager.GetProjectile().AddThrow(fw, player, this, -1, true, true, true,
null, 1f, 1f,
null, 1, UpdateType.SLOW,
3d);
}
catch (Exception e)
{
e.printStackTrace();
}
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Effect
player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 1f, 0.75f);
}
@EventHandler
public void FireworkUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
Iterator<Firework> fwIterator = _fireworks.keySet().iterator();
while (fwIterator.hasNext())
{
Firework fw = fwIterator.next();
if (!fw.isValid())
{
fwIterator.remove();
continue;
}
fw.setVelocity(_fireworks.get(fw));
}
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.PROJECTILE, 50, false, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
//Recharge
if (data.GetThrower() instanceof Player)
{
Player player = (Player)data.GetThrower();
Recharge.Instance.recharge(player, GetName());
player.playSound(player.getLocation(), Sound.NOTE_STICKS, 3f, 1f);
}
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
if (!(data.GetThrown() instanceof Firework))
{
data.GetThrown().remove();
return;
}
Firework fw = (Firework)data.GetThrown();
try
{
Manager.GetFirework().detonateFirework(fw);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,83 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilTime;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSquidSwim extends Perk
{
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
public PerkSquidSwim()
{
super("Swimming", new String[]
{
C.cYellow + "Tap Crouch" + C.cGray + " to use " + C.cGreen + "Squid Thrust"
});
}
@EventHandler
public void Use(PlayerToggleSneakEvent event)
{
if (event.isCancelled())
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
event.setCancelled(true);
if (!player.getLocation().getBlock().isLiquid())
return;
if (!Recharge.Instance.use(player, GetName(), 500, false))
return;
//Velocity
UtilAction.velocity(player, 0.9, 0.2, 2, false);
//Sound
player.getWorld().playSound(player.getLocation(), Sound.SPLASH, 0.5f, 0.75f);
_active.put(player, System.currentTimeMillis());
}
@EventHandler
public void Reuse(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
Iterator<Player> swimIterator = _active.keySet().iterator();
while (swimIterator.hasNext())
{
Player player = swimIterator.next();
if (UtilTime.elapsed(_active.get(player), 200))
{
swimIterator.remove();
continue;
}
if (!player.getLocation().getBlock().isLiquid())
continue;
UtilAction.velocity(player, 0.9, 0.2, 2, false);
}
}
}

View File

@ -598,7 +598,7 @@ public class GameFlagManager implements Listener
if (!game.PrepareFreeze) if (!game.PrepareFreeze)
return; return;
if (UtilMath.offset(event.getFrom(), event.getTo()) <= 0) if (UtilMath.offset2d(event.getFrom(), event.getTo()) <= 0)
return; return;
event.getFrom().setPitch(event.getTo().getPitch()); event.getFrom().setPitch(event.getTo().getPitch());

View File

@ -210,7 +210,7 @@ public class GameManager implements Listener
@EventHandler @EventHandler
public void KitRegister(GameStateChangeEvent event) public void KitRegister(GameStateChangeEvent event)
{ {
if (event.GetState() != GameState.Live) if (event.GetState() != event.GetGame().KitRegisterState)
return; return;
event.GetGame().RegisterKits(); event.GetGame().RegisterKits();

View File

@ -6,6 +6,7 @@ import org.bukkit.FireworkEffect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Firework; import org.bukkit.entity.Firework;
import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.util.Vector;
public class FireworkHandler public class FireworkHandler
{ {
@ -57,4 +58,44 @@ public class FireworkHandler
} }
return null; return null;
} }
public Firework launchFirework(Location loc, FireworkEffect fe, Vector dir) throws Exception
{
Firework fw = (Firework) loc.getWorld().spawn(loc, Firework.class);
FireworkMeta data = (FireworkMeta) fw.getFireworkMeta();
data.clearEffects();
data.setPower(1);
data.addEffect(fe);
fw.setFireworkMeta(data);
fw.setVelocity(dir);
return fw;
}
public void detonateFirework(Firework fw) throws Exception
{
Object nms_world = null;
Object nms_firework = null;
if(world_getHandle == null)
{
world_getHandle = getMethod(fw.getWorld().getClass(), "getHandle");
firework_getHandle = getMethod(fw.getClass(), "getHandle");
}
nms_world = world_getHandle.invoke(fw.getWorld(), (Object[]) null);
nms_firework = firework_getHandle.invoke(fw, (Object[]) null);
if(nms_world_broadcastEntityEffect == null)
{
nms_world_broadcastEntityEffect = getMethod(nms_world.getClass(), "broadcastEntityEffect");
}
nms_world_broadcastEntityEffect.invoke(nms_world, new Object[] {nms_firework, (byte) 17});
fw.remove();
}
} }

Binary file not shown.