From 33b557eb100a31a1d61c7f5bfb58a7884bc6e5a4 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Thu, 14 Apr 2016 22:45:21 -0400 Subject: [PATCH] - Huuuuuuuge amount of changes for chiss --- .../mineplex/core/common/util/UtilEvent.java | 10 + .../core/achievement/Achievement.java | 19 + .../core/achievement/AchievementCategory.java | 5 + .../game/core/combat/CombatManager.java | 5 + .../game/games/minecraftleague/DataLoc.java | 2 + .../minecraftleague/MinecraftLeague.java | 396 +++++++++++++----- .../minecraftleague/data/BlockProtection.java | 9 +- .../minecraftleague/data/DefenderAI.java | 16 +- .../minecraftleague/data/OreGenerator.java | 2 + .../minecraftleague/data/ProtectionUtil.java | 16 + .../minecraftleague/data/TeamTowerBase.java | 23 +- .../minecraftleague/data/TowerAlert.java | 17 +- .../minecraftleague/data/TowerManager.java | 57 ++- .../data/map/ItemMapRenderer.java | 18 +- .../objective/ObjectiveManager.java | 5 +- .../tracker/AltarBuilderTracker.java | 21 + .../tracker/FirstStrikeTracker.java | 22 + .../tracker/GrabSkullEvent.java | 31 ++ .../tracker/HeadHunterTracker.java | 21 + .../tracker/PlaceSkullEvent.java | 31 ++ .../variation/wither/WitherVariation.java | 47 ++- .../variation/wither/data/TeamAltar.java | 6 +- .../wither/data/WitherMinionManager.java | 155 ++++--- .../game/arcade/managers/GameFlagManager.java | 56 ++- 24 files changed, 766 insertions(+), 224 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/ProtectionUtil.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/AltarBuilderTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/FirstStrikeTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/GrabSkullEvent.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/HeadHunterTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/PlaceSkullEvent.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java index bd5346696..c4bb681a8 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java @@ -1,5 +1,6 @@ package mineplex.core.common.util; +import org.bukkit.entity.Arrow; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Projectile; import org.bukkit.event.block.Action; @@ -46,6 +47,15 @@ public class UtilEvent return false; } + public static boolean isBowDamage(EntityDamageEvent event) + { + if (!(event instanceof EntityDamageByEntityEvent)) + return false; + + EntityDamageByEntityEvent e = (EntityDamageByEntityEvent)event; + return e.getDamager() instanceof Arrow; + } + public static LivingEntity GetDamagerEntity(EntityDamageEvent event, boolean ranged) { if (!(event instanceof EntityDamageByEntityEvent)) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index ad8b468ac..7a8a8d839 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -164,6 +164,25 @@ public enum Achievement new int[]{10}, AchievementCategory.UHC), + //Minecraft League + MINECRAFT_LEAGUE_STRIKE("First Strike", 600, + new String[] {"Minecraft League.FirstStrike"}, + new String[] {"Earn 30 First Bloods"}, + new int[] {30}, + AchievementCategory.MINECRAFT_LEAGUE), + + MINECRAFT_LEAGUE_HEAD("Head Hunter", 600, + new String[] {"Minecraft League.HeadHunter"}, + new String[] {"Grab 25 Wither Skulls"}, + new int[] {25}, + AchievementCategory.MINECRAFT_LEAGUE), + + MINECRAFT_LEAGUE_ALTAR("Altar Builder", 600, + new String[] {"Minecraft League.AltarBuilder"}, + new String[] {"Place 50 Wither Skulls", "on your Altar"}, + new int[] {50}, + AchievementCategory.MINECRAFT_LEAGUE), + //UHC WIZARDS_WINS("Supreme Wizard", 600, new String[]{"Wizards.Wins"}, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index ca55d520f..784ed7aa4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -6,6 +6,7 @@ import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilTime; +import mineplex.core.game.GameCategory; import mineplex.core.game.GameDisplay; import mineplex.core.stats.PlayerStats; import mineplex.core.stats.StatsManager; @@ -48,6 +49,10 @@ public enum AchievementCategory UHC("Ultra Hardcore", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, Material.GOLDEN_APPLE, 0, GameCategory.SURVIVAL, "None"), + + MINECRAFT_LEAGUE("Minecraft League", null, + new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, + Material.IRON_CHESTPLATE, 0, GameCategory.SURVIVAL, "None"), WIZARDS("Wizards", null, new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED }, diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java index 221a70fbe..e8cd54e15 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java @@ -114,6 +114,11 @@ public class CombatManager extends MiniPlugin break; } + if (UtilEvent.isBowDamage(event)) + { + cause = "Bow"; + } + if (damagerEnt instanceof Player) { if (event.getCause() == DamageCause.ENTITY_ATTACK) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/DataLoc.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/DataLoc.java index f2ee0a89b..8ca22140e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/DataLoc.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/DataLoc.java @@ -17,6 +17,8 @@ public enum DataLoc BLUE_ORE("14"), DIAMOND_ORE("56"), COAL_ORE("16"), + MOSH_IRON("129"), + GRIND_AREA(" GRIND"), //Wither WITHER_WAYPOINT("PURPLE"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/MinecraftLeague.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/MinecraftLeague.java index 24f01e5fd..8f4c70c97 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/MinecraftLeague.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/MinecraftLeague.java @@ -6,7 +6,6 @@ import java.util.concurrent.ConcurrentHashMap; import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilItem; @@ -24,9 +23,9 @@ import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.events.PlayerDeathOutEvent; import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.game.GameTeam; -import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.minecraftleague.commands.MinecraftLeagueCommand; import nautilus.game.arcade.game.games.minecraftleague.commands.freeze.FreezeManager; @@ -39,9 +38,10 @@ import nautilus.game.arcade.game.games.minecraftleague.data.TeamTowerBase; import nautilus.game.arcade.game.games.minecraftleague.data.TowerAlert; import nautilus.game.arcade.game.games.minecraftleague.data.TowerManager; import nautilus.game.arcade.game.games.minecraftleague.data.map.ItemMapManager; -import nautilus.game.arcade.game.games.minecraftleague.data.objectives.GearObjective; import nautilus.game.arcade.game.games.minecraftleague.kit.KitPlayer; -import nautilus.game.arcade.game.games.minecraftleague.objective.ObjectiveManager; +import nautilus.game.arcade.game.games.minecraftleague.tracker.AltarBuilderTracker; +import nautilus.game.arcade.game.games.minecraftleague.tracker.FirstStrikeTracker; +import nautilus.game.arcade.game.games.minecraftleague.tracker.HeadHunterTracker; import nautilus.game.arcade.game.games.minecraftleague.variation.ExtraScoreboardData; import nautilus.game.arcade.game.games.minecraftleague.variation.GameVariation; import nautilus.game.arcade.game.games.minecraftleague.variation.VariationManager; @@ -54,12 +54,13 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.block.BlockFace; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Arrow; import org.bukkit.entity.Enderman; import org.bukkit.entity.EntityType; import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; @@ -67,6 +68,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; @@ -80,6 +83,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -87,9 +91,10 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.material.Dispenser; +import org.bukkit.material.MaterialData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.Vector; import com.google.common.base.Objects; @@ -99,6 +104,7 @@ public class MinecraftLeague extends TeamGame //private ConcurrentHashMap _maps = new ConcurrentHashMap(); private ConcurrentHashMap> _gear = new ConcurrentHashMap>(); public ConcurrentHashMap Beacons = new ConcurrentHashMap(); + //public ConcurrentHashMap TeamPoison = new ConcurrentHashMap(); private ConcurrentHashMap _blockLock = new ConcurrentHashMap(); //private ConcurrentHashMap _spawnAllow = new ConcurrentHashMap(); private List _spawners = new ArrayList(); @@ -116,12 +122,12 @@ public class MinecraftLeague extends TeamGame public boolean OverTime = false; private VariationManager _vman; - public ObjectiveManager Objective; + //public ObjectiveManager Objective; private FreezeManager _freeze; private TowerManager _tower; public TowerAlert Alert; - private final EntityType[] _passive = new EntityType[] {EntityType.CHICKEN, EntityType.COW, EntityType.PIG, EntityType.RABBIT, EntityType.SHEEP}; + //private final EntityType[] _passive = new EntityType[] {EntityType.CHICKEN, EntityType.COW, EntityType.PIG, EntityType.RABBIT, EntityType.SHEEP}; public MinecraftLeague(ArcadeManager manager) { @@ -141,12 +147,12 @@ public class MinecraftLeague extends TeamGame C.cWhite + "Last team standing wins", }); - this.DeathOut = false; + this.DeathOut = true; this.DamageSelf = false; - this.DeathSpectateSecs = 5; + this.DeathSpectateSecs = 10; this.WorldBoundaryKill = true; this.DeathDropItems = true; - this.CreatureAllow = true; + this.CreatureAllow = false; this.HungerSet = 20; this.BlockBreak = true; @@ -181,11 +187,13 @@ public class MinecraftLeague extends TeamGame registerStatTrackers( - + new AltarBuilderTracker(this), + new FirstStrikeTracker(this), + new HeadHunterTracker(this) ); _vman = new VariationManager(this); - Objective = new ObjectiveManager(this); + //Objective = new ObjectiveManager(this); _freeze = new FreezeManager(); _tower = new TowerManager(this); Alert = new TowerAlert(); @@ -617,12 +625,12 @@ public class MinecraftLeague extends TeamGame _lastOreReset = System.currentTimeMillis(); Manager.GetExplosion().setEnabled(false); Manager.GetDamage().SetEnabled(false); - Manager.GetCreature().SetForce(true); + Manager.GetCreature().SetForce(false); Manager.GetCreature().SetDisableCustomDrops(true); _cmd = new MinecraftLeagueCommand(Manager, this); Manager.addCommand(_cmd); Manager.getGameChatManager().TeamSpy = false; - Objective.setMainObjective(new GearObjective()); + //Objective.setMainObjective(new GearObjective()); } if (event.GetState() == GameState.End) @@ -734,20 +742,26 @@ public class MinecraftLeague extends TeamGame //Alert.update(); + /*for (GameTeam dmg : TeamPoison.keySet()) + { + if (UtilTime.elapsed(TeamPoison.get(dmg), UtilTime.convert(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) + { + TeamPoison.put(dmg, System.currentTimeMillis()); + for (Player player : dmg.GetPlayers(true)) + { + this.storeGear(player); + player.damage(1); + } + } + }*/ + if (UtilTime.elapsed(_lastOreReset, UtilTime.convert(5, TimeUnit.MINUTES, TimeUnit.MILLISECONDS))) { _lastOreReset = System.currentTimeMillis(); - for (Location loc : WorldData.GetCustomLocs(DataLoc.DIAMOND_ORE.getKey())) - { - loc.getBlock().setType(Material.DIAMOND_ORE); - } for (Location loc : WorldData.GetCustomLocs(DataLoc.COAL_ORE.getKey())) { loc.getBlock().setType(Material.COAL_ORE); } - _tower.ironOreGen(GetTeam(ChatColor.RED)); - _tower.ironOreGen(GetTeam(ChatColor.AQUA)); - UtilTextMiddle.display("", C.cGold + "All Ores have been refreshed!"); } if (!OverTime) @@ -762,7 +776,34 @@ public class MinecraftLeague extends TeamGame if (UtilTime.elapsed(_lastIncrease, UtilTime.convert(5, TimeUnit.MINUTES, TimeUnit.MILLISECONDS))) { _lastIncrease = System.currentTimeMillis(); - this.DeathSpectateSecs = Math.max(0, this.DeathSpectateSecs + 2.5); + this.DeathSpectateSecs = Math.min(20, this.DeathSpectateSecs + 2.5); + } + + for (Location grind : WorldData.GetCustomLocs(DataLoc.GRIND_AREA.getKey())) + { + int spider = 0; + int chicken = 0; + for (LivingEntity le : UtilEnt.getInRadius(grind, 15).keySet()) + { + if (le.getType() == EntityType.SPIDER) + spider++; + if (le.getType() == EntityType.CHICKEN) + chicken++; + } + while (spider < 5) + { + spider++; + CreatureAllowOverride = true; + Manager.GetCreature().SpawnEntity(grind, EntityType.SPIDER); + CreatureAllowOverride = false; + } + while (chicken < 10) + { + chicken++; + CreatureAllowOverride = true; + Manager.GetCreature().SpawnEntity(grind, EntityType.CHICKEN); + CreatureAllowOverride = false; + } } /*for (Player player : _spawnAllow.keySet()) @@ -852,10 +893,10 @@ public class MinecraftLeague extends TeamGame if (!tower.canDamage(player)) return; - if (!tower.Vulnerable) + //if (!tower.Vulnerable) { - UtilPlayer.message(player, F.main("Game", "That Tower is protected by the power of another!")); - return; + //UtilPlayer.message(player, F.main("Game", "That Tower is protected by the power of another!")); + //return; } if (!tower.damage(event.getDamage() / 2, player)) @@ -873,10 +914,10 @@ public class MinecraftLeague extends TeamGame if (!tower.canDamage(player)) return; - if (!tower.Vulnerable) + //if (!tower.Vulnerable) { - UtilPlayer.message(player, F.main("Game", "That Tower is protected by the power of another!")); - return; + //UtilPlayer.message(player, F.main("Game", "That Tower is protected by the power of another!")); + //return; } if (player.getItemInHand() == null || player.getItemInHand().getType() == Material.AIR) @@ -936,6 +977,27 @@ public class MinecraftLeague extends TeamGame _customRespawns.put(player, new PlayerRespawnPoint(player, event.getClickedBlock().getLocation())); }*/ + private boolean isLocked(Block block) + { + for (BlockProtection prot : _blockLock.values()) + { + if (prot.hasBlock(block)) + return true; + } + return false; + } + + private Player getOwner(Block block) + { + for (Player player : _blockLock.keySet()) + { + if (_blockLock.get(player).hasBlock(block)) + return player; + } + + return null; + } + private boolean isLockedTo(Block block, Player to, boolean ignoreTeam) { for (BlockProtection prot : _blockLock.values()) @@ -963,7 +1025,7 @@ public class MinecraftLeague extends TeamGame return; Block block = event.getBlock(); - if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST || block.getType() == Material.FURNACE) + if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST || block.getType() == Material.FURNACE || block.getType() == Material.BURNING_FURNACE) _blockLock.get(event.getPlayer()).lockBlock(block); } @@ -973,10 +1035,16 @@ public class MinecraftLeague extends TeamGame if (!IsLive()) return; - if (isLockedTo(event.getBlock(), event.getPlayer(), true)) - _blockLock.get(event.getPlayer()).unlockBlock(event.getBlock()); + if (!isLocked(event.getBlock())) + return; + + if (!isLockedTo(event.getBlock(), event.getPlayer(), false)) + _blockLock.get(getOwner(event.getBlock())).unlockBlock(event.getBlock()); else + { + UtilPlayer.message(event.getPlayer(), F.main("Game", "That container is locked by " + getOwner(event.getBlock()).getName() + "!")); event.setCancelled(true); + } } @EventHandler @@ -999,11 +1067,21 @@ public class MinecraftLeague extends TeamGame Block block = event.getClickedBlock(); - if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST || block.getType() == Material.FURNACE) + if (block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST || block.getType() == Material.FURNACE || block.getType() == Material.BURNING_FURNACE) { + if (!isLocked(block)) + { + if (event.getPlayer().isSneaking()) + { + _blockLock.get(event.getPlayer()).lockBlock(block); + return; + } + } + if (isLockedTo(event.getClickedBlock(), event.getPlayer(), false)) { event.setCancelled(true); + UtilPlayer.message(event.getPlayer(), F.main("Game", "That container is locked by " + getOwner(event.getClickedBlock()).getName() + "!")); return; } if (isOwner(event.getClickedBlock(), event.getPlayer())) @@ -1014,13 +1092,6 @@ public class MinecraftLeague extends TeamGame return; } } - if (!isOwner(event.getClickedBlock(), event.getPlayer())) - { - if (!isLockedTo(event.getClickedBlock(), event.getPlayer(), true)) - { - _blockLock.get(event.getPlayer()).lockBlock(event.getClickedBlock()); - } - } } } @@ -1154,6 +1225,7 @@ public class MinecraftLeague extends TeamGame if (!IsLive()) return; + event.getEntity().setHealth(event.getEntity().getMaxHealth()); List newDrops = new ArrayList(); Integer arrows = 0; @@ -1221,7 +1293,7 @@ public class MinecraftLeague extends TeamGame } if (event.getInventory().getResult().getType() == Material.ARROW) { - event.getInventory().setResult(new ItemStack(Material.ARROW, (event.getInventory().getResult().getAmount() * 2))); + event.getInventory().setResult(new ItemStack(Material.ARROW, (event.getInventory().getResult().getAmount() * 4))); } if (event.getInventory().getResult().getType() == Material.FLINT_AND_STEEL) { @@ -1241,7 +1313,7 @@ public class MinecraftLeague extends TeamGame event.setCancelled(true); } - @EventHandler + /*@EventHandler public void controlMobRate(CreatureSpawnEvent event) { if (!IsLive()) @@ -1274,7 +1346,7 @@ public class MinecraftLeague extends TeamGame for (int i = 1; i <= 3; i++) Manager.GetCreature().SpawnEntity(event.getLocation(), EntityType.SPIDER); } - } + }*/ @EventHandler public void editHealth(GameStateChangeEvent event) @@ -1357,15 +1429,8 @@ public class MinecraftLeague extends TeamGame } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) - public void storeGear(EntityDamageEvent event) + public void storeGear(Player player) { - if (!IsLive()) - return; - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player)event.getEntity(); List gear = new ArrayList(); if (!UtilItem.isDiamondProduct(player.getInventory().getHelmet())) @@ -1398,7 +1463,7 @@ public class MinecraftLeague extends TeamGame else gear.add(new ItemStack(Material.AIR)); - if (UtilInv.contains(player, Material.BOW, (byte) 0, 1)) + if (UtilInv.getAmount(player, Material.BOW) >= 1) { for (ItemStack poss : UtilInv.getItems(player)) { @@ -1410,6 +1475,18 @@ public class MinecraftLeague extends TeamGame } } + if (UtilInv.getAmount(player, Material.FISHING_ROD) >= 1) + { + for (ItemStack poss : UtilInv.getItems(player)) + { + if (poss.getType() == Material.FISHING_ROD) + { + gear.add(poss); + break; + } + } + } + int arrowsToAdd = UtilInv.getAmount(player, Material.ARROW) / 2; while (arrowsToAdd >= 1) { @@ -1421,6 +1498,18 @@ public class MinecraftLeague extends TeamGame _gear.put(player, gear); } + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void storeGear(EntityDamageEvent event) + { + if (!IsLive()) + return; + if (!(event.getEntity() instanceof Player)) + return; + + Player player = (Player)event.getEntity(); + storeGear(player); + } + @EventHandler public void blockDeadPvt(PrivateMessageEvent event) { @@ -1491,6 +1580,29 @@ public class MinecraftLeague extends TeamGame } } + @EventHandler(priority = EventPriority.HIGHEST) + public void handleDeath(PlayerDeathOutEvent event) + { + if (!IsLive()) + return; + + if (_tower.getAmountAlive(GetTeam(event.GetPlayer())) >= 1) + { + if (OverTime) + { + _tower.getVulnerable(GetTeam(event.GetPlayer())).damage(20, null); + if (_tower.getAmountAlive(GetTeam(event.GetPlayer())) >= 1) + { + event.setCancelled(true); + } + } + else + { + event.setCancelled(true); + } + } + } + @EventHandler(priority = EventPriority.HIGHEST) public void handleDeath(CombatDeathEvent event) { @@ -1498,69 +1610,6 @@ public class MinecraftLeague extends TeamGame return; event.SetBroadcastType(DeathMessageType.Detailed); - - if (event.GetLog().GetPlayer() == null) - return; - if (Bukkit.getPlayer(event.GetLog().GetPlayer().GetName()) == null) - return; - Player player = Bukkit.getPlayer(event.GetLog().GetPlayer().GetName()); - - if (_tower.getAmountAlive(GetTeam(player)) < 1) - { - SetPlayerState(player, PlayerState.OUT); - - Manager.GetCondition().Factory().Blind("PermDead", player, player, 1.5, 0, false, false, false); - Manager.GetCondition().Factory().Cloak("PermDead", player, player, 9999, false, false); - - player.setAllowFlight(true); - player.setFlying(true); - ((CraftPlayer)player).getHandle().spectating = true; - ((CraftPlayer)player).getHandle().k = false; - - UtilAction.velocity(player, new Vector(0,1.2,0)); - - //getMap(GetTeam(player)).update(player); - player.getInventory().clear(); - player.getInventory().setArmorContents(new ItemStack[] - { - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR) - }); - return; - } - - if (OverTime) - { - _tower.getVulnerable(GetTeam(player)).damage(20, null); - if (_tower.getAmountAlive(GetTeam(player)) < 1) - { - SetPlayerState(player, PlayerState.OUT); - - Manager.GetCondition().Factory().Blind("PermDead", player, player, 1.5, 0, false, false, false); - Manager.GetCondition().Factory().Cloak("PermDead", player, player, 9999, false, false); - - player.setAllowFlight(true); - player.setFlying(true); - ((CraftPlayer)player).getHandle().spectating = true; - ((CraftPlayer)player).getHandle().k = false; - - UtilAction.velocity(player, new Vector(0,1.2,0)); - - //getMap(GetTeam(player)).update(player); - player.getInventory().clear(); - player.getInventory().setArmorContents(new ItemStack[] - { - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR) - }); - return; - } - } - //_spawnAllow.put(player, System.currentTimeMillis() + UtilTime.convert((long) this.DeathSpectateSecs, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); } @EventHandler(priority = EventPriority.HIGHEST) @@ -1617,6 +1666,20 @@ public class MinecraftLeague extends TeamGame return; } } + for (TeamTowerBase base : _tower.getTeamTowers(GetTeam(ChatColor.RED))) + { + if (UtilMath.offset(base.getLocation(), event.getBlock().getLocation()) <= 7) + { + event.setCancelled(true); + } + } + for (TeamTowerBase base : _tower.getTeamTowers(GetTeam(ChatColor.AQUA))) + { + if (UtilMath.offset(base.getLocation(), event.getBlock().getLocation()) <= 7) + { + event.setCancelled(true); + } + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -1648,6 +1711,21 @@ public class MinecraftLeague extends TeamGame } } + for (TeamTowerBase base : _tower.getTeamTowers(GetTeam(ChatColor.RED))) + { + if (UtilMath.offset(base.getLocation(), event.getBlock().getLocation()) <= 7) + { + event.setCancelled(true); + } + } + for (TeamTowerBase base : _tower.getTeamTowers(GetTeam(ChatColor.AQUA))) + { + if (UtilMath.offset(base.getLocation(), event.getBlock().getLocation()) <= 7) + { + event.setCancelled(true); + } + } + if (event.getBlock().getType() == Material.GRAVEL) { event.setCancelled(true); @@ -1655,4 +1733,92 @@ public class MinecraftLeague extends TeamGame event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.FLINT)); } } + + @EventHandler + public void noMonsterLava(BlockFromToEvent event) + { + if (!IsLive()) + return; + + Block block = event.getBlock(); + if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA || block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) + { + Block next = event.getToBlock(); + for (BlockFace bf : BlockFace.values()) + { + if (!next.getRelative(bf).equals(block)) + { + if (block.getType().toString().contains("LAVA")) + { + if (next.getRelative(bf).getType().toString().contains("WATER")) + { + event.setCancelled(true); + } + } + if (block.getType().toString().contains("WATER")) + { + if (next.getRelative(bf).getType().toString().contains("LAVA")) + { + event.setCancelled(true); + } + } + } + } + } + } + + @EventHandler(ignoreCancelled=true) + public void onPlayerEmptyBucket(PlayerBucketEmptyEvent event) + { + if (!IsLive()) + return; + + Player player = event.getPlayer(); + if (player.getItemInHand().getType() == Material.WATER_BUCKET) + { + player.getItemInHand().setType(Material.BUCKET); + Block block = event.getBlockClicked().getRelative(event.getBlockFace()); + if (block.getType().toString().contains("LAVA")) + { + event.setCancelled(true); + return; + } + for (BlockFace bf : BlockFace.values()) + { + if (block.getRelative(bf).getType().toString().contains("LAVA")) + { + event.setCancelled(true); + } + } + } + } + + @EventHandler(ignoreCancelled=true) + public void onBlockDispense(BlockDispenseEvent event) + { + if (!IsLive()) + return; + + if (event.getItem().getType() == Material.WATER_BUCKET) + { + Block dispenser = event.getBlock(); + + MaterialData mat = dispenser.getState().getData(); + Dispenser disp_mat = (Dispenser)mat; + BlockFace face = disp_mat.getFacing(); + Block block = dispenser.getRelative(face); + if (block.getType().toString().contains("LAVA")) + { + event.setCancelled(true); + return; + } + for (BlockFace bf : BlockFace.values()) + { + if (block.getRelative(bf).getType().toString().contains("LAVA")) + { + event.setCancelled(true); + } + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/BlockProtection.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/BlockProtection.java index 8a0c2741a..05ab6ef57 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/BlockProtection.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/BlockProtection.java @@ -30,12 +30,17 @@ public class BlockProtection public boolean hasBlock(Block block) { - return _blocks.contains(block); + for (Block b : _blocks) + { + if (ProtectionUtil.isSameBlock(block, b)) + return true; + } + return false; } public boolean isLockedTo(Player opening, Block block, boolean ignoreTeam) { - if (!_blocks.contains(block)) + if (!hasBlock(block)) return false; if (_host.GetTeam(_player).GetColor() != _host.GetTeam(opening).GetColor()) return ignoreTeam; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/DefenderAI.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/DefenderAI.java index 53cc0c89f..63d17444a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/DefenderAI.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/DefenderAI.java @@ -55,6 +55,9 @@ public class DefenderAI private void attack() { + if (!_tower.Vulnerable) + return; + if (_procTime != -1) { if (System.currentTimeMillis() >= _procTime) @@ -67,12 +70,12 @@ public class DefenderAI } if (!_manager.Attack) return; - if (!UtilTime.elapsed(_lastAttack, UtilTime.convert(30, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) + if (!UtilTime.elapsed(_lastAttack, UtilTime.convert(5, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) return; /*if (UtilMath.random.nextDouble() < .75) return;*/ _lastAttack = System.currentTimeMillis(); - _procTime = System.currentTimeMillis() + UtilTime.convert(25, TimeUnit.SECONDS, TimeUnit.MILLISECONDS); + _procTime = System.currentTimeMillis() + UtilTime.convert(4, TimeUnit.SECONDS, TimeUnit.MILLISECONDS); animate(); } @@ -90,8 +93,9 @@ public class DefenderAI if (UtilPlayer.isSpectator(player)) continue; + _manager.Host.storeGear(player); player.getWorld().strikeLightningEffect(player.getLocation()); - player.damage(4 * 2); + player.damage(Math.min(6 * 2, player.getHealth())); } } @@ -140,7 +144,7 @@ public class DefenderAI if (!_active) return; - if (UtilTime.elapsed(_lastStepIncrease, UtilTime.convert(3, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) + if (UtilTime.elapsed(_lastStepIncrease, UtilTime.convert(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) { _step++; _lastStepIncrease = System.currentTimeMillis(); @@ -150,7 +154,7 @@ public class DefenderAI private void drawHelix() { - double height = Math.min(_step, 15D); + double height = Math.min(_step * 2, 15D); for (double y = 0; y <= height; y += .5) { @@ -170,7 +174,7 @@ public class DefenderAI while (UtilMath.offset(base, target) > UtilMath.offset(base, display)) { Vector v = UtilAlg.getTrajectory(display, target); - UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, display, null, 0, 1, ViewDist.MAX); + UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, display, null, 0, 1, ViewDist.MAX); display.add(v); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/OreGenerator.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/OreGenerator.java index c02076d74..bde64fddb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/OreGenerator.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/OreGenerator.java @@ -17,6 +17,8 @@ public class OreGenerator _choices.clear(); for (Location loc : possible) { + if (loc.getBlock().getType() == Material.WORKBENCH || loc.getBlock().getType() == Material.CHEST || loc.getBlock().getType() == Material.TRAPPED_CHEST || loc.getBlock().getType() == Material.FURNACE || loc.getBlock().getType() == Material.BURNING_FURNACE) + continue; loc.getBlock().setType(Material.STONE); _choices.add(loc); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/ProtectionUtil.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/ProtectionUtil.java new file mode 100644 index 000000000..65a2f2e85 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/ProtectionUtil.java @@ -0,0 +1,16 @@ +package nautilus.game.arcade.game.games.minecraftleague.data; + +import org.bukkit.block.Block; + +public class ProtectionUtil { + + public static boolean isSameBlock(Block a, Block b) + { + if (a.getX() == b.getX()) + if (a.getY() == b.getY()) + return (a.getZ() == b.getZ()); + + return false; + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TeamTowerBase.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TeamTowerBase.java index d7c9629e1..3b452886b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TeamTowerBase.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TeamTowerBase.java @@ -11,8 +11,6 @@ import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.hologram.Hologram; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.GameTeam; @@ -49,7 +47,7 @@ public abstract class TeamTowerBase { _host = host; _manager = manager; - _spawn = spawn.clone().add(0.5, 1.2, 0.5); + _spawn = spawn.clone().add(-0.5, 1.2, -0.5); _team = team; _maxHealth = 11111D; _health = 11111D; @@ -79,12 +77,13 @@ public abstract class TeamTowerBase else message = _team.GetColor() + _team.getDisplayName() + "'s " + C.cDPurpleB + _type + _team.GetColor() + " has been destroyed!"; - Bukkit.broadcastMessage(message); + //Bukkit.broadcastMessage(message); + UtilTextMiddle.display("", message); if (!_type.equalsIgnoreCase("Tower")) { for (Player inform : _team.GetPlayers(true)) - UtilTextMiddle.display(C.cGold + "Team Crystal Destroyed", C.cGold + "You will no longer respawn!", inform); + UtilTextMiddle.display(C.cGold + "Team Crystal Destroyed", C.cGold + "You will no longer respawn and will be poisoned in 5 minutes!", inform); } Alive = false; @@ -135,6 +134,10 @@ public abstract class TeamTowerBase { b.setType(Material.AIR); } + for (int i = 1; i < 3; i++) + { + getBeacon().clone().add(0, i, 0).getBlock().setType(Material.BEDROCK); + } for (LivingEntity le : UtilEnt.getInRadius(_spawn, 18).keySet()) { if (le instanceof Wither) @@ -142,7 +145,15 @@ public abstract class TeamTowerBase else { if (UtilMath.offset(le.getLocation(), _spawn) <= 5) + { + if (UtilPlayer.isSpectator(le)) + continue; + if (le instanceof Player) + { + _host.storeGear((Player)le); + } le.damage(6); + } } } } @@ -223,7 +234,7 @@ public abstract class TeamTowerBase _health = newHealth; if (player != null) - Recharge.Instance.use(player, "Damage TeamTower", UtilTime.convert(1/2, TimeUnit.SECONDS, TimeUnit.MILLISECONDS), false, false); + Recharge.Instance.use(player, "Damage TeamTower", 400, false, false); return false; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerAlert.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerAlert.java index 269c77262..eafdc46df 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerAlert.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerAlert.java @@ -1,7 +1,11 @@ package nautilus.game.arcade.game.games.minecraftleague.data; +import java.util.concurrent.ConcurrentHashMap; + import mineplex.core.common.util.C; import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilTime.TimeUnit; import nautilus.game.arcade.game.GameTeam; import org.bukkit.Instrument; @@ -11,12 +15,21 @@ import org.bukkit.entity.Player; public class TowerAlert { - //private ConcurrentHashMap _alerts = new ConcurrentHashMap(); + private ConcurrentHashMap _alerts = new ConcurrentHashMap(); //private ConcurrentHashMap _alertType = new ConcurrentHashMap(); public void alert(GameTeam team, TeamTowerBase tower) { - //_alerts.put(team, System.currentTimeMillis()); + if (!UtilTime.elapsed(_alerts.getOrDefault(team, (long) 1), UtilTime.convert(7, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) + { + for (Player player : team.GetPlayers(true)) + playSound(player); + + return; + } + + _alerts.put(team, System.currentTimeMillis()); + String type = ""; if (tower instanceof TeamTower) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerManager.java index 3947c4ffb..493221319 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/TowerManager.java @@ -6,13 +6,15 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import mineplex.core.common.util.UtilTextMiddle; import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.games.minecraftleague.DataLoc; import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; -import nautilus.game.arcade.game.games.minecraftleague.data.objectives.KillObjective; import nautilus.game.arcade.world.WorldData; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Listener; @@ -28,7 +30,7 @@ public class TowerManager implements Listener //private ConcurrentHashMap _mapZone = new ConcurrentHashMap(); private ConcurrentHashMap _beacons = new ConcurrentHashMap(); private OreGenerator _ore; - public boolean Attack = true; + public boolean Attack = false; public TowerManager(MinecraftLeague host) { @@ -47,12 +49,29 @@ public class TowerManager implements Listener _beacons.get(base.getTeam()).setBlock(base.getBeacon().getBlock()); } - public void ironOreGen(GameTeam team) + public void ironOreGen(GameTeam team, boolean start) { - if (team.GetColor() == ChatColor.RED) - _ore.generateOre(Material.IRON_ORE, Host.WorldData.GetCustomLocs(DataLoc.RED_ORE.getKey()), 30); + int amount = 10; + if (start) + amount = 40; + + for (Location loc : Host.WorldData.GetCustomLocs(DataLoc.DIAMOND_ORE.getKey())) + { + loc.getBlock().setType(Material.DIAMOND_ORE); + } + + if (start) + { + if (team.GetColor() == ChatColor.RED) + _ore.generateOre(Material.IRON_ORE, Host.WorldData.GetCustomLocs(DataLoc.RED_ORE.getKey()), amount); + else + _ore.generateOre(Material.IRON_ORE, Host.WorldData.GetCustomLocs(DataLoc.BLUE_ORE.getKey()), amount); + } else - _ore.generateOre(Material.IRON_ORE, Host.WorldData.GetCustomLocs(DataLoc.BLUE_ORE.getKey()), 30); + { + _ore.generateOre(Material.IRON_ORE, Host.WorldData.GetCustomLocs(DataLoc.MOSH_IRON.getKey()), amount); + UtilTextMiddle.display("", "Valuable Ores have respawned in the middle!"); + } } private List getAllTeamTowers(GameTeam team) @@ -158,8 +177,8 @@ public class TowerManager implements Listener Host.Beacons.put(blue, _beacons.get(blue)); makeVulnerable(getTeamTowers(red).getFirst()); makeVulnerable(getTeamTowers(blue).getFirst()); - ironOreGen(red); - ironOreGen(blue); + ironOreGen(red, true); + ironOreGen(blue, true); } public void prepareHealth(int players, double multiplier) @@ -202,7 +221,25 @@ public class TowerManager implements Listener else enemy = Host.GetTeam(ChatColor.RED); - Host.Objective.setTeamObjective(enemy, new KillObjective()); + Host.AnnounceEnd(enemy); + + for (GameTeam team : Host.GetTeamList()) + { + if (enemy != null && team.equals(enemy)) + { + for (Player player : team.GetPlayers(false)) + Host.AddGems(player, 10, "Winning Team", false, false); + } + + for (Player player : team.GetPlayers(false)) + if (player.isOnline()) + Host.AddGems(player, 10, "Participation", false, false); + } + Host.SetState(GameState.End); + + //Host.Objective.setTeamObjective(enemy, new KillObjective()); + + //Host.TeamPoison.put(towerBase.getTeam(), System.currentTimeMillis() + (UtilTime.convert(5, TimeUnit.MINUTES, TimeUnit.MILLISECONDS) - UtilTime.convert(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))); return; } @@ -212,7 +249,7 @@ public class TowerManager implements Listener public void toggleAttack() { - Attack = !Attack; + //Attack = !Attack; } public void update() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/map/ItemMapRenderer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/map/ItemMapRenderer.java index e4662c45a..e161d0583 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/map/ItemMapRenderer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/map/ItemMapRenderer.java @@ -5,6 +5,7 @@ import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; import nautilus.game.arcade.game.games.minecraftleague.data.MapZone; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.map.MapCanvas; @@ -111,6 +112,19 @@ public class ItemMapRenderer extends MapRenderer if (mapX > -64 && mapX < 64 && mapZ > -64 && mapZ < 64) { MapCursor.Type cursorDisplay; + MapCursor.Type friend; + MapCursor.Type foe; + + if (_host.GetTeam(player).GetColor() == ChatColor.RED) + { + friend = MapCursor.Type.RED_POINTER; + foe = MapCursor.Type.BLUE_POINTER; + } + else + { + friend = MapCursor.Type.BLUE_POINTER; + foe = MapCursor.Type.RED_POINTER; + } if (player == other) { @@ -118,12 +132,12 @@ public class ItemMapRenderer extends MapRenderer } else if (_host.GetTeam(player) == _host.GetTeam(other)) { - cursorDisplay = MapCursor.Type.BLUE_POINTER; + cursorDisplay = friend; } else if (_host.GetTeam(player) != _host.GetTeam(other)) { if (_host.OverTime) - cursorDisplay = MapCursor.Type.RED_POINTER; + cursorDisplay = foe; else continue; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/objective/ObjectiveManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/objective/ObjectiveManager.java index 7ec6ee923..5281fecfe 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/objective/ObjectiveManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/objective/ObjectiveManager.java @@ -82,6 +82,9 @@ public class ObjectiveManager implements Listener public void setTeamObjective(GameTeam team, GameObjective objective) { + if (getTeamObjective(team).equalsIgnoreCase("KILL_ENEMY")) + return; + resetTeamToMainObjective(team); _teamObjectives.put(team, objective); } @@ -103,7 +106,7 @@ public class ObjectiveManager implements Listener for (Player player : _host.GetPlayers(true)) { - if (_main != null || _specificObjectives.containsKey(player)) + if (_main != null || _specificObjectives.containsKey(player) || _teamObjectives.containsKey(_host.GetTeam(player))) displayObjective(player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/AltarBuilderTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/AltarBuilderTracker.java new file mode 100644 index 000000000..d4eb61c0e --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/AltarBuilderTracker.java @@ -0,0 +1,21 @@ +package nautilus.game.arcade.game.games.minecraftleague.tracker; + +import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.event.EventHandler; + +public class AltarBuilderTracker extends StatTracker +{ + public AltarBuilderTracker(MinecraftLeague game) + { + super(game); + } + + @EventHandler + public void build(PlaceSkullEvent e) + { + addStat(e.getPlayer(), "AltarBuilder", 1, false, false); + } + +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/FirstStrikeTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/FirstStrikeTracker.java new file mode 100644 index 000000000..07d08ba0a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/FirstStrikeTracker.java @@ -0,0 +1,22 @@ +package nautilus.game.arcade.game.games.minecraftleague.tracker; + +import nautilus.game.arcade.events.FirstBloodEvent; +import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.event.EventHandler; + +public class FirstStrikeTracker extends StatTracker +{ + public FirstStrikeTracker(MinecraftLeague game) + { + super(game); + } + + @EventHandler + public void blood(FirstBloodEvent e) + { + addStat(e.getPlayer(), "FirstStrike", 1, false, false); + } + +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/GrabSkullEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/GrabSkullEvent.java new file mode 100644 index 000000000..7da1c076e --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/GrabSkullEvent.java @@ -0,0 +1,31 @@ +package nautilus.game.arcade.game.games.minecraftleague.tracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class GrabSkullEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + private Player _player; + + public GrabSkullEvent(Player player) + { + _player = player; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public Player getPlayer() + { + return _player; + } +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/HeadHunterTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/HeadHunterTracker.java new file mode 100644 index 000000000..72100ecfe --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/HeadHunterTracker.java @@ -0,0 +1,21 @@ +package nautilus.game.arcade.game.games.minecraftleague.tracker; + +import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; +import nautilus.game.arcade.stats.StatTracker; + +import org.bukkit.event.EventHandler; + +public class HeadHunterTracker extends StatTracker +{ + public HeadHunterTracker(MinecraftLeague game) + { + super(game); + } + + @EventHandler + public void build(GrabSkullEvent e) + { + addStat(e.getPlayer(), "HeadHunter", 1, false, false); + } + +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/PlaceSkullEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/PlaceSkullEvent.java new file mode 100644 index 000000000..a9193a640 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/tracker/PlaceSkullEvent.java @@ -0,0 +1,31 @@ +package nautilus.game.arcade.game.games.minecraftleague.tracker; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlaceSkullEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + private Player _player; + + public PlaceSkullEvent(Player player) + { + _player = player; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public Player getPlayer() + { + return _player; + } +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/WitherVariation.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/WitherVariation.java index f350e63fb..bdfd42dd1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/WitherVariation.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/WitherVariation.java @@ -16,12 +16,10 @@ import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.minecraftleague.DataLoc; import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague; import nautilus.game.arcade.game.games.minecraftleague.data.TeamTowerBase; -import nautilus.game.arcade.game.games.minecraftleague.data.objectives.GearObjective; import nautilus.game.arcade.game.games.minecraftleague.variation.GameVariation; import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.TeamAltar; import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.WitherMinionManager; import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.WitherPathfinder; -import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.objectives.WitherObjective; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -131,6 +129,27 @@ public class WitherVariation extends GameVariation player.removePotionEffect(PotionEffectType.WITHER); player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * 6, 0)); } + if (!Host.IsAlive(player)) + continue; + /*GameTeam enemy = null; + if (Host.GetTeam(player).GetColor() == ChatColor.RED) + { + enemy = Host.GetTeam(ChatColor.AQUA); + } + else + { + enemy = Host.GetTeam(ChatColor.RED); + } + if (UtilMath.offset(player, Host.getActiveTower(enemy).getEntity()) <= 7) + { + for (Location loc : UtilShapes.getCircle(player.getEyeLocation(), true, 3)) + { + if (new Random().nextInt(5) <= 3) + { + UtilParticle.PlayParticle(ParticleType.DRIP_LAVA, loc, null, 0, 2, ViewDist.SHORT, player); + } + } + }*/ } if (_pathfinder != null) if (_pathfinder.update()) @@ -139,9 +158,9 @@ public class WitherVariation extends GameVariation WitherSpawned = false; _wowner = null; _skellyMan.onWitherDeath(); - UtilTextMiddle.display("", C.cGray + "The Mighty Wither has fallen!"); - Host.Objective.resetTeamToMainObjective(Host.GetTeam(ChatColor.RED)); - Host.Objective.resetTeamToMainObjective(Host.GetTeam(ChatColor.AQUA)); + UtilTextMiddle.display("", C.cWhite + "The Mighty Wither has fallen!"); + //Host.Objective.resetTeamToMainObjective(Host.GetTeam(ChatColor.RED)); + //Host.Objective.resetTeamToMainObjective(Host.GetTeam(ChatColor.AQUA)); } } } @@ -183,16 +202,16 @@ public class WitherVariation extends GameVariation _wither = (Wither)event.getEntity(); _wither.setCustomName(team.GetColor() + team.getDisplayName() + "'s Wither"); _wither.setCustomNameVisible(true); - UtilTextMiddle.display("", C.cBlack + team.getDisplayName() + " Team has spawned a Wither Boss!", UtilServer.getPlayers()); + UtilTextMiddle.display("", C.cWhite + team.getDisplayName() + " Team has spawned a Wither Boss!", UtilServer.getPlayers()); _pathfinder = new WitherPathfinder(this, _wither, getWaypoints(_altars.get(team).getLocation()), team, enemy, Host.getTowerManager()); _skellyMan.onWitherSpawn(); - Host.Objective.setMainObjective(new GearObjective()); - Host.Objective.setTeamObjective(team, new WitherObjective("Attack Enemy Towers")); - Host.Objective.setTeamObjective(enemy, new WitherObjective("Kill Wither")); - for (Player player : Host.GetPlayers(true)) + //Host.Objective.setMainObjective(new GearObjective()); + //Host.Objective.setTeamObjective(team, new WitherObjective("Attack Enemy Towers")); + //Host.Objective.setTeamObjective(enemy, new WitherObjective("Kill Wither")); + /*for (Player player : Host.GetPlayers(true)) { Host.Objective.resetPlayerToMainObjective(player); - } + }*/ Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable() { public void run() @@ -243,7 +262,7 @@ public class WitherVariation extends GameVariation TeamTowerBase blue = Host.getActiveTower(Host.GetTeam(ChatColor.AQUA)); HashMap inside = UtilBlock.getInRadius(event.getLocation().getBlock(), 4, false); - double dmg = 5 * (Host.GetTeam(ChatColor.RED).GetPlayers(true).size() + Host.GetTeam(ChatColor.RED).GetPlayers(true).size()); + double dmg = 20 * (Host.GetTeam(ChatColor.RED).GetPlayers(true).size() + Host.GetTeam(ChatColor.RED).GetPlayers(true).size()); if (inside.containsKey(red.getLocation().getBlock())) { red.damage(dmg, null); @@ -397,5 +416,9 @@ public class WitherVariation extends GameVariation return; Manager.GetCondition().Clean(event.GetPlayer()); + /*if (Host.Objective.getPlayerObjective(event.GetPlayer()).equals("RETURN_SKULL")) + { + Host.Objective.resetPlayerToMainObjective(event.GetPlayer()); + }*/ } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/TeamAltar.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/TeamAltar.java index 7303a93f6..0834d76b2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/TeamAltar.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/TeamAltar.java @@ -9,8 +9,10 @@ import mineplex.core.common.util.UtilShapes; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.hologram.Hologram; import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.game.games.minecraftleague.tracker.PlaceSkullEvent; import nautilus.game.arcade.game.games.minecraftleague.variation.wither.WitherVariation; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -42,7 +44,7 @@ public class TeamAltar _protected = UtilShapes.getSphereBlocks(center, 7, 7, false); - Location labelLoc = center.clone().add(0.5, 5, 0.5); + Location labelLoc = center.clone().add(0/*.5*/, 5, 0.5); String labelStr = team.GetColor() + team.getDisplayName() + "'s Altar"; Hologram label = new Hologram(host.Host.getArcadeManager().getHologramManager(), labelLoc, labelStr); label.start(); @@ -158,6 +160,8 @@ public class TeamAltar if (_team.HasPlayer(player) && blockType == Material.SKULL) { + //_host.Host.Objective.resetPlayerToMainObjective(player); + Bukkit.getPluginManager().callEvent(new PlaceSkullEvent(player)); if (_placed < 2) { UtilTextMiddle.display("", _team.GetColor() + _team.getDisplayName() + " has placed a Skull on their Altar!"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java index 9e7bcc880..44f479094 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java @@ -6,6 +6,7 @@ import java.util.Random; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilParticle; @@ -17,18 +18,19 @@ import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.games.minecraftleague.data.MapZone; -import nautilus.game.arcade.game.games.minecraftleague.data.objectives.GearObjective; +import nautilus.game.arcade.game.games.minecraftleague.tracker.GrabSkullEvent; import nautilus.game.arcade.game.games.minecraftleague.variation.wither.WitherVariation; -import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.objectives.GrabSkullObjective; -import nautilus.game.arcade.game.games.minecraftleague.variation.wither.data.objectives.ReturnSkullObjective; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -59,21 +61,21 @@ public class WitherMinionManager implements Listener private long _lastDied; private int _lastUsed; private int _selected; - + private Skeleton _entity; - + private ItemStack _witherItem; - + private WitherSkeletonTimer _sbTimer; private MapZone _skellyZone; - + private Block _cb; private Material _changed = Material.AIR; - + private boolean _witherBlocked = false; - + private boolean _spawned = false; - + public WitherMinionManager(WitherVariation host, List spawns) { _host = host; @@ -86,10 +88,10 @@ public class WitherMinionManager implements Listener _skellyZone = new MapZone(spawns.get(0), new int[] {0, 0, 0}); _skellyZone.setValid(false); host.Host.MapZones.add(_skellyZone); - + Bukkit.getPluginManager().registerEvents(this, host.Manager.getPlugin()); } - + private void preSpawn() { Location chosen = null; @@ -103,12 +105,12 @@ public class WitherMinionManager implements Listener _selected = check; } } - + _cb = chosen.clone().add(0, -2, 0).getBlock(); _changed = _cb.getType(); chosen.clone().add(0, -2, 0).getBlock().setType(Material.BEACON); } - + private void spawn(boolean respawn) { Location chosen = null; @@ -127,26 +129,26 @@ public class WitherMinionManager implements Listener ((CraftSkeleton)e).getEquipment().setChestplate(new ItemStack(Material.IRON_CHESTPLATE)); ((CraftSkeleton)e).getEquipment().setLeggings(new ItemStack(Material.IRON_LEGGINGS)); //((Skeleton)e).addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 9999999, 7)); - + if (!respawn) { UtilTextMiddle.display("", C.cGray + "A Wither Skeleton has spawned!"); _skellyZone.setCenter(chosen); _skellyZone.setValid(true); - _host.Host.Objective.setMainObjective(new GrabSkullObjective()); + //_host.Host.Objective.setMainObjective(new GrabSkullObjective()); } _selected = -1; _spawned = true; } - + public void onWitherDeath() { - _lastDied = System.currentTimeMillis() + UtilTime.convert(2, TimeUnit.MINUTES, TimeUnit.MILLISECONDS); + _lastDied = System.currentTimeMillis(); _witherBlocked = false; _host.Host.getTowerManager().toggleAttack(); _sbTimer.freezeTime(-1); } - + public void onWitherSpawn() { _host.Host.getTowerManager().toggleAttack(); @@ -166,7 +168,7 @@ public class WitherMinionManager implements Listener _changed = Material.AIR; } } - + @EventHandler public void onLive(GameStateChangeEvent event) { @@ -174,36 +176,37 @@ public class WitherMinionManager implements Listener return; if (event.GetState() != GameState.Live) return; - - _lastDied = System.currentTimeMillis() + UtilTime.convert(4, TimeUnit.MINUTES, TimeUnit.MILLISECONDS); + + _lastDied = System.currentTimeMillis() + UtilTime.convert(60, TimeUnit.SECONDS, TimeUnit.MILLISECONDS); } - + @EventHandler public void onUpdate(UpdateEvent event) { if (!_host.Host.IsLive()) return; - + if (event.getType() != UpdateType.FASTEST) return; - + if (_entity == null || !_entity.isValid()) { if (_spawned) spawn(true); } - + if (_entity != null) { _entity.teleport(_spawns.get(_lastUsed)); } + try { if (UtilTime.elapsed(_lastDied, UtilTime.convert(45, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) { boolean noUse = _host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.RED)) < 1; if (_host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.AQUA)) >= 1) noUse = false; - if (!_host.WitherSpawned || !noUse) + if (!_witherBlocked && !noUse) { if (_entity == null) { @@ -218,25 +221,25 @@ public class WitherMinionManager implements Listener { if (secLeft > 0) { - UtilTextMiddle.display(C.cGold + secLeft + " Seconds", C.cGray + "Until Wither Skeleton Spawn"); + UtilTextMiddle.display(C.cGold + secLeft + " Seconds", "Until Wither Skeleton Spawn"); } } } } } - - if (UtilTime.elapsed(_lastDied, UtilTime.convert(1, TimeUnit.MINUTES, TimeUnit.MILLISECONDS))) + + if (UtilTime.elapsed(_lastDied, UtilTime.convert(90, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))) { boolean noUse = _host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.RED)) < 1; if (_host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.AQUA)) >= 1) noUse = false; - if (!_host.WitherSpawned || !noUse) + if (!_witherBlocked && !noUse) { if (_entity == null) spawn(false); } } - + for (Player player : Bukkit.getOnlinePlayers()) { if (UtilInv.contains(player, Material.SKULL_ITEM, (byte) 1, 1)) @@ -249,13 +252,21 @@ public class WitherMinionManager implements Listener { UtilParticle.PlayParticleToAll(ParticleType.DRIP_LAVA, loc, null, 0, 1, ViewDist.MAX); } + if (Recharge.Instance.usable(player, "FIREWORK_ALERT", false)) + { + Recharge.Instance.use(player, "FIREWORK_ALERT", UtilTime.convert(5, TimeUnit.SECONDS, TimeUnit.MILLISECONDS), false, false); + UtilFirework.playFirework(player.getEyeLocation().add(0, 3, 0), Type.BALL_LARGE, Color.PURPLE, false, true); + } } else { - if (_host.Host.Objective.getPlayerObjective(player).equalsIgnoreCase("GRAB_SKULL")) + /*if (_host.Host.Objective.getPlayerObjective(player) != null) { - _host.Host.Objective.resetPlayerToMainObjective(player); - } + if (_host.Host.Objective.getPlayerObjective(player).equalsIgnoreCase("GRAB_SKULL")) + { + _host.Host.Objective.resetPlayerToMainObjective(player); + } + }*/ } if (player.getInventory().getHelmet() != null) @@ -267,45 +278,49 @@ public class WitherMinionManager implements Listener } } } + } catch (Exception e) + { + + } } - + @EventHandler public void handleTimer(UpdateEvent event) { if (!_host.Host.IsLive()) return; - + if (event.getType() != UpdateType.FASTEST) return; - + boolean noUse = _host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.RED)) < 1; if (_host.Host.getTowerManager().getAmountAlive(_host.Host.GetTeam(ChatColor.AQUA)) >= 1) noUse = false; - + if (_entity != null || noUse) { _sbTimer.freezeTime(0); return; } - + if (_host.WitherSpawned || _witherBlocked) { _sbTimer.freezeTime(-2); return; } - + if (_entity == null) _sbTimer.freezeTime(-1); - - _sbTimer.setEnd((_lastDied + UtilTime.convert(1, TimeUnit.MINUTES, TimeUnit.MILLISECONDS))); + + _sbTimer.setEnd((_lastDied + UtilTime.convert(90, TimeUnit.SECONDS, TimeUnit.MILLISECONDS))); } - + @EventHandler(priority = EventPriority.HIGHEST) public void onSkellyDie(EntityDeathEvent event) { if (!_host.Host.IsLive()) return; - + if (event.getEntity() instanceof Skeleton) { Skeleton skelly = (Skeleton)event.getEntity(); @@ -327,19 +342,21 @@ public class WitherMinionManager implements Listener _cb = null; _changed = Material.AIR; - _host.Host.Objective.setMainObjective(new GearObjective()); + _host.Host.getTowerManager().ironOreGen(null, false); + + //_host.Host.Objective.setMainObjective(new GearObjective()); } } } } } - - @EventHandler + + @EventHandler(priority = EventPriority.HIGHEST) public void onPickup(PlayerPickupItemEvent event) { if (!_host.Host.IsLive()) return; - + if (!event.isCancelled()) { String com = UtilItem.itemToStr(event.getItem().getItemStack()); @@ -356,22 +373,32 @@ public class WitherMinionManager implements Listener { public void run() { - UtilTextMiddle.display("", C.cGold + "Place the skull on top of your Altar's Soulsand!", event.getPlayer()); + UtilTextMiddle.display("", C.cGold + "Place the skull on top of", event.getPlayer()); } }, 20 * 5); - _host.Host.Objective.setPlayerObjective(event.getPlayer(), new ReturnSkullObjective()); + Bukkit.getScheduler().runTaskLater(_host.Manager.getPlugin(), new Runnable() + { + public void run() + { + UtilTextMiddle.display("", C.cGold + "Your Altar's Soul Sand!", event.getPlayer()); + } + }, 20 * 8); + //_host.Host.Objective.setPlayerObjective(event.getPlayer(), new ReturnSkullObjective()); if (!event.getItem().hasMetadata("Dropped")) + { + Bukkit.getPluginManager().callEvent(new GrabSkullEvent(event.getPlayer())); UtilTextMiddle.display("", _host.Host.GetTeam(event.getPlayer()).GetColor() + _host.Host.GetTeam(event.getPlayer()).getDisplayName() + " has picked up a Wither Skull!", 20, 20 * 5, 20); + } } } } - + @EventHandler public void onDrop(PlayerDropItemEvent event) { if (!_host.Host.IsLive()) return; - + if (!event.isCancelled()) { String com = UtilItem.itemToStr(event.getItemDrop().getItemStack()); @@ -383,43 +410,43 @@ public class WitherMinionManager implements Listener if (fin.equalsIgnoreCase(fin1)) { event.getItemDrop().setMetadata("Dropped", new FixedMetadataValue(_host.Manager.getPlugin(), true)); - _host.Host.Objective.resetPlayerToMainObjective(event.getPlayer()); + //_host.Host.Objective.resetPlayerToMainObjective(event.getPlayer()); } } } - + @EventHandler public void onPlace(BlockPlaceEvent event) { if (!_host.Host.IsLive()) return; - + for (Location loc : _spawns) { - if (UtilShapes.getSphereBlocks(loc, 5, 5, false).contains(event.getBlock().getLocation())) + if (UtilShapes.getSphereBlocks(loc, 6, 6, false).contains(event.getBlock().getLocation())) event.setCancelled(true); } } - + @EventHandler public void onBreak(BlockBreakEvent event) { if (!_host.Host.IsLive()) return; - + for (Location loc : _spawns) { - if (UtilShapes.getSphereBlocks(loc, 5, 5, false).contains(event.getBlock().getLocation())) + if (UtilShapes.getSphereBlocks(loc, 6, 6, false).contains(event.getBlock().getLocation())) event.setCancelled(true); } } - + @EventHandler public void onExp(EntityExplodeEvent event) { if (!_host.Host.IsLive()) return; - + if (event.getEntity() instanceof Wither) { event.blockList().clear(); @@ -427,13 +454,13 @@ public class WitherMinionManager implements Listener } event.setCancelled(true); } - + @EventHandler public void onEntity(EntityChangeBlockEvent event) { if (!_host.Host.IsLive()) return; - + for (Location loc : _spawns) { if (UtilShapes.getSphereBlocks(loc, 5, 5, false).contains(event.getBlock().getLocation())) 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 6867c0e30..e406623c2 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 @@ -1,5 +1,7 @@ package nautilus.game.arcade.managers; +import java.util.concurrent.ConcurrentHashMap; + import mineplex.core.antihack.AntiHack; import mineplex.core.common.Rank; import mineplex.core.common.util.C; @@ -12,6 +14,8 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; import mineplex.core.teleport.event.MineplexTeleportEvent; @@ -73,6 +77,7 @@ public class GameFlagManager implements Listener { ArcadeManager Manager; SecondaryDamageManager Secondary; + private ConcurrentHashMap _respawnTimers = new ConcurrentHashMap(); public GameFlagManager(ArcadeManager manager) { @@ -99,8 +104,11 @@ public class GameFlagManager implements Listener { if (Manager.GetDamage().IsEnabled()) { - HandlerList.unregisterAll(Secondary); - Secondary = null; + if (Secondary != null) + { + HandlerList.unregisterAll(Secondary); + Secondary = null; + } } } } @@ -762,6 +770,8 @@ public class GameFlagManager implements Listener if (game.GetTeam(player).GetRespawnTime() > time) time = game.GetTeam(player).GetRespawnTime(); + final double timeF = time; + UtilInv.Clear(player); Manager.GetCondition().Factory().Cloak("Ghost", player, player, time, false, false); player.setAllowFlight(true); @@ -786,7 +796,14 @@ public class GameFlagManager implements Listener UtilPlayer.message(player, C.cWhite + C.Bold + "You will respawn in " + time + " seconds..."); UtilTextMiddle.display(null, "Respawning in " + time + " seconds...", 5, 40, 5, player); } - + Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable() + { + public void run() + { + Long t = Double.valueOf(timeF).longValue(); + _respawnTimers.put(player, System.currentTimeMillis() + UtilTime.convert(t, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); + } + }, 6); Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable() { public void run() @@ -1244,4 +1261,37 @@ public class GameFlagManager implements Listener UtilTextMiddle.display(C.cGold + C.Bold + Manager.GetGame().GetType().GetName(), "Make sure you accept the Resource Pack", 20, 120, 20, event.getPlayer()); } + + @EventHandler + public void displayRespawnTimer(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTEST) + return; + + if (Manager.GetGame() == null) + { + _respawnTimers.clear(); + return; + } + if (!Manager.GetGame().IsLive()) + { + _respawnTimers.clear(); + return; + } + for (Player player : _respawnTimers.keySet()) + { + if (!player.isOnline()) + { + _respawnTimers.remove(player); + continue; + } + if (System.currentTimeMillis() >= _respawnTimers.get(player)) + { + _respawnTimers.remove(player); + continue; + } + long sec = UtilTime.convert(_respawnTimers.get(player) - System.currentTimeMillis(), TimeUnit.MILLISECONDS, TimeUnit.SECONDS); + UtilTextMiddle.display("Respawning In", sec + " Seconds", player); + } + } } \ No newline at end of file