diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index 4def8555c..4399943a5 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -381,7 +381,7 @@ public class UtilEnt for (Entity cur : loc.getWorld().getEntities()) { - if (!(cur instanceof LivingEntity) || (cur instanceof Player && ((Player)cur).getGameMode() == GameMode.CREATIVE)) + if (!(cur instanceof LivingEntity) || UtilPlayer.isSpectator(cur)) continue; LivingEntity ent = (LivingEntity)cur; diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java index d938bd6ac..fba19e78d 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java @@ -123,7 +123,7 @@ public class UtilPlayer for (Entity entity : p.getNearbyEntities(range, range, range)) { - if (entity == p || (entity instanceof Player && ((Player) entity).getGameMode() == GameMode.CREATIVE)) + if (entity == p || UtilPlayer.isSpectator(entity)) continue; double theirDist = p.getEyeLocation().distance(entity.getLocation()); @@ -164,7 +164,7 @@ public class UtilPlayer for (Entity entity : player.getNearbyEntities(rangeToScan, rangeToScan, rangeToScan)) { - if (entity == player || (entity instanceof Player && ((Player) entity).getGameMode() == GameMode.CREATIVE)) + if (entity == player || UtilPlayer.isSpectator(entity)) continue; if (avoidNonLiving && !(entity instanceof LivingEntity)) @@ -393,7 +393,7 @@ public class UtilPlayer for (Player cur : loc.getWorld().getPlayers()) { - if (cur.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(cur)) continue; if (cur.isDead()) @@ -427,7 +427,7 @@ public class UtilPlayer for (Player cur : loc.getWorld().getPlayers()) { - if (cur.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(cur)) continue; if (cur.isDead()) @@ -455,7 +455,7 @@ public class UtilPlayer for (Player cur : loc.getWorld().getPlayers()) { - if (cur.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(cur)) continue; if (cur.isDead()) @@ -500,7 +500,7 @@ public class UtilPlayer for (Player cur : loc.getWorld().getPlayers()) { - if (cur.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(cur)) continue; double offset = UtilMath.offset(loc, cur.getLocation()); @@ -575,6 +575,13 @@ public class UtilPlayer ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); } + public static boolean isSpectator(Entity player) + { + if (player instanceof Player) + return ((CraftPlayer) player).getHandle().spectating; + return false; + } + /* public void setListName(Player player, CoreClient client) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java index ecb29e936..5101f26be 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/AntiHack.java @@ -192,7 +192,7 @@ public class AntiHack extends MiniPlugin if (player.equals(other)) continue; - if (other.getGameMode() != GameMode.SURVIVAL) + if (other.getGameMode() != GameMode.SURVIVAL || UtilPlayer.isSpectator(player)) continue; if (other.getVehicle() != null) @@ -202,7 +202,7 @@ public class AntiHack extends MiniPlugin return true; } - if (player.isFlying() || player.isInsideVehicle() || player.getGameMode() != GameMode.SURVIVAL) + if (player.isFlying() || player.isInsideVehicle() || player.getGameMode() != GameMode.SURVIVAL || UtilPlayer.isSpectator(player)) { return true; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Reach.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Reach.java index 390eebe4b..257a35387 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Reach.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Reach.java @@ -8,6 +8,7 @@ import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.Detector; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -44,7 +45,7 @@ public class Reach extends MiniPlugin implements Detector for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() != GameMode.SURVIVAL) + if (player.getGameMode() != GameMode.SURVIVAL || UtilPlayer.isSpectator(player)) continue; if (!_history.containsKey(player)) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java index 7ea7a5805..b77c840ff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java @@ -160,7 +160,7 @@ public class MorphWither extends MorphGadget for (Player player : GetActive()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(player)) continue; player.setAllowFlight(true); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java index ea3c6ea22..4418644cc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java @@ -63,7 +63,7 @@ public class ParticleHeart extends ParticleGadget { if (other.equals(player)) continue; - if (other.getGameMode() != GameMode.SURVIVAL) + if (!UtilPlayer.isSpectator(other)) continue; if (_target.get(player).containsKey(other)) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java index b529a18ea..3dadb6995 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java @@ -34,7 +34,7 @@ public abstract class ParticleGadget extends Gadget public boolean shouldDisplay(Player player) { - if (player.getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(player)) return false; if (Manager.hideParticles()) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java index 83807fbc3..876a95580 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java @@ -4,6 +4,7 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.disguises.DisguiseSquid; @@ -133,8 +134,9 @@ public class ProjectileUser if (ent.equals(_thrower)) continue; + //Creative or Spec if (ent instanceof Player) - if (((Player)ent).getGameMode() == GameMode.CREATIVE) + if (((Player)ent).getGameMode() == GameMode.CREATIVE || UtilPlayer.isSpectator(ent)) continue; EntityType disguise = null; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java index 7eaf5165a..b078c8a9b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java @@ -150,7 +150,7 @@ public class DwarfToss extends SkillActive if (target instanceof Player) { - if (((Player)target).getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(target)) { UtilPlayer.message(player, F.main(GetClassType().name(), F.name(((Player)target).getName()) + " is not attackable.")); return; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java index ec8ff837f..7c02a07ed 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java @@ -116,7 +116,7 @@ public class Takedown extends SkillActive for (Player player : GetUsers()) if (_live.containsKey(player)) for (Player other : player.getWorld().getPlayers()) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!UtilPlayer.isSpectator(other)) if (!other.equals(player)) if (Factory.Relation().canHurt(player, other)) if (UtilMath.offset(player, other) < 2) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java index 86c033eef..982616076 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java @@ -103,7 +103,7 @@ public class Taunt extends SkillActive for (Player player : GetUsers()) if (_live.containsKey(player)) for (Player other : player.getWorld().getPlayers()) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!UtilPlayer.isSpectator(other)) if (!other.equals(player)) if (Factory.Relation().canHurt(player, other)) if (UtilMath.offset(player, other) < 7 && UtilMath.offset(player, other) > 2) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java index 07e9cbe6c..5ac6baee7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java @@ -188,7 +188,7 @@ public class ArcticArmor extends Skill for (Player cur : UtilServer.getPlayers()) { - if (cur.getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(cur)) continue; if (cur.getEyeLocation().getBlock().getType() == Material.ICE) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java index 22b6bf1eb..dd6753902 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java @@ -102,7 +102,7 @@ public class WolfsPounce extends SkillChargeSword for (Player other : player.getWorld().getPlayers()) { - if (other.getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(other)) continue; if (other.equals(player)) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java index 5930ef5e5..b8d2f31ab 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java @@ -90,7 +90,7 @@ public class ProximityExplosive extends ItemUsable @EventHandler(priority = EventPriority.LOW) public void Pickup(PlayerPickupItemEvent event) { - if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(event.getPlayer())) return; if (((CraftPlayer)event.getPlayer()).getHandle().spectating) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java index 8ed69d3e8..33da5e43d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java @@ -87,7 +87,7 @@ public class ProximityZapper extends ItemUsable @EventHandler(priority = EventPriority.LOW) public void Pickup(PlayerPickupItemEvent event) { - if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) + if (UtilPlayer.isSpectator(event.getPlayer())) return; if (((CraftPlayer)event.getPlayer()).getHandle().spectating) diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java index 28c0f1aee..6cfe40760 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java @@ -182,6 +182,12 @@ public class DamageManager extends MiniPlugin event.SetCancelled("Damagee in Creative"); return; } + + if (UtilPlayer.isSpectator(damagee)) + { + event.SetCancelled("Damagee in Spectator"); + return; + } //Limit Mob/World Damage Rate if (!event.IgnoreRate()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 76de0d7b4..3ea4266c8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -11,6 +11,7 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -27,6 +28,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.ServerListPingEvent; +import org.bukkit.util.Vector; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; @@ -1182,4 +1184,35 @@ public class ArcadeManager extends MiniPlugin implements IRelation { return _partyManager; } + + public void addSpectator(Player player, boolean teleport) + { + if (GetGame() == null) + return; + + Clear(player); + + if (teleport) + player.teleport(GetGame().GetSpectatorLocation()); + + //Set Spec State + player.setVelocity(new Vector(0,1,0)); + player.setAllowFlight(true); + player.setFlying(true); + player.setFlySpeed(0.1f); + ((CraftPlayer) player).getHandle().spectating = true; + ((CraftPlayer) player).getHandle().k = false; + + GetCondition().Factory().Cloak("Spectator", player, player, 7777, true, true); + + //Game Team + GetGame().GetScoreboard().SetPlayerTeam(player, "SPEC"); + } + + public boolean isSpectator(Entity player) + { + if (player instanceof Player) + return UtilPlayer.isSpectator((Player)player); + return false; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java index 812e6371d..0125ce4ba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java @@ -44,7 +44,6 @@ import nautilus.game.arcade.game.games.spleef.Spleef; import nautilus.game.arcade.game.games.spleef.SpleefTeams; import nautilus.game.arcade.game.games.squidshooter.SquidShooter; import nautilus.game.arcade.game.games.stacker.Stacker; -import nautilus.game.arcade.game.games.survivalgames.SurvivalGames; import nautilus.game.arcade.game.games.survivalgames.SurvivalGamesTeams; import nautilus.game.arcade.game.games.paintball.Paintball; import nautilus.game.arcade.game.games.tug.Tug; @@ -104,7 +103,7 @@ public class GameFactory else if (gameType == GameType.SpleefTeams) return new SpleefTeams(_manager); else if (gameType == GameType.SquidShooter) return new SquidShooter(_manager); else if (gameType == GameType.Stacker) return new Stacker(_manager); - else if (gameType == GameType.SurvivalGames) return new SurvivalGames(_manager); + //else if (gameType == GameType.SurvivalGames) return new SurvivalGames(_manager); else if (gameType == GameType.SurvivalGamesTeams) return new SurvivalGamesTeams(_manager); else if (gameType == GameType.Tug) return new Tug(_manager); else if (gameType == GameType.TurfWars) return new TurfForts(_manager); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java index b75c4df35..ff2077f09 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/addons/CompassAddon.java @@ -95,7 +95,7 @@ public class CompassAddon extends MiniPlugin if (target != null) { - if (Manager.GetGame().CompassGiveItem || player.getGameMode() != GameMode.SURVIVAL) + if (Manager.GetGame().CompassGiveItem || Manager.isSpectator(player)) if (!player.getInventory().contains(Material.COMPASS)) { if (player.getOpenInventory() == null || player.getOpenInventory().getCursor() == null || player.getOpenInventory().getCursor().getType() != Material.COMPASS) @@ -198,7 +198,7 @@ public class CompassAddon extends MiniPlugin event.setCancelled(true); - if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK || !Manager.GetGame().CompassSpectatorMenu) + if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) { // Teleport to nearest player when you left click compass @@ -274,7 +274,7 @@ public class CompassAddon extends MiniPlugin @EventHandler(priority = EventPriority.HIGH) public void onInventoryClick(InventoryClickEvent event) { - if (event.getClickedInventory() != null && event.getWhoClicked() != null && event.getWhoClicked().getGameMode() == GameMode.CREATIVE && event.getClickedInventory().getTitle().equals("Spectator Menu")) + if (event.getClickedInventory() != null && event.getWhoClicked() != null && Manager.isSpectator(event.getWhoClicked()) && event.getClickedInventory().getTitle().equals("Spectator Menu")) { event.setCancelled(false); } 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 2784e6412..3d98ed25a 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 @@ -235,7 +235,6 @@ public abstract class Game implements Listener //Addons public boolean CompassEnabled = false; public boolean CompassGiveItem = true; - public boolean CompassSpectatorMenu = true; public boolean SoupEnabled = true; public boolean TeamArmor = false; @@ -851,24 +850,6 @@ public abstract class Game implements Listener return SpectatorSpawn; } - public void SetSpectator(Player player, boolean teleport) - { - Manager.Clear(player); - - if (teleport) - player.teleport(GetSpectatorLocation()); - - player.setGameMode(GameMode.CREATIVE); - player.setFlying(true); - player.setFlySpeed(0.1f); - ((CraftPlayer) player).getHandle().spectating = true; - ((CraftPlayer) player).getHandle().k = false; - - Manager.GetCondition().Factory().Cloak("Spectator", player, player, 7777, true, true); - - Scoreboard.SetPlayerTeam(player, "SPEC"); - } - @EventHandler public void eloStart(PlayerLoginEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java index 40dee17c5..049ef86c5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java @@ -143,8 +143,6 @@ public class Bridge extends TeamGame implements OreObsfucation "Special loot is located in the center.", "The last team alive wins!" }); - - this.CompassSpectatorMenu = false; _ore = new OreHider(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java index 48268d889..0713e43d4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/castlesiege/CastleSiege.java @@ -195,8 +195,6 @@ public class CastleSiege extends TeamGame this.WorldTimeSet = 14000; //14000 this.BlockPlaceAllow.add(85); - this.CompassSpectatorMenu = false; - _kingName = C.cYellow + C.Bold + "King Sparklez"; GameTeam notRedTeam = null; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePoint.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePoint.java index bc394814e..ba8a84196 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePoint.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePoint.java @@ -131,7 +131,7 @@ public class CapturePoint { for (Player player : team.GetPlayers(true)) { - if (player.getGameMode() != GameMode.SURVIVAL) + if (Host.Manager.isSpectator(player)) continue; if (Math.abs(_loc.getX() - player.getLocation().getX()) > 2.5) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePointTDM.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePointTDM.java index b4fed2b8d..dc9ad7c5b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePointTDM.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/CapturePointTDM.java @@ -106,7 +106,7 @@ public class CapturePointTDM { for (Player player : team.GetPlayers(true)) { - if (player.getGameMode() != GameMode.SURVIVAL) + if (Host.Manager.isSpectator(player)) continue; if (Math.abs(_loc.getX() - player.getLocation().getX()) > 2.5) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java index cb32af083..f19f9a80e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java @@ -77,7 +77,7 @@ public class Emerald if (!Host.IsAlive(player)) return; - if (player.getGameMode() != GameMode.SURVIVAL) + if (Host.Manager.isSpectator(player)) return; GameTeam team = Host.GetTeam(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Resupply.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Resupply.java index b0f462da1..719272cef 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Resupply.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Resupply.java @@ -77,7 +77,7 @@ public class Resupply if (!Host.IsAlive(player)) return; - if (player.getGameMode() != GameMode.SURVIVAL) + if (Host.Manager.isSpectator(player)) return; GameTeam team = Host.GetTeam(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java index 59ff8b55e..197948aa0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java @@ -260,8 +260,6 @@ public class MineStrike extends TeamGame this.InventoryClick = true; this.JoinInProgress = true; - - this.CompassSpectatorMenu = false; _scoreObj = Scoreboard.GetScoreboard().registerNewObjective("HP", "dummy"); _scoreObj.setDisplaySlot(DisplaySlot.BELOW_NAME); @@ -2665,23 +2663,6 @@ public class MineStrike extends TeamGame event.AddMod(this.GetName(), "Fire", 3, false); } - @Override - public void SetSpectator(Player player, boolean teleport) - { - Manager.Clear(player); - - player.setVelocity(new Vector(0,1,0)); - player.setGameMode(GameMode.CREATIVE); - player.setFlying(true); - player.setFlySpeed(0.1f); - ((CraftPlayer)player).getHandle().spectating = true; - ((CraftPlayer)player).getHandle().k = false; - - Manager.GetCondition().Factory().Cloak("Spectator", player, player, 7777, true, true); - - Scoreboard.SetPlayerTeam(player, "SPEC"); - } - @EventHandler public void teleportCancel(PlayerTeleportEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/ShopManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/ShopManager.java index cbcc3cf78..5376cd425 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/ShopManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/ShopManager.java @@ -309,12 +309,12 @@ public class ShopManager } //Leave Shop - if (_inShop.contains(player) && (!nearShop || !isBuyTime()) || player.getGameMode() != GameMode.SURVIVAL) + if (_inShop.contains(player) && (!nearShop || !isBuyTime()) || Host.Manager.isSpectator(player)) { leaveShop(player, true, false); } //Enter Shop - else if (!_inShop.contains(player) && (nearShop && isBuyTime()) && player.getGameMode() == GameMode.SURVIVAL) + else if (!_inShop.contains(player) && (nearShop && isBuyTime()) && !Host.Manager.isSpectator(player)) { enterShop(player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java index cff4bc7bd..fab9f3102 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java @@ -318,7 +318,7 @@ public class Paintball extends TeamGame Manager.GetCondition().Factory().Cloak("Hit", player, player, 9999, false, false); //Settings - player.setGameMode(GameMode.CREATIVE); + player.setAllowFlight(true); player.setFlying(true); ((CraftPlayer)player).getHandle().spectating = true; ((CraftPlayer)player).getHandle().k = false; @@ -429,7 +429,7 @@ public class Paintball extends TeamGame } //Settings - player.setGameMode(GameMode.SURVIVAL); + player.setAllowFlight(false); player.setFlying(false); ((CraftPlayer)player).getHandle().spectating = false; ((CraftPlayer)player).getHandle().k = true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/SearchAndDestroy.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/SearchAndDestroy.java index 235de0917..508e06eae 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/SearchAndDestroy.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/searchanddestroy/SearchAndDestroy.java @@ -200,7 +200,7 @@ public class SearchAndDestroy extends TeamGame true, "Bomb", "Bomb"); if (IsAlive(player)) { - this.SetSpectator(player, true); + Manager.addSpectator(player, true); } } } 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 1b06456fe..c91841a5c 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 @@ -284,7 +284,7 @@ public class SheepGame extends TeamGame if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.SADDLE) return true; - if (player.getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(player)) return true; if (!IsAlive(player)) @@ -373,7 +373,7 @@ public class SheepGame extends TeamGame if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.SADDLE) return; - if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(event.getPlayer())) return; if (!IsAlive(event.getPlayer())) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java index 5e27ba01e..e1b22e1b2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/kits/KitSlime.java @@ -181,7 +181,7 @@ public class KitSlime extends SmashKit if (player.equals(other)) continue; - if (other.getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(other)) continue; if (UtilMath.offset(player.getLocation().add(0, 3, 0), other.getLocation()) < 5) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index 30f07f341..097ca0825 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -1,2389 +1,2389 @@ -package nautilus.game.arcade.game.games.survivalgames; - -import java.lang.reflect.Field; -import java.util.*; -import java.util.Map.Entry; - -import org.bukkit.*; -import org.bukkit.FireworkEffect.Type; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.Chest; -import org.bukkit.block.DoubleChest; -import org.bukkit.block.Furnace; -import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftArrow; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Firework; -import org.bukkit.entity.ItemFrame; -import org.bukkit.entity.Player; -import org.bukkit.entity.Snowball; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockBurnEvent; -import org.bukkit.event.block.BlockFadeEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.block.BlockSpreadEvent; -import org.bukkit.event.block.LeavesDecayEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.ExplosionPrimeEvent; -import org.bukkit.event.entity.ItemSpawnEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.hanging.HangingBreakEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.PrepareItemCraftEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.FurnaceInventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.FireworkMeta; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import org.bukkit.scoreboard.TeamNameTagVisibility; -import org.bukkit.util.Vector; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.MapUtil; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.common.util.UtilFirework; -import mineplex.core.common.util.UtilInv; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilTime.TimeUnit; -import mineplex.core.common.util.UtilWorld; -import mineplex.core.disguise.disguises.DisguisePlayer; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.loot.*; -import mineplex.core.packethandler.IPacketHandler; -import mineplex.core.packethandler.PacketInfo; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; -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.game.Game; -import nautilus.game.arcade.game.GameTeam; -import nautilus.game.arcade.game.SoloGame; -import nautilus.game.arcade.game.games.survivalgames.kit.*; -import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.stats.FirstSupplyDropOpenStatTracker; -import nautilus.game.arcade.stats.KillsWithinTimeLimitStatTracker; -import nautilus.game.arcade.stats.SimultaneousSkeletonStatTracker; -import nautilus.game.arcade.stats.WinWithoutWearingArmorStatTracker; -import net.minecraft.server.v1_7_R4.EntityArrow; -import net.minecraft.server.v1_7_R4.PacketPlayInUseEntity; -import net.minecraft.server.v1_7_R4.PacketPlayOutScoreboardTeam; -import net.minecraft.server.v1_7_R4.ScoreboardTeam; -import net.minecraft.server.v1_7_R4.TileEntity; -import net.minecraft.server.v1_7_R4.TileEntityChest; -import net.minecraft.util.com.mojang.authlib.GameProfile; - -public class SurvivalGames extends SoloGame -{ - // Lootables - private ChestLoot _baseLoot = new ChestLoot(); - private ChestLoot _spawnLoot = new ChestLoot(); - private ChestLoot _superLoot = new ChestLoot(); - private ChestLoot _cookedFurnace = new ChestLoot(); - private ChestLoot _rawFurnace = new ChestLoot(); - - private HashMap> _hiddenNames = new HashMap>(); - private HashSet _lootedBlocks = new HashSet(); - - // Misc - private HashMap _tntMap = new HashMap(); - private HashSet _placedBlocks = new HashSet(); - private Location _spawn; - - // Creep - private int _maxSpreadRate = 120; - private ArrayList _frostLocations = new ArrayList(); - private int _spreadType = 0; - private String _spreadName = ""; - private boolean _ignoreLiquids = true; - private ArrayList> _spreadTypeBlocks; - private HashMap _frostOutTime = new HashMap(); - - private HashMap>> _frostMap = new HashMap>>(); - private HashMap> _frostChunks = new HashMap>(); - - // Supply Drop - private ArrayList _supplyLocations = new ArrayList(); - private Location _supplyCurrent = null; - private Location _supplyEffect = null; - private ArrayList _supplyCrates = new ArrayList(); - private HashSet _landedCrates = new HashSet(); - - // Deathmatch - private boolean _deathmatchCountdown = false; - private boolean _deathmatchLive = false; - private long _deathmatchTime = 0; - - private int _chestRefillTime = 60 * 7; - - // Debug - private long totalTime = 0; - - private Field _nameTagVisibility; - private Field _packetTeam; - private IPacketHandler _useEntityPacketHandler; - private int _deadBodyCount; - - private NautHashMap _openedChests = new NautHashMap(); - /** - * @The field is originally set to 1, if the next tick finds it at 1, then its set to 10. If the next tick finds it at 10 then - * it removes. - * @Else the ticks set it to 50 - */ - private Field _ticksField; - - public SurvivalGames(ArcadeManager manager) - { - super(manager, GameType.SurvivalGames, - - new Kit[] - { - new KitAxeman(manager), - // new KitLooter(manager), - new KitKnight(manager), - - new KitArcher(manager), - - new KitBrawler(manager), - - new KitAssassin(manager), - - new KitBeastmaster(manager), - - new KitBomber(manager), - - new KitNecromancer(manager), - - new KitHorseman(manager) - }, - - new String[] - { - "Search for chests to find loot", "Slaughter your opponents", "Stay away from the Deep Freeze!", - "Last tribute alive wins!" - }); - - _help = new String[] - { - C.cGreen + "Use a Compass to find and kill enemies!", - - C.cGreen + "Avoid the Deep Freeze at all costs!", - - C.cGreen + "You lose Speed 2 at start of game if you attack.", - - C.cAqua + "Avoid enemies who have better gear than you!" - }; - - // Manager.GetAntiStack().SetEnabled(false); - - this.StrictAntiHack = true; - - this.GameTimeout = 9600000; - - this.QuitDropItems = true; - - this.WorldTimeSet = 0; - this.WorldBoundaryKill = false; - - this.SpawnDistanceRequirement = 48; - - this.DamageSelf = true; - this.DamageTeamSelf = true; - - this.DeathDropItems = true; - - this.ItemDrop = true; - this.ItemPickup = true; - - this.InventoryClick = true; - this.InventoryOpenBlock = true; - this.InventoryOpenChest = true; - - // Blocks - this.BlockBreakAllow.add(46); // TNT - this.BlockPlaceAllow.add(46); - - this.BlockBreakAllow.add(30); // Web - this.BlockPlaceAllow.add(30); - - this.BlockBreakAllow.add(132); // Tripwire - this.BlockPlaceAllow.add(132); - - this.BlockBreakAllow.add(131); // Wire Hook - this.BlockPlaceAllow.add(131); - - this.BlockBreakAllow.add(55); // Redstone Dust - this.BlockPlaceAllow.add(55); - - this.BlockBreakAllow.add(72); // Wood Pressure Plate - this.BlockPlaceAllow.add(72); - - this.BlockBreakAllow.add(69); // Lever - this.BlockPlaceAllow.add(69); - - this.BlockBreakAllow.add(18); // Leaves - - BlockBreakAllow.add(Material.LONG_GRASS.getId()); - BlockBreakAllow.add(Material.RED_ROSE.getId()); - BlockBreakAllow.add(Material.YELLOW_FLOWER.getId()); - BlockBreakAllow.add(Material.BROWN_MUSHROOM.getId()); - BlockBreakAllow.add(Material.RED_MUSHROOM.getId()); - BlockBreakAllow.add(Material.DEAD_BUSH.getId()); - BlockBreakAllow.add(Material.CARROT.getId()); - BlockBreakAllow.add(Material.POTATO.getId()); - BlockBreakAllow.add(Material.DOUBLE_PLANT.getId()); - BlockBreakAllow.add(Material.CROPS.getId()); - BlockBreakAllow.add(Material.SAPLING.getId()); - BlockBreakAllow.add(Material.VINE.getId()); - BlockBreakAllow.add(Material.WATER_LILY.getId()); - - // SPREAD - _spreadType = 1;// UtilMath.r(3); - - _spreadTypeBlocks = new ArrayList>(); - - if (_spreadType == 0) - { - _spreadName = "Red"; - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(159, 14)); - } - else if (_spreadType == 1) - { - _spreadName = "Deep Freeze"; - _ignoreLiquids = false; - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(78, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(79, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(80, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(49, 0)); - } - else if (_spreadType == 2) - { - _spreadName = "Nether Corruption"; - _ignoreLiquids = false; - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(49, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(87, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(88, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(89, 0)); - _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(153, 0)); - } - - System.out.println("==================="); - System.out.println("CREEP TYPE: " + _spreadName); - System.out.println("==================="); - // Manager.GetStatsManager().addTable(GetName(), "kills", "deaths", "chestsOpened"); - - setupLoot(); - - try - { - - _packetTeam = Class.forName("org.bukkit.craftbukkit.v1_7_R4.scoreboard.CraftTeam").getDeclaredField("team"); - _packetTeam.setAccessible(true); - - _nameTagVisibility = PacketPlayOutScoreboardTeam.class.getDeclaredField("_nameTagVisibility"); - _nameTagVisibility.setAccessible(true); - - _ticksField = TileEntityChest.class.getDeclaredField("ticks"); - _ticksField.setAccessible(true); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - _useEntityPacketHandler = new IPacketHandler() - { - @Override - public void handle(PacketInfo packetInfo) - { - if (packetInfo.getPacket() instanceof PacketPlayInUseEntity) - { - net.minecraft.server.v1_7_R4.Entity entity = ((PacketPlayInUseEntity) packetInfo.getPacket()) - .a(((CraftWorld) packetInfo.getPlayer().getWorld()).getHandle()); - - if (entity instanceof EntityArrow) - { - packetInfo.setCancelled(true); - } - } - } - }; - - registerStatTrackers(new WinWithoutWearingArmorStatTracker(this), new KillsWithinTimeLimitStatTracker(this, 3, 60, - "Bloodlust"), new FirstSupplyDropOpenStatTracker(this), new SimultaneousSkeletonStatTracker(this, 5)); - } - - @EventHandler - public void handleEntityPacket(GameStateChangeEvent event) - { - if (event.GetState() == GameState.Live) - { - getArcadeManager().getPacketHandler().addPacketHandler(_useEntityPacketHandler); - } - else if (event.GetState() == GameState.Dead) - { - getArcadeManager().getPacketHandler().removePacketHandler(_useEntityPacketHandler); - } - } - - @Override - public boolean isPlaySoundGameStart() - { - return false; - } - - private void setupLoot() - { - // Food - _baseLoot.registerLoot(new RandomItem(Material.RAW_FISH, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.RAW_BEEF, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.RAW_CHICKEN, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.POTATO_ITEM, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.CARROT_ITEM, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.RED_MUSHROOM, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.BROWN_MUSHROOM, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.WHEAT, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.APPLE, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.PORK, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(new ItemStack(Material.INK_SACK, 1, (short) 3), 30, 1, 2)); // Cocoa beans - _baseLoot.registerLoot(new RandomItem(Material.ROTTEN_FLESH, 30, 1, 2)); - - // Weapons - _baseLoot.registerLoot(new RandomItem(Material.WOOD_AXE, 30)); - _baseLoot.registerLoot(new RandomItem(Material.WOOD_SWORD, 30)); - _baseLoot.registerLoot(new RandomItem(Material.STONE_AXE, 30)); - - // Leather armor - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_BOOTS, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_CHESTPLATE, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_HELMET, 30)); - _baseLoot.registerLoot(new RandomItem(Material.LEATHER_LEGGINGS, 30)); - - // Chain armor - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_BOOTS, 30)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_CHESTPLATE, 30)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_HELMET, 30)); - _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_LEGGINGS, 30)); - - // Throwable - _baseLoot.registerLoot(new RandomItem(Material.FISHING_ROD, 30)); - _baseLoot.registerLoot(new RandomItem(Material.BOW, 30)); - _baseLoot.registerLoot(new RandomItem(Material.ARROW, 30, 1, 5)); - _baseLoot.registerLoot(new RandomItem(Material.SNOW_BALL, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.EGG, 30, 1, 2)); - - // Misc - _baseLoot.registerLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.FLINT_AND_STEEL, 1)); - _baseLoot.registerLoot(new RandomItem(Material.COMPASS, 50)); - _baseLoot.registerLoot(new RandomItem(Material.STICK, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.BOAT, 30)); - _baseLoot.registerLoot(new RandomItem(Material.FLINT, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.FEATHER, 30, 1, 2)); - _baseLoot.registerLoot(new RandomItem(Material.GOLD_INGOT, 30, 1, 2)); - - _spawnLoot.cloneLoot(_baseLoot); - - // Food - _spawnLoot.registerLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.CAKE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKED_FISH, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.GRILLED_PORK, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.COOKIE, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.APPLE, 30, 1, 2)); - - // Loot for chests in spawn - // Random bowl - _spawnLoot.registerLoot(new RandomItem(Material.BOWL, 30, 1, 2)); - - // Weaponry and ores - _spawnLoot.registerLoot(new RandomItem(Material.STONE_SWORD, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_INGOT, 30, 1, 2)); - _spawnLoot.registerLoot(new RandomItem(Material.DIAMOND, 30)); - - // Iron gear - _spawnLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); - _spawnLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 30)); - - // Supply crate loot - // Diamond gear - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_HELMET, 3)); - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_CHESTPLATE, 1)); - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_LEGGINGS, 2)); - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_BOOTS, 3)); - - // Iron gear - _superLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); - _superLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 24)); - _superLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 27)); - _superLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); - - // Weapons - _superLoot.registerLoot(new RandomItem(Material.IRON_SWORD, 24)); - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_SWORD, 8)); - _superLoot.registerLoot(new RandomItem(Material.DIAMOND_AXE, 16)); - - // Cooked furnace - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_BEEF, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_FISH, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.GRILLED_PORK, 3, 1, 2)); - _cookedFurnace.registerLoot(new RandomItem(Material.IRON_INGOT, 1, 1, 1)); - _cookedFurnace.registerLoot(new RandomItem(Material.BAKED_POTATO, 3, 1, 1)); - _cookedFurnace.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 3, 1, 1)); - - // Raw furnace - _rawFurnace.registerLoot(new RandomItem(Material.RAW_BEEF, 1, 1, 2)); - _rawFurnace.registerLoot(new RandomItem(Material.RAW_CHICKEN, 1, 1, 2)); - _rawFurnace.registerLoot(new RandomItem(Material.RAW_FISH, 1, 1, 2)); - _rawFurnace.registerLoot(new RandomItem(Material.PORK, 1, 1, 2)); - _rawFurnace.registerLoot(new RandomItem(Material.POTATO_ITEM, 1, 1, 2)); - } - - @Override - public double GetKillsGems(Player killer, Player killed, boolean assist) - { - return 4; - } - - @Override - public void ParseData() - { - _spawn = UtilWorld.averageLocation(this.GetTeamList().get(0).GetSpawns()); - - for (Location loc : this.GetTeamList().get(0).GetSpawns()) - loc.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(loc, _spawn))); - - setupChestsEnchantingCrafting(); - - _supplyLocations = WorldData.GetDataLocs("WHITE"); - for (Location loc : _supplyLocations) - loc.getBlock().setType(Material.GLASS); - - if (!WorldData.GetCustomLocs("VARS").isEmpty()) - { - _maxSpreadRate = WorldData.GetCustomLocs("VARS").get(0).getBlockX(); - System.out.println("Spread Rate: " + _maxSpreadRate); - } - } - - private void setupChestsEnchantingCrafting() - { - ArrayList chests = WorldData.GetCustomLocs("54"); - - System.out.println("Map Chest Locations: " + chests.size()); - - // Enchants - System.out.println("Enchanting Tables: " + Math.min(5, chests.size())); - for (int i = 0; i < 5 && !chests.isEmpty(); i++) - { - Location loc = chests.remove(UtilMath.r(chests.size())); - loc.getBlock().setType(Material.ENCHANTMENT_TABLE); - } - - // Crafting - System.out.println("Crafting Benches: " + Math.min(10, chests.size())); - for (int i = 0; i < 10 && !chests.isEmpty(); i++) - { - Location loc = chests.remove(UtilMath.r(chests.size())); - loc.getBlock().setType(Material.WORKBENCH); - } - - int spawn = 0; - - // Chests - System.out.println("Chests: " + Math.min(250, chests.size())); - for (int i = 0; i < 250 && !chests.isEmpty(); i++) - { - Location loc = chests.remove(UtilMath.r(chests.size())); - - if (UtilMath.offset2d(loc, _spawn) < 8) - spawn++; - } - - for (Location loc : chests) - { - if (spawn < 10 && UtilMath.offset(loc, _spawn) < 8) - { - spawn++; - continue; - } - - loc.getBlock().setType(Material.AIR); - } - } - - @EventHandler - public void CreateRandomChests(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Recruit) - return; - - HashSet ignore = new HashSet(); - - ignore.add(Material.LEAVES); - - int xDiff = WorldData.MaxX - WorldData.MinX; - int zDiff = WorldData.MaxZ - WorldData.MinZ; - - int done = 0; - - while (done < 40) - { - - Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), - WorldData.MinZ + UtilMath.r(zDiff), ignore); - - if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN))) - continue; - - block.setTypeIdAndData(Material.CHEST.getId(), (byte) UtilMath.r(4), true); - done++; - } - } - - private void fillChest(Player looter, Block block) - { - _lootedBlocks.add(block.getLocation()); - - Chest chest = (Chest) block.getState(); - - chest.getBlockInventory().clear(); - - int items = 2; - if (Math.random() > 0.50) - items++; - if (Math.random() > 0.65) - items++; - if (Math.random() > 0.80) - items++; - if (Math.random() > 0.95) - items++; - - boolean spawnChest = UtilMath.offset(chest.getLocation(), _spawn) < 8; - if (spawnChest) - items += 3; - - if (GetKit(looter) instanceof KitLooter) - { - items += UtilMath.r(3); - } - - if (_supplyCrates.contains(block)) - { - items = 2; - if (Math.random() > 0.75) - items++; - if (Math.random() > 0.95) - items++; - } - - for (int i = 0; i < items; i++) - { - ItemStack item; - - if (spawnChest) - { - item = _spawnLoot.getLoot(); - } - else - { - item = GetChestItem(_supplyCrates.contains(block)); - } - - if (item.getType() == Material.COMPASS) - { - item = buildCompass(5); - } - - chest.getBlockInventory().setItem(UtilMath.r(27), item); - } - - if (_supplyCrates.contains(block)) - { - Bukkit.getPluginManager().callEvent(new SupplyChestOpenEvent(looter, block)); - } - - _supplyCrates.remove(block); - _landedCrates.add(block.getLocation()); - } - - @EventHandler - public void OpenChest(PlayerInteractEvent event) - { - if (event.isCancelled()) - return; - - Block block = event.getClickedBlock(); - - if (block == null) - return; - - if (!IsLive()) - return; - - if (_lootedBlocks.contains(block.getLocation())) - return; - - BlockState state = block.getState(); - - if (state instanceof DoubleChest) - { - DoubleChest doubleChest = (DoubleChest) state; - - fillChest(event.getPlayer(), ((Chest) doubleChest.getLeftSide()).getBlock()); - fillChest(event.getPlayer(), ((Chest) doubleChest.getRightSide()).getBlock()); - } - else if (state instanceof Chest) - { - fillChest(event.getPlayer(), block); - } - else if (state instanceof Furnace) - { - Furnace furnace = (Furnace) state; - - if (furnace.getCookTime() == 0) - { - FurnaceInventory inv = furnace.getInventory(); - - if (UtilMath.r(3) == 0) - { - int random = UtilMath.r(9); - - if (random == 0) - { - inv.setFuel(new ItemStack(Material.STICK, new Random().nextInt(2) + 1)); - } - else if (random <= 3) - { - inv.setSmelting(_rawFurnace.getLoot()); - } - else - { - inv.setResult(_cookedFurnace.getLoot()); - } - } - - _lootedBlocks.add(block.getLocation()); - } - } - } - - private ItemStack GetChestItem(boolean superChest) - { - if (superChest) - return _superLoot.getLoot(); - - return _baseLoot.getLoot(); - } - - private String buildTime() - { - String s = ""; - - for (char c : ("" + System.nanoTime()).toCharArray()) - { - s += "§" + c; - } - - return s; - } - - private ItemStack buildCompass(int uses) - { - ItemBuilder item = new ItemBuilder(Material.COMPASS); - item.setTitle(C.cWhite + "Player Tracker" + buildTime()); - - item.addLore(C.cBlue + "Uses remaining: " + C.cWhite + uses); - item.addLore(C.cGray + "Use this to find the location and"); - item.addLore(C.cGray + "distance of the nearest player!"); - - return item.build(); - } - - @EventHandler - public void StartEffectApply(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Live) - return; - - Scoreboard board = GetScoreboard().GetScoreboard(); - - for (Player player : GetPlayers(true)) - { - player.playSound(player.getLocation(), Sound.DONKEY_DEATH, 0.8F, 0); - - Manager.GetCondition().Factory().Speed("Start Speed", player, player, 30, 1, false, false, false); - Manager.GetCondition().Factory().HealthBoost("Start Health", player, player, 30, 1, false, false, false); - - player.setHealth(player.getMaxHealth()); - - Team team = board.registerNewTeam(player.getName()); - - team.setPrefix(board.getPlayerTeam(player).getPrefix()); - - team.addPlayer(player); - } - } - - @EventHandler - public void joinMessage(PlayerJoinEvent event) - { - if (!UtilPlayer.is1_8(event.getPlayer())) - returnToHub(event.getPlayer()); - } - - @EventHandler - public void outdatedVersion(GameStateChangeEvent event) - { - for (Player player : UtilServer.getPlayers()) - { - if (!UtilPlayer.is1_8(player)) - returnToHub(player); - } - } - - public void returnToHub(Player player) - { - UtilPlayer.message(player, " "); - UtilPlayer.message(player, C.cGold + C.Bold + "SurvivalGames requires you to be using Minecraft 1.8!"); - UtilPlayer.message(player, " "); - - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); - } - - @EventHandler - public void UpdateNametagVisibility(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - if (!IsLive()) - return; - - ArrayList alivePlayers = GetPlayers(true); - HashMap> checkedPlayers = new HashMap>(); - - for (Player target : alivePlayers) - { - - PacketPlayOutScoreboardTeam packet = null; - - try - { - ScoreboardTeam nmsTeam = (ScoreboardTeam) _packetTeam.get(target.getScoreboard().getTeam(target.getName())); - - packet = new PacketPlayOutScoreboardTeam(nmsTeam, 2); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - for (Player player : alivePlayers) - { - if (target != player) - { - boolean hideName = false; - - if (!checkedPlayers.containsKey(target) || !checkedPlayers.get(target).containsKey(player)) - { - if (target.getLocation().distance(player.getLocation()) > 16) - { - hideName = true; - } - else if (!target.hasLineOfSight(player)) - { - // no los - hideName = true; - } - - Player[] players = new Player[] - { - target, player - }; - - for (int i = 0; i <= 1; i++) - { - Player p1 = players[i]; - Player p2 = players[1 - i]; - - if (!checkedPlayers.containsKey(p1)) - { - checkedPlayers.put(p1, new HashMap()); - } - - checkedPlayers.get(p1).put(p2, hideName); - } - } - else - { - hideName = checkedPlayers.get(target).get(player); - } - - // If hiddenNames conta - if (hideName != (_hiddenNames.containsKey(player) && _hiddenNames.get(player).contains(target.getName()))) - { - if (!hideName) - { - _hiddenNames.get(player).remove(target.getName()); - } - else - { - if (!_hiddenNames.containsKey(player)) - { - _hiddenNames.put(player, new HashSet()); - } - - _hiddenNames.get(player).add(target.getName()); - } - - try - { - _nameTagVisibility.set(packet, hideName ? "never" : "always"); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - UtilPlayer.sendPacket(player, packet); - } - } - } - } - } - - @EventHandler - public void RemoveNametagInfo(PlayerQuitEvent event) - { - _hiddenNames.remove(event.getPlayer()); - deathOrQuit(event.getPlayer()); - } - - @EventHandler - public void onGameEnd(GameStateChangeEvent event) - { - if (event.GetState() != GameState.End) - return; - - new BukkitRunnable() - { - public void run() - { - if (GetState() != GameState.End) - { - cancel(); - return; - } - - for (Location loc : GetTeamList().get(0).GetSpawns()) - { - Firework firework = (Firework) loc.getWorld().spawnEntity(loc, EntityType.FIREWORK); - - FireworkMeta meta = firework.getFireworkMeta(); - - meta.addEffect(FireworkEffect.builder().withColor(Color.AQUA).with(Type.BALL).withTrail().build()); - - firework.setFireworkMeta(meta); - } - } - }.runTaskTimer(getArcadeManager().getPlugin(), 0, 60); - } - - @EventHandler - public void SpeedRemove(CustomDamageEvent event) - { - Player damager = event.GetDamagerPlayer(true); - if (damager != null) - 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) - { - Material mat = event.getEntity().getItemStack().getType(); - - switch (mat) - { - case SEEDS: - case SAPLING: - case VINE: - case LEAVES: - case LONG_GRASS: - case RED_ROSE: - case YELLOW_FLOWER: - case DEAD_BUSH: - case WATER_LILY: - event.setCancelled(true); - return; - default: - break; - } - - for (Player player : GetPlayers(true)) - if (UtilMath.offset(player, event.getEntity()) < 6) - return; - - event.setCancelled(true); - } - - @EventHandler - // TODO - public void frostBorderStart(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Prepare) - return; - - // Start Red - Block block; - - for (int x = WorldData.MinX; x <= WorldData.MaxX; x++) - { - block = WorldData.World.getHighestBlockAt(x, WorldData.MinZ); - while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) - block = block.getRelative(BlockFace.DOWN); - if (block.getY() > 0) - _frostLocations.add(block.getLocation()); - - block = WorldData.World.getHighestBlockAt(x, WorldData.MaxZ); - while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) - block = block.getRelative(BlockFace.DOWN); - if (block.getY() > 0) - _frostLocations.add(block.getLocation()); - } - - for (int z = WorldData.MinZ; z <= WorldData.MaxZ; z++) - { - block = WorldData.World.getHighestBlockAt(WorldData.MinX, z); - while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) - block = block.getRelative(BlockFace.DOWN); - if (block.getY() > 0) - _frostLocations.add(block.getLocation()); - - block = WorldData.World.getHighestBlockAt(WorldData.MaxX, z); - while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) - block = block.getRelative(BlockFace.DOWN); - if (block.getY() > 0) - _frostLocations.add(block.getLocation()); - } - } - - public int frostMax() - { - return _maxSpreadRate;// + (24 - GetPlayers(true).size())*2; - } - - @EventHandler - // TODO - public void frostUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - if (!IsLive()) - return; - - long time = System.currentTimeMillis(); - - if (_frostLocations.isEmpty()) - return; - - int max = Math.max(5, Math.min(frostMax(), _frostLocations.size() / 100)); - - for (int i = 0; i < max; i++) - { - if (_frostLocations.isEmpty()) - break; - - Location loc = _frostLocations.remove(UtilMath.r(_frostLocations.size())); - - // Already Red - if (isFrost(loc.getBlock())) - { - i = Math.max(0, i - 1); - continue; - } - - // Set to Red - setFrost(loc); - - // Spread to Neighbours - Block block = loc.getBlock(); - - frostSpread(block.getRelative(BlockFace.UP)); - frostSpread(block.getRelative(BlockFace.DOWN)); - - if (!frostSpread(block.getRelative(BlockFace.NORTH))) - { - frostSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.UP)); - frostSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.DOWN)); - } - - if (!frostSpread(block.getRelative(BlockFace.EAST))) - { - frostSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.UP)); - frostSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN)); - } - - if (!frostSpread(block.getRelative(BlockFace.SOUTH))) - { - frostSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.UP)); - frostSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN)); - } - - if (!frostSpread(block.getRelative(BlockFace.WEST))) - { - frostSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.UP)); - frostSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.DOWN)); - } - } - - totalTime += System.currentTimeMillis() - time; - } - - @EventHandler - // TODO - public void frostTimer(UpdateEvent event) - { - if (event.getType() != UpdateType.MIN_01) - return; - - if (!IsLive()) - return; - - System.out.println(" "); - System.out.println("Game Time: " + UtilTime.MakeStr(System.currentTimeMillis() - this.GetStateTime())); - System.out.println("Creep Size: " + _frostLocations.size()); - System.out.println("Creep Time: " + UtilTime.convertString(totalTime, 4, TimeUnit.SECONDS)); - System.out.println(" "); - - totalTime = 0; - } - - public boolean frostSpread(Block block) - { - if (block == null || block.getType() == Material.AIR) - return false; - - // Inside Boundary - if (UtilMath.offset(_spawn, block.getLocation()) < 48) - return false; - - // Liquid - if (block.isLiquid()) - { - if (_ignoreLiquids) - return false; - - // Only freeze surface water - boolean surroundedByWater = true; - for (Block other : UtilBlock.getSurrounding(block, false)) - { - if (other.getY() < block.getY()) - continue; - - if (!other.isLiquid() && !isFrost(other)) - { - surroundedByWater = false; - break; - } - } - if (surroundedByWater) - return false; - - // Dont Spread to Moving - if (block.getTypeId() == 9) - if (block.getData() != 0) - return false; - - // Dont spread near moving - for (Block other : UtilBlock.getSurrounding(block, false)) - { - if (other.getTypeId() == 9 && other.getData() != 0) - { - return false; - } - } - } - - // Ignore Signs - if (block.getType() == Material.SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) - return false; - - // Pre-Red - if (isFrost(block)) - { - return false; - } - - if ((!UtilBlock.solid(block) || UtilBlock.airFoliage(block) || block.getType() == Material.CHEST)) - { - if (!block.isLiquid()) - { - while (block.getType() == Material.VINE) - { - frostChangeBlock(block.getLocation(), 0, (byte) 0); - block = block.getRelative(BlockFace.DOWN); - } - - // Remove Foliage - if (block.getType() != Material.AIR) - frostChangeBlock(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; - - // Not Visible - if (!UtilBlock.isVisible(block)) - return false; - - // Apply - _frostLocations.add(block.getLocation()); - return true; - } - - public void frostChangeBlock(Location loc, int id, byte data) - { - if (!IsLive()) - return; - - MapUtil.ChunkBlockChange(loc, id, data, false); - - // Old Style - /* - if (true) - { - for (Player player : UtilServer.getPlayers()) - { - if (Math.abs(player.getLocation().getChunk().getX() - loc.getChunk().getX()) > UtilServer.getServer().getViewDistance()) - continue; - - if (Math.abs(player.getLocation().getChunk().getZ() - loc.getChunk().getZ()) > UtilServer.getServer().getViewDistance()) - continue; - - player.sendBlockChange(loc, id, data); - } - - return; - } - */ - - // Non-Queue - for (Player player : UtilServer.getPlayers()) - { - if (Math.abs(player.getLocation().getChunk().getX() - loc.getChunk().getX()) > UtilServer.getServer() - .getViewDistance()) - continue; - - if (Math.abs(player.getLocation().getChunk().getZ() - loc.getChunk().getZ()) > UtilServer.getServer() - .getViewDistance()) - continue; - - if (!_frostChunks.containsKey(player)) - _frostChunks.put(player, new ArrayList()); - - boolean added = false; - for (ChunkChange change : _frostChunks.get(player)) - { - if (change.Chunk.equals(loc.getChunk()))// && change.DirtyCount < 63) - { - change.AddChange(loc, id, data); - added = true; - break; - } - } - if (!added) - _frostChunks.get(player).add(new ChunkChange(loc, id, data)); - } - } - - @EventHandler - // TODO - public void frostChunkUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (!IsLive()) - return; - - for (Player player : _frostChunks.keySet()) - { - // Remove Far Away - Iterator chunkIterator = _frostChunks.get(player).iterator(); - while (chunkIterator.hasNext()) - { - ChunkChange change = chunkIterator.next(); - - if (Math.abs(player.getLocation().getChunk().getX() - change.Chunk.getX()) > UtilServer.getServer() - .getViewDistance() - || Math.abs(player.getLocation().getChunk().getZ() - change.Chunk.getZ()) > UtilServer.getServer() - .getViewDistance()) - { - chunkIterator.remove(); - } - } - - if (_frostChunks.get(player).isEmpty()) - continue; - - // Get Fittest Chunk to Update - int bestId = -1; - double bestScore = 0; - - for (int i = 0; i < _frostChunks.get(player).size(); i++) - { - ChunkChange change = _frostChunks.get(player).get(i); - - // Base Score, 1 per block - double score = change.Changes.size(); - - // Time Score, multiply block score by 1 + 0.5 per second - score = score * (1 + (System.currentTimeMillis() - change.Time) / 200d); - - // Distance Divisor - double dist = 0.5; - if (!player.getLocation().getChunk().equals(change.Chunk)) - { - int x = Math.abs(player.getLocation().getChunk().getX() - change.Chunk.getX()); - int z = Math.abs(player.getLocation().getChunk().getZ() - change.Chunk.getZ()); - dist = Math.sqrt(x * x + z * z); - } - score = score / (dist * dist); - - if (bestId == -1 || score > bestScore) - { - bestId = i; - bestScore = score; - } - } - - if (bestId == -1) - continue; - - // Send MultiBlock or Chunk Update for Fittest Chunk - ChunkChange change = _frostChunks.get(player).remove(bestId); - - if (change.DirtyCount > 63) - MapUtil.SendChunkForPlayer(change.Chunk.getX(), change.Chunk.getZ(), player); - else - MapUtil.SendMultiBlockForPlayer(change.Chunk.getX(), change.Chunk.getZ(), change.DirtyBlocks, change.DirtyCount, - change.Chunk.getWorld(), player); - } - } - - public boolean isFrost(Block block) - { - if (!_frostMap.containsKey(block.getX())) - return false; - - if (!_frostMap.get(block.getX()).containsKey(block.getY())) - return false; - - return _frostMap.get(block.getX()).get(block.getY()).contains(block.getZ()); - } - - public void setFrost(Location loc) - { - // Save Red - if (!_frostMap.containsKey(loc.getBlockX())) - _frostMap.put(loc.getBlockX(), new HashMap>()); - - if (!_frostMap.get(loc.getBlockX()).containsKey(loc.getBlockY())) - _frostMap.get(loc.getBlockX()).put(loc.getBlockY(), new HashSet()); - - _frostMap.get(loc.getBlockX()).get(loc.getBlockY()).add(loc.getBlockZ()); - - // Red - if (_spreadType == 0) - { - frostChangeBlock(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) - frostChangeBlock(loc, 79, (byte) 0); - else if (loc.getBlock().getTypeId() == 10 || loc.getBlock().getTypeId() == 11) - frostChangeBlock(loc, 49, (byte) 0); - else - frostChangeBlock(loc, 80, (byte) 0); - } - // Nether - else - { - if (loc.getBlock().getType() == Material.LEAVES) - frostChangeBlock(loc, 88, (byte) 0); - else if (loc.getBlock().getTypeId() == 8 || loc.getBlock().getTypeId() == 9) - frostChangeBlock(loc, 49, (byte) 0); - else - { - double r = Math.random(); - if (r > 0.1) - frostChangeBlock(loc, 87, (byte) 0); - else - frostChangeBlock(loc, 153, (byte) 0); - } - } - } - - @EventHandler - // TODO - public void frostAttack(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 (!isFrost(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.95) - player.playEffect(block.getLocation().add(0, 1, 0), Effect.STEP_SOUND, Material.SNOW_BLOCK); - - 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 (isFrost(block) || block.getY() == 0) - near = true; - } - } - - if (!near) - { - if (_deathmatchLive && UtilMath.offset(player.getLocation(), _spawn) > 48) - near = true; - } - - if (near) - { - player.getWorld().playSound(player.getLocation(), Sound.AMBIENCE_RAIN, 0.5f, 0f); - - if (!_frostOutTime.containsKey(player)) - { - _frostOutTime.put(player, System.currentTimeMillis()); - } - else - { - if (UtilTime.elapsed(_frostOutTime.get(player), 5000)) - { - Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.VOID, 1, false, true, false, - "Hunger Games", _spreadName); - } - } - } - else - { - _frostOutTime.remove(player); - } - } - } - - public void refillChests() - { - ArrayList list = new ArrayList(_lootedBlocks); - - _lootedBlocks.clear(); - - for (Location loc : list) - { - if (loc.getChunk().isLoaded()) - { - Block block = loc.getBlock(); - - if (_landedCrates.contains(loc)) - continue; - - if (block.getState() instanceof InventoryHolder) - { - InventoryHolder holder = (InventoryHolder) block.getState(); - - if (!holder.getInventory().getViewers().isEmpty()) - { - fillChest((Player) holder.getInventory().getViewers().get(0), block); - } - } - } - } - } - - @EventHandler - public void chestRefill(UpdateEvent event) - { - if (!IsLive() || event.getType() != UpdateType.SEC) - return; - - if (_deathmatchCountdown || _deathmatchLive) - return; - - if (_chestRefillTime > 0) - { - _chestRefillTime--; - switch (_chestRefillTime) - { - case 0: - - Bukkit.broadcastMessage(ChatColor.GOLD + "➽" + ChatColor.GREEN + " The chests has been refilled!"); - - for (Player player : Bukkit.getOnlinePlayers()) - { - player.playSound(player.getEyeLocation(), Sound.IRONGOLEM_DEATH, 1000, 0); - } - - refillChests(); - break; - case 1: - case 2: - case 3: - case 4: - case 5: - case 10: - case 15: - case 30: - case 60: - case 120: - case 180: - case 300: - - String time; - - if (_chestRefillTime >= 60) - time = (_chestRefillTime / 60) + " minute" + (_chestRefillTime > 60 ? "s" : ""); - else - time = _chestRefillTime + " second" + (_chestRefillTime != 1 ? "s" : ""); - - Bukkit.broadcastMessage(ChatColor.GOLD + "➽" + ChatColor.GREEN + " The chests will be refilled in " + time); - - break; - default: - break; - } - } - } - - @EventHandler - // TODO - public void frostDamage(CustomDamageEvent event) - { - if (event.GetProjectile() == null) - return; - - if (!(event.GetProjectile() instanceof Snowball)) - return; - - event.AddMod("Snowball", _spreadName, 2, true); - - event.AddKnockback("Snowball", 4); - } - - @EventHandler - public void SupplyDrop(UpdateEvent event) - { - if (!IsLive()) - return; - - if (event.getType() != UpdateType.FASTEST) - return; - - long time = WorldData.World.getTime(); - - if (time > 14000 && time < 23000) - { - if (_supplyCurrent == null && !_deathmatchCountdown && !_deathmatchLive) - { - if (_supplyLocations.isEmpty()) - return; - - _supplyCurrent = _supplyLocations.remove(UtilMath.r(_supplyLocations.size())); - - // Remove Prior - _supplyCrates.remove(_supplyCurrent.getBlock().getRelative(BlockFace.UP)); - _supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.AIR); - - // Create New - _supplyCurrent.getBlock().setType(Material.BEACON); - for (int x = -1; x <= 1; x++) - for (int z = -1; z <= 1; z++) - _supplyCurrent.getBlock().getRelative(x, -1, z).setType(Material.IRON_BLOCK); - - // Announce - this.Announce(C.cYellow + C.Bold + "Supply Drop Incoming (" + ChatColor.RESET - + UtilWorld.locToStrClean(_supplyCurrent) + C.cYellow + C.Bold + ")"); - } - } - else - { - if (_supplyCurrent != null) - { - if (_supplyEffect == null) - { - _supplyEffect = _supplyCurrent.clone(); - _supplyEffect.setY(250); - } - - FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BURST) - .trail(false).build(); - UtilFirework.playFirework(_supplyEffect, effect); - - _supplyEffect.setY(_supplyEffect.getY() - 2); - - if (UtilMath.offset(_supplyEffect, _supplyCurrent) < 2) - { - effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL_LARGE).trail(true) - .build(); - UtilFirework.playFirework(_supplyEffect, effect); - - // Create Chest - _supplyCurrent.getBlock().setType(Material.GLASS); - _supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.CHEST); - _supplyCrates.add(_supplyCurrent.getBlock().getRelative(BlockFace.UP)); - _lootedBlocks.remove(_supplyCurrent); - - // Reset - _supplyEffect = null; - _supplyCurrent = null; - } - } - } - } - - @EventHandler - public void DayNightCycle(UpdateEvent event) - { - if (!IsLive()) - return; - - if (event.getType() != UpdateType.TICK) - return; - - long time = WorldData.World.getTime(); - - if (time > 22000 || time < 14000) - { - WorldTimeSet = (WorldTimeSet + 4) % 24000; - } - else - { - WorldTimeSet = (WorldTimeSet + 16) % 24000; - } - - WorldData.World.setTime(WorldTimeSet); - } - - @EventHandler - public void SupplyGlow(UpdateEvent event) - { - if (!IsLive()) - return; - - if (event.getType() != UpdateType.TICK) - return; - - if (_supplyCrates.isEmpty()) - return; - - Iterator chestIterator = _supplyCrates.iterator(); - - while (chestIterator.hasNext()) - { - Block block = chestIterator.next(); - - if (block.getType() != Material.CHEST) - { - chestIterator.remove(); - continue; - } - - UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1); - } - } - - @EventHandler - public void preventBucketCraft(PrepareItemCraftEvent event) - { - ItemStack result = event.getInventory().getResult(); - - if (result != null) - { - Material type = result.getType(); - - if (type == Material.BUCKET) - { - event.getInventory().setResult(new ItemStack(Material.AIR)); - } - } - } - - @EventHandler - public void DeathmatchUpdate(UpdateEvent event) - { - if (!IsLive()) - return; - - if (_deathmatchLive) - { - if (event.getType() != UpdateType.SEC) - return; - - if (_deathmatchTime <= 0) - return; - - for (Player player : GetPlayers(true)) - for (Player other : GetPlayers(true)) - { - player.hidePlayer(other); - player.showPlayer(other); - } - - Announce(C.cRed + C.Bold + "Deathmatch in " + _deathmatchTime + "..."); - _deathmatchTime--; - } - - else if (_deathmatchCountdown) - { - if (event.getType() != UpdateType.TICK) - return; - - long timeLeft = 60000 - (System.currentTimeMillis() - _deathmatchTime); - - if (timeLeft <= 0) - { - _deathmatchLive = true; - - GetTeamList().get(0).SpawnTeleport(false); - - _frostLocations.clear(); - - for (Block block : UtilBlock.getInRadius(_spawn, 52d).keySet()) - frostSpread(block); - - _deathmatchTime = 10; - } - } - else - { - if (event.getType() != UpdateType.SEC) - return; - - if (!UtilTime.elapsed(GetStateTime(), 360000)) - return; - - if (GetPlayers(true).size() > 4) - return; - - if (!UtilTime.elapsed(_deathmatchTime, 60000)) - return; - - Announce(C.cGreen + C.Bold + "Type " + ChatColor.RESET + C.Bold + "/dm" + C.cGreen + C.Bold + " to start Deathmatch!"); - - _deathmatchTime = System.currentTimeMillis(); - } - } - - @EventHandler - public void DeathmatchMoveCancel(PlayerMoveEvent event) - { - if (!_deathmatchLive) - return; - - if (_deathmatchTime <= 0) - return; - - if (UtilMath.offset2d(event.getFrom(), event.getTo()) == 0) - return; - - if (!IsAlive(event.getPlayer())) - return; - - event.setTo(event.getFrom()); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void DeathmatchDamage(CustomDamageEvent event) - { - if (!_deathmatchLive) - return; - - if (_deathmatchTime <= 0) - return; - - event.SetCancelled("Deathmatch"); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void DeathmatchStart(PlayerCommandPreprocessEvent event) - { - if (!event.getMessage().equalsIgnoreCase("/dm")) - return; - - event.setCancelled(true); - - if (!IsAlive(event.getPlayer())) - { - UtilPlayer.message(event.getPlayer(), F.main("Game", "You are not in the game.")); - return; - } - - if (!IsLive()) - { - UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); - return; - } - - if (!UtilTime.elapsed(GetStateTime(), 360000)) - { - UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); - return; - } - - if (GetPlayers(true).size() > 4) - { - UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); - return; - } - - if (_deathmatchCountdown) - { - UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); - return; - } - - _deathmatchCountdown = true; - - Announce(C.cGreen + C.Bold + event.getPlayer().getName() + " has initiated Deathmatch!"); - Announce(C.cGreen + C.Bold + "Deathmatch starting in 60 seconds..."); - _deathmatchTime = System.currentTimeMillis(); - - for (Player player : UtilServer.getPlayers()) - player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 1f); - } - - @EventHandler - public void chestTickEvent(UpdateEvent event) - { - if (event.getType() != UpdateType.SLOW) - return; - - Iterator> itel = _openedChests.entrySet().iterator(); - - while (itel.hasNext()) - { - Entry entry = itel.next(); - // TODO Test this is removed properly when unloaded chunks - // TODO Load chests status when chunk loads packets - try - { - int key = (entry.getKey().x + entry.getKey().y + entry.getKey().z) % 200; - - int ticks = (_ticksField.getInt(entry.getKey()) + key) % 200; - - System.out.print(ticks + " - " + entry.getKey().o); - - if (ticks == entry.getValue()) - { - if (ticks == 1) - { - System.out.print("Removed"); - itel.remove(); - } - else - { - _ticksField.setInt(entry.getKey(), (200 - key) + ticks - 1); - _openedChests.put(entry.getKey(), ticks - 1); - } - } - else - { - _ticksField.setInt(entry.getKey(), (200 - key) + 10); - System.out.print((_ticksField.getInt(entry.getKey()) + key)); - _openedChests.put(entry.getKey(), 10); - } - } - catch (Exception ex) - { - ex.printStackTrace(); - } - } - } - - @EventHandler - public void chestCloseEvent(InventoryCloseEvent event) - { - InventoryHolder holder = event.getInventory().getHolder(); - - if (holder instanceof DoubleChest) - { - holder = (Chest) ((DoubleChest) holder).getLeftSide(); - } - - if (holder instanceof Chest) - { - Block block = ((Chest) holder).getBlock(); - - TileEntity tileEntity = ((CraftWorld) block.getWorld()).getTileEntityAt(block.getX(), block.getY(), block.getZ()); - - if (tileEntity instanceof TileEntityChest) - { - TileEntityChest chest = (TileEntityChest) tileEntity; - - try - { - chest.o = 10; - - int key = (chest.x + chest.y + chest.z) % 200; - - _ticksField.setInt(chest, (200 - key) + 10); - - _openedChests.put(chest, 10); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - } - } - } - - @EventHandler - public void onUse(PlayerInteractEvent event) - { - if (!IsLive()) - return; - - Player player = event.getPlayer(); - - if (!IsAlive(player)) - return; - - if (!event.getAction().name().contains("RIGHT")) - return; - - ItemStack item = event.getItem(); - - if (item == null || item.getType() != Material.COMPASS) - return; - - int uses = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replaceAll("\\D+", "")); - - if (uses > 0) - { - uses--; - - Player closest = null; - double cDist = 0; - - for (Player p : GetPlayers(true)) - { - if (p != player) - { - double dist = p.getLocation().distance(player.getLocation()); - - if (dist > 10 && (closest == null || dist < cDist)) - { - cDist = dist; - closest = p; - } - } - } - - if (closest != null) - { - player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 0); - closest.playSound(closest.getLocation(), Sound.ORB_PICKUP, 1, 0); - - player.setCompassTarget(closest.getLocation()); - player.setItemInHand(buildCompass(uses)); - - closest.sendMessage(F.main("Compass", player.getName() + " used a compass on you!")); - - player.sendMessage(F.main("Compass", "Located " + closest.getName() + " " + (int) cDist + " blocks away")); - - if (uses >= 1) - { - player.sendMessage(F.main("Compass", uses + " use" + (uses > 1 ? "s" : "") + " of the compass remaining.")); - } - else - { - player.sendMessage(F.main("Compass", "No remaining uses! Next use will break it!")); - } - } - } - else - { - player.sendMessage(F.main("Compass", "The compass breaks! No remaining uses!")); - - player.getWorld().playSound(player.getLocation(), Sound.ITEM_BREAK, 1, 5); - - player.setItemInHand(new ItemStack(Material.AIR)); - } - } - - @EventHandler - public void DisallowBrewingStand(PlayerInteractEvent event) - { - if (event.getClickedBlock() == null) - return; - - if (event.getClickedBlock().getType() == Material.BREWING_STAND) - { - event.setCancelled(true); - } - } - - @EventHandler - public void CancelItemFrameBreak(HangingBreakEvent event) - { - if (event.getEntity() instanceof ItemFrame) - { - event.setCancelled(true); - } - } - - @EventHandler - public void TNTDelay(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Live) - return; - - for (Player player : UtilServer.getPlayers()) - Recharge.Instance.useForce(player, "Throw TNT", 30000); - } - - @EventHandler - public void TNTThrow(PlayerInteractEvent event) - { - if (!IsLive()) - return; - - if (!UtilEvent.isAction(event, ActionType.L)) - return; - - Player player = event.getPlayer(); - - if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0)) - return; - - event.setCancelled(true); - - if (!Recharge.Instance.use(player, "Throw TNT", 0, true, false)) - { - UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot use " + F.item("Throw TNT") + " yet.")); - return; - } - - if (!Manager.GetGame().CanThrowTNT(player.getLocation())) - { - // Inform - UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot use " + F.item("Throw TNT") + " here.")); - return; - } - - UtilInv.remove(player, Material.TNT, (byte) 0, 1); - UtilInv.Update(player); - - TNTPrimed tnt = player.getWorld() - .spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class); - - UtilAction.velocity(tnt, player.getLocation().getDirection(), 0.5, false, 0, 0.1, 10, false); - - _tntMap.put(tnt, player); - } - - @EventHandler - public void TNTExplosion(ExplosionPrimeEvent event) - { - if (!_tntMap.containsKey(event.getEntity())) - return; - - Player player = _tntMap.remove(event.getEntity()); - - /*CustomExplosion explosion = new CustomExplosion(this.getArcadeManager().GetDamage(), event.getEntity().getLocation(), - ((TNTPrimed) event.getEntity()).getYield(), "Throwing TNT"); - - explosion.setPlayer(player, true);*/ - - for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) - Manager.GetCondition().Factory().Explosion("Throwing TNT", other, player, 50, 0.1, false, false); - } - - @EventHandler - // TODO - public void BlockPlaceOnFrost(BlockPlaceEvent event) - { - if (isFrost(event.getBlockAgainst())) - { - event.setCancelled(true); - return; - } - } - - @EventHandler - public void TourneyKills(CombatDeathEvent event) - { - if (!(event.GetEvent().getEntity() instanceof Player)) - return; - - Player killed = (Player) event.GetEvent().getEntity(); - - if (event.GetLog().GetKiller() != null) - { - Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); - - if (killer != null && !killer.equals(killed)) - { - // Manager.GetStatsManager().addStat(killer, GetName(), "kills", 1); - } - } - - if (event.GetLog().GetPlayer() != null) - { - if (killed != null) - { - // Manager.GetStatsManager().addStat(killed, GetName(), "deaths", 1); - } - } - } - - @EventHandler - public void BlockBreak(BlockBreakEvent event) - { - if (_placedBlocks.remove(event.getBlock().getLocation())) - { - event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, event.getBlock().getType()); - event.getBlock().setType(Material.AIR); - } - } - - @EventHandler - public void BlockBurn(BlockBurnEvent event) - { - event.setCancelled(true); - } - - @EventHandler - public void BlockSpread(BlockSpreadEvent event) - { - event.setCancelled(true); - } - - @EventHandler - public void BlockFade(BlockFadeEvent event) - { - event.setCancelled(true); - } - - @EventHandler - public void BlockDecay(LeavesDecayEvent event) - { - event.setCancelled(true); - } - - private void deathOrQuit(Player player) - { - if (!IsLive()) - return; - - String name = ""; - - for (char c : ("" + _deadBodyCount++).toCharArray()) - { - name += "§" + c; - } - - try - { - - Team team = player.getScoreboard().registerNewTeam(name); - - if (_hiddenNames.containsKey(player) && !_hiddenNames.get(player).isEmpty()) - { - ScoreboardTeam nmsTeam = (ScoreboardTeam) _packetTeam.get(team); - - PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam(nmsTeam, 2); - - Field teamName = PacketPlayOutScoreboardTeam.class.getDeclaredField("a"); - teamName.setAccessible(true); - - for (Player alive : GetPlayers(true)) - { - if (_hiddenNames.get(player).contains(alive.getName())) - { - teamName.set(packet, alive.getName()); - UtilPlayer.sendPacket(player, packet); - } - } - } - - team.setNameTagVisibility(TeamNameTagVisibility.NEVER); - team.addEntry(name); - - PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam((ScoreboardTeam) _packetTeam.get(team), 2); - - for (Player alive : GetPlayers(false)) - { - UtilPlayer.sendPacket(alive, packet); - } - - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - GameProfile newProfile = new GameProfile(UUID.randomUUID(), name); - - newProfile.getProperties().putAll(((CraftPlayer) player).getHandle().getProfile().getProperties()); - - DisguisePlayer disguise = new DisguisePlayer(null, newProfile); - disguise.setSleeping(BlockFace.values()[Math.round(player.getLocation().getYaw() / 90F) & 0x3].getOppositeFace()); - - getArcadeManager().GetDisguise().addFutureDisguise(disguise); - - Entity entity = player.getWorld().spawnEntity(player.getLocation(), EntityType.ARROW); - try - { - EntityArrow entityArrow = ((CraftArrow) entity).getHandle(); - - Field at = EntityArrow.class.getDeclaredField("at"); - at.setAccessible(true); - at.set(entityArrow, Integer.MIN_VALUE); // Despawn time - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - _hiddenNames.remove(player); - } - - @EventHandler - public void PlayerKillAward(CombatDeathEvent event) - { - Game game = Manager.GetGame(); - if (game == null) - return; - - if (!(event.GetEvent().getEntity() instanceof Player)) - return; - - Player player = (Player) event.GetEvent().getEntity(); - - deathOrQuit(player); - - FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.RED).with(Type.BALL_LARGE).trail(false) - .build(); - for (int i = 0; i < 3; i++) - UtilFirework.launchFirework(player.getLocation(), effect, null, 3); - - if (event.GetLog().GetKiller() == null) - return; - - Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); - if (killer == null) - return; - - if (killer.equals(player)) - return; - - killer.giveExpLevels(1); - } - - @EventHandler - public void DisableDamageLevel(CustomDamageEvent event) - { - event.SetDamageToLevel(false); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void ExplosionDamageRemove(EntityExplodeEvent event) - { - event.blockList().clear(); - } - - @EventHandler - // TODO - public void FixClean(PlayerQuitEvent event) - { - _frostChunks.remove(event.getPlayer()); - } - - @Override - @EventHandler - public void ScoreboardUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (GetTeamList().isEmpty()) - return; - - Scoreboard.Reset(); - - Scoreboard.WriteBlank(); - - GameTeam team = GetTeamList().get(0); - - if (team.GetPlayers(false).size() < 9) - { - for (Player player : team.GetPlayers(false)) - { - if (team.IsAlive(player)) - { - Scoreboard.Write(C.cGreen + player.getName()); - } - else - { - Scoreboard.Write(C.cGray + player.getName()); - } - } - } - else if (team.GetPlayers(true).size() < 9) - { - for (Player player : team.GetPlayers(true)) - { - Scoreboard.Write(C.cGreen + player.getName()); - } - } - else - { - Scoreboard.Write(C.cGreen + "Players Alive"); - Scoreboard.Write("" + team.GetPlayers(true).size()); - - Scoreboard.WriteBlank(); - Scoreboard.Write(C.cRed + "Players Dead"); - Scoreboard.Write("" + (team.GetPlayers(false).size() - team.GetPlayers(true).size())); - } - - if (_deathmatchCountdown) - { - if (event.getType() != UpdateType.TICK) - return; - - long timeLeft = 60000 - (System.currentTimeMillis() - _deathmatchTime); - - Scoreboard.WriteBlank(); - Scoreboard.Write(C.cYellow + C.Bold + "Deathmatch"); - Scoreboard.Write(UtilTime.MakeStr(Math.max(0, timeLeft), 0)); - - } - - Scoreboard.Draw(); - } - - public boolean isDeathMatchAboutToStart() - { - if (!_deathmatchLive) - return false; - - if (_deathmatchTime <= 0) - return false; - - return true; - } - - @EventHandler - public void deathmatchBowShoot(EntityShootBowEvent event) - { - if (isDeathMatchAboutToStart()) - event.getProjectile().remove(); - } - -} +//package nautilus.game.arcade.game.games.survivalgames; +// +//import java.lang.reflect.Field; +//import java.util.*; +//import java.util.Map.Entry; +// +//import org.bukkit.*; +//import org.bukkit.FireworkEffect.Type; +//import org.bukkit.block.Block; +//import org.bukkit.block.BlockFace; +//import org.bukkit.block.BlockState; +//import org.bukkit.block.Chest; +//import org.bukkit.block.DoubleChest; +//import org.bukkit.block.Furnace; +//import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; +//import org.bukkit.craftbukkit.v1_7_R4.entity.CraftArrow; +//import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +//import org.bukkit.entity.Entity; +//import org.bukkit.entity.EntityType; +//import org.bukkit.entity.Firework; +//import org.bukkit.entity.ItemFrame; +//import org.bukkit.entity.Player; +//import org.bukkit.entity.Snowball; +//import org.bukkit.entity.TNTPrimed; +//import org.bukkit.event.EventHandler; +//import org.bukkit.event.EventPriority; +//import org.bukkit.event.block.BlockBreakEvent; +//import org.bukkit.event.block.BlockBurnEvent; +//import org.bukkit.event.block.BlockFadeEvent; +//import org.bukkit.event.block.BlockPlaceEvent; +//import org.bukkit.event.block.BlockSpreadEvent; +//import org.bukkit.event.block.LeavesDecayEvent; +//import org.bukkit.event.entity.EntityExplodeEvent; +//import org.bukkit.event.entity.EntityShootBowEvent; +//import org.bukkit.event.entity.ExplosionPrimeEvent; +//import org.bukkit.event.entity.ItemSpawnEvent; +//import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +//import org.bukkit.event.hanging.HangingBreakEvent; +//import org.bukkit.event.inventory.InventoryCloseEvent; +//import org.bukkit.event.inventory.PrepareItemCraftEvent; +//import org.bukkit.event.player.PlayerCommandPreprocessEvent; +//import org.bukkit.event.player.PlayerInteractEvent; +//import org.bukkit.event.player.PlayerJoinEvent; +//import org.bukkit.event.player.PlayerMoveEvent; +//import org.bukkit.event.player.PlayerQuitEvent; +//import org.bukkit.inventory.FurnaceInventory; +//import org.bukkit.inventory.InventoryHolder; +//import org.bukkit.inventory.ItemStack; +//import org.bukkit.inventory.meta.FireworkMeta; +//import org.bukkit.scheduler.BukkitRunnable; +//import org.bukkit.scoreboard.Scoreboard; +//import org.bukkit.scoreboard.Team; +//import org.bukkit.scoreboard.TeamNameTagVisibility; +//import org.bukkit.util.Vector; +// +//import mineplex.core.common.util.C; +//import mineplex.core.common.util.F; +//import mineplex.core.common.util.MapUtil; +//import mineplex.core.common.util.NautHashMap; +//import mineplex.core.common.util.UtilAction; +//import mineplex.core.common.util.UtilAlg; +//import mineplex.core.common.util.UtilBlock; +//import mineplex.core.common.util.UtilEnt; +//import mineplex.core.common.util.UtilEvent; +//import mineplex.core.common.util.UtilEvent.ActionType; +//import mineplex.core.common.util.UtilFirework; +//import mineplex.core.common.util.UtilInv; +//import mineplex.core.common.util.UtilMath; +//import mineplex.core.common.util.UtilParticle; +//import mineplex.core.common.util.UtilPlayer; +//import mineplex.core.common.util.UtilParticle.ParticleType; +//import mineplex.core.common.util.UtilServer; +//import mineplex.core.common.util.UtilTime; +//import mineplex.core.common.util.UtilTime.TimeUnit; +//import mineplex.core.common.util.UtilWorld; +//import mineplex.core.disguise.disguises.DisguisePlayer; +//import mineplex.core.itemstack.ItemBuilder; +//import mineplex.core.loot.*; +//import mineplex.core.packethandler.IPacketHandler; +//import mineplex.core.packethandler.PacketInfo; +//import mineplex.core.recharge.Recharge; +//import mineplex.core.updater.UpdateType; +//import mineplex.core.updater.event.UpdateEvent; +//import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; +//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.game.Game; +//import nautilus.game.arcade.game.GameTeam; +//import nautilus.game.arcade.game.SoloGame; +//import nautilus.game.arcade.game.games.survivalgames.kit.*; +//import nautilus.game.arcade.kit.Kit; +//import nautilus.game.arcade.stats.FirstSupplyDropOpenStatTracker; +//import nautilus.game.arcade.stats.KillsWithinTimeLimitStatTracker; +//import nautilus.game.arcade.stats.SimultaneousSkeletonStatTracker; +//import nautilus.game.arcade.stats.WinWithoutWearingArmorStatTracker; +//import net.minecraft.server.v1_7_R4.EntityArrow; +//import net.minecraft.server.v1_7_R4.PacketPlayInUseEntity; +//import net.minecraft.server.v1_7_R4.PacketPlayOutScoreboardTeam; +//import net.minecraft.server.v1_7_R4.ScoreboardTeam; +//import net.minecraft.server.v1_7_R4.TileEntity; +//import net.minecraft.server.v1_7_R4.TileEntityChest; +//import net.minecraft.util.com.mojang.authlib.GameProfile; +// +//public class SurvivalGames extends SoloGame +//{ +// // Lootables +// private ChestLoot _baseLoot = new ChestLoot(); +// private ChestLoot _spawnLoot = new ChestLoot(); +// private ChestLoot _superLoot = new ChestLoot(); +// private ChestLoot _cookedFurnace = new ChestLoot(); +// private ChestLoot _rawFurnace = new ChestLoot(); +// +// private HashMap> _hiddenNames = new HashMap>(); +// private HashSet _lootedBlocks = new HashSet(); +// +// // Misc +// private HashMap _tntMap = new HashMap(); +// private HashSet _placedBlocks = new HashSet(); +// private Location _spawn; +// +// // Creep +// private int _maxSpreadRate = 120; +// private ArrayList _frostLocations = new ArrayList(); +// private int _spreadType = 0; +// private String _spreadName = ""; +// private boolean _ignoreLiquids = true; +// private ArrayList> _spreadTypeBlocks; +// private HashMap _frostOutTime = new HashMap(); +// +// private HashMap>> _frostMap = new HashMap>>(); +// private HashMap> _frostChunks = new HashMap>(); +// +// // Supply Drop +// private ArrayList _supplyLocations = new ArrayList(); +// private Location _supplyCurrent = null; +// private Location _supplyEffect = null; +// private ArrayList _supplyCrates = new ArrayList(); +// private HashSet _landedCrates = new HashSet(); +// +// // Deathmatch +// private boolean _deathmatchCountdown = false; +// private boolean _deathmatchLive = false; +// private long _deathmatchTime = 0; +// +// private int _chestRefillTime = 60 * 7; +// +// // Debug +// private long totalTime = 0; +// +// private Field _nameTagVisibility; +// private Field _packetTeam; +// private IPacketHandler _useEntityPacketHandler; +// private int _deadBodyCount; +// +// private NautHashMap _openedChests = new NautHashMap(); +// /** +// * @The field is originally set to 1, if the next tick finds it at 1, then its set to 10. If the next tick finds it at 10 then +// * it removes. +// * @Else the ticks set it to 50 +// */ +// private Field _ticksField; +// +// public SurvivalGames(ArcadeManager manager) +// { +// super(manager, GameType.SurvivalGames, +// +// new Kit[] +// { +// new KitAxeman(manager), +// // new KitLooter(manager), +// new KitKnight(manager), +// +// new KitArcher(manager), +// +// new KitBrawler(manager), +// +// new KitAssassin(manager), +// +// new KitBeastmaster(manager), +// +// new KitBomber(manager), +// +// new KitNecromancer(manager), +// +// new KitHorseman(manager) +// }, +// +// new String[] +// { +// "Search for chests to find loot", "Slaughter your opponents", "Stay away from the Deep Freeze!", +// "Last tribute alive wins!" +// }); +// +// _help = new String[] +// { +// C.cGreen + "Use a Compass to find and kill enemies!", +// +// C.cGreen + "Avoid the Deep Freeze at all costs!", +// +// C.cGreen + "You lose Speed 2 at start of game if you attack.", +// +// C.cAqua + "Avoid enemies who have better gear than you!" +// }; +// +// // Manager.GetAntiStack().SetEnabled(false); +// +// this.StrictAntiHack = true; +// +// this.GameTimeout = 9600000; +// +// this.QuitDropItems = true; +// +// this.WorldTimeSet = 0; +// this.WorldBoundaryKill = false; +// +// this.SpawnDistanceRequirement = 48; +// +// this.DamageSelf = true; +// this.DamageTeamSelf = true; +// +// this.DeathDropItems = true; +// +// this.ItemDrop = true; +// this.ItemPickup = true; +// +// this.InventoryClick = true; +// this.InventoryOpenBlock = true; +// this.InventoryOpenChest = true; +// +// // Blocks +// this.BlockBreakAllow.add(46); // TNT +// this.BlockPlaceAllow.add(46); +// +// this.BlockBreakAllow.add(30); // Web +// this.BlockPlaceAllow.add(30); +// +// this.BlockBreakAllow.add(132); // Tripwire +// this.BlockPlaceAllow.add(132); +// +// this.BlockBreakAllow.add(131); // Wire Hook +// this.BlockPlaceAllow.add(131); +// +// this.BlockBreakAllow.add(55); // Redstone Dust +// this.BlockPlaceAllow.add(55); +// +// this.BlockBreakAllow.add(72); // Wood Pressure Plate +// this.BlockPlaceAllow.add(72); +// +// this.BlockBreakAllow.add(69); // Lever +// this.BlockPlaceAllow.add(69); +// +// this.BlockBreakAllow.add(18); // Leaves +// +// BlockBreakAllow.add(Material.LONG_GRASS.getId()); +// BlockBreakAllow.add(Material.RED_ROSE.getId()); +// BlockBreakAllow.add(Material.YELLOW_FLOWER.getId()); +// BlockBreakAllow.add(Material.BROWN_MUSHROOM.getId()); +// BlockBreakAllow.add(Material.RED_MUSHROOM.getId()); +// BlockBreakAllow.add(Material.DEAD_BUSH.getId()); +// BlockBreakAllow.add(Material.CARROT.getId()); +// BlockBreakAllow.add(Material.POTATO.getId()); +// BlockBreakAllow.add(Material.DOUBLE_PLANT.getId()); +// BlockBreakAllow.add(Material.CROPS.getId()); +// BlockBreakAllow.add(Material.SAPLING.getId()); +// BlockBreakAllow.add(Material.VINE.getId()); +// BlockBreakAllow.add(Material.WATER_LILY.getId()); +// +// // SPREAD +// _spreadType = 1;// UtilMath.r(3); +// +// _spreadTypeBlocks = new ArrayList>(); +// +// if (_spreadType == 0) +// { +// _spreadName = "Red"; +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(159, 14)); +// } +// else if (_spreadType == 1) +// { +// _spreadName = "Deep Freeze"; +// _ignoreLiquids = false; +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(78, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(79, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(80, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(49, 0)); +// } +// else if (_spreadType == 2) +// { +// _spreadName = "Nether Corruption"; +// _ignoreLiquids = false; +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(49, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(87, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(88, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(89, 0)); +// _spreadTypeBlocks.add(new AbstractMap.SimpleEntry(153, 0)); +// } +// +// System.out.println("==================="); +// System.out.println("CREEP TYPE: " + _spreadName); +// System.out.println("==================="); +// // Manager.GetStatsManager().addTable(GetName(), "kills", "deaths", "chestsOpened"); +// +// setupLoot(); +// +// try +// { +// +// _packetTeam = Class.forName("org.bukkit.craftbukkit.v1_7_R4.scoreboard.CraftTeam").getDeclaredField("team"); +// _packetTeam.setAccessible(true); +// +// _nameTagVisibility = PacketPlayOutScoreboardTeam.class.getDeclaredField("_nameTagVisibility"); +// _nameTagVisibility.setAccessible(true); +// +// _ticksField = TileEntityChest.class.getDeclaredField("ticks"); +// _ticksField.setAccessible(true); +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// +// _useEntityPacketHandler = new IPacketHandler() +// { +// @Override +// public void handle(PacketInfo packetInfo) +// { +// if (packetInfo.getPacket() instanceof PacketPlayInUseEntity) +// { +// net.minecraft.server.v1_7_R4.Entity entity = ((PacketPlayInUseEntity) packetInfo.getPacket()) +// .a(((CraftWorld) packetInfo.getPlayer().getWorld()).getHandle()); +// +// if (entity instanceof EntityArrow) +// { +// packetInfo.setCancelled(true); +// } +// } +// } +// }; +// +// registerStatTrackers(new WinWithoutWearingArmorStatTracker(this), new KillsWithinTimeLimitStatTracker(this, 3, 60, +// "Bloodlust"), new FirstSupplyDropOpenStatTracker(this), new SimultaneousSkeletonStatTracker(this, 5)); +// } +// +// @EventHandler +// public void handleEntityPacket(GameStateChangeEvent event) +// { +// if (event.GetState() == GameState.Live) +// { +// getArcadeManager().getPacketHandler().addPacketHandler(_useEntityPacketHandler); +// } +// else if (event.GetState() == GameState.Dead) +// { +// getArcadeManager().getPacketHandler().removePacketHandler(_useEntityPacketHandler); +// } +// } +// +// @Override +// public boolean isPlaySoundGameStart() +// { +// return false; +// } +// +// private void setupLoot() +// { +// // Food +// _baseLoot.registerLoot(new RandomItem(Material.RAW_FISH, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.RAW_BEEF, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.RAW_CHICKEN, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.POTATO_ITEM, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.CARROT_ITEM, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.RED_MUSHROOM, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.BROWN_MUSHROOM, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.WHEAT, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.APPLE, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.PORK, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(new ItemStack(Material.INK_SACK, 1, (short) 3), 30, 1, 2)); // Cocoa beans +// _baseLoot.registerLoot(new RandomItem(Material.ROTTEN_FLESH, 30, 1, 2)); +// +// // Weapons +// _baseLoot.registerLoot(new RandomItem(Material.WOOD_AXE, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.WOOD_SWORD, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.STONE_AXE, 30)); +// +// // Leather armor +// _baseLoot.registerLoot(new RandomItem(Material.LEATHER_BOOTS, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.LEATHER_CHESTPLATE, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.LEATHER_HELMET, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.LEATHER_LEGGINGS, 30)); +// +// // Chain armor +// _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_BOOTS, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_CHESTPLATE, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_HELMET, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.CHAINMAIL_LEGGINGS, 30)); +// +// // Throwable +// _baseLoot.registerLoot(new RandomItem(Material.FISHING_ROD, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.BOW, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.ARROW, 30, 1, 5)); +// _baseLoot.registerLoot(new RandomItem(Material.SNOW_BALL, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.EGG, 30, 1, 2)); +// +// // Misc +// _baseLoot.registerLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.FLINT_AND_STEEL, 1)); +// _baseLoot.registerLoot(new RandomItem(Material.COMPASS, 50)); +// _baseLoot.registerLoot(new RandomItem(Material.STICK, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.BOAT, 30)); +// _baseLoot.registerLoot(new RandomItem(Material.FLINT, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.FEATHER, 30, 1, 2)); +// _baseLoot.registerLoot(new RandomItem(Material.GOLD_INGOT, 30, 1, 2)); +// +// _spawnLoot.cloneLoot(_baseLoot); +// +// // Food +// _spawnLoot.registerLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.CAKE, 30)); +// _spawnLoot.registerLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.COOKED_FISH, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.GRILLED_PORK, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.COOKIE, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.APPLE, 30, 1, 2)); +// +// // Loot for chests in spawn +// // Random bowl +// _spawnLoot.registerLoot(new RandomItem(Material.BOWL, 30, 1, 2)); +// +// // Weaponry and ores +// _spawnLoot.registerLoot(new RandomItem(Material.STONE_SWORD, 30)); +// _spawnLoot.registerLoot(new RandomItem(Material.IRON_INGOT, 30, 1, 2)); +// _spawnLoot.registerLoot(new RandomItem(Material.DIAMOND, 30)); +// +// // Iron gear +// _spawnLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); +// _spawnLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 30)); +// _spawnLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); +// _spawnLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 30)); +// +// // Supply crate loot +// // Diamond gear +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_HELMET, 3)); +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_CHESTPLATE, 1)); +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_LEGGINGS, 2)); +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_BOOTS, 3)); +// +// // Iron gear +// _superLoot.registerLoot(new RandomItem(Material.IRON_HELMET, 30)); +// _superLoot.registerLoot(new RandomItem(Material.IRON_CHESTPLATE, 24)); +// _superLoot.registerLoot(new RandomItem(Material.IRON_LEGGINGS, 27)); +// _superLoot.registerLoot(new RandomItem(Material.IRON_BOOTS, 30)); +// +// // Weapons +// _superLoot.registerLoot(new RandomItem(Material.IRON_SWORD, 24)); +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_SWORD, 8)); +// _superLoot.registerLoot(new RandomItem(Material.DIAMOND_AXE, 16)); +// +// // Cooked furnace +// _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_BEEF, 3, 1, 2)); +// _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_CHICKEN, 3, 1, 2)); +// _cookedFurnace.registerLoot(new RandomItem(Material.COOKED_FISH, 3, 1, 2)); +// _cookedFurnace.registerLoot(new RandomItem(Material.GRILLED_PORK, 3, 1, 2)); +// _cookedFurnace.registerLoot(new RandomItem(Material.IRON_INGOT, 1, 1, 1)); +// _cookedFurnace.registerLoot(new RandomItem(Material.BAKED_POTATO, 3, 1, 1)); +// _cookedFurnace.registerLoot(new RandomItem(Material.PUMPKIN_PIE, 3, 1, 1)); +// +// // Raw furnace +// _rawFurnace.registerLoot(new RandomItem(Material.RAW_BEEF, 1, 1, 2)); +// _rawFurnace.registerLoot(new RandomItem(Material.RAW_CHICKEN, 1, 1, 2)); +// _rawFurnace.registerLoot(new RandomItem(Material.RAW_FISH, 1, 1, 2)); +// _rawFurnace.registerLoot(new RandomItem(Material.PORK, 1, 1, 2)); +// _rawFurnace.registerLoot(new RandomItem(Material.POTATO_ITEM, 1, 1, 2)); +// } +// +// @Override +// public double GetKillsGems(Player killer, Player killed, boolean assist) +// { +// return 4; +// } +// +// @Override +// public void ParseData() +// { +// _spawn = UtilWorld.averageLocation(this.GetTeamList().get(0).GetSpawns()); +// +// for (Location loc : this.GetTeamList().get(0).GetSpawns()) +// loc.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(loc, _spawn))); +// +// setupChestsEnchantingCrafting(); +// +// _supplyLocations = WorldData.GetDataLocs("WHITE"); +// for (Location loc : _supplyLocations) +// loc.getBlock().setType(Material.GLASS); +// +// if (!WorldData.GetCustomLocs("VARS").isEmpty()) +// { +// _maxSpreadRate = WorldData.GetCustomLocs("VARS").get(0).getBlockX(); +// System.out.println("Spread Rate: " + _maxSpreadRate); +// } +// } +// +// private void setupChestsEnchantingCrafting() +// { +// ArrayList chests = WorldData.GetCustomLocs("54"); +// +// System.out.println("Map Chest Locations: " + chests.size()); +// +// // Enchants +// System.out.println("Enchanting Tables: " + Math.min(5, chests.size())); +// for (int i = 0; i < 5 && !chests.isEmpty(); i++) +// { +// Location loc = chests.remove(UtilMath.r(chests.size())); +// loc.getBlock().setType(Material.ENCHANTMENT_TABLE); +// } +// +// // Crafting +// System.out.println("Crafting Benches: " + Math.min(10, chests.size())); +// for (int i = 0; i < 10 && !chests.isEmpty(); i++) +// { +// Location loc = chests.remove(UtilMath.r(chests.size())); +// loc.getBlock().setType(Material.WORKBENCH); +// } +// +// int spawn = 0; +// +// // Chests +// System.out.println("Chests: " + Math.min(250, chests.size())); +// for (int i = 0; i < 250 && !chests.isEmpty(); i++) +// { +// Location loc = chests.remove(UtilMath.r(chests.size())); +// +// if (UtilMath.offset2d(loc, _spawn) < 8) +// spawn++; +// } +// +// for (Location loc : chests) +// { +// if (spawn < 10 && UtilMath.offset(loc, _spawn) < 8) +// { +// spawn++; +// continue; +// } +// +// loc.getBlock().setType(Material.AIR); +// } +// } +// +// @EventHandler +// public void CreateRandomChests(GameStateChangeEvent event) +// { +// if (event.GetState() != GameState.Recruit) +// return; +// +// HashSet ignore = new HashSet(); +// +// ignore.add(Material.LEAVES); +// +// int xDiff = WorldData.MaxX - WorldData.MinX; +// int zDiff = WorldData.MaxZ - WorldData.MinZ; +// +// int done = 0; +// +// while (done < 40) +// { +// +// Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), +// WorldData.MinZ + UtilMath.r(zDiff), ignore); +// +// if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN))) +// continue; +// +// block.setTypeIdAndData(Material.CHEST.getId(), (byte) UtilMath.r(4), true); +// done++; +// } +// } +// +// private void fillChest(Player looter, Block block) +// { +// _lootedBlocks.add(block.getLocation()); +// +// Chest chest = (Chest) block.getState(); +// +// chest.getBlockInventory().clear(); +// +// int items = 2; +// if (Math.random() > 0.50) +// items++; +// if (Math.random() > 0.65) +// items++; +// if (Math.random() > 0.80) +// items++; +// if (Math.random() > 0.95) +// items++; +// +// boolean spawnChest = UtilMath.offset(chest.getLocation(), _spawn) < 8; +// if (spawnChest) +// items += 3; +// +// if (GetKit(looter) instanceof KitLooter) +// { +// items += UtilMath.r(3); +// } +// +// if (_supplyCrates.contains(block)) +// { +// items = 2; +// if (Math.random() > 0.75) +// items++; +// if (Math.random() > 0.95) +// items++; +// } +// +// for (int i = 0; i < items; i++) +// { +// ItemStack item; +// +// if (spawnChest) +// { +// item = _spawnLoot.getLoot(); +// } +// else +// { +// item = GetChestItem(_supplyCrates.contains(block)); +// } +// +// if (item.getType() == Material.COMPASS) +// { +// item = buildCompass(5); +// } +// +// chest.getBlockInventory().setItem(UtilMath.r(27), item); +// } +// +// if (_supplyCrates.contains(block)) +// { +// Bukkit.getPluginManager().callEvent(new SupplyChestOpenEvent(looter, block)); +// } +// +// _supplyCrates.remove(block); +// _landedCrates.add(block.getLocation()); +// } +// +// @EventHandler +// public void OpenChest(PlayerInteractEvent event) +// { +// if (event.isCancelled()) +// return; +// +// Block block = event.getClickedBlock(); +// +// if (block == null) +// return; +// +// if (!IsLive()) +// return; +// +// if (_lootedBlocks.contains(block.getLocation())) +// return; +// +// BlockState state = block.getState(); +// +// if (state instanceof DoubleChest) +// { +// DoubleChest doubleChest = (DoubleChest) state; +// +// fillChest(event.getPlayer(), ((Chest) doubleChest.getLeftSide()).getBlock()); +// fillChest(event.getPlayer(), ((Chest) doubleChest.getRightSide()).getBlock()); +// } +// else if (state instanceof Chest) +// { +// fillChest(event.getPlayer(), block); +// } +// else if (state instanceof Furnace) +// { +// Furnace furnace = (Furnace) state; +// +// if (furnace.getCookTime() == 0) +// { +// FurnaceInventory inv = furnace.getInventory(); +// +// if (UtilMath.r(3) == 0) +// { +// int random = UtilMath.r(9); +// +// if (random == 0) +// { +// inv.setFuel(new ItemStack(Material.STICK, new Random().nextInt(2) + 1)); +// } +// else if (random <= 3) +// { +// inv.setSmelting(_rawFurnace.getLoot()); +// } +// else +// { +// inv.setResult(_cookedFurnace.getLoot()); +// } +// } +// +// _lootedBlocks.add(block.getLocation()); +// } +// } +// } +// +// private ItemStack GetChestItem(boolean superChest) +// { +// if (superChest) +// return _superLoot.getLoot(); +// +// return _baseLoot.getLoot(); +// } +// +// private String buildTime() +// { +// String s = ""; +// +// for (char c : ("" + System.nanoTime()).toCharArray()) +// { +// s += "§" + c; +// } +// +// return s; +// } +// +// private ItemStack buildCompass(int uses) +// { +// ItemBuilder item = new ItemBuilder(Material.COMPASS); +// item.setTitle(C.cWhite + "Player Tracker" + buildTime()); +// +// item.addLore(C.cBlue + "Uses remaining: " + C.cWhite + uses); +// item.addLore(C.cGray + "Use this to find the location and"); +// item.addLore(C.cGray + "distance of the nearest player!"); +// +// return item.build(); +// } +// +// @EventHandler +// public void StartEffectApply(GameStateChangeEvent event) +// { +// if (event.GetState() != GameState.Live) +// return; +// +// Scoreboard board = GetScoreboard().GetScoreboard(); +// +// for (Player player : GetPlayers(true)) +// { +// player.playSound(player.getLocation(), Sound.DONKEY_DEATH, 0.8F, 0); +// +// Manager.GetCondition().Factory().Speed("Start Speed", player, player, 30, 1, false, false, false); +// Manager.GetCondition().Factory().HealthBoost("Start Health", player, player, 30, 1, false, false, false); +// +// player.setHealth(player.getMaxHealth()); +// +// Team team = board.registerNewTeam(player.getName()); +// +// team.setPrefix(board.getPlayerTeam(player).getPrefix()); +// +// team.addPlayer(player); +// } +// } +// +// @EventHandler +// public void joinMessage(PlayerJoinEvent event) +// { +// if (!UtilPlayer.is1_8(event.getPlayer())) +// returnToHub(event.getPlayer()); +// } +// +// @EventHandler +// public void outdatedVersion(GameStateChangeEvent event) +// { +// for (Player player : UtilServer.getPlayers()) +// { +// if (!UtilPlayer.is1_8(player)) +// returnToHub(player); +// } +// } +// +// public void returnToHub(Player player) +// { +// UtilPlayer.message(player, " "); +// UtilPlayer.message(player, C.cGold + C.Bold + "SurvivalGames requires you to be using Minecraft 1.8!"); +// UtilPlayer.message(player, " "); +// +// player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); +// Manager.GetPortal().sendPlayerToServer(player, "Lobby"); +// } +// +// @EventHandler +// public void UpdateNametagVisibility(UpdateEvent event) +// { +// if (event.getType() != UpdateType.TICK) +// return; +// +// if (!IsLive()) +// return; +// +// ArrayList alivePlayers = GetPlayers(true); +// HashMap> checkedPlayers = new HashMap>(); +// +// for (Player target : alivePlayers) +// { +// +// PacketPlayOutScoreboardTeam packet = null; +// +// try +// { +// ScoreboardTeam nmsTeam = (ScoreboardTeam) _packetTeam.get(target.getScoreboard().getTeam(target.getName())); +// +// packet = new PacketPlayOutScoreboardTeam(nmsTeam, 2); +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// +// for (Player player : alivePlayers) +// { +// if (target != player) +// { +// boolean hideName = false; +// +// if (!checkedPlayers.containsKey(target) || !checkedPlayers.get(target).containsKey(player)) +// { +// if (target.getLocation().distance(player.getLocation()) > 16) +// { +// hideName = true; +// } +// else if (!target.hasLineOfSight(player)) +// { +// // no los +// hideName = true; +// } +// +// Player[] players = new Player[] +// { +// target, player +// }; +// +// for (int i = 0; i <= 1; i++) +// { +// Player p1 = players[i]; +// Player p2 = players[1 - i]; +// +// if (!checkedPlayers.containsKey(p1)) +// { +// checkedPlayers.put(p1, new HashMap()); +// } +// +// checkedPlayers.get(p1).put(p2, hideName); +// } +// } +// else +// { +// hideName = checkedPlayers.get(target).get(player); +// } +// +// // If hiddenNames conta +// if (hideName != (_hiddenNames.containsKey(player) && _hiddenNames.get(player).contains(target.getName()))) +// { +// if (!hideName) +// { +// _hiddenNames.get(player).remove(target.getName()); +// } +// else +// { +// if (!_hiddenNames.containsKey(player)) +// { +// _hiddenNames.put(player, new HashSet()); +// } +// +// _hiddenNames.get(player).add(target.getName()); +// } +// +// try +// { +// _nameTagVisibility.set(packet, hideName ? "never" : "always"); +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// +// UtilPlayer.sendPacket(player, packet); +// } +// } +// } +// } +// } +// +// @EventHandler +// public void RemoveNametagInfo(PlayerQuitEvent event) +// { +// _hiddenNames.remove(event.getPlayer()); +// deathOrQuit(event.getPlayer()); +// } +// +// @EventHandler +// public void onGameEnd(GameStateChangeEvent event) +// { +// if (event.GetState() != GameState.End) +// return; +// +// new BukkitRunnable() +// { +// public void run() +// { +// if (GetState() != GameState.End) +// { +// cancel(); +// return; +// } +// +// for (Location loc : GetTeamList().get(0).GetSpawns()) +// { +// Firework firework = (Firework) loc.getWorld().spawnEntity(loc, EntityType.FIREWORK); +// +// FireworkMeta meta = firework.getFireworkMeta(); +// +// meta.addEffect(FireworkEffect.builder().withColor(Color.AQUA).with(Type.BALL).withTrail().build()); +// +// firework.setFireworkMeta(meta); +// } +// } +// }.runTaskTimer(getArcadeManager().getPlugin(), 0, 60); +// } +// +// @EventHandler +// public void SpeedRemove(CustomDamageEvent event) +// { +// Player damager = event.GetDamagerPlayer(true); +// if (damager != null) +// 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) +// { +// Material mat = event.getEntity().getItemStack().getType(); +// +// switch (mat) +// { +// case SEEDS: +// case SAPLING: +// case VINE: +// case LEAVES: +// case LONG_GRASS: +// case RED_ROSE: +// case YELLOW_FLOWER: +// case DEAD_BUSH: +// case WATER_LILY: +// event.setCancelled(true); +// return; +// default: +// break; +// } +// +// for (Player player : GetPlayers(true)) +// if (UtilMath.offset(player, event.getEntity()) < 6) +// return; +// +// event.setCancelled(true); +// } +// +// @EventHandler +// // TODO +// public void frostBorderStart(GameStateChangeEvent event) +// { +// if (event.GetState() != GameState.Prepare) +// return; +// +// // Start Red +// Block block; +// +// for (int x = WorldData.MinX; x <= WorldData.MaxX; x++) +// { +// block = WorldData.World.getHighestBlockAt(x, WorldData.MinZ); +// while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) +// block = block.getRelative(BlockFace.DOWN); +// if (block.getY() > 0) +// _frostLocations.add(block.getLocation()); +// +// block = WorldData.World.getHighestBlockAt(x, WorldData.MaxZ); +// while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) +// block = block.getRelative(BlockFace.DOWN); +// if (block.getY() > 0) +// _frostLocations.add(block.getLocation()); +// } +// +// for (int z = WorldData.MinZ; z <= WorldData.MaxZ; z++) +// { +// block = WorldData.World.getHighestBlockAt(WorldData.MinX, z); +// while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) +// block = block.getRelative(BlockFace.DOWN); +// if (block.getY() > 0) +// _frostLocations.add(block.getLocation()); +// +// block = WorldData.World.getHighestBlockAt(WorldData.MaxX, z); +// while (!UtilBlock.solid(block) && !block.isLiquid() && block.getY() > 0) +// block = block.getRelative(BlockFace.DOWN); +// if (block.getY() > 0) +// _frostLocations.add(block.getLocation()); +// } +// } +// +// public int frostMax() +// { +// return _maxSpreadRate;// + (24 - GetPlayers(true).size())*2; +// } +// +// @EventHandler +// // TODO +// public void frostUpdate(UpdateEvent event) +// { +// if (event.getType() != UpdateType.TICK) +// return; +// +// if (!IsLive()) +// return; +// +// long time = System.currentTimeMillis(); +// +// if (_frostLocations.isEmpty()) +// return; +// +// int max = Math.max(5, Math.min(frostMax(), _frostLocations.size() / 100)); +// +// for (int i = 0; i < max; i++) +// { +// if (_frostLocations.isEmpty()) +// break; +// +// Location loc = _frostLocations.remove(UtilMath.r(_frostLocations.size())); +// +// // Already Red +// if (isFrost(loc.getBlock())) +// { +// i = Math.max(0, i - 1); +// continue; +// } +// +// // Set to Red +// setFrost(loc); +// +// // Spread to Neighbours +// Block block = loc.getBlock(); +// +// frostSpread(block.getRelative(BlockFace.UP)); +// frostSpread(block.getRelative(BlockFace.DOWN)); +// +// if (!frostSpread(block.getRelative(BlockFace.NORTH))) +// { +// frostSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.UP)); +// frostSpread(block.getRelative(BlockFace.NORTH).getRelative(BlockFace.DOWN)); +// } +// +// if (!frostSpread(block.getRelative(BlockFace.EAST))) +// { +// frostSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.UP)); +// frostSpread(block.getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN)); +// } +// +// if (!frostSpread(block.getRelative(BlockFace.SOUTH))) +// { +// frostSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.UP)); +// frostSpread(block.getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN)); +// } +// +// if (!frostSpread(block.getRelative(BlockFace.WEST))) +// { +// frostSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.UP)); +// frostSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.DOWN)); +// } +// } +// +// totalTime += System.currentTimeMillis() - time; +// } +// +// @EventHandler +// // TODO +// public void frostTimer(UpdateEvent event) +// { +// if (event.getType() != UpdateType.MIN_01) +// return; +// +// if (!IsLive()) +// return; +// +// System.out.println(" "); +// System.out.println("Game Time: " + UtilTime.MakeStr(System.currentTimeMillis() - this.GetStateTime())); +// System.out.println("Creep Size: " + _frostLocations.size()); +// System.out.println("Creep Time: " + UtilTime.convertString(totalTime, 4, TimeUnit.SECONDS)); +// System.out.println(" "); +// +// totalTime = 0; +// } +// +// public boolean frostSpread(Block block) +// { +// if (block == null || block.getType() == Material.AIR) +// return false; +// +// // Inside Boundary +// if (UtilMath.offset(_spawn, block.getLocation()) < 48) +// return false; +// +// // Liquid +// if (block.isLiquid()) +// { +// if (_ignoreLiquids) +// return false; +// +// // Only freeze surface water +// boolean surroundedByWater = true; +// for (Block other : UtilBlock.getSurrounding(block, false)) +// { +// if (other.getY() < block.getY()) +// continue; +// +// if (!other.isLiquid() && !isFrost(other)) +// { +// surroundedByWater = false; +// break; +// } +// } +// if (surroundedByWater) +// return false; +// +// // Dont Spread to Moving +// if (block.getTypeId() == 9) +// if (block.getData() != 0) +// return false; +// +// // Dont spread near moving +// for (Block other : UtilBlock.getSurrounding(block, false)) +// { +// if (other.getTypeId() == 9 && other.getData() != 0) +// { +// return false; +// } +// } +// } +// +// // Ignore Signs +// if (block.getType() == Material.SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) +// return false; +// +// // Pre-Red +// if (isFrost(block)) +// { +// return false; +// } +// +// if ((!UtilBlock.solid(block) || UtilBlock.airFoliage(block) || block.getType() == Material.CHEST)) +// { +// if (!block.isLiquid()) +// { +// while (block.getType() == Material.VINE) +// { +// frostChangeBlock(block.getLocation(), 0, (byte) 0); +// block = block.getRelative(BlockFace.DOWN); +// } +// +// // Remove Foliage +// if (block.getType() != Material.AIR) +// frostChangeBlock(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; +// +// // Not Visible +// if (!UtilBlock.isVisible(block)) +// return false; +// +// // Apply +// _frostLocations.add(block.getLocation()); +// return true; +// } +// +// public void frostChangeBlock(Location loc, int id, byte data) +// { +// if (!IsLive()) +// return; +// +// MapUtil.ChunkBlockChange(loc, id, data, false); +// +// // Old Style +// /* +// if (true) +// { +// for (Player player : UtilServer.getPlayers()) +// { +// if (Math.abs(player.getLocation().getChunk().getX() - loc.getChunk().getX()) > UtilServer.getServer().getViewDistance()) +// continue; +// +// if (Math.abs(player.getLocation().getChunk().getZ() - loc.getChunk().getZ()) > UtilServer.getServer().getViewDistance()) +// continue; +// +// player.sendBlockChange(loc, id, data); +// } +// +// return; +// } +// */ +// +// // Non-Queue +// for (Player player : UtilServer.getPlayers()) +// { +// if (Math.abs(player.getLocation().getChunk().getX() - loc.getChunk().getX()) > UtilServer.getServer() +// .getViewDistance()) +// continue; +// +// if (Math.abs(player.getLocation().getChunk().getZ() - loc.getChunk().getZ()) > UtilServer.getServer() +// .getViewDistance()) +// continue; +// +// if (!_frostChunks.containsKey(player)) +// _frostChunks.put(player, new ArrayList()); +// +// boolean added = false; +// for (ChunkChange change : _frostChunks.get(player)) +// { +// if (change.Chunk.equals(loc.getChunk()))// && change.DirtyCount < 63) +// { +// change.AddChange(loc, id, data); +// added = true; +// break; +// } +// } +// if (!added) +// _frostChunks.get(player).add(new ChunkChange(loc, id, data)); +// } +// } +// +// @EventHandler +// // TODO +// public void frostChunkUpdate(UpdateEvent event) +// { +// if (event.getType() != UpdateType.FAST) +// return; +// +// if (!IsLive()) +// return; +// +// for (Player player : _frostChunks.keySet()) +// { +// // Remove Far Away +// Iterator chunkIterator = _frostChunks.get(player).iterator(); +// while (chunkIterator.hasNext()) +// { +// ChunkChange change = chunkIterator.next(); +// +// if (Math.abs(player.getLocation().getChunk().getX() - change.Chunk.getX()) > UtilServer.getServer() +// .getViewDistance() +// || Math.abs(player.getLocation().getChunk().getZ() - change.Chunk.getZ()) > UtilServer.getServer() +// .getViewDistance()) +// { +// chunkIterator.remove(); +// } +// } +// +// if (_frostChunks.get(player).isEmpty()) +// continue; +// +// // Get Fittest Chunk to Update +// int bestId = -1; +// double bestScore = 0; +// +// for (int i = 0; i < _frostChunks.get(player).size(); i++) +// { +// ChunkChange change = _frostChunks.get(player).get(i); +// +// // Base Score, 1 per block +// double score = change.Changes.size(); +// +// // Time Score, multiply block score by 1 + 0.5 per second +// score = score * (1 + (System.currentTimeMillis() - change.Time) / 200d); +// +// // Distance Divisor +// double dist = 0.5; +// if (!player.getLocation().getChunk().equals(change.Chunk)) +// { +// int x = Math.abs(player.getLocation().getChunk().getX() - change.Chunk.getX()); +// int z = Math.abs(player.getLocation().getChunk().getZ() - change.Chunk.getZ()); +// dist = Math.sqrt(x * x + z * z); +// } +// score = score / (dist * dist); +// +// if (bestId == -1 || score > bestScore) +// { +// bestId = i; +// bestScore = score; +// } +// } +// +// if (bestId == -1) +// continue; +// +// // Send MultiBlock or Chunk Update for Fittest Chunk +// ChunkChange change = _frostChunks.get(player).remove(bestId); +// +// if (change.DirtyCount > 63) +// MapUtil.SendChunkForPlayer(change.Chunk.getX(), change.Chunk.getZ(), player); +// else +// MapUtil.SendMultiBlockForPlayer(change.Chunk.getX(), change.Chunk.getZ(), change.DirtyBlocks, change.DirtyCount, +// change.Chunk.getWorld(), player); +// } +// } +// +// public boolean isFrost(Block block) +// { +// if (!_frostMap.containsKey(block.getX())) +// return false; +// +// if (!_frostMap.get(block.getX()).containsKey(block.getY())) +// return false; +// +// return _frostMap.get(block.getX()).get(block.getY()).contains(block.getZ()); +// } +// +// public void setFrost(Location loc) +// { +// // Save Red +// if (!_frostMap.containsKey(loc.getBlockX())) +// _frostMap.put(loc.getBlockX(), new HashMap>()); +// +// if (!_frostMap.get(loc.getBlockX()).containsKey(loc.getBlockY())) +// _frostMap.get(loc.getBlockX()).put(loc.getBlockY(), new HashSet()); +// +// _frostMap.get(loc.getBlockX()).get(loc.getBlockY()).add(loc.getBlockZ()); +// +// // Red +// if (_spreadType == 0) +// { +// frostChangeBlock(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) +// frostChangeBlock(loc, 79, (byte) 0); +// else if (loc.getBlock().getTypeId() == 10 || loc.getBlock().getTypeId() == 11) +// frostChangeBlock(loc, 49, (byte) 0); +// else +// frostChangeBlock(loc, 80, (byte) 0); +// } +// // Nether +// else +// { +// if (loc.getBlock().getType() == Material.LEAVES) +// frostChangeBlock(loc, 88, (byte) 0); +// else if (loc.getBlock().getTypeId() == 8 || loc.getBlock().getTypeId() == 9) +// frostChangeBlock(loc, 49, (byte) 0); +// else +// { +// double r = Math.random(); +// if (r > 0.1) +// frostChangeBlock(loc, 87, (byte) 0); +// else +// frostChangeBlock(loc, 153, (byte) 0); +// } +// } +// } +// +// @EventHandler +// // TODO +// public void frostAttack(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 (!isFrost(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.95) +// player.playEffect(block.getLocation().add(0, 1, 0), Effect.STEP_SOUND, Material.SNOW_BLOCK); +// +// 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 (isFrost(block) || block.getY() == 0) +// near = true; +// } +// } +// +// if (!near) +// { +// if (_deathmatchLive && UtilMath.offset(player.getLocation(), _spawn) > 48) +// near = true; +// } +// +// if (near) +// { +// player.getWorld().playSound(player.getLocation(), Sound.AMBIENCE_RAIN, 0.5f, 0f); +// +// if (!_frostOutTime.containsKey(player)) +// { +// _frostOutTime.put(player, System.currentTimeMillis()); +// } +// else +// { +// if (UtilTime.elapsed(_frostOutTime.get(player), 5000)) +// { +// Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.VOID, 1, false, true, false, +// "Hunger Games", _spreadName); +// } +// } +// } +// else +// { +// _frostOutTime.remove(player); +// } +// } +// } +// +// public void refillChests() +// { +// ArrayList list = new ArrayList(_lootedBlocks); +// +// _lootedBlocks.clear(); +// +// for (Location loc : list) +// { +// if (loc.getChunk().isLoaded()) +// { +// Block block = loc.getBlock(); +// +// if (_landedCrates.contains(loc)) +// continue; +// +// if (block.getState() instanceof InventoryHolder) +// { +// InventoryHolder holder = (InventoryHolder) block.getState(); +// +// if (!holder.getInventory().getViewers().isEmpty()) +// { +// fillChest((Player) holder.getInventory().getViewers().get(0), block); +// } +// } +// } +// } +// } +// +// @EventHandler +// public void chestRefill(UpdateEvent event) +// { +// if (!IsLive() || event.getType() != UpdateType.SEC) +// return; +// +// if (_deathmatchCountdown || _deathmatchLive) +// return; +// +// if (_chestRefillTime > 0) +// { +// _chestRefillTime--; +// switch (_chestRefillTime) +// { +// case 0: +// +// Bukkit.broadcastMessage(ChatColor.GOLD + "➽" + ChatColor.GREEN + " The chests has been refilled!"); +// +// for (Player player : Bukkit.getOnlinePlayers()) +// { +// player.playSound(player.getEyeLocation(), Sound.IRONGOLEM_DEATH, 1000, 0); +// } +// +// refillChests(); +// break; +// case 1: +// case 2: +// case 3: +// case 4: +// case 5: +// case 10: +// case 15: +// case 30: +// case 60: +// case 120: +// case 180: +// case 300: +// +// String time; +// +// if (_chestRefillTime >= 60) +// time = (_chestRefillTime / 60) + " minute" + (_chestRefillTime > 60 ? "s" : ""); +// else +// time = _chestRefillTime + " second" + (_chestRefillTime != 1 ? "s" : ""); +// +// Bukkit.broadcastMessage(ChatColor.GOLD + "➽" + ChatColor.GREEN + " The chests will be refilled in " + time); +// +// break; +// default: +// break; +// } +// } +// } +// +// @EventHandler +// // TODO +// public void frostDamage(CustomDamageEvent event) +// { +// if (event.GetProjectile() == null) +// return; +// +// if (!(event.GetProjectile() instanceof Snowball)) +// return; +// +// event.AddMod("Snowball", _spreadName, 2, true); +// +// event.AddKnockback("Snowball", 4); +// } +// +// @EventHandler +// public void SupplyDrop(UpdateEvent event) +// { +// if (!IsLive()) +// return; +// +// if (event.getType() != UpdateType.FASTEST) +// return; +// +// long time = WorldData.World.getTime(); +// +// if (time > 14000 && time < 23000) +// { +// if (_supplyCurrent == null && !_deathmatchCountdown && !_deathmatchLive) +// { +// if (_supplyLocations.isEmpty()) +// return; +// +// _supplyCurrent = _supplyLocations.remove(UtilMath.r(_supplyLocations.size())); +// +// // Remove Prior +// _supplyCrates.remove(_supplyCurrent.getBlock().getRelative(BlockFace.UP)); +// _supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.AIR); +// +// // Create New +// _supplyCurrent.getBlock().setType(Material.BEACON); +// for (int x = -1; x <= 1; x++) +// for (int z = -1; z <= 1; z++) +// _supplyCurrent.getBlock().getRelative(x, -1, z).setType(Material.IRON_BLOCK); +// +// // Announce +// this.Announce(C.cYellow + C.Bold + "Supply Drop Incoming (" + ChatColor.RESET +// + UtilWorld.locToStrClean(_supplyCurrent) + C.cYellow + C.Bold + ")"); +// } +// } +// else +// { +// if (_supplyCurrent != null) +// { +// if (_supplyEffect == null) +// { +// _supplyEffect = _supplyCurrent.clone(); +// _supplyEffect.setY(250); +// } +// +// FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BURST) +// .trail(false).build(); +// UtilFirework.playFirework(_supplyEffect, effect); +// +// _supplyEffect.setY(_supplyEffect.getY() - 2); +// +// if (UtilMath.offset(_supplyEffect, _supplyCurrent) < 2) +// { +// effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL_LARGE).trail(true) +// .build(); +// UtilFirework.playFirework(_supplyEffect, effect); +// +// // Create Chest +// _supplyCurrent.getBlock().setType(Material.GLASS); +// _supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.CHEST); +// _supplyCrates.add(_supplyCurrent.getBlock().getRelative(BlockFace.UP)); +// _lootedBlocks.remove(_supplyCurrent); +// +// // Reset +// _supplyEffect = null; +// _supplyCurrent = null; +// } +// } +// } +// } +// +// @EventHandler +// public void DayNightCycle(UpdateEvent event) +// { +// if (!IsLive()) +// return; +// +// if (event.getType() != UpdateType.TICK) +// return; +// +// long time = WorldData.World.getTime(); +// +// if (time > 22000 || time < 14000) +// { +// WorldTimeSet = (WorldTimeSet + 4) % 24000; +// } +// else +// { +// WorldTimeSet = (WorldTimeSet + 16) % 24000; +// } +// +// WorldData.World.setTime(WorldTimeSet); +// } +// +// @EventHandler +// public void SupplyGlow(UpdateEvent event) +// { +// if (!IsLive()) +// return; +// +// if (event.getType() != UpdateType.TICK) +// return; +// +// if (_supplyCrates.isEmpty()) +// return; +// +// Iterator chestIterator = _supplyCrates.iterator(); +// +// while (chestIterator.hasNext()) +// { +// Block block = chestIterator.next(); +// +// if (block.getType() != Material.CHEST) +// { +// chestIterator.remove(); +// continue; +// } +// +// UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1); +// } +// } +// +// @EventHandler +// public void preventBucketCraft(PrepareItemCraftEvent event) +// { +// ItemStack result = event.getInventory().getResult(); +// +// if (result != null) +// { +// Material type = result.getType(); +// +// if (type == Material.BUCKET) +// { +// event.getInventory().setResult(new ItemStack(Material.AIR)); +// } +// } +// } +// +// @EventHandler +// public void DeathmatchUpdate(UpdateEvent event) +// { +// if (!IsLive()) +// return; +// +// if (_deathmatchLive) +// { +// if (event.getType() != UpdateType.SEC) +// return; +// +// if (_deathmatchTime <= 0) +// return; +// +// for (Player player : GetPlayers(true)) +// for (Player other : GetPlayers(true)) +// { +// player.hidePlayer(other); +// player.showPlayer(other); +// } +// +// Announce(C.cRed + C.Bold + "Deathmatch in " + _deathmatchTime + "..."); +// _deathmatchTime--; +// } +// +// else if (_deathmatchCountdown) +// { +// if (event.getType() != UpdateType.TICK) +// return; +// +// long timeLeft = 60000 - (System.currentTimeMillis() - _deathmatchTime); +// +// if (timeLeft <= 0) +// { +// _deathmatchLive = true; +// +// GetTeamList().get(0).SpawnTeleport(false); +// +// _frostLocations.clear(); +// +// for (Block block : UtilBlock.getInRadius(_spawn, 52d).keySet()) +// frostSpread(block); +// +// _deathmatchTime = 10; +// } +// } +// else +// { +// if (event.getType() != UpdateType.SEC) +// return; +// +// if (!UtilTime.elapsed(GetStateTime(), 360000)) +// return; +// +// if (GetPlayers(true).size() > 4) +// return; +// +// if (!UtilTime.elapsed(_deathmatchTime, 60000)) +// return; +// +// Announce(C.cGreen + C.Bold + "Type " + ChatColor.RESET + C.Bold + "/dm" + C.cGreen + C.Bold + " to start Deathmatch!"); +// +// _deathmatchTime = System.currentTimeMillis(); +// } +// } +// +// @EventHandler +// public void DeathmatchMoveCancel(PlayerMoveEvent event) +// { +// if (!_deathmatchLive) +// return; +// +// if (_deathmatchTime <= 0) +// return; +// +// if (UtilMath.offset2d(event.getFrom(), event.getTo()) == 0) +// return; +// +// if (!IsAlive(event.getPlayer())) +// return; +// +// event.setTo(event.getFrom()); +// } +// +// @EventHandler(priority = EventPriority.LOWEST) +// public void DeathmatchDamage(CustomDamageEvent event) +// { +// if (!_deathmatchLive) +// return; +// +// if (_deathmatchTime <= 0) +// return; +// +// event.SetCancelled("Deathmatch"); +// } +// +// @EventHandler(priority = EventPriority.LOWEST) +// public void DeathmatchStart(PlayerCommandPreprocessEvent event) +// { +// if (!event.getMessage().equalsIgnoreCase("/dm")) +// return; +// +// event.setCancelled(true); +// +// if (!IsAlive(event.getPlayer())) +// { +// UtilPlayer.message(event.getPlayer(), F.main("Game", "You are not in the game.")); +// return; +// } +// +// if (!IsLive()) +// { +// UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); +// return; +// } +// +// if (!UtilTime.elapsed(GetStateTime(), 360000)) +// { +// UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); +// return; +// } +// +// if (GetPlayers(true).size() > 4) +// { +// UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); +// return; +// } +// +// if (_deathmatchCountdown) +// { +// UtilPlayer.message(event.getPlayer(), F.main("Game", "Deathmatch cannot be started now.")); +// return; +// } +// +// _deathmatchCountdown = true; +// +// Announce(C.cGreen + C.Bold + event.getPlayer().getName() + " has initiated Deathmatch!"); +// Announce(C.cGreen + C.Bold + "Deathmatch starting in 60 seconds..."); +// _deathmatchTime = System.currentTimeMillis(); +// +// for (Player player : UtilServer.getPlayers()) +// player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 1f); +// } +// +// @EventHandler +// public void chestTickEvent(UpdateEvent event) +// { +// if (event.getType() != UpdateType.SLOW) +// return; +// +// Iterator> itel = _openedChests.entrySet().iterator(); +// +// while (itel.hasNext()) +// { +// Entry entry = itel.next(); +// // TODO Test this is removed properly when unloaded chunks +// // TODO Load chests status when chunk loads packets +// try +// { +// int key = (entry.getKey().x + entry.getKey().y + entry.getKey().z) % 200; +// +// int ticks = (_ticksField.getInt(entry.getKey()) + key) % 200; +// +// System.out.print(ticks + " - " + entry.getKey().o); +// +// if (ticks == entry.getValue()) +// { +// if (ticks == 1) +// { +// System.out.print("Removed"); +// itel.remove(); +// } +// else +// { +// _ticksField.setInt(entry.getKey(), (200 - key) + ticks - 1); +// _openedChests.put(entry.getKey(), ticks - 1); +// } +// } +// else +// { +// _ticksField.setInt(entry.getKey(), (200 - key) + 10); +// System.out.print((_ticksField.getInt(entry.getKey()) + key)); +// _openedChests.put(entry.getKey(), 10); +// } +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// } +// } +// +// @EventHandler +// public void chestCloseEvent(InventoryCloseEvent event) +// { +// InventoryHolder holder = event.getInventory().getHolder(); +// +// if (holder instanceof DoubleChest) +// { +// holder = (Chest) ((DoubleChest) holder).getLeftSide(); +// } +// +// if (holder instanceof Chest) +// { +// Block block = ((Chest) holder).getBlock(); +// +// TileEntity tileEntity = ((CraftWorld) block.getWorld()).getTileEntityAt(block.getX(), block.getY(), block.getZ()); +// +// if (tileEntity instanceof TileEntityChest) +// { +// TileEntityChest chest = (TileEntityChest) tileEntity; +// +// try +// { +// chest.o = 10; +// +// int key = (chest.x + chest.y + chest.z) % 200; +// +// _ticksField.setInt(chest, (200 - key) + 10); +// +// _openedChests.put(chest, 10); +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// } +// } +// } +// +// @EventHandler +// public void onUse(PlayerInteractEvent event) +// { +// if (!IsLive()) +// return; +// +// Player player = event.getPlayer(); +// +// if (!IsAlive(player)) +// return; +// +// if (!event.getAction().name().contains("RIGHT")) +// return; +// +// ItemStack item = event.getItem(); +// +// if (item == null || item.getType() != Material.COMPASS) +// return; +// +// int uses = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replaceAll("\\D+", "")); +// +// if (uses > 0) +// { +// uses--; +// +// Player closest = null; +// double cDist = 0; +// +// for (Player p : GetPlayers(true)) +// { +// if (p != player) +// { +// double dist = p.getLocation().distance(player.getLocation()); +// +// if (dist > 10 && (closest == null || dist < cDist)) +// { +// cDist = dist; +// closest = p; +// } +// } +// } +// +// if (closest != null) +// { +// player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 0); +// closest.playSound(closest.getLocation(), Sound.ORB_PICKUP, 1, 0); +// +// player.setCompassTarget(closest.getLocation()); +// player.setItemInHand(buildCompass(uses)); +// +// closest.sendMessage(F.main("Compass", player.getName() + " used a compass on you!")); +// +// player.sendMessage(F.main("Compass", "Located " + closest.getName() + " " + (int) cDist + " blocks away")); +// +// if (uses >= 1) +// { +// player.sendMessage(F.main("Compass", uses + " use" + (uses > 1 ? "s" : "") + " of the compass remaining.")); +// } +// else +// { +// player.sendMessage(F.main("Compass", "No remaining uses! Next use will break it!")); +// } +// } +// } +// else +// { +// player.sendMessage(F.main("Compass", "The compass breaks! No remaining uses!")); +// +// player.getWorld().playSound(player.getLocation(), Sound.ITEM_BREAK, 1, 5); +// +// player.setItemInHand(new ItemStack(Material.AIR)); +// } +// } +// +// @EventHandler +// public void DisallowBrewingStand(PlayerInteractEvent event) +// { +// if (event.getClickedBlock() == null) +// return; +// +// if (event.getClickedBlock().getType() == Material.BREWING_STAND) +// { +// event.setCancelled(true); +// } +// } +// +// @EventHandler +// public void CancelItemFrameBreak(HangingBreakEvent event) +// { +// if (event.getEntity() instanceof ItemFrame) +// { +// event.setCancelled(true); +// } +// } +// +// @EventHandler +// public void TNTDelay(GameStateChangeEvent event) +// { +// if (event.GetState() != GameState.Live) +// return; +// +// for (Player player : UtilServer.getPlayers()) +// Recharge.Instance.useForce(player, "Throw TNT", 30000); +// } +// +// @EventHandler +// public void TNTThrow(PlayerInteractEvent event) +// { +// if (!IsLive()) +// return; +// +// if (!UtilEvent.isAction(event, ActionType.L)) +// return; +// +// Player player = event.getPlayer(); +// +// if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte) 0)) +// return; +// +// event.setCancelled(true); +// +// if (!Recharge.Instance.use(player, "Throw TNT", 0, true, false)) +// { +// UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot use " + F.item("Throw TNT") + " yet.")); +// return; +// } +// +// if (!Manager.GetGame().CanThrowTNT(player.getLocation())) +// { +// // Inform +// UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot use " + F.item("Throw TNT") + " here.")); +// return; +// } +// +// UtilInv.remove(player, Material.TNT, (byte) 0, 1); +// UtilInv.Update(player); +// +// TNTPrimed tnt = player.getWorld() +// .spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class); +// +// UtilAction.velocity(tnt, player.getLocation().getDirection(), 0.5, false, 0, 0.1, 10, false); +// +// _tntMap.put(tnt, player); +// } +// +// @EventHandler +// public void TNTExplosion(ExplosionPrimeEvent event) +// { +// if (!_tntMap.containsKey(event.getEntity())) +// return; +// +// Player player = _tntMap.remove(event.getEntity()); +// +// /*CustomExplosion explosion = new CustomExplosion(this.getArcadeManager().GetDamage(), event.getEntity().getLocation(), +// ((TNTPrimed) event.getEntity()).getYield(), "Throwing TNT"); +// +// explosion.setPlayer(player, true);*/ +// +// for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14)) +// Manager.GetCondition().Factory().Explosion("Throwing TNT", other, player, 50, 0.1, false, false); +// } +// +// @EventHandler +// // TODO +// public void BlockPlaceOnFrost(BlockPlaceEvent event) +// { +// if (isFrost(event.getBlockAgainst())) +// { +// event.setCancelled(true); +// return; +// } +// } +// +// @EventHandler +// public void TourneyKills(CombatDeathEvent event) +// { +// if (!(event.GetEvent().getEntity() instanceof Player)) +// return; +// +// Player killed = (Player) event.GetEvent().getEntity(); +// +// if (event.GetLog().GetKiller() != null) +// { +// Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); +// +// if (killer != null && !killer.equals(killed)) +// { +// // Manager.GetStatsManager().addStat(killer, GetName(), "kills", 1); +// } +// } +// +// if (event.GetLog().GetPlayer() != null) +// { +// if (killed != null) +// { +// // Manager.GetStatsManager().addStat(killed, GetName(), "deaths", 1); +// } +// } +// } +// +// @EventHandler +// public void BlockBreak(BlockBreakEvent event) +// { +// if (_placedBlocks.remove(event.getBlock().getLocation())) +// { +// event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, event.getBlock().getType()); +// event.getBlock().setType(Material.AIR); +// } +// } +// +// @EventHandler +// public void BlockBurn(BlockBurnEvent event) +// { +// event.setCancelled(true); +// } +// +// @EventHandler +// public void BlockSpread(BlockSpreadEvent event) +// { +// event.setCancelled(true); +// } +// +// @EventHandler +// public void BlockFade(BlockFadeEvent event) +// { +// event.setCancelled(true); +// } +// +// @EventHandler +// public void BlockDecay(LeavesDecayEvent event) +// { +// event.setCancelled(true); +// } +// +// private void deathOrQuit(Player player) +// { +// if (!IsLive()) +// return; +// +// String name = ""; +// +// for (char c : ("" + _deadBodyCount++).toCharArray()) +// { +// name += "§" + c; +// } +// +// try +// { +// +// Team team = player.getScoreboard().registerNewTeam(name); +// +// if (_hiddenNames.containsKey(player) && !_hiddenNames.get(player).isEmpty()) +// { +// ScoreboardTeam nmsTeam = (ScoreboardTeam) _packetTeam.get(team); +// +// PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam(nmsTeam, 2); +// +// Field teamName = PacketPlayOutScoreboardTeam.class.getDeclaredField("a"); +// teamName.setAccessible(true); +// +// for (Player alive : GetPlayers(true)) +// { +// if (_hiddenNames.get(player).contains(alive.getName())) +// { +// teamName.set(packet, alive.getName()); +// UtilPlayer.sendPacket(player, packet); +// } +// } +// } +// +// team.setNameTagVisibility(TeamNameTagVisibility.NEVER); +// team.addEntry(name); +// +// PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam((ScoreboardTeam) _packetTeam.get(team), 2); +// +// for (Player alive : GetPlayers(false)) +// { +// UtilPlayer.sendPacket(alive, packet); +// } +// +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// +// GameProfile newProfile = new GameProfile(UUID.randomUUID(), name); +// +// newProfile.getProperties().putAll(((CraftPlayer) player).getHandle().getProfile().getProperties()); +// +// DisguisePlayer disguise = new DisguisePlayer(null, newProfile); +// disguise.setSleeping(BlockFace.values()[Math.round(player.getLocation().getYaw() / 90F) & 0x3].getOppositeFace()); +// +// getArcadeManager().GetDisguise().addFutureDisguise(disguise); +// +// Entity entity = player.getWorld().spawnEntity(player.getLocation(), EntityType.ARROW); +// try +// { +// EntityArrow entityArrow = ((CraftArrow) entity).getHandle(); +// +// Field at = EntityArrow.class.getDeclaredField("at"); +// at.setAccessible(true); +// at.set(entityArrow, Integer.MIN_VALUE); // Despawn time +// } +// catch (Exception ex) +// { +// ex.printStackTrace(); +// } +// +// _hiddenNames.remove(player); +// } +// +// @EventHandler +// public void PlayerKillAward(CombatDeathEvent event) +// { +// Game game = Manager.GetGame(); +// if (game == null) +// return; +// +// if (!(event.GetEvent().getEntity() instanceof Player)) +// return; +// +// Player player = (Player) event.GetEvent().getEntity(); +// +// deathOrQuit(player); +// +// FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.RED).with(Type.BALL_LARGE).trail(false) +// .build(); +// for (int i = 0; i < 3; i++) +// UtilFirework.launchFirework(player.getLocation(), effect, null, 3); +// +// if (event.GetLog().GetKiller() == null) +// return; +// +// Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); +// if (killer == null) +// return; +// +// if (killer.equals(player)) +// return; +// +// killer.giveExpLevels(1); +// } +// +// @EventHandler +// public void DisableDamageLevel(CustomDamageEvent event) +// { +// event.SetDamageToLevel(false); +// } +// +// @EventHandler(priority = EventPriority.LOWEST) +// public void ExplosionDamageRemove(EntityExplodeEvent event) +// { +// event.blockList().clear(); +// } +// +// @EventHandler +// // TODO +// public void FixClean(PlayerQuitEvent event) +// { +// _frostChunks.remove(event.getPlayer()); +// } +// +// @Override +// @EventHandler +// public void ScoreboardUpdate(UpdateEvent event) +// { +// if (event.getType() != UpdateType.FAST) +// return; +// +// if (GetTeamList().isEmpty()) +// return; +// +// Scoreboard.Reset(); +// +// Scoreboard.WriteBlank(); +// +// GameTeam team = GetTeamList().get(0); +// +// if (team.GetPlayers(false).size() < 9) +// { +// for (Player player : team.GetPlayers(false)) +// { +// if (team.IsAlive(player)) +// { +// Scoreboard.Write(C.cGreen + player.getName()); +// } +// else +// { +// Scoreboard.Write(C.cGray + player.getName()); +// } +// } +// } +// else if (team.GetPlayers(true).size() < 9) +// { +// for (Player player : team.GetPlayers(true)) +// { +// Scoreboard.Write(C.cGreen + player.getName()); +// } +// } +// else +// { +// Scoreboard.Write(C.cGreen + "Players Alive"); +// Scoreboard.Write("" + team.GetPlayers(true).size()); +// +// Scoreboard.WriteBlank(); +// Scoreboard.Write(C.cRed + "Players Dead"); +// Scoreboard.Write("" + (team.GetPlayers(false).size() - team.GetPlayers(true).size())); +// } +// +// if (_deathmatchCountdown) +// { +// if (event.getType() != UpdateType.TICK) +// return; +// +// long timeLeft = 60000 - (System.currentTimeMillis() - _deathmatchTime); +// +// Scoreboard.WriteBlank(); +// Scoreboard.Write(C.cYellow + C.Bold + "Deathmatch"); +// Scoreboard.Write(UtilTime.MakeStr(Math.max(0, timeLeft), 0)); +// +// } +// +// Scoreboard.Draw(); +// } +// +// public boolean isDeathMatchAboutToStart() +// { +// if (!_deathmatchLive) +// return false; +// +// if (_deathmatchTime <= 0) +// return false; +// +// return true; +// } +// +// @EventHandler +// public void deathmatchBowShoot(EntityShootBowEvent event) +// { +// if (isDeathMatchAboutToStart()) +// event.getProjectile().remove(); +// } +// +//} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java index 6b388e4cf..ea663bbe2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/uhc/UHC.java @@ -160,9 +160,6 @@ public class UHC extends TeamGame this.GemDoubleEnabled = false; this.GemHunterEnabled = false; - // TODO design a better way to handle spectator gui for UHC - this.CompassSpectatorMenu = false; - WorldTimeSet = -1; CraftRecipes(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java index bf585a9de..b11d44b68 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/WitherGame.java @@ -528,7 +528,7 @@ public class WitherGame extends TeamGame implements IBlockRestorer Manager.GetCondition().Factory().Cloak("Hit", player, player, 9999, false, false); //Settings - player.setGameMode(GameMode.CREATIVE); + player.setAllowFlight(true); player.setFlying(true); ((CraftPlayer)player).getHandle().spectating = true; ((CraftPlayer)player).getHandle().k = false; @@ -555,7 +555,7 @@ public class WitherGame extends TeamGame implements IBlockRestorer } //Settings - player.setGameMode(GameMode.SURVIVAL); + player.setAllowFlight(false); player.setFlying(false); ((CraftPlayer)player).getHandle().spectating = false; ((CraftPlayer)player).getHandle().k = true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java index b3334ed38..8135e800f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.wizards.spells; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilPlayer; import nautilus.game.arcade.game.games.wizards.Spell; import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick; @@ -38,7 +39,7 @@ public class SpellMagicMissile extends Spell implements SpellClick { if (cur == player || !(cur instanceof LivingEntity) - || (cur instanceof Player && ((Player) cur).getGameMode() == GameMode.CREATIVE)) + || (cur instanceof Player && UtilPlayer.isSpectator(cur))) continue; LivingEntity entity = (LivingEntity) cur; @@ -125,7 +126,7 @@ public class SpellMagicMissile extends Spell implements SpellClick { if (cur == player || !(cur instanceof LivingEntity) - || (cur instanceof Player && ((Player) cur).getGameMode() == GameMode.CREATIVE)) + || (cur instanceof Player && UtilPlayer.isSpectator(cur))) continue; LivingEntity ent = (LivingEntity) cur; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java index 92a55e9b4..6ec3eb59f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellTrapRune.java @@ -6,6 +6,7 @@ import java.util.List; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -36,7 +37,7 @@ public class SpellTrapRune extends Spell implements SpellClick while (itel.hasNext()) { TrapRune rune = itel.next(); - if (!rune.RuneCaster.isOnline() || rune.RuneCaster.getGameMode() == GameMode.CREATIVE) + if (!rune.RuneCaster.isOnline() || UtilPlayer.isSpectator(rune.RuneCaster)) { itel.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java index 8b8d86d87..ed089528d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/HealingRune.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilShapes; @@ -31,7 +32,7 @@ public class HealingRune { for (Player player : Bukkit.getOnlinePlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (UtilPlayer.isSpectator(player)) { continue; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java index d60350ebb..bf936f7ad 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/LaunchRune.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.UUID; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; import mineplex.core.common.util.UtilParticle.ParticleType; import nautilus.game.arcade.game.games.wizards.Wizards; @@ -35,7 +36,7 @@ public class LaunchRune for (LivingEntity entity : _runeLocation.getWorld().getEntitiesByClass(LivingEntity.class)) { - if (!(entity instanceof Player) || ((Player) entity).getGameMode() != GameMode.CREATIVE) + if (!(entity instanceof Player) || !UtilPlayer.isSpectator(entity)) { UUID uuid = entity.getUniqueId(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java index 6c57cc79c..407206350 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/subclasses/TeleportRune.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.wizards.spells.subclasses; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilShapes; import org.bukkit.GameMode; @@ -48,7 +49,7 @@ public class TeleportRune for (LivingEntity entity : _firstLoc.getWorld().getEntitiesByClass(LivingEntity.class)) { - if (entity instanceof Player && ((Player) entity).getGameMode() == GameMode.CREATIVE) + if (entity instanceof Player && UtilPlayer.isSpectator(entity)) { continue; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java index 8ce5c0ad1..4b550b3c6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBatForm.java @@ -149,7 +149,7 @@ public class PerkBatForm extends SmashPerk //Proxy Boom for (Player player : Manager.GetGame().GetPlayers(true)) { - if (player.getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(player)) continue; if (player.equals(data.Shooter)) @@ -193,11 +193,14 @@ public class PerkBatForm extends SmashPerk { Player player = event.getPlayer(); - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) return; if (!isSuperActive(player)) return; + + if (player.getGameMode() == GameMode.CREATIVE) + return; event.setCancelled(true); player.setFlying(false); @@ -223,7 +226,7 @@ public class PerkBatForm extends SmashPerk for (Player player : ((SmashKit)Kit).getSuperActive()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN))) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBodySlam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBodySlam.java index b58a32d59..f4e0aaf0f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBodySlam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBodySlam.java @@ -87,7 +87,7 @@ public class PerkBodySlam extends Perk for (Player player : Manager.GetGame().GetPlayers(true)) if (_live.containsKey(player)) for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (!other.equals(player)) if (UtilMath.offset(player, other) < 2) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkConstructor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkConstructor.java index 5766f0195..7b031d8c1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkConstructor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkConstructor.java @@ -62,7 +62,7 @@ public class PerkConstructor extends Perk if (!Manager.GetGame().IsAlive(cur)) continue; - if (cur.getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(cur)) continue; if (!Recharge.Instance.use(cur, GetName(), (long) (_time * 1000), false, false)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java index e6efdac23..15bab2b60 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDeathsGrasp.java @@ -92,7 +92,7 @@ public class PerkDeathsGrasp extends Perk for (Player player : Manager.GetGame().GetPlayers(true)) if (_live.containsKey(player)) for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (!other.equals(player)) if (UtilMath.offset(player, other) < 2) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java index 1722b453a..018522154 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJump.java @@ -66,6 +66,9 @@ public class PerkDoubleJump extends Perk if (!Kit.HasKit(player)) return; + if (Manager.isSpectator(player)) + return; + if (player.getGameMode() == GameMode.CREATIVE) return; @@ -108,7 +111,7 @@ public class PerkDoubleJump extends Perk for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (!Kit.HasKit(player)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJumpHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJumpHorse.java index 13e1db1ee..d112b6b3b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJumpHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkDoubleJumpHorse.java @@ -34,6 +34,9 @@ public class PerkDoubleJumpHorse extends Perk if (!Kit.HasKit(player)) return; + if (Manager.isSpectator(player)) + return; + if (player.getGameMode() == GameMode.CREATIVE) return; @@ -61,14 +64,12 @@ public class PerkDoubleJumpHorse extends Perk for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (!Kit.HasKit(player)) continue; - - if (player.getVehicle() == null) { if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN))) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java index ca74a613d..23056492c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlap.java @@ -39,12 +39,15 @@ public class PerkFlap extends SmashPerk { Player player = event.getPlayer(); - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) return; if (!Kit.HasKit(player)) return; + if (player.getGameMode() == GameMode.CREATIVE) + return; + event.setCancelled(true); player.setFlying(false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java index 21cbc2717..9c5fbedcf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFletcher.java @@ -100,7 +100,7 @@ public class PerkFletcher extends Perk for (Player cur : UtilServer.getPlayers()) { - if (cur.getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator(cur)) continue; if (!Kit.HasKit(cur)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLeapTackleHG.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLeapTackleHG.java index 47ab91ff6..9d5f1150a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLeapTackleHG.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkLeapTackleHG.java @@ -81,7 +81,7 @@ public class PerkLeapTackleHG extends Perk for (Player player : Manager.GetGame().GetPlayers(true)) if (_live.containsKey(player)) for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (!other.equals(player)) if (UtilMath.offset(player, other) < 2) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java index 268c79b92..467ce8d7c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSlimeSlam.java @@ -85,7 +85,7 @@ public class PerkSlimeSlam extends SmashPerk for (Player player : Manager.GetGame().GetPlayers(true)) if (_live.containsKey(player)) for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (!other.equals(player)) if (UtilMath.offset(player, other) < 2) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java index 9ccd89189..7845b2ae7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSmokebomb.java @@ -103,7 +103,7 @@ public class PerkSmokebomb extends Perk continue; if (other instanceof Player) - if (((Player)other).getGameMode() != GameMode.SURVIVAL) + if (Manager.isSpectator((Player)other)) continue; LivingEntity living = (LivingEntity) other; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpiderLeap.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpiderLeap.java index af7879443..5106fa728 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpiderLeap.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkSpiderLeap.java @@ -44,7 +44,7 @@ public class PerkSpiderLeap extends Perk for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (!Kit.HasKit(player)) @@ -95,6 +95,9 @@ public class PerkSpiderLeap extends Perk if (!Kit.HasKit(player)) return; + if (Manager.isSpectator(player)) + return; + if (player.getGameMode() == GameMode.CREATIVE) return; @@ -121,7 +124,7 @@ public class PerkSpiderLeap extends Perk for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (!Kit.HasKit(player)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTakedown.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTakedown.java index 743ee3375..4d181426d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTakedown.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkTakedown.java @@ -80,7 +80,7 @@ public class PerkTakedown extends Perk for (Player player : Manager.GetGame().GetPlayers(true)) if (_live.containsKey(player)) for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (!other.equals(player)) if (UtilMath.offset(player, other) < 2) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolf.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolf.java index 2f970d77a..8877ef3a5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolf.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolf.java @@ -125,7 +125,7 @@ public class PerkWolf extends SmashPerk //Hit Player for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (UtilEnt.hitBox(wolf.getLocation(), other, 2, null)) { if (other.equals(TackleGetOwner(wolf))) @@ -285,7 +285,7 @@ public class PerkWolf extends SmashPerk for (Player other : Manager.GetGame().GetPlayers(true)) if (!player.equals(other)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (UtilEnt.hitBox(player.getLocation().add(0, 1, 0), other, 2, null)) { StrikeHit(player, other); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPack.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPack.java index 8cdd47eab..384ba20bb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPack.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPack.java @@ -97,7 +97,7 @@ public class PerkWolfPack extends Perk if (!Kit.HasKit(player)) return; - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) return; event.setCancelled(true); @@ -149,7 +149,7 @@ public class PerkWolfPack extends Perk for (Player player : UtilServer.getPlayers()) { - if (player.getGameMode() == GameMode.CREATIVE) + if (Manager.isSpectator(player)) continue; if (!Kit.HasKit(player)) @@ -396,7 +396,7 @@ public class PerkWolfPack extends Perk Wolf wolf = wolfIterator.next(); for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (Manager.isSpectator(other)) if (UtilEnt.hitBox(wolf.getLocation(), other, 2, null)) { if (other.equals(GetOwner(wolf))) @@ -518,7 +518,7 @@ public class PerkWolfPack extends Perk for (Player other : Manager.GetGame().GetPlayers(true)) if (!player.equals(other)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (UtilEnt.hitBox(player.getLocation(), other, 2, null)) { TackleHit(player, other); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java index 2f3751622..2ec3eba02 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWolfPet.java @@ -246,7 +246,7 @@ public class PerkWolfPet extends Perk Wolf wolf = wolfIterator.next(); for (Player other : Manager.GetGame().GetPlayers(true)) - if (other.getGameMode() == GameMode.SURVIVAL) + if (!Manager.isSpectator(other)) if (UtilEnt.hitBox(wolf.getLocation(), other, 2, null)) { if (other.equals(wolf.getOwner())) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java index 003552af2..fb17b9a25 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/data/HomingSheepData.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.kit.perks.data; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; import org.bukkit.DyeColor; import org.bukkit.GameMode; @@ -26,7 +27,7 @@ public class HomingSheepData public boolean update() { - if (!Sheep.isValid() || !Target.isValid() || Target.getGameMode() != GameMode.SURVIVAL) + if (!Sheep.isValid() || !Target.isValid() || UtilPlayer.isSpectator(Target)) return true; if (Sheep.getTicksLived() > 300) 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 cda5be096..9c9a436d4 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 @@ -90,6 +90,20 @@ public class GameFlagManager implements Listener return; } + + //Damagee Spec + if (damagee != null && Manager.isSpectator(damagee)) + { + event.SetCancelled("Damagee Spectator"); + return; + } + + //Damager Spec + if (damager != null && Manager.isSpectator(damager)) + { + event.SetCancelled("Damager Spectator"); + return; + } if (!game.Damage) { @@ -216,6 +230,7 @@ public class GameFlagManager implements Listener Game game = Manager.GetGame(); if (game == null || !game.IsAlive(player) || game.GetState() != GameState.Live) { + //Only allow ops in creative if (!player.isOp() || player.getGameMode() != GameMode.CREATIVE) { event.setCancelled(true); @@ -315,6 +330,7 @@ public class GameFlagManager implements Listener Game game = Manager.GetGame(); if (game == null) { + //Only allow ops in creative if (!player.isOp() || player.getGameMode() != GameMode.CREATIVE) event.setCancelled(true); } @@ -322,10 +338,12 @@ public class GameFlagManager implements Listener { if (!game.IsAlive(player)) { + //Only allow ops in creative if (!player.isOp() || player.getGameMode() != GameMode.CREATIVE) event.setCancelled(true); } - else if (game.BlockPlaceCreative && player.getGameMode() == GameMode.CREATIVE) // Event Server Allowance + // Event Server Allowance + else if (game.BlockPlaceCreative && player.getGameMode() == GameMode.CREATIVE) { return; } @@ -357,6 +375,7 @@ public class GameFlagManager implements Listener Game game = Manager.GetGame(); if (game == null) { + //Only allow ops in creative if (!player.isOp() || player.getGameMode() != GameMode.CREATIVE) event.setCancelled(true); } @@ -366,7 +385,8 @@ public class GameFlagManager implements Listener { event.setCancelled(true); } - else if (game.BlockBreakCreative && player.getGameMode() == GameMode.CREATIVE) // Event Server Allowance + // Event Server Allowance + else if (game.BlockBreakCreative && player.getGameMode() == GameMode.CREATIVE) { return; } @@ -658,7 +678,7 @@ public class GameFlagManager implements Listener } else { - game.SetSpectator(player, true); + Manager.addSpectator(player, true); } Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable() @@ -681,7 +701,7 @@ public class GameFlagManager implements Listener UtilInv.Clear(player); Manager.GetCondition().Factory().Blind("Ghost", player, player, 1.5, 0, false, false, false); Manager.GetCondition().Factory().Cloak("Ghost", player, player, time, false, false); - player.setGameMode(GameMode.CREATIVE); + player.setAllowFlight(true); player.setFlying(true); ((CraftPlayer)player).getHandle().spectating = true; ((CraftPlayer)player).getHandle().k = false; @@ -704,7 +724,7 @@ public class GameFlagManager implements Listener } else { - game.SetSpectator(player, true); + Manager.addSpectator(player, true); } player.setFireTicks(0); @@ -907,7 +927,7 @@ public class GameFlagManager implements Listener team.RemovePlayer(event.getPlayer()); } - game.SetSpectator(event.getPlayer(), false); + Manager.addSpectator(event.getPlayer(), false); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java index d6d7214eb..8bc157e25 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java @@ -540,9 +540,6 @@ public class GameManager implements Listener game.SetPlayerTeam(player, team, true); - //Game Mode - player.setGameMode(GameMode.SURVIVAL); - return true; } @@ -605,7 +602,7 @@ public class GameManager implements Listener if (Manager.GetGame().IsAlive(player)) continue; - Manager.GetGame().SetSpectator(player, true); + Manager.addSpectator(player, true); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java index 927162e9a..3bfaf9357 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java @@ -119,7 +119,7 @@ public class GamePlayerManager implements Listener else { Manager.Clear(player); - Manager.GetGame().SetSpectator(player, true); + Manager.addSpectator(player, true); UtilPlayer.message(player, F.main("Game", Manager.GetGame().GetName() + " is in progress, please wait for next game!")); } @@ -143,7 +143,7 @@ public class GamePlayerManager implements Listener } else { - Manager.GetGame().SetSpectator(player, true); + Manager.addSpectator(player, true); event.setRespawnLocation(Manager.GetGame().GetSpectatorLocation()); } @@ -265,15 +265,12 @@ public class GamePlayerManager implements Listener Player player = event.getPlayer(); //Observer - if (Manager.IsObserver(player)) + if (Manager.IsObserver(player) || Manager.isSpectator(player)) { UtilPlayer.message(player, F.main("Game", "Spectators cannot partake in games.")); return; } - if (player.getGameMode() != GameMode.SURVIVAL) - return; - Kit kit = Manager.GetLobby().GetClickedKit(event.getRightClicked()); if (kit == null) @@ -297,15 +294,12 @@ public class GamePlayerManager implements Listener if (player == null) return; //Observer - if (Manager.IsObserver(player)) + if (Manager.IsObserver(player) || Manager.isSpectator(player)) { UtilPlayer.message(player, F.main("Game", "Spectators cannot partake in games.")); return; } - if (player.getGameMode() != GameMode.SURVIVAL) - return; - LivingEntity target = event.GetDamageeEntity(); Kit kit = Manager.GetLobby().GetClickedKit(target); @@ -396,7 +390,7 @@ public class GamePlayerManager implements Listener event.setCancelled(true); - if (game.IsAlive(player) || player.getGameMode() != GameMode.CREATIVE) + if (game.IsAlive(player) || !Manager.isSpectator(player)) { UtilPlayer.message(player, F.main("Game", "Only Spectators can use this command.")); return;