diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/deathtag/DeathTag.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/deathtag/DeathTag.java index 8c08326ff..c04db9f00 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/deathtag/DeathTag.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/deathtag/DeathTag.java @@ -340,7 +340,7 @@ public class DeathTag extends SoloGame { return; } - + if (_runners.GetPlayers(true).size() <= 1) { List places = _runners.GetPlacements(true); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java index 42755f5b4..4b4c2b1dd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; @@ -39,9 +40,9 @@ import mineplex.core.common.Pair; import mineplex.core.common.block.BlockData; import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilMath; @@ -82,8 +83,8 @@ public class DragonEscape extends SoloGame { return HANDLER_LIST; } - - public PlayerFinishEvent(Player who) + + PlayerFinishEvent(Player who) { super(who); } @@ -95,46 +96,43 @@ public class DragonEscape extends SoloGame } } - private ArrayList _ranks = new ArrayList(); - - private NautHashMap _warpTime = new NautHashMap(); + private static final String[] DESCRIPTION = + { + C.cYellowB + "Douglas the Dragon" + C.Reset + " is after you!", + C.cRedB + "RUN!!!!!!!!!!", + C.cYellow + "Last Player" + C.Reset + " alive wins!" + }; + + private final List _ranks = new ArrayList<>(); + private final Map _warpTime = new HashMap<>(); private Location _dragon; - private ArrayList _waypoints; + private List _waypoints; private DragonEscapeData _dragonData; - private Player _winner = null; - private double _speedMult = 1; - - private HashMap _tunneled = new HashMap(); - + private final Map _tunneled = new HashMap<>(); + private final Map _safeLocation = new HashMap<>(); + private long _started; private long _ended; - public DragonEscape(ArcadeManager manager) + public DragonEscape(ArcadeManager manager) { - super(manager, GameType.DragonEscape, + super(manager, GameType.DragonEscape, new Kit[] + { + new KitLeaper(manager), + new KitDisruptor(manager), + new KitWarper(manager), + new KitDigger(manager), + }, DESCRIPTION); - new Kit[] - { - new KitLeaper(manager), - new KitDisruptor(manager), - new KitWarper(manager), - new KitDigger(manager), - }, - - new String[] - { - "Douglas the Dragon is after you!", - "RUN!!!!!!!!!!", - "Last player alive wins!" - }); - - this.DamagePvP = false; - this.HungerSet = 20; - this.BlockPlace = true; + StrictAntiHack = true; + DamagePvP = false; + HungerSet = 20; + BlockPlace = true; + AllowParticles = false; registerStatTrackers( new ParalympicsStatTracker(this), @@ -147,7 +145,7 @@ public class DragonEscape extends SoloGame BlankLine, new ChatStatData("kit", "Kit", true) ); - + registerQuestTrackers(new DragonEscapeWinQuestTracker(this)); new CompassModule() @@ -155,21 +153,19 @@ public class DragonEscape extends SoloGame .setGiveCompassToSpecs(true) .setGiveCompassToAlive(false) .register(this); - - StrictAntiHack = true; } @Override - public void ParseData() + public void ParseData() { _dragon = WorldData.GetDataLocs("RED").get(0); - _waypoints = new ArrayList(); + _waypoints = new ArrayList<>(); //Order Waypoints Location last = _dragon; while (!WorldData.GetDataLocs("BLACK").isEmpty()) - { + { Location best = null; double bestDist = 0; @@ -184,7 +180,7 @@ public class DragonEscape extends SoloGame bestDist = dist; } } - + //Ignore Close if (bestDist < 3 && WorldData.GetDataLocs("BLACK").size() > 1) { @@ -195,19 +191,19 @@ public class DragonEscape extends SoloGame _waypoints.add(best); WorldData.GetDataLocs("BLACK").remove(best); - best.subtract(new Vector(0,1,0)); + best.subtract(new Vector(0, 1, 0)); last = best; } - + if (!WorldData.GetDataLocs("GREEN").isEmpty()) - _speedMult = WorldData.GetDataLocs("GREEN").get(0).getX()/100d; - + _speedMult = WorldData.GetDataLocs("GREEN").get(0).getX() / 100d; + if (WorldData.MapName.contains("Hell")) - this.WorldTimeSet = 16000; - + WorldTimeSet = 16000; + if (WorldData.MapName.contains("Pirate")) - this.WorldWaterDamage = 2; + WorldWaterDamage = 2; } @Override @@ -216,9 +212,13 @@ public class DragonEscape extends SoloGame if (GetState().ordinal() >= GameState.End.ordinal()) { if (_winner == null) + { return Collections.emptyList(); + } + return Collections.singletonList(_winner); } + return null; } @@ -227,54 +227,54 @@ public class DragonEscape extends SoloGame { if (event.GetState() != GameState.Prepare) return; - + for (Team team : GetScoreboard().getScoreboard().getTeams()) team.setCanSeeFriendlyInvisibles(true); - - this.CreatureAllowOverride = true; + + CreatureAllowOverride = true; EnderDragon dragon = _dragon.getWorld().spawn(_dragon, EnderDragon.class); - this.CreatureAllowOverride = false; + CreatureAllowOverride = false; dragon.setCustomName(ChatColor.YELLOW + C.Bold + "Douglas the Dragon"); - _dragonData = new DragonEscapeData(this, dragon, _waypoints.get(0)); - } - - @EventHandler - public void Invisibility(PlayerKitGiveEvent event) - { - event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, false, false)); + _dragonData = new DragonEscapeData(this, dragon, _waypoints.get(0)); } - @EventHandler + @EventHandler + public void invisibility(PlayerKitGiveEvent event) + { + event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0, false, false)); + } + + @EventHandler public void MoveDragon(UpdateEvent event) - { + { if (event.getType() != UpdateType.TICK) return; if (_dragonData == null) return; - - _dragonData.Target = _waypoints.get(Math.min(_waypoints.size()-1, (GetWaypointIndex(_dragonData.Location) + 1))); + + _dragonData.Target = _waypoints.get(Math.min(_waypoints.size() - 1, (GetWaypointIndex(_dragonData.Location) + 1))); _dragonData.Move(); - + Set blocks = UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(); - + Iterator blockIterator = blocks.iterator(); while (blockIterator.hasNext()) { Block block = blockIterator.next(); - + if (block.isLiquid()) blockIterator.remove(); - + else if (block.getRelative(BlockFace.UP).isLiquid()) blockIterator.remove(); else if (WorldData.MapName.contains("Hell") && block.getY() < 30) blockIterator.remove(); - + else if (WorldData.MapName.contains("Pirate") && (block.getY() < 6)) blockIterator.remove(); } @@ -287,11 +287,11 @@ public class DragonEscape extends SoloGame { if (event.getType() != UpdateType.FAST) return; - + if (!IsLive()) return; - if (_dragonData == null) + if (_dragonData == null) return; double dragonScore = GetScore(_dragonData.Dragon); @@ -307,11 +307,6 @@ public class DragonEscape extends SoloGame player.damage(50); } } - - public ArrayList GetScores() - { - return _ranks; - } public boolean SetScore(Player player, double playerScore) { @@ -321,15 +316,15 @@ public class DragonEscape extends SoloGame if (score.Player.equals(player)) { //debug - int preNode = (int)(score.Score/10000); - int postNode = (int)(playerScore/10000); + int preNode = (int) (score.Score / 10000); + int postNode = (int) (playerScore / 10000); //Backwards if (preNode - postNode >= 3) { return false; } - + //Shortcut if (postNode - preNode >= 3) { @@ -338,17 +333,17 @@ public class DragonEscape extends SoloGame score.Player.damage(500); UtilPlayer.message(player, F.main("Game", "You were killed for trying to cheat!")); return false; - } + } } //Finish if (GetWaypointIndex(player.getLocation()) == _waypoints.size() - 1) { //Only if NEAR end. - if (UtilMath.offset(player.getLocation(), _waypoints.get(_waypoints.size()-1)) < 3) + if (UtilMath.offset(player.getLocation(), _waypoints.get(_waypoints.size() - 1)) < 3) { _winner = player; - this.SetCustomWinLine(player.getName() + " reached the end of the course!"); + SetCustomWinLine(player.getName() + " reached the end of the course!"); Bukkit.getPluginManager().callEvent(new PlayerFinishEvent(player)); @@ -370,9 +365,9 @@ public class DragonEscape extends SoloGame { int index = GetWaypointIndex(ent.getLocation()); - double score = 10000 * index; + double score = 10000 * index; - score -= UtilMath.offset(ent.getLocation(), _waypoints.get(Math.min(_waypoints.size()-1, index+1))); + score -= UtilMath.offset(ent.getLocation(), _waypoints.get(Math.min(_waypoints.size() - 1, index + 1))); return score; } @@ -382,7 +377,7 @@ public class DragonEscape extends SoloGame int best = -1; double bestDist = 0; - for (int i=0 ; i<_waypoints.size() ; i++) + for (int i = 0; i < _waypoints.size(); i++) { Location waypoint = _waypoints.get(i); @@ -398,36 +393,33 @@ public class DragonEscape extends SoloGame return best; } - private void SortScores() + private void SortScores() { - for (int i=0 ; i<_ranks.size() ; i++) + for (int i = 0; i < _ranks.size(); i++) { - for (int j=_ranks.size()-1 ; j>0 ; j--) + for (int j = _ranks.size() - 1; j > 0; j--) { - if (_ranks.get(j).Score > _ranks.get(j-1).Score) + if (_ranks.get(j).Score > _ranks.get(j - 1).Score) { DragonScore temp = _ranks.get(j); - _ranks.set(j, _ranks.get(j-1)); - _ranks.set(j-1, temp); + _ranks.set(j, _ranks.get(j - 1)); + _ranks.set(j - 1, temp); } } } } - - @Override @EventHandler public void ScoreboardUpdate(UpdateEvent event) { if (event.getType() != UpdateType.FAST) + { return; + } SortScores(); - - //Wipe Last - Scoreboard.reset(); - + Scoreboard.writeNewLine(); AtomicInteger index = new AtomicInteger(0); @@ -448,26 +440,28 @@ public class DragonEscape extends SoloGame { if (SpectatorSpawn == null) { - SpectatorSpawn = new Location(this.WorldData.World, 0,0,0); + SpectatorSpawn = new Location(WorldData.World, 0, 0, 0); } - Vector vec = new Vector(0,0,0); + Vector vec = new Vector(0, 0, 0); double count = 0; for (Player player : GetPlayers(true)) - { + { count++; vec.add(player.getLocation().toVector()); } if (count == 0) + { count++; + } - vec.multiply(1d/count); + vec.multiply(1d / count); - SpectatorSpawn.setX(vec.getX()); + SpectatorSpawn.setX(vec.getX() + 0.5); SpectatorSpawn.setY(vec.getY() + 10); - SpectatorSpawn.setZ(vec.getZ()); + SpectatorSpawn.setZ(vec.getZ() + 0.5); return SpectatorSpawn; } @@ -476,22 +470,29 @@ public class DragonEscape extends SoloGame public void EndCheck() { if (!IsLive()) + { return; + } - if (GetPlayers(true).size() <= 0 || _winner != null) - { + if (GetPlayers(true).isEmpty() || _winner != null) + { SortScores(); - ArrayList places = new ArrayList(); + List places = new ArrayList<>(); + for (DragonScore score : _ranks) + { places.add(score.Player); - + } + //Announce AnnounceEnd(places); //Gems if (_winner != null) + { AddGems(_winner, 10, "Course Complete", false, false); + } if (places.size() >= 1) { @@ -500,52 +501,59 @@ public class DragonEscape extends SoloGame } if (places.size() >= 2) + { AddGems(places.get(1), 15, "2nd Place", false, false); + } if (places.size() >= 3) + { AddGems(places.get(2), 10, "3rd Place", false, false); + } for (Player player : GetPlayers(false)) + { if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } + } - //End + _safeLocation.clear(); SetState(GameState.End); - } } - + public double GetSpeedMult() { return _speedMult; } - + @EventHandler public void Warp(PlayerInteractEvent event) { - if (!IsLive()) + if (event.getAction() != Action.PHYSICAL || IsLive()) + { return; - - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK && - event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_AIR) - return; - + } + Player player = event.getPlayer(); - - if (!UtilInv.IsItem(player.getItemInHand(), Material.ENDER_PEARL, (byte)0)) + + if (!UtilInv.IsItem(player.getItemInHand(), Material.ENDER_PEARL, (byte) 0)) + { return; - + } + event.setCancelled(true); - + SortScores(); - + Player target = null; boolean self = false; - - for (int i=_ranks.size()-1 ; i>=0 ; i--) + + for (int i = _ranks.size() - 1; i >= 0; i--) { DragonScore score = _ranks.get(i); - + if (score.Player.equals(player)) { self = true; @@ -559,29 +567,28 @@ public class DragonEscape extends SoloGame } } } - + if (target != null) { - UtilInv.remove(player, Material.ENDER_PEARL, (byte)0, 1); + UtilInv.remove(player, Material.ENDER_PEARL, (byte) 0, 1); UtilInv.Update(player); - + //Firework UtilFirework.playFirework(player.getEyeLocation(), Type.BALL, Color.BLACK, false, false); player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); - + //Teleport - player.teleport(target.getLocation().add(0, 0.5, 0)); + player.teleport(_safeLocation.getOrDefault(target, target.getLocation()).add(0, 0.5, 0)); UtilAction.zeroVelocity(player); - + //Record _warpTime.put(player, System.currentTimeMillis()); - + //Inform UtilPlayer.message(player, F.main("Game", "You warped to " + F.name(target.getName()) + "!")); - + //Effect player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 1f, 1f); - //Firework UtilFirework.playFirework(player.getEyeLocation(), Type.BALL, Color.BLACK, false, false); @@ -592,18 +599,18 @@ public class DragonEscape extends SoloGame UtilPlayer.message(player, F.main("Game", "There is no one infront of you!")); } } - + @EventHandler public void Tunneler(BlockDamageEvent event) { Player player = event.getPlayer(); - + if (!IsAlive(player)) return; - + if (!player.getInventory().contains(Material.DIAMOND_PICKAXE)) return; - + if (!UtilTime.elapsed(GetStateTime(), 10000)) { UtilPlayer.message(player, F.main("Game", "You cannot dig for " + F.elem(UtilTime.MakeStr(10000 - (System.currentTimeMillis() - GetStateTime())) + "."))); @@ -613,79 +620,89 @@ public class DragonEscape extends SoloGame for (Player other : GetPlayers(true)) { if (player.equals(other)) + { continue; - - if (UtilMath.offset(event.getBlock().getLocation().add(0.5, 0.5, 0.5), other.getLocation()) < 1.5 || - UtilMath.offset(event.getBlock().getLocation().add(0.5, 1, 0.5), other.getLocation()) < 1.5) + } + + if (UtilMath.offset(event.getBlock().getLocation().add(0.5, 0.5, 0.5), other.getLocation()) < 1.5 || UtilMath.offset(event.getBlock().getLocation().add(0.5, 1, 0.5), other.getLocation()) < 1.5) { UtilPlayer.message(player, F.main("Game", "You cannot dig near other players.")); return; } } - + if (!Recharge.Instance.use(player, "Tunneler", 100, false, false)) return; - + event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, event.getBlock().getType()); - + player.getInventory().addItem(new ItemStack(event.getBlock().getType())); - + _tunneled.put(new BlockData(event.getBlock()), player); - + Manager.GetBlockRestore().add(event.getBlock(), 0, (byte) 0, 2400); - UtilInv.remove(player, Material.DIAMOND_PICKAXE, (byte)0, 1); + UtilInv.remove(player, Material.DIAMOND_PICKAXE, (byte) 0, 1); } - + @EventHandler(priority = EventPriority.HIGHEST) public void Tunneler(BlockPlaceEvent event) { if (event.isCancelled()) return; - + Manager.GetBlockRestore().add(event.getBlock(), event.getPlayer().getItemInHand().getType().getId(), event.getPlayer().getItemInHand().getData().getData(), event.getBlockReplacedState().getTypeId(), event.getBlockReplacedState().getRawData(), 2400); } - + @EventHandler public void TunnelerUpdate(UpdateEvent event) { if (event.getType() != UpdateType.TICK) + { return; - + } + Iterator tunnelIterator = _tunneled.keySet().iterator(); - + while (tunnelIterator.hasNext()) { BlockData data = tunnelIterator.next(); - + if (data.Block.getType() != Material.AIR || UtilTime.elapsed(data.Time, 2400)) + { tunnelIterator.remove(); - + } else + { for (Player other : UtilServer.getPlayers()) + { if (!other.equals(_tunneled.get(data))) + { other.sendBlockChange(data.Block.getLocation(), data.Material, data.Data); + } + } + } } } - + @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) + public void onPlayerInteract(PlayerInteractEvent event) { if (!IsLive()) + { return; + } - if (event.getClickedBlock() == null) - return; + Block block = event.getClickedBlock(); - if(event.getClickedBlock().getType() != Material.TRAP_DOOR) - return; - - // Stops players using trap doors in game. - event.setCancelled(true); + if (UtilBlock.usable(block)) + { + event.setCancelled(true); + } } - + @EventHandler public void setTimes(GameStateChangeEvent event) { @@ -698,13 +715,15 @@ public class DragonEscape extends SoloGame _ended = System.currentTimeMillis(); } } - + @EventHandler public void updateTimer(UpdateEvent event) { if (event.getType() != UpdateType.FASTEST) + { return; - + } + if (GetState() == GameState.Prepare) { UtilTextTop.display(F.game("Game time: ") + F.time("0.0 Seconds"), UtilServer.getPlayers()); @@ -712,19 +731,37 @@ public class DragonEscape extends SoloGame else if (GetState() == GameState.Live) { if (_started == 0) + { return; - + } + UtilTextTop.display(F.game("Game time: ") + F.time(UtilTime.convertString(System.currentTimeMillis() - _started, 6, TimeUnit.SECONDS)), UtilServer.getPlayers()); } else if (GetState() == GameState.End) { - if (_started == 0) - return; - - if (_ended == 0) + if (_started == 0 || _ended == 0) + { return; + } UtilTextBottom.display(F.game("Game time: ") + F.time(UtilTime.convertString(_ended - _started, 6, TimeUnit.SECONDS)), UtilServer.getPlayers()); } } + + @EventHandler + public void updateSafe(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER || !InProgress()) + { + return; + } + + for (Player player : GetPlayers(true)) + { + if (UtilEnt.isGrounded(player)) + { + _safeLocation.put(player, player.getLocation()); + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java deleted file mode 100644 index ccd49cdb6..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeams.java +++ /dev/null @@ -1,571 +0,0 @@ -package nautilus.game.arcade.game.games.dragonescape; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Set; - -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.FireworkEffect.Type; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.Vector; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilFirework; -import mineplex.core.common.util.UtilInv; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.GameType; -import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; -import nautilus.game.arcade.game.GameTeam; -import nautilus.game.arcade.game.TeamGame; -import nautilus.game.arcade.game.games.dragonescape.kits.*; -import nautilus.game.arcade.game.modules.TeamArmorModule; -import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.managers.chat.ChatStatData; - -public class DragonEscapeTeams extends TeamGame -{ - private ArrayList _ranks = new ArrayList(); - private ArrayList _lastScoreboard = new ArrayList(); - - private NautHashMap _warpTime = new NautHashMap(); - - private Location _dragon; - private ArrayList _waypoints; - - private HashMap _waypointScore = new HashMap(); - - private DragonEscapeTeamsData _dragonData; - - private double _speedMult = 1; - - public DragonEscapeTeams(ArcadeManager manager) - { - super(manager, GameType.DragonEscapeTeams, - - new Kit[] - { - new KitLeaper(manager), - new KitWarper(manager), - new KitDigger(manager), - }, - - new String[] - { - "Douglas the Dragon is after you!", - "RUN!!!!!!!!!!", - "Last player alive wins!" - }); - - this.DamagePvP = false; - this.HungerSet = 20; - - registerChatStats( - Deaths, - DamageTaken, - BlankLine, - new ChatStatData("kit", "Kit", true) - ); - new TeamArmorModule() - .giveHotbarItem() - .register(this); - } - - @Override - public void ParseData() - { - _dragon = WorldData.GetDataLocs("RED").get(0); - _waypoints = new ArrayList(); - - //Order Waypoints - Location last = _dragon; - - while (!WorldData.GetDataLocs("BLACK").isEmpty()) - { - Location best = null; - double bestDist = 0; - - //Get Best - for (Location loc : WorldData.GetDataLocs("BLACK")) - { - double dist = UtilMath.offset(loc, last); - - if (best == null || dist < bestDist) - { - best = loc; - bestDist = dist; - } - } - - //Ignore Close - if (bestDist < 3 && WorldData.GetDataLocs("BLACK").size() > 1) - { - System.out.println("Ignoring Node"); - WorldData.GetDataLocs("BLACK").remove(best); - continue; - } - - _waypoints.add(best); - WorldData.GetDataLocs("BLACK").remove(best); - best.subtract(new Vector(0,1,0)); - - last = best; - } - - //Score Waypoints - double dist = 0; - Location lastLoc = null; - for (int i=0 ; i<_waypoints.size() ; i++) - { - Location newLoc = _waypoints.get(i); - - //First - if (lastLoc == null) - { - _waypointScore.put(newLoc, 0d); - lastLoc = newLoc; - continue; - } - - dist += UtilMath.offset(lastLoc, newLoc); - _waypointScore.put(newLoc, dist); - lastLoc = newLoc; - } - - if (!WorldData.GetDataLocs("GREEN").isEmpty()) - _speedMult = WorldData.GetDataLocs("GREEN").get(0).getX()/100d; - - if (WorldData.MapName.contains("Hell")) - this.WorldTimeSet = 16000; - } - - @EventHandler - public void PlayerTeleport(PlayerPrepareTeleportEvent event) - { - Manager.GetCondition().Factory().Invisible(GetName(), event.GetPlayer(), event.GetPlayer(), 16, 1, false, false, false); - } - - @EventHandler - public void SpawnDragon(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Prepare) - return; - - this.CreatureAllowOverride = true; - EnderDragon dragon = _dragon.getWorld().spawn(_dragon, EnderDragon.class); - this.CreatureAllowOverride = false; - - dragon.setCustomName(ChatColor.YELLOW + C.Bold + "Douglas the Dragon"); - - _dragonData = new DragonEscapeTeamsData(this, dragon, _waypoints.get(0)); - } - - @EventHandler - public void MoveDragon(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - if (_dragonData == null) - return; - - _dragonData.Target = _waypoints.get(Math.min(_waypoints.size()-1, (GetWaypointIndex(_dragonData.Location) + 1))); - - _dragonData.Move(); - - Set blocks = UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(); - - Iterator blockIterator = blocks.iterator(); - while (blockIterator.hasNext()) - { - Block block = blockIterator.next(); - - if (block.isLiquid()) - blockIterator.remove(); - - else if (block.getRelative(BlockFace.UP).isLiquid()) - blockIterator.remove(); - - else if (WorldData.MapName.contains("Hell") && block.getY() < 30) - blockIterator.remove(); - - else if (WorldData.MapName.contains("Pirate") && (block.getY() < 6)) - blockIterator.remove(); - } - - Manager.GetExplosion().BlockExplosion(blocks, _dragonData.Location, false); - } - - @EventHandler - public void UpdateScores(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (!IsLive()) - return; - - if (_dragonData == null) - return; - - double dragonScore = GetScore(_dragonData.Dragon); - - for (Player player : GetPlayers(true)) - { - double playerScore = GetScore(player); - - SetScore(player, playerScore); - - if (dragonScore > playerScore) - player.damage(50); - } - } - - public ArrayList GetScores() - { - return _ranks; - } - - public double GetPlayerScore(Player player) - { - for (DragonScore score : _ranks) - { - if (score.Player.equals(player)) - return Math.max(0, score.Score); - } - - return 0; - } - - public void SetScore(Player player, double playerScore) - { - //Rank - for (DragonScore score : _ranks) - { - if (score.Player.equals(player)) - { - //debug - int preNode = (int)(score.Score/10000); - int postNode = (int)(playerScore/10000); - - //Backwards - if (preNode - postNode >= 3) - { - return; - } - - //Shortcut - if (postNode - preNode >= 3) - { - if (!_warpTime.containsKey(score.Player) || UtilTime.elapsed(_warpTime.get(score.Player), 1000)) - { - score.Player.damage(500); - UtilPlayer.message(player, F.main("Game", "You were killed for trying to cheat!")); - return; - } - } - - if (playerScore > score.Score) - score.Score = playerScore; - - return; - } - } - - _ranks.add(new DragonScore(player, playerScore)); - - return; - } - - public double GetScore(Entity ent) - { - int index = GetWaypointIndex(ent.getLocation()); - - //Not at last waypoint - if (index < _waypoints.size() - 1) - { - double score = _waypointScore.get(_waypoints.get(index + 1)); - score -= UtilMath.offset(ent.getLocation(), _waypoints.get(index+1)); - return score; - } - - //Finished, max score - return _waypointScore.get(_waypoints.get(index)); - - } - - public int GetWaypointIndex(Location loc) - { - int best = -1; - double bestDist = 0; - - for (int i=0 ; i<_waypoints.size() ; i++) - { - Location waypoint = _waypoints.get(i); - - double dist = UtilMath.offset(waypoint, loc); - - if (best == -1 || dist < bestDist) - { - best = i; - bestDist = dist; - } - } - - return best; - } - - public Location GetWaypoint(Location loc) - { - Location best = null; - double bestDist = 0; - - for (int i=0 ; i<_waypoints.size() ; i++) - { - Location waypoint = _waypoints.get(i); - - double dist = UtilMath.offset(waypoint, loc); - - if (best == null || dist < bestDist) - { - best = waypoint; - bestDist = dist; - } - } - - return best; - } - - public HashMap GetTeamScores() - { - HashMap scores = new HashMap(); - - for (GameTeam team : GetTeamList()) - { - double score = 0; - for (Player player : team.GetPlayers(false)) - score += GetPlayerScore(player); - - scores.put(team, score); - } - - return scores; - } - - private void SortScores() - { - for (int i=0 ; i<_ranks.size() ; i++) - { - for (int j=_ranks.size()-1 ; j>0 ; j--) - { - if (_ranks.get(j).Score > _ranks.get(j-1).Score) - { - DragonScore temp = _ranks.get(j); - _ranks.set(j, _ranks.get(j-1)); - _ranks.set(j-1, temp); - } - } - } - } - - @Override - @EventHandler - public void ScoreboardUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - //Wipe Last - Scoreboard.reset(); - - HashMap scores = GetTeamScores(); - for (GameTeam team : scores.keySet()) - { - //Time - int score = scores.get(team).intValue(); - - Scoreboard.writeNewLine(); - Scoreboard.write(team.GetColor() + team.GetName()); - Scoreboard.write(score + "" + team.GetColor() + " Score"); - } - - Scoreboard.draw(); - } - - @Override - public Location GetSpectatorLocation() - { - if (SpectatorSpawn == null) - { - SpectatorSpawn = new Location(this.WorldData.World, 0,0,0); - } - - Vector vec = new Vector(0,0,0); - double count = 0; - - for (Player player : GetPlayers(true)) - { - count++; - vec.add(player.getLocation().toVector()); - } - - if (count == 0) - count++; - - vec.multiply(1d/count); - - SpectatorSpawn.setX(vec.getX()); - SpectatorSpawn.setY(vec.getY() + 10); - SpectatorSpawn.setZ(vec.getZ()); - - return SpectatorSpawn; - } - - @Override - public void EndCheck() - { - if (!IsLive()) - return; - - ArrayList teamsAlive = new ArrayList(); - - for (GameTeam team : this.GetTeamList()) - if (team.GetPlayers(true).size() > 0) - teamsAlive.add(team); - - if (teamsAlive.size() <= 0) - { - //Get Winner - GameTeam winner = null; - double bestScore = 0; - - HashMap scores = GetTeamScores(); - for (GameTeam team : scores.keySet()) - { - if (winner == null || scores.get(team) > bestScore) - { - winner = team; - bestScore = scores.get(team); - } - } - - //Announce - if (winner != null) - { - AnnounceEnd(winner); - } - - for (GameTeam team : GetTeamList()) - { - if (WinnerTeam != null && team.equals(WinnerTeam)) - { - for (Player player : team.GetPlayers(false)) - AddGems(player, 10, "Winning Team", false, false); - } - - for (Player player : team.GetPlayers(false)) - if (player.isOnline()) - AddGems(player, 10, "Participation", false, false); - } - - //End - SetState(GameState.End); - } - } - - public double GetSpeedMult() - { - return _speedMult; - } - - @EventHandler - public void Warp(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK && - event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_AIR) - return; - - Player player = event.getPlayer(); - - if (!UtilInv.IsItem(player.getItemInHand(), Material.ENDER_PEARL, (byte)0)) - return; - - event.setCancelled(true); - - SortScores(); - - Player target = null; - boolean self = false; - - for (int i=_ranks.size()-1 ; i>=0 ; i--) - { - DragonScore score = _ranks.get(i); - - if (score.Player.equals(player)) - { - self = true; - } - else if (self) - { - if (IsAlive(score.Player)) - { - target = score.Player; - break; - } - } - } - - if (target != null) - { - UtilInv.remove(player, Material.ENDER_PEARL, (byte)0, 1); - UtilInv.Update(player); - - //Firework - UtilFirework.playFirework(player.getEyeLocation(), Type.BALL, Color.BLACK, false, false); - player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); - - //Teleport - player.teleport(target.getLocation().add(0, 0.5, 0)); - UtilAction.zeroVelocity(player); - - //Record - _warpTime.put(player, System.currentTimeMillis()); - - //Inform - UtilPlayer.message(player, F.main("Game", "You warped to " + F.name(target.getName()) + "!")); - - //Effect - player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 1f, 1f); - - - //Firework - UtilFirework.playFirework(player.getEyeLocation(), Type.BALL, Color.BLACK, false, false); - player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); - } - else - { - UtilPlayer.message(player, F.main("Game", "There is no one infront of you!")); - } - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeamsData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeamsData.java deleted file mode 100644 index 30f64ea16..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscapeTeamsData.java +++ /dev/null @@ -1,91 +0,0 @@ -package nautilus.game.arcade.game.games.dragonescape; - -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; - -import org.bukkit.Location; -import org.bukkit.entity.EnderDragon; -import org.bukkit.util.Vector; - -public class DragonEscapeTeamsData -{ - public DragonEscapeTeams Host; - - public EnderDragon Dragon; - - public Location Target = null; - public Location Location = null; - - public float Pitch = 0; - public Vector Velocity = new Vector(0,0,0); - - public DragonEscapeTeamsData(DragonEscapeTeams host, EnderDragon dragon, Location target) - { - Host = host; - - Dragon = dragon; - UtilEnt.ghost(Dragon, true, false); - - Location temp = dragon.getLocation(); - temp.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(dragon.getLocation(), target))); - dragon.teleport(temp); - - Velocity = dragon.getLocation().getDirection().setY(0).normalize(); - Pitch = UtilAlg.GetPitch(dragon.getLocation().getDirection()); - - Location = dragon.getLocation(); - } - - public void Move() - { - Turn(); - - //Speed - double speed = 0.20; - - //speed += (System.currentTimeMillis() - Host.GetStateTime())/1000d * 0.001; - - //Speed Distance Boost - /* - if (!Host.GetScores().isEmpty()) - { - double score = Host.GetScore(Dragon); - double best = Host.GetScores().get(0).Score; - - double lead = (best-score)/10000d; - - speed += lead * 0.0025; - } - */ - - speed = speed * Host.GetSpeedMult(); - - Location.add(Velocity.clone().multiply(speed)); - Location.add(0, -Pitch, 0); - - Location.setPitch(-1 * Pitch); - Location.setYaw(180 + UtilAlg.GetYaw(Velocity)); - - Dragon.teleport(Location); - } - - private void Turn() - { - //Pitch - float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target)); - if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05); - if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05); - if (Pitch > 0.5) Pitch = 0.5f; - if (Pitch < -0.5) Pitch = -0.5f; - - //Flat - Vector desired = UtilAlg.getTrajectory2d(Location, Target); - desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ()))); - desired.multiply(0.2); - - Velocity.add(desired); - - //Speed - UtilAlg.Normalize(Velocity); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java index bb7d8cfa7..34e1098d7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitArmorer.java @@ -23,7 +23,7 @@ public class KitArmorer extends Kit private static final Perk[] PERKS = { - new PerkDoubleJump("Double Jump", 1.2, 1.2, false), + new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkDummy("Armorer", Collections.singletonList(C.cGray + "Receive " + C.cYellow + "Full Gold Armor").toArray(new String[1])), new PerkCraftman(), }; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java index 52558f0ad..c502de5c5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/lobbers/kits/KitPitcher.java @@ -27,7 +27,7 @@ public class KitPitcher extends Kit private static final Perk[] PERKS = { - new PerkDoubleJump("Double Jump", 1.2, 1.2, false), + new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkCraftman() }; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/ParalympicsStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/ParalympicsStatTracker.java index 1ccd38060..04445f836 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/ParalympicsStatTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/ParalympicsStatTracker.java @@ -11,10 +11,12 @@ import org.bukkit.event.EventPriority; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.kit.perks.event.PerkLeapEvent; public class ParalympicsStatTracker extends StatTracker { + private final Set _hasLeaped = new HashSet<>(); public ParalympicsStatTracker(Game game) @@ -22,29 +24,37 @@ public class ParalympicsStatTracker extends StatTracker super(game); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onPerkLeap(PerkLeapEvent event) { - if (getGame().GetState() != Game.GameState.Live) + if (!getGame().IsLive()) + { return; + } _hasLeaped.add(event.GetPlayer().getUniqueId()); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onGameStateChange(GameStateChangeEvent event) { - if (event.GetState() == Game.GameState.End) + if (event.GetState() == GameState.End) { - List winners = getGame().getWinners(); + return; + } - if (winners != null) + List winners = getGame().getWinners(); + + if (winners == null) + { + return; + } + + for (Player winner : winners) + { + if (!_hasLeaped.contains(winner.getUniqueId())) { - for (Player winner : winners) - { - if (!_hasLeaped.contains(winner.getUniqueId())) - addStat(winner, "Paralympics", 1, true, false); - } + addStat(winner, "Paralympics", 1, true, false); } } }