From 833ebd310e460ff837a6dc593cc5194f46149c3d Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 16 May 2017 18:02:34 +0100 Subject: [PATCH] Reorganise of code --- .../game/arcade/game/games/moba/Moba.java | 355 ++++-------------- .../arcade/game/games/moba/MobaPlayer.java | 44 ++- .../game/arcade/game/games/moba/MobaRole.java | 41 +- .../games/moba/boss/wither/WitherBoss.java | 2 + .../boss/wither/WitherSkullProjectile.java | 2 +- .../games/moba/general/TeamDamageManager.java | 76 ++++ .../game/games/moba/gold/GoldManager.java | 2 +- .../games/moba/kit/anath/SkillMeteor.java | 4 +- .../game/games/moba/kit/hp/HPManager.java | 57 +++ .../moba/{ => kit/hp}/MobaHPRegenEvent.java | 2 +- .../arcade/game/games/moba/minion/Minion.java | 6 + .../game/games/moba/minion/MinionManager.java | 17 + .../moba/prepare/PrepareInformation.java | 114 ++++++ .../games/moba/prepare/PrepareManager.java | 168 +++++++++ .../PrepareSelection.java} | 15 +- .../game/games/moba/shop/MobaItemEffect.java | 2 +- .../arcade/game/games/moba/shop/MobaShop.java | 12 +- .../games/moba/shop/MobaShopCategoryMenu.java | 2 +- .../moba/shop/effects/MobaHPRegenEffect.java | 2 +- .../shop/effects/MobaHitArrowAmmoEffect.java | 2 +- .../moba/shop/effects/MobaKillHealEffect.java | 3 - .../moba/shop/effects/MobaSpeedEffect.java | 2 - .../structure/point/CapturePointManager.java | 64 ++++ .../games/moba/structure/tower/Tower.java | 7 +- 24 files changed, 675 insertions(+), 326 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/general/TeamDamageManager.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/HPManager.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/{ => kit/hp}/MobaHPRegenEvent.java (93%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/Minion.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/MinionManager.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareInformation.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareManager.java rename Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/{kit/PregameSelection.java => prepare/PrepareSelection.java} (94%) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/point/CapturePointManager.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java index e5a3632f5..ad0a4624f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/Moba.java @@ -1,18 +1,10 @@ package nautilus.game.arcade.game.games.moba; import mineplex.core.common.Rank; -import mineplex.core.common.entity.ClientArmorStand; import mineplex.core.common.util.*; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; -import mineplex.minecraft.game.core.condition.Condition; -import mineplex.minecraft.game.core.condition.Condition.ConditionType; -import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; -import nautilus.game.arcade.events.GamePrepareCountdownCommence; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.DebugCommand; import nautilus.game.arcade.game.GameTeam; @@ -20,22 +12,26 @@ import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.moba.boss.BossManager; import nautilus.game.arcade.game.games.moba.boss.wither.WitherBoss; import nautilus.game.arcade.game.games.moba.fountain.MobaFountain; +import nautilus.game.arcade.game.games.moba.general.TeamDamageManager; import nautilus.game.arcade.game.games.moba.gold.GoldManager; -import nautilus.game.arcade.game.games.moba.kit.*; +import nautilus.game.arcade.game.games.moba.kit.HeroKit; +import nautilus.game.arcade.game.games.moba.kit.KitPlayer; import nautilus.game.arcade.game.games.moba.kit.anath.HeroAnath; import nautilus.game.arcade.game.games.moba.kit.bob.HeroBob; import nautilus.game.arcade.game.games.moba.kit.dana.HeroDana; import nautilus.game.arcade.game.games.moba.kit.devon.HeroDevon; import nautilus.game.arcade.game.games.moba.kit.hattori.HeroHattori; +import nautilus.game.arcade.game.games.moba.kit.hp.HPManager; +import nautilus.game.arcade.game.games.moba.minion.MinionManager; +import nautilus.game.arcade.game.games.moba.prepare.PrepareManager; +import nautilus.game.arcade.game.games.moba.prepare.PrepareSelection; import nautilus.game.arcade.game.games.moba.recall.Recall; import nautilus.game.arcade.game.games.moba.shop.MobaShop; -import nautilus.game.arcade.game.games.moba.structure.point.CapturePoint; -import nautilus.game.arcade.game.games.moba.structure.tower.Tower; +import nautilus.game.arcade.game.games.moba.structure.point.CapturePointManager; import nautilus.game.arcade.game.games.moba.structure.tower.TowerManager; import nautilus.game.arcade.game.modules.CustomScoreboardModule; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.scoreboard.GameScoreboard; import org.bukkit.GameMode; import org.bukkit.Location; @@ -45,11 +41,8 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityRegainHealthEvent; -import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.metadata.FixedMetadataValue; import java.util.*; import java.util.concurrent.TimeUnit; @@ -61,13 +54,9 @@ public class Moba extends TeamGame "..." }; private static final long PREPARE_TIME = TimeUnit.MINUTES.toMillis(1); - // Health per 5 seconds. - private static final double HP5 = 0.33; private final HeroKit[] _kits; - private final List _capturePoints = new ArrayList<>(3); - private final Set _playerData = new HashSet<>(); private final Set _listeners = new HashSet<>(); @@ -76,6 +65,7 @@ public class Moba extends TeamGame private final GoldManager _goldManager; private final BossManager _boss; private final TowerManager _tower; + private final CapturePointManager _capturePoint; public Moba(ArcadeManager manager) { @@ -98,30 +88,29 @@ public class Moba extends TeamGame HungerSet = 20; DamageFall = false; - Listener preGameSelection = new PregameSelection(this); - _listeners.add(preGameSelection); + // Instantiate managers - Listener recall = new Recall(this); - _listeners.add(recall); + // Global managers + _shop = registerManager(new MobaShop(this)); + _goldManager = registerManager(new GoldManager(this)); + registerManager(new HPManager(this)); + registerManager(new TeamDamageManager(this)); + registerManager(new MobaFountain(this)); + registerManager(new Recall(this)); - MobaShop shop = new MobaShop(this); - _shop = shop; - _listeners.add(shop); + // Pregame managers + registerManager(new PrepareManager(this)); + registerManager(new PrepareSelection(this)); - GoldManager goldManager = new GoldManager(this); - _goldManager = goldManager; - _listeners.add(goldManager); + // Bosses + _boss = registerManager(new BossManager(this)); - MobaFountain fountain = new MobaFountain(this); - _listeners.add(fountain); + // Structures + _tower = registerManager(new TowerManager(this)); + _capturePoint = registerManager(new CapturePointManager(this)); - BossManager boss = new BossManager(this); - _boss = boss; - _listeners.add(boss); - - TowerManager tower = new TowerManager(this); - _tower = tower; - _listeners.add(tower); + // Minions + //registerManager(new MinionManager(this)); new CompassModule() .setGiveCompass(true) @@ -169,20 +158,20 @@ public class Moba extends TeamGame GameState state = GetState(); GameTeam perspectiveTeam = GetTeam(perspective); GameTeam subjectTeam = GetTeam(subject); - MobaPlayer mobaPlayer = getData(subject); + MobaPlayer mobaPlayer = getMobaData(subject); String suffix; if (state == GameState.Prepare && !perspectiveTeam.equals(subjectTeam)) { suffix = "Unknown"; } - else if (mobaPlayer.Kit == null) + else if (mobaPlayer.getKit() == null) { suffix = "Selecting"; } else { - suffix = mobaPlayer.Kit.GetName(); + suffix = mobaPlayer.getKit().GetName(); } return C.cYellow + " " + suffix + C.Reset; @@ -217,22 +206,22 @@ public class Moba extends TeamGame }); } + private T registerManager(T listener) + { + _listeners.add(listener); + return listener; + } + @Override public void ParseData() { - Collection capturePoints = getLocationStartsWith("POINT").values(); - - for (Location location : capturePoints) - { - _capturePoints.add(new CapturePoint(this, location)); - } - + // Register all "Managers" _listeners.forEach(UtilServer::RegisterEvents); } private void writePrepare(Player player, GameScoreboard scoreboard) { - MobaPlayer mobaPlayer = getData(player); + MobaPlayer mobaPlayer = getMobaData(player); scoreboard.writeNewLine(); @@ -242,7 +231,7 @@ public class Moba extends TeamGame scoreboard.writeNewLine(); scoreboard.write(C.cYellowB + "Hero"); - scoreboard.write(mobaPlayer.Kit == null ? "Unselected " : mobaPlayer.Kit.GetName() + " (" + mobaPlayer.Role.getName() + ")"); + scoreboard.write(mobaPlayer.getKit() == null ? "Unselected " : mobaPlayer.getKit().GetName() + " (" + mobaPlayer.getRole().getName() + ")"); scoreboard.writeNewLine(); @@ -251,7 +240,7 @@ public class Moba extends TeamGame for (MobaPlayer otherMobaPlayer : _playerData) { - if (otherMobaPlayer.Kit != null) + if (otherMobaPlayer.getKit() != null) { kits++; } @@ -319,48 +308,6 @@ public class Moba extends TeamGame } } - @EventHandler - public void live(GameStateChangeEvent event) - { - if (event.GetState() != GameState.Live) - { - return; - } - - UtilTextBottom.display(C.cRedB + "!!! Battle !!!", UtilServer.getPlayers()); - - for (MobaPlayer mobaPlayer : _playerData) - { - Player player = mobaPlayer.Player; - HeroKit kit = mobaPlayer.Kit; - Perk perk = kit.GetPerks()[kit.GetPerks().length - 1]; - - // Put Ultimates on cooldown - if (perk instanceof HeroSkill) - { - ((HeroSkill) perk).useSkill(mobaPlayer.Player); - } - - // Teleport players to their respective spawns - GameTeam team = GetTeam(player); - MobaLane lane = mobaPlayer.Role.getLane(); - Location toTeleport = WorldData.GetCustomLocs("SPAWN " + team.GetName().toUpperCase() + " " + lane.toString()).get(0); - - // Face the location toward the first tower of that lane - Tower tower = _tower.getFirsrtTower(lane); - if (tower != null) - { - toTeleport.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(player.getLocation(), tower.getLocation()))); - } - else - { - toTeleport.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(player.getLocation(), GetSpectatorLocation()))); - } - - player.teleport(toTeleport); - } - } - @Override public void EndCheck() { @@ -428,95 +375,6 @@ public class Moba extends TeamGame _listeners.clear(); } - @EventHandler - public void update(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - { - return; - } - - for (CapturePoint point : _capturePoints) - { - point.update(); - } - } - - @EventHandler - public void updatePrepare(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC || GetState() != GameState.Prepare) - { - return; - } - - if (!UtilTime.elapsed(GetStateTime(), PREPARE_TIME)) - { - for (Player player : GetPlayers(true)) - { - Kit kit = GetKit(player); - - if (!(kit instanceof HeroKit)) - { - return; - } - } - } - - AnnounceGame(); - StartPrepareCountdown(); - - //Event - GamePrepareCountdownCommence countdownEvent = new GamePrepareCountdownCommence(this); - UtilServer.CallEvent(countdownEvent); - - // If players took too long, just give them a random free role and kit. - for (Player player : GetPlayers(true)) - { - Kit kit = GetKit(player); - - if (kit instanceof HeroKit) - { - continue; - } - - HeroKit heroKit = getFirstKit(player); - MobaPlayer mobaPlayer = getData(player); - - mobaPlayer.Role = heroKit.getRole(); - mobaPlayer.Kit = heroKit; - - SetKit(player, heroKit, true); - } - - PrepareTime = 0; - Manager.GetChat().Silence(0, false); - } - - @EventHandler - public void roleSelect(RoleSelectEvent event) - { - Player player = event.getPlayer(); - MobaRole role = event.getRole(); - ClientArmorStand stand = event.getStand(); - - if (stand.hasMetadata("owned")) - { - player.sendMessage(F.main("Game", "Another player has already chosen this role.")); - event.setCancelled(true); - return; - } - - // Store inside the stand that it is claimed by a player - stand.setMetadata("owned", new FixedMetadataValue(Manager.getPlugin(), true)); - - // Show that the kit is claimed. - stand.setCustomName(C.cGreenB + role.getName() + C.cGray + " - " + player.getName()); - - // Store the role of the player - getData(player).Role = role; - } - @Override public void SetKit(Player player, Kit kit, boolean announce) { @@ -524,7 +382,7 @@ public class Moba extends TeamGame if (kit instanceof HeroKit) { - getData(player).Kit = (HeroKit) kit; + getMobaData(player).setKit((HeroKit) kit); } } @@ -534,68 +392,16 @@ public class Moba extends TeamGame return DeathMessageType.Detailed; } - @EventHandler - public void preventTeamDamage(CustomDamageEvent event) - { - Player damagee = event.GetDamageePlayer(); - Player damager = event.GetDamagerPlayer(true); - - if (damagee == null || damager == null) - { - return; - } - - GameTeam damageeTeam = GetTeam(damagee); - GameTeam damagerTeam = GetTeam(damager); - - if (damageeTeam == null || damagerTeam == null) - { - return; - } - - if (damageeTeam.equals(damagerTeam)) - { - event.SetCancelled("Team Damage"); - } - } - - @EventHandler - public void preventTeamFire(ConditionApplyEvent event) - { - Condition condition = event.GetCondition(); - - if (condition.GetType() != ConditionType.BURNING) - { - return; - } - - if (condition.GetEnt() == null || condition.GetSource() == null) - { - return; - } - - if (!(condition.GetEnt() instanceof Player && condition.GetSource() instanceof Player)) - { - return; - } - - if (!GetTeam((Player) condition.GetEnt()).equals(GetTeam((Player) condition.GetSource()))) - { - return; - } - - event.setCancelled(true); - } - // Clear up memory @EventHandler public void playerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); - _playerData.removeIf(mobaPlayer -> mobaPlayer.Player.equals(player)); + _playerData.removeIf(mobaPlayer -> mobaPlayer.getPlayer().equals(player)); } + // Clean up arrows @EventHandler public void projectileHit(ProjectileHitEvent event) { @@ -605,41 +411,6 @@ public class Moba extends TeamGame } } - /* - HP Regeneration - */ - @EventHandler - public void regeneration(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC_05) - { - return; - } - - for (Player player : GetPlayers(true)) - { - if (UtilPlayer.isSpectator(player)) - { - continue; - } - - MobaHPRegenEvent regenEvent = new MobaHPRegenEvent(player, HP5); - UtilServer.CallEvent(regenEvent); - - player.setHealth(Math.min(player.getMaxHealth(), player.getHealth() + regenEvent.getHealth())); - } - } - - @EventHandler - public void preventHungerRegeneration(EntityRegainHealthEvent event) - { - if (event.getRegainReason() == RegainReason.SATIATED) - { - event.setCancelled(true); - } - } - - public Map getLocationStartsWith(String s) { Map map = new HashMap<>(); @@ -688,11 +459,16 @@ public class Moba extends TeamGame return kits; } - public MobaPlayer getData(Player player) + public Set getMobaData() + { + return _playerData; + } + + public MobaPlayer getMobaData(Player player) { for (MobaPlayer mobaPlayer : _playerData) { - if (mobaPlayer.Player.equals(player)) + if (mobaPlayer.getPlayer().equals(player)) { return mobaPlayer; } @@ -701,19 +477,19 @@ public class Moba extends TeamGame return null; } - private HeroKit getFirstKit(Player player) + public HeroKit getFirstKit(Player player) { - MobaPlayer mobaPlayer = getData(player); + MobaPlayer mobaPlayer = getMobaData(player); - if (mobaPlayer.Role == null) + if (mobaPlayer.getRole() == null) { MobaRole role = getRandomRole(player); return getFirstKit(role); } - else if (mobaPlayer.Kit == null) + else if (mobaPlayer.getKit() == null) { - return getFirstKit(mobaPlayer.Role); + return getFirstKit(mobaPlayer.getRole()); } return null; @@ -738,7 +514,7 @@ public class Moba extends TeamGame for (MobaPlayer mobaPlayer : getTeamData(GetTeam(player))) { - MobaRole role = mobaPlayer.Role; + MobaRole role = mobaPlayer.getRole(); if (role != null) { @@ -749,13 +525,13 @@ public class Moba extends TeamGame return UtilAlg.Random(Arrays.asList(MobaRole.values()), roles); } - public List getTeamData(GameTeam team) + private List getTeamData(GameTeam team) { List players = new ArrayList<>(); for (MobaPlayer mobaPlayer : _playerData) { - GameTeam otherTeam = GetTeam(mobaPlayer.Player); + GameTeam otherTeam = GetTeam(mobaPlayer.getPlayer()); if (team.equals(otherTeam)) { @@ -766,11 +542,6 @@ public class Moba extends TeamGame return players; } - public List getCapturePoints() - { - return _capturePoints; - } - public MobaShop getShop() { return _shop; @@ -780,4 +551,14 @@ public class Moba extends TeamGame { return _goldManager; } + + public TowerManager getTowerManager() + { + return _tower; + } + + public CapturePointManager getCapturePointManager() + { + return _capturePoint; + } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaPlayer.java index 82c06bf33..a085b8eaa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaPlayer.java @@ -6,12 +6,48 @@ import org.bukkit.entity.Player; public class MobaPlayer { - public final Player Player; - public MobaRole Role; - public HeroKit Kit; + private final Player _player; + private MobaRole _role; + private HeroKit _kit; + private int _gold; public MobaPlayer(Player player) { - Player = player; + _player = player; + } + + public Player getPlayer() + { + return _player; + } + + public void setRole(MobaRole role) + { + _role = role; + } + + public MobaRole getRole() + { + return _role; + } + + public void setKit(HeroKit kit) + { + _kit = kit; + } + + public HeroKit getKit() + { + return _kit; + } + + public void setGold(int gold) + { + _gold = gold; + } + + public int getGold() + { + return _gold; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaRole.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaRole.java index 29e746afd..a0c431980 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaRole.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaRole.java @@ -1,25 +1,51 @@ package nautilus.game.arcade.game.games.moba; +import mineplex.core.common.util.C; import org.bukkit.ChatColor; import org.bukkit.Color; public enum MobaRole { - ASSASSIN("Assassin", MobaLane.D, Color.BLUE, ChatColor.AQUA), - HUNTER("Hunter", MobaLane.A, Color.LIME, ChatColor.GREEN), - MAGE("Mage", MobaLane.B, Color.RED, ChatColor.RED), - WARRIOR("Warrior", MobaLane.C, Color.YELLOW, ChatColor.GOLD), + ASSASSIN("Assassin", new String[] + { + + "You are playing", + "the " + C.cAqua + "Assassin" + C.cWhite + " role this game", + + }, MobaLane.D, Color.BLUE, ChatColor.AQUA), + HUNTER("Hunter", new String[] + { + "You are playing", + "the " + C.cGreen + "Hunter" + C.cWhite + " role this game", + + }, MobaLane.A, Color.LIME, ChatColor.GREEN), + MAGE("Mage", new String[] + { + + "You are playing", + "the " + C.cRed + "Mage" + C.cWhite + " role this game", + + }, MobaLane.B, Color.RED, ChatColor.RED), + WARRIOR("Warrior", new String[] + { + + "You are playing", + "the " + C.cGold + "Warrior" + C.cWhite + " role this game", + + }, MobaLane.C, Color.YELLOW, ChatColor.GOLD), ; private final String _name; + private final String[] _description; private final MobaLane _lane; private final Color _color; private final ChatColor _chatColor; - MobaRole(String name, MobaLane lane, Color color, ChatColor chatColor) + MobaRole(String name, String[] description, MobaLane lane, Color color, ChatColor chatColor) { _name = name; + _description = description; _lane = lane; _color = color; _chatColor = chatColor; @@ -30,6 +56,11 @@ public enum MobaRole return _name; } + public String[] getDescription() + { + return _description; + } + public MobaLane getLane() { return _lane; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherBoss.java index bd54f0376..ca472d25f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherBoss.java @@ -147,6 +147,8 @@ public class WitherBoss extends MobaBoss { _entity.setHealth(_entity.getHealth() - SECOND_TOWER_HEALTH_REDUCTION); } + + updateDisplay(); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherSkullProjectile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherSkullProjectile.java index 753c06575..787bfe95f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherSkullProjectile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/boss/wither/WitherSkullProjectile.java @@ -36,7 +36,7 @@ public class WitherSkullProjectile implements IThrown WitherSkull skull = shooter.launchProjectile(WitherSkull.class); skull.setYield(0); - skull.setVelocity(skull.getVelocity().add(UtilAlg.getTrajectory(shooter, target)).normalize().multiply(2)); + skull.setVelocity(skull.getVelocity().add(UtilAlg.getTrajectory(shooter, target))); _manager.GetProjectile().AddThrow(skull, shooter, this, 2000, true, true, true, false, 0.5F); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/general/TeamDamageManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/general/TeamDamageManager.java new file mode 100644 index 000000000..78c6cb874 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/general/TeamDamageManager.java @@ -0,0 +1,76 @@ +package nautilus.game.arcade.game.games.moba.general; + +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.game.games.moba.Moba; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class TeamDamageManager implements Listener +{ + + private final Moba _host; + + public TeamDamageManager(Moba host) + { + _host = host; + } + + @EventHandler + public void preventTeamDamage(CustomDamageEvent event) + { + Player damagee = event.GetDamageePlayer(); + Player damager = event.GetDamagerPlayer(true); + + if (damagee == null || damager == null) + { + return; + } + + GameTeam damageeTeam = _host.GetTeam(damagee); + GameTeam damagerTeam = _host.GetTeam(damager); + + if (damageeTeam == null || damagerTeam == null) + { + return; + } + + if (damageeTeam.equals(damagerTeam)) + { + event.SetCancelled("Team Damage"); + } + } + + @EventHandler + public void preventTeamFire(ConditionApplyEvent event) + { + Condition condition = event.GetCondition(); + + if (condition.GetType() != ConditionType.BURNING) + { + return; + } + + if (condition.GetEnt() == null || condition.GetSource() == null) + { + return; + } + + if (!(condition.GetEnt() instanceof Player && condition.GetSource() instanceof Player)) + { + return; + } + + if (!_host.GetTeam((Player) condition.GetEnt()).equals(_host.GetTeam((Player) condition.GetSource()))) + { + return; + } + + event.setCancelled(true); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/gold/GoldManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/gold/GoldManager.java index 79edc6baa..e4fedc4a0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/gold/GoldManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/gold/GoldManager.java @@ -96,7 +96,7 @@ public class GoldManager implements Listener } // Capture points - for (CapturePoint point : _host.getCapturePoints()) + for (CapturePoint point : _host.getCapturePointManager().getCapturePoints()) { GameTeam owner = point.getOwner(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/anath/SkillMeteor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/anath/SkillMeteor.java index 89fee9780..5314786c3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/anath/SkillMeteor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/anath/SkillMeteor.java @@ -62,7 +62,7 @@ public class SkillMeteor extends HeroSkill implements IThrown FallingBlock block = player.getWorld().spawnFallingBlock(player.getEyeLocation().add(player.getLocation().getDirection()), Material.NETHERRACK, (byte) 0); block.setVelocity(player.getLocation().getDirection()); - Manager.GetProjectile().AddThrow(block, player, this, 1000, true, true, true, false, 0.5F); + Manager.GetProjectile().AddThrow(block, player, this, 2000, true, true, true, false, 0.5F); useActiveSkill(player, 7000); } @@ -138,7 +138,7 @@ public class SkillMeteor extends HeroSkill implements IThrown @Override public void Idle(ProjectileUser data) { - + Expire(data); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/HPManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/HPManager.java new file mode 100644 index 000000000..298c46afa --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/HPManager.java @@ -0,0 +1,57 @@ +package nautilus.game.arcade.game.games.moba.kit.hp; + +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.moba.Moba; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; + +public class HPManager implements Listener +{ + + // Health per 5 seconds. + private static final double HP5 = 0.33; + + private final Moba _host; + + public HPManager(Moba host) + { + _host = host; + } + + @EventHandler + public void regeneration(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC_05 || !_host.IsLive()) + { + return; + } + + for (Player player : _host.GetPlayers(true)) + { + if (UtilPlayer.isSpectator(player)) + { + continue; + } + + MobaHPRegenEvent regenEvent = new MobaHPRegenEvent(player, HP5); + UtilServer.CallEvent(regenEvent); + + player.setHealth(Math.min(player.getMaxHealth(), player.getHealth() + regenEvent.getHealth())); + } + } + + @EventHandler + public void preventHungerRegeneration(EntityRegainHealthEvent event) + { + if (event.getRegainReason() == RegainReason.SATIATED) + { + event.setCancelled(true); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaHPRegenEvent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/MobaHPRegenEvent.java similarity index 93% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaHPRegenEvent.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/MobaHPRegenEvent.java index 0ec5994c8..770d2acfc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/MobaHPRegenEvent.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/hp/MobaHPRegenEvent.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.moba; +package nautilus.game.arcade.game.games.moba.kit.hp; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/Minion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/Minion.java new file mode 100644 index 000000000..364b15edd --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/Minion.java @@ -0,0 +1,6 @@ +package nautilus.game.arcade.game.games.moba.minion; + +public class Minion +{ + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/MinionManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/MinionManager.java new file mode 100644 index 000000000..6a64db0d6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/minion/MinionManager.java @@ -0,0 +1,17 @@ +package nautilus.game.arcade.game.games.moba.minion; + +import nautilus.game.arcade.game.games.moba.Moba; +import org.bukkit.event.Listener; + +public class MinionManager implements Listener +{ + + private final Moba _host; + + public MinionManager(Moba host) + { + _host = host; + } + + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareInformation.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareInformation.java new file mode 100644 index 000000000..4a2207562 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareInformation.java @@ -0,0 +1,114 @@ +package nautilus.game.arcade.game.games.moba.prepare; + +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.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.moba.Moba; +import nautilus.game.arcade.game.games.moba.MobaPlayer; +import nautilus.game.arcade.game.games.moba.MobaRole; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +import java.util.concurrent.TimeUnit; + +public class PrepareInformation implements Listener +{ + + private static final long MESSAGE_TIME = TimeUnit.SECONDS.toMillis(5); + private static final int MESSAGE_TIME_TICKS = (int) (MESSAGE_TIME / 50D + 5); + + private final Moba _host; + + private long _lastMessage; + private int _messageIndex; + + public PrepareInformation(Moba host) + { + _host = host; + + // How long should the prepare time be. + int longestDescription = 0; + for (MobaRole role : MobaRole.values()) + { + int length = role.getDescription().length; + + if (length > longestDescription) + { + longestDescription = length; + } + } + + // Modify the prepare time + _host.PrepareTime = longestDescription * 1000 + 1000; + + UtilServer.RegisterEvents(this); + } + + @EventHandler + public void updateMessages(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST || !UtilTime.elapsed(_lastMessage, MESSAGE_TIME)) + { + return; + } + + Bukkit.broadcastMessage("updateMessages"); + + for (MobaPlayer mobaPlayer : _host.getMobaData()) + { + Bukkit.broadcastMessage(mobaPlayer.getPlayer().getName()); + String[] description = mobaPlayer.getRole().getDescription(); + + // Description is too short + if (description.length > _messageIndex + 2) + { + Bukkit.broadcastMessage("Too short"); + continue; + } + + UtilTextMiddle.display(description[_messageIndex], description[_messageIndex + 1], 0, MESSAGE_TIME_TICKS, 0, mobaPlayer.getPlayer()); + } + + _messageIndex++; + _lastMessage = System.currentTimeMillis(); + } + + @EventHandler + public void playerMove(PlayerMoveEvent event) + { + if (UtilPlayer.isSpectator(event.getPlayer())) + { + return; + } + + Location to = event.getTo(); + Location from = event.getFrom(); + + // Player hasn't moved along the X or Z axis + if (to.getX() == from.getX() && to.getZ() == from.getZ()) + { + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void live(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + { + return; + } + + UtilServer.Unregister(this); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareManager.java new file mode 100644 index 000000000..bcc6e7ca6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareManager.java @@ -0,0 +1,168 @@ +package nautilus.game.arcade.game.games.moba.prepare; + +import mineplex.core.common.entity.ClientArmorStand; +import mineplex.core.common.util.*; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.events.GamePrepareCountdownCommence; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameTeam; +import nautilus.game.arcade.game.games.moba.Moba; +import nautilus.game.arcade.game.games.moba.MobaLane; +import nautilus.game.arcade.game.games.moba.MobaPlayer; +import nautilus.game.arcade.game.games.moba.MobaRole; +import nautilus.game.arcade.game.games.moba.kit.HeroKit; +import nautilus.game.arcade.game.games.moba.kit.HeroSkill; +import nautilus.game.arcade.game.games.moba.kit.RoleSelectEvent; +import nautilus.game.arcade.game.games.moba.structure.tower.Tower; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.Perk; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.concurrent.TimeUnit; + +public class PrepareManager implements Listener +{ + + private static final long PREPARE_TIME = TimeUnit.MINUTES.toMillis(1); + private static final String OWNED_METADATA = "owned"; + + private final Moba _host; + + private boolean _informationStage; + + public PrepareManager(Moba host) + { + _host = host; + } + + @EventHandler(priority = EventPriority.LOW) + public void updatePrepare(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC || _host.GetState() != GameState.Prepare || _informationStage) + { + return; + } + + if (!UtilTime.elapsed(_host.GetStateTime(), PREPARE_TIME)) + { + for (Player player : _host.GetPlayers(true)) + { + Kit kit = _host.GetKit(player); + + if (!(kit instanceof HeroKit)) + { + return; + } + } + } + + _informationStage = true; + + _host.AnnounceGame(); + _host.StartPrepareCountdown(); + + //Event + GamePrepareCountdownCommence countdownEvent = new GamePrepareCountdownCommence(_host); + UtilServer.CallEvent(countdownEvent); + + // If players took too long, just give them a random free role and kit. + for (Player player : _host.GetPlayers(true)) + { + Kit kit = _host.GetKit(player); + + if (kit instanceof HeroKit) + { + continue; + } + + HeroKit heroKit = _host.getFirstKit(player); + MobaPlayer mobaPlayer = _host.getMobaData(player); + + mobaPlayer.setRole(heroKit.getRole()); + + _host.SetKit(player, heroKit, true); + } + + for (MobaPlayer mobaPlayer : _host.getMobaData()) + { + // Teleport players to their respective spawns + Player player = mobaPlayer.getPlayer(); + GameTeam team = _host.GetTeam(player); + MobaLane lane = mobaPlayer.getRole().getLane(); + Location toTeleport = _host.WorldData.GetCustomLocs("SPAWN " + team.GetName().toUpperCase() + " " + lane.toString()).get(0); + + // Face the location toward the first tower of that lane + Tower tower = _host.getTowerManager().getFirsrtTower(lane); + if (tower != null) + { + toTeleport.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(player.getLocation(), tower.getLocation()))); + } + else + { + toTeleport.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(player.getLocation(), _host.GetSpectatorLocation()))); + } + + player.teleport(toTeleport); + } + + _host.SetStateTime(System.currentTimeMillis()); + _host.getArcadeManager().GetChat().Silence(-1, false); + + // Start the pregame role information + new PrepareInformation(_host); + } + + @EventHandler + public void roleSelect(RoleSelectEvent event) + { + Player player = event.getPlayer(); + MobaRole role = event.getRole(); + ClientArmorStand stand = event.getStand(); + + if (stand.hasMetadata(OWNED_METADATA)) + { + player.sendMessage(F.main("Game", "Another player has already chosen this role.")); + event.setCancelled(true); + return; + } + + // Store inside the stand that it is claimed by a player + stand.setMetadata(OWNED_METADATA, new FixedMetadataValue(_host.getArcadeManager().getPlugin(), true)); + + // Show that the kit is claimed. + stand.setCustomName(C.cGreenB + role.getName() + C.cGray + " - " + player.getName()); + + // Store the role of the player + _host.getMobaData(player).setRole(role); + } + + @EventHandler + public void live(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + { + return; + } + + for (MobaPlayer mobaPlayer : _host.getMobaData()) + { + HeroKit kit = mobaPlayer.getKit(); + Perk perk = kit.GetPerks()[kit.GetPerks().length - 1]; + + // Put Ultimates on cooldown + if (perk instanceof HeroSkill) + { + ((HeroSkill) perk).useSkill(mobaPlayer.getPlayer()); + } + } + + _host.getArcadeManager().GetChat().Silence(0, true); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/PregameSelection.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareSelection.java similarity index 94% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/PregameSelection.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareSelection.java index 152a537c2..c4c3bccba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/kit/PregameSelection.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/prepare/PrepareSelection.java @@ -1,4 +1,4 @@ -package nautilus.game.arcade.game.games.moba.kit; +package nautilus.game.arcade.game.games.moba.prepare; import mineplex.core.common.entity.ClientArmorStand; import mineplex.core.common.util.*; @@ -9,16 +9,15 @@ import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler.ListenerPriority; import mineplex.core.packethandler.PacketInfo; import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerKitApplyEvent; import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.moba.Moba; import nautilus.game.arcade.game.games.moba.MobaPlayer; import nautilus.game.arcade.game.games.moba.MobaRole; -import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.game.games.moba.kit.HeroKit; +import nautilus.game.arcade.game.games.moba.kit.RoleSelectEvent; import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity; import org.bukkit.*; -import org.bukkit.FireworkEffect.Type; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -31,14 +30,14 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; -public class PregameSelection implements Listener, IPacketHandler +public class PrepareSelection implements Listener, IPacketHandler { private final Moba _host; private final Map _roleStands = new HashMap<>(); private final Map _kitStands = new HashMap<>(); - public PregameSelection(Moba host) + public PrepareSelection(Moba host) { _host = host; @@ -111,9 +110,9 @@ public class PregameSelection implements Listener, IPacketHandler List spawns = _host.WorldData.GetDataLocs(dataKey); Location average = UtilAlg.getAverageLocation(team.GetSpawns()); - MobaPlayer mobaPlayer = _host.getData(player); + MobaPlayer mobaPlayer = _host.getMobaData(player); - List heroKits = _host.getKits(mobaPlayer.Role); + List heroKits = _host.getKits(mobaPlayer.getRole()); ItemStack head = new ItemBuilder(Material.SKULL_ITEM, (byte) 2).build(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaItemEffect.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaItemEffect.java index 6adeb01db..ce3b3a233 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaItemEffect.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaItemEffect.java @@ -4,7 +4,7 @@ import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.events.PlayerGameRespawnEvent; -import nautilus.game.arcade.game.games.moba.MobaHPRegenEvent; +import nautilus.game.arcade.game.games.moba.kit.hp.MobaHPRegenEvent; import nautilus.game.arcade.game.games.moba.kit.AmmoGiveEvent; import nautilus.game.arcade.game.games.moba.kit.CooldownCalculateEvent; import org.bukkit.entity.Player; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShop.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShop.java index b259725f4..407450cc2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShop.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShop.java @@ -11,11 +11,11 @@ import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.games.moba.Moba; -import nautilus.game.arcade.game.games.moba.MobaHPRegenEvent; import nautilus.game.arcade.game.games.moba.MobaPlayer; import nautilus.game.arcade.game.games.moba.MobaRole; import nautilus.game.arcade.game.games.moba.kit.AmmoGiveEvent; import nautilus.game.arcade.game.games.moba.kit.CooldownCalculateEvent; +import nautilus.game.arcade.game.games.moba.kit.hp.MobaHPRegenEvent; import nautilus.game.arcade.game.games.moba.shop.assassin.MobaAssassinShop; import nautilus.game.arcade.game.games.moba.shop.hunter.MobaHunterShop; import nautilus.game.arcade.game.games.moba.shop.mage.MobaMageShop; @@ -91,20 +91,20 @@ public class MobaShop implements Listener public void openShop(MobaPlayer player) { - if (UtilPlayer.isSpectator(player.Player) || _host.GetState() != GameState.Live) + if (UtilPlayer.isSpectator(player.getPlayer()) || _host.GetState() != GameState.Live) { return; } - MobaShopMenu menu = _roleMenus.get(player.Role); + MobaShopMenu menu = _roleMenus.get(player.getRole()); if (menu == null) { - player.Player.sendMessage(F.main("Game", "There isn't an upgrade shop for that kit yet.")); + player.getPlayer().sendMessage(F.main("Game", "There isn't an upgrade shop for that kit yet.")); return; } - menu.open(player.Player); + menu.open(player.getPlayer()); } @EventHandler @@ -163,7 +163,7 @@ public class MobaShop implements Listener { if (clicked.equals(shop)) { - MobaPlayer data = _host.getData(player); + MobaPlayer data = _host.getMobaData(player); if (data == null) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShopCategoryMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShopCategoryMenu.java index a6026d4fb..f6ca8ac51 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShopCategoryMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/MobaShopCategoryMenu.java @@ -125,7 +125,7 @@ public class MobaShopCategoryMenu extends Menu @Override public void onClick(Player player, ClickType clickType) { - _shop.openShop(_host.getData(player)); + _shop.openShop(_host.getMobaData(player)); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHPRegenEffect.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHPRegenEffect.java index b9d8fc749..0489fe986 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHPRegenEffect.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHPRegenEffect.java @@ -1,7 +1,7 @@ package nautilus.game.arcade.game.games.moba.shop.effects; import mineplex.core.common.util.F; -import nautilus.game.arcade.game.games.moba.MobaHPRegenEvent; +import nautilus.game.arcade.game.games.moba.kit.hp.MobaHPRegenEvent; import nautilus.game.arcade.game.games.moba.shop.MobaItemEffect; public class MobaHPRegenEffect extends MobaItemEffect diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHitArrowAmmoEffect.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHitArrowAmmoEffect.java index 4d2393326..791794fc2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHitArrowAmmoEffect.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaHitArrowAmmoEffect.java @@ -23,7 +23,7 @@ public class MobaHitArrowAmmoEffect extends MobaItemEffect Player damager = event.GetDamagerPlayer(true); Moba host = (Moba) Managers.get(ArcadeManager.class).GetGame(); - HeroKit kit = host.getData(damager).Kit; + HeroKit kit = host.getMobaData(damager).getKit(); kit.giveAmmo(damager, 1); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaKillHealEffect.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaKillHealEffect.java index 3086e7b84..7c6bdfba7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaKillHealEffect.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaKillHealEffect.java @@ -2,9 +2,6 @@ package nautilus.game.arcade.game.games.moba.shop.effects; import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import nautilus.game.arcade.events.PlayerGameRespawnEvent; -import nautilus.game.arcade.game.games.moba.MobaHPRegenEvent; -import nautilus.game.arcade.game.games.moba.kit.CooldownCalculateEvent; import nautilus.game.arcade.game.games.moba.shop.MobaItemEffect; import org.bukkit.entity.Player; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaSpeedEffect.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaSpeedEffect.java index 23f3e4bbe..15d7d7196 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaSpeedEffect.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/shop/effects/MobaSpeedEffect.java @@ -2,8 +2,6 @@ package nautilus.game.arcade.game.games.moba.shop.effects; import mineplex.core.common.util.F; import nautilus.game.arcade.events.PlayerGameRespawnEvent; -import nautilus.game.arcade.game.games.moba.MobaHPRegenEvent; -import nautilus.game.arcade.game.games.moba.kit.CooldownCalculateEvent; import nautilus.game.arcade.game.games.moba.shop.MobaItemEffect; import org.bukkit.entity.Player; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/point/CapturePointManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/point/CapturePointManager.java new file mode 100644 index 000000000..70fe02415 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/point/CapturePointManager.java @@ -0,0 +1,64 @@ +package nautilus.game.arcade.game.games.moba.structure.point; + +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.moba.Moba; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class CapturePointManager implements Listener +{ + + private final Moba _host; + + private final List _capturePoints; + + public CapturePointManager(Moba host) + { + _host = host; + + _capturePoints = new ArrayList<>(3); + } + + @EventHandler + public void prepare(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Prepare) + { + return; + } + + Collection capturePoints = _host.getLocationStartsWith("POINT").values(); + + for (Location location : capturePoints) + { + _capturePoints.add(new CapturePoint(_host, location)); + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + { + return; + } + + for (CapturePoint point : _capturePoints) + { + point.update(); + } + } + + public List getCapturePoints() + { + return _capturePoints; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/tower/Tower.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/tower/Tower.java index 19c1c5152..84d9e7717 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/tower/Tower.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/moba/structure/tower/Tower.java @@ -139,12 +139,16 @@ public class Tower if (_health <= 0) { UtilServer.CallEvent(new TowerDestroyEvent(this)); + + // Boom! + explode(); + + // Nullify everything and remove all entities _target = null; setLaserTarget(null); _dead = true; _stand.remove(); _crystal.remove(); - explode(); } else { @@ -163,7 +167,6 @@ public class Tower private void explode() { - _host.getArcadeManager().GetExplosion().BlockExplosion(UtilBlock.getBlocksInRadius(_location.clone().subtract(0, 3, 0), 3), _location, false); _location.getWorld().playSound(_location, Sound.EXPLODE, 2, 0.6F); UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, _location, 0, 0, 0, 0.1F, 1, ViewDist.LONG); }