diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 0ffeabe1d..6fc68b0f8 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -93,31 +93,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java index 3d43f9a97..ea5a1a447 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilInv.java @@ -246,6 +246,23 @@ public class UtilInv event.setCancelled(true); } } + + public static void refreshDurability(Player player, Material type) + { + for (ItemStack item : player.getInventory().getContents()) + if (item != null) + if (item.getType() == type) + { + if (item.getDurability() == 0) + { + item.setDurability((short) 1); + } + else + { + item.setDurability((short) 0); + } + } + } } diff --git a/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/AsyncLoginThread.java b/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/AsyncLoginThread.java index 1bb2253d0..a24ab54d9 100644 --- a/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/AsyncLoginThread.java +++ b/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/AsyncLoginThread.java @@ -21,7 +21,7 @@ public class AsyncLoginThread extends Thread // CraftBukkit end this.pendingConnection = pendingconnection; } - + public void run() { try diff --git a/Plugins/Nautilus.Game.Arcade/.externalToolBuilders/Arcade Builder.launch b/Plugins/Nautilus.Game.Arcade/.externalToolBuilders/Arcade Builder.launch index 0d48570d7..423d992d2 100644 --- a/Plugins/Nautilus.Game.Arcade/.externalToolBuilders/Arcade Builder.launch +++ b/Plugins/Nautilus.Game.Arcade/.externalToolBuilders/Arcade Builder.launch @@ -14,5 +14,5 @@ - + diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/events/PlayerGameRespawnEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/events/PlayerGameRespawnEvent.java new file mode 100644 index 000000000..943c3cab8 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/events/PlayerGameRespawnEvent.java @@ -0,0 +1,40 @@ +package nautilus.game.arcade.events; + +import nautilus.game.arcade.game.Game; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlayerGameRespawnEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + private Game _game; + private Player _player; + + public PlayerGameRespawnEvent(Game game, Player player) + { + _game = game; + _player = player; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public Game GetGame() + { + return _game; + } + + public Player GetPlayer() + { + return _player; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 4e735d939..c7b1302a8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -20,6 +20,7 @@ import nautilus.game.arcade.ArcadeFormat; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.events.PlayerStateChangeEvent; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.kit.Kit; @@ -98,7 +99,7 @@ public abstract class Game implements Listener //Loaded from Map Config public WorldData WorldData = null; - + //Game Help private long _helpTimer = 0; private int _helpIndex = 0; @@ -160,21 +161,21 @@ public abstract class Game implements Listener public boolean RepairWeapons = true; public boolean Autobalance = true; - + public boolean AnnounceStay = true; public boolean AnnounceJoinQuit = true; public boolean AnnounceSilence = true; public boolean DisplayLobbySide = true; - + public boolean AutoStart = true; - + public GameState KitRegisterState = GameState.Live; //Addons public boolean CompassEnabled = false; public boolean SoupEnabled = true; - + public double GemMultiplier = 1; //Gameplay Data @@ -205,7 +206,7 @@ public abstract class Game implements Listener _sideObjective = _scoreboard.registerNewObjective("Obj"+UtilMath.r(999999999), "dummy"); _sideObjective.setDisplaySlot(DisplaySlot.SIDEBAR); _sideObjective.setDisplayName(C.Bold + GetName()); - + //Map _files = Manager.LoadFiles(GetName()); WorldData = new WorldData(this); @@ -558,7 +559,7 @@ public abstract class Game implements Listener { _playerKit.get(player).Deselected(player); } - + _playerKit.put(player, kit); kit.Selected(player); @@ -567,7 +568,7 @@ public abstract class Game implements Listener player.playSound(player.getLocation(), Sound.ORB_PICKUP, 2f, 1f); UtilPlayer.message(player, F.main("Kit", "You equipped " + F.elem(kit.GetFormattedName() + " Kit") + ".")); } - + if (InProgress()) kit.ApplyKit(player); } @@ -595,7 +596,7 @@ public abstract class Game implements Listener { if (!IsAlive(player)) return false; - + if (GetKit(player) == null) return false; @@ -629,6 +630,10 @@ public abstract class Game implements Listener Manager.Clear(player); + //Event + PlayerGameRespawnEvent event = new PlayerGameRespawnEvent(this, player); + UtilServer.getServer().getPluginManager().callEvent(event); + //Re-Give Kit Manager.GetPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable() { @@ -672,7 +677,7 @@ public abstract class Game implements Listener return null; } - + public GameTeam GetTeam(Player player) { for (GameTeam team : _teamList) @@ -966,7 +971,7 @@ public abstract class Game implements Listener UtilPlayer.message(player, message); } - + System.out.println("[Announcement] " + message); } @@ -985,7 +990,7 @@ public abstract class Game implements Listener { if (_help == null || _help.length == 0) return; - + if (event.getType() != UpdateType.SEC) return; @@ -994,7 +999,7 @@ public abstract class Game implements Listener if (!UtilTime.elapsed(_helpTimer, 8000)) return; - + if (_helpColor == ChatColor.YELLOW) _helpColor = ChatColor.GREEN; else @@ -1003,14 +1008,14 @@ public abstract class Game implements Listener _helpTimer = System.currentTimeMillis(); String msg = C.cWhite + C.Bold + "TIP " + ChatColor.RESET + _helpColor + _help[_helpIndex]; - + for (Player player : UtilServer.getPlayers()) { player.playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 1f, 1f); UtilPlayer.message(player, msg); } - + _helpIndex = (_helpIndex + 1)%_help.length; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java new file mode 100644 index 000000000..59f55652b --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java @@ -0,0 +1,41 @@ +package nautilus.game.arcade.game.games.moba; + +import java.util.ArrayList; + +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.GameType; +import nautilus.game.arcade.game.TeamGame; +import nautilus.game.arcade.game.games.sheep.kits.*; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.NullKit; + +public class Moba extends TeamGame +{ + private ArrayList _lastScoreboard = new ArrayList(); + + public Moba(ArcadeManager manager) + { + super(manager, GameType.Sheep, + + new Kit[] + { + new NullKit(manager) + }, + + new String[] + { + "..." + }); + + this.DeathOut = false; + this.DeathSpectateSecs = 8; + + this.HungerSet = 20; + } + + @Override + public void ParseData() + { + + } +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java index dfd996b3f..abaeb21dc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java @@ -2,9 +2,11 @@ package nautilus.game.arcade.game.games.sheep; import java.util.ArrayList; +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.UtilDisplay; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; @@ -104,6 +106,7 @@ public class SheepData Host.AddGems(Holder, 3, "Sheep Captured", true); UtilPlayer.message(Holder, F.main("Game", "You captured a Sheep!")); + UtilDisplay.displayTextBar(Host.Manager.GetPlugin(), Holder, 0f, C.cGreen + C.Bold + "You captured a Sheep!"); } Holder = null; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepGame.java index e14167468..cfe79b59c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepGame.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.sheep; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import org.bukkit.Bukkit; @@ -15,39 +16,55 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.FireworkEffect.Type; import org.bukkit.block.Block; +import org.bukkit.entity.Chicken; import org.bukkit.entity.Entity; +import org.bukkit.entity.Giant; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Sheep; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; 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.UtilDisplay; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; +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 mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.sheep.kits.*; import nautilus.game.arcade.kit.Kit; +import net.minecraft.server.v1_6_R3.Item; public class SheepGame extends TeamGame { @@ -72,7 +89,8 @@ public class SheepGame extends TeamGame new Kit[] { new KitBeserker(manager), - new KitArcher(manager) + new KitArcher(manager), + new KitBrute(manager) }, new String[] @@ -85,8 +103,10 @@ public class SheepGame extends TeamGame this.DeathOut = false; this.DeathSpectateSecs = 8; - + this.HungerSet = 20; + + this.WorldTimeSet = 2000; } @Override @@ -168,7 +188,7 @@ public class SheepGame extends TeamGame { if (!IsLive()) return; - + if (!(event.getRightClicked() instanceof Sheep)) return; @@ -177,6 +197,9 @@ public class SheepGame extends TeamGame Player player = event.getPlayer(); + if (!Recharge.Instance.usable(player, "Sheep Stack")) + return; + if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.SADDLE) return; @@ -185,6 +208,11 @@ public class SheepGame extends TeamGame if (!IsAlive(event.getPlayer())) return; + + if (player.getPassenger() != null && player.getPassenger() instanceof Player) + { + DropSheep(player); + } //Holding too many int count = 0; @@ -217,32 +245,101 @@ public class SheepGame extends TeamGame //Effect event.getRightClicked().getWorld().playEffect(event.getRightClicked().getLocation(), Effect.STEP_SOUND, 35); - + //Stack top.setPassenger(event.getRightClicked()); //Audio player.playSound(player.getLocation(), Sound.SHEEP_IDLE, 2f, 3f); } - + @EventHandler - public void Drop(PlayerDropItemEvent event) + public void StackPlayer(PlayerInteractEntityEvent event) + { + if (!IsLive()) + return; + + if (!(event.getRightClicked() instanceof Player)) + return; + + if (event.getRightClicked().getVehicle() != null) + return; + + Player player = event.getPlayer(); + Player other = (Player)event.getRightClicked(); + + if (!(GetKit(player) instanceof KitBrute)) + return; + + if (!GetTeam(player).HasPlayer(other)) + return; + + if (player.getPassenger() != null) + DropSheep(player); + + if (!Recharge.Instance.usable(player, "Sheep Stack")) + return; + + if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.SADDLE) + return; + + if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) + return; + + if (!IsAlive(event.getPlayer())) + return; + + //Effect + event.getRightClicked().getWorld().playEffect(event.getRightClicked().getLocation(), Effect.STEP_SOUND, 35); + + //Stack + player.setPassenger(other); + + //Audio + player.playSound(player.getLocation(), Sound.VILLAGER_YES, 2f, 3f); + other.playSound(player.getLocation(), Sound.VILLAGER_NO, 2f, 3f); + + //Inform + UtilPlayer.message(other, F.main("Skill", F.elem(GetTeam(player).GetColor() + player.getName()) + " picked you up.")); + UtilPlayer.message(player, F.main("Skill", "You picked up " + F.elem(GetTeam(player).GetColor() + player.getName()) + ".")); + } + + @EventHandler + public void DeathDrop(PlayerDeathEvent event) + { + DropSheep(event.getEntity()); + } + + public void DropSheep(Player player) { boolean hadSheep = false; - - Entity top = event.getPlayer(); + + Entity top = player; while (top.getVehicle() != null) { top = top.getVehicle(); top.eject(); - + hadSheep = true; } - + if (hadSheep) - UtilDisplay.displayTextBar(Manager.GetPlugin(), event.getPlayer(), 0f, C.cWhite + C.Bold + "You dropped your Sheep!"); - - event.getPlayer().setExp(0f); + UtilDisplay.displayTextBar(Manager.GetPlugin(), player, 0f, C.cRed + C.Bold + "You dropped your Sheep!"); + + player.setExp(0f); + + player.getInventory().remove(Material.WOOL); + + Manager.GetCondition().EndCondition(player, ConditionType.SLOW, null); + + //Audio + player.playSound(player.getLocation(), Sound.SHEEP_IDLE, 2f, 1f); + } + + @EventHandler + public void Drop(PlayerDropItemEvent event) + { + DropSheep(event.getPlayer()); } @EventHandler @@ -282,14 +379,14 @@ public class SheepGame extends TeamGame top = top.getPassenger(); count++; } - + player.setExp(0.33f * (float)count); if (count == 0) continue; Manager.GetCondition().Factory().Slow("Sheep Slow", player, player, 3, count-1, false, false, false, true); - + UtilDisplay.displayTextBar(Manager.GetPlugin(), player, (float)count/3f, C.Bold + "Return the Sheep to your Team Pen!"); } } @@ -299,7 +396,7 @@ public class SheepGame extends TeamGame { if (event.IsCancelled()) return; - + if (event.GetDamageeEntity().getVehicle() == null) return; @@ -314,44 +411,42 @@ public class SheepGame extends TeamGame event.GetCause(), event.GetDamageInitial(), true, false, false, UtilEnt.getName(event.GetDamagerEntity(true)), event.GetReason()); } - + + @EventHandler(priority = EventPriority.LOWEST) + public void DamageSuffocate(CustomDamageEvent event) + { + if (event.GetCause() == DamageCause.SUFFOCATION) + event.SetCancelled("Sheep Game"); + } + @EventHandler(priority = EventPriority.MONITOR) public void DamageUnstack(CustomDamageEvent event) { if (event.IsCancelled()) return; - + if (event.GetCause() != DamageCause.ENTITY_ATTACK && event.GetCause() != DamageCause.PROJECTILE && event.GetCause() != DamageCause.CUSTOM) return; - + Player player = event.GetDamageePlayer(); if (player == null) return; - - boolean hadSheep = false; - Entity rider = player.getPassenger(); - while (rider != null) - { - rider.leaveVehicle(); - rider.setVelocity(new Vector(0.25 - Math.random()/2, Math.random()/2, 0.25 - Math.random()/2)); - rider = rider.getPassenger(); - - hadSheep = true; - } - - if (hadSheep) - UtilDisplay.displayTextBar(Manager.GetPlugin(), player, 0f, C.cRed + C.Bold + "You dropped your Sheep!"); - - player.setExp(0f); + DropSheep(player); } - + @EventHandler public void InventoryClick(InventoryClickEvent event) { event.setCancelled(true); event.getWhoClicked().closeInventory(); } - + + @EventHandler + public void RespawnInvul(PlayerGameRespawnEvent event) + { + Manager.GetCondition().Factory().Regen("Respawn", event.GetPlayer(), event.GetPlayer(), 5, 3, false, false, true); + } + @EventHandler public void ScoreboardTimer(UpdateEvent event) { @@ -544,4 +639,29 @@ public class SheepGame extends TeamGame } } } + /* + @EventHandler + public void Giant(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().contains("/giant")) + { + Giant giant = event.getPlayer().getWorld().spawn(event.getPlayer().getLocation(), Giant.class); + + Entity top = giant; + for (int i=0 ; i < 10 ; i++) + { + Entity buffer = event.getPlayer().getWorld().spawn(event.getPlayer().getLocation(), Chicken.class); + top.setPassenger(buffer); + top = buffer; + } + + top.setPassenger(event.getPlayer()); + } + } + + @EventHandler + public void Invul(CustomDamageEvent event) + { + event.SetCancelled("True"); + }*/ } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitArcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitArcher.java index 4fc4a535c..f9ef09a84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitArcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitArcher.java @@ -5,10 +5,15 @@ import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; 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.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; @@ -75,4 +80,13 @@ public class KitArcher extends Kit ent.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); ent.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); } + + @EventHandler + public void RefreshInventory(UpdateEvent event) + { + if (event.getType() == UpdateType.SLOW) + for (Player player : Manager.GetGame().GetPlayers(true)) + if (this.HasKit(player)) + UtilInv.refreshDurability(player, Material.WOOD_SWORD); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitBrute.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitBrute.java index a73fcef13..7d4ee343c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitBrute.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/kits/KitBrute.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; +import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.Kit; @@ -22,21 +23,23 @@ public class KitBrute extends Kit new String[] { - "Can throw sheep at enemies!" + "Can throw sheep at enemies!", + "", + C.cYellow + "Right-Click" + C.cGray + " with Sword to " + C.cGreen + "Throw Sheep" }, new Perk[] { - new PerkLeap("Beserker Leap", 1.2, 1.2, 8000) + new PerkThrower(manager) }, EntityType.ZOMBIE, - new ItemStack(Material.IRON_AXE)); + new ItemStack(Material.IRON_SWORD)); } @Override public void GiveItems(Player player) { - player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE)); + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD)); player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.SADDLE)); ItemStack helm = new ItemStack(Material.LEATHER_HELMET); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java index b184c801a..669fde20f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernalHorror.java @@ -55,6 +55,9 @@ public class PerkInfernalHorror extends Perk if (event.GetCause() == DamageCause.FIRE_TICK) return; + + if (event.GetCause() == DamageCause.VOID) + return; Player damager = event.GetDamagerPlayer(true); if (damager == null) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkThrower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkThrower.java new file mode 100644 index 000000000..cb68bd30a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkThrower.java @@ -0,0 +1,132 @@ +package nautilus.game.arcade.kit.perks; + +import java.util.HashSet; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.recharge.Recharge; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.Perk; + +public class PerkThrower extends Perk implements IThrown +{ + public PerkThrower(ArcadeManager manager) + { + super("Thrower", new String[] + { + C.cGray + "You can pick up team mates!", + C.cYellow + "Right-Click" + C.cGray + " with Sword to " + C.cGreen + "Throw Sheep", + }); + } + + @EventHandler + public void Throw(PlayerInteractEvent event) + { + if (!UtilEvent.isAction(event, ActionType.R)) + return; + + Player thrower = event.getPlayer(); + + if (!UtilGear.isMat(thrower.getItemInHand(), Material.IRON_SWORD)) + return; + + if (thrower.getPassenger() == null) + return; + + Entity throwee = thrower.getPassenger(); + if (throwee == null) + return; + + thrower.eject(); + + Entity throweeStack = throwee.getPassenger(); + if (throweeStack != null) + { + throwee.eject(); + throweeStack.leaveVehicle(); + + final Entity fThrower = thrower; + final Entity fThroweeStack = throweeStack; + + Manager.GetPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable() + { + public void run() + { + fThrower.setPassenger(fThroweeStack); + } + }, 2); + } + + //Throw + UtilAction.velocity(throwee, thrower.getLocation().getDirection(), 1.4, false, 0, 0.3, 0.8, true); + Manager.GetProjectile().AddThrow(throwee, thrower, this, -1, true, false, true, false, 2d); + + //Audio + thrower.getWorld().playSound(thrower.getLocation(), Sound.SHEEP_IDLE, 2f, 3f); + + //Disallow stacking for 0.5s + Recharge.Instance.useForce(thrower, "Sheep Stack", 500); + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (target == null) + return; + + if (target instanceof Player) + { + if (!Manager.GetGame().IsAlive((Player)target)) + { + return; + } + } + + //Damage Event + Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null, + DamageCause.CUSTOM, 6, false, true, false, + UtilEnt.getName(data.GetThrower()), GetName()); + + //Bounce + Vector dir = UtilAlg.getTrajectory(data.GetThrown(), target); + if (dir.getY() < 0) dir.setY(0); + UtilAction.velocity(target, dir, 1.2, false, 0, 0.4, 1, true); + + dir = UtilAlg.getTrajectory(target, data.GetThrown()); + if (dir.getY() < 0) dir.setY(0); + UtilAction.velocity(data.GetThrown(), dir, 1.2, false, 0, 0.4, 1, true); + + //Effect + data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.SHEEP_IDLE, 3f, 5f); + } + + @Override + public void Idle(ProjectileUser data) + { + + } + + @Override + public void Expire(ProjectileUser data) + { + + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 1b2bd8bdc..1ceebdd61 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -555,7 +555,7 @@ public class GameFlagManager implements Listener } } - //RESPAW + //RESPAWN if (game.DeathSpectateSecs <= 0) { //Teleport @@ -577,6 +577,7 @@ public class GameFlagManager implements Listener } }, 0); } + //TIMER else { UtilInv.Clear(player); @@ -585,6 +586,13 @@ public class GameFlagManager implements Listener player.setGameMode(GameMode.CREATIVE); player.setFlying(true); + for (int i=0 ; i<9 ; i++) + player.getInventory().setItem(i, new ItemStack(Material.SKULL)); + + UtilAction.velocity(player, new Vector(0,0,0), 1, true, 0.4, 0, 1, true); + + UtilPlayer.message(player, C.cWhite + C.Bold + "You will respawn in " + game.DeathSpectateSecs + " seconds..."); + Manager.GetPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable() { public void run()