From 44de231c7dc80bd11bf7ddca9e5368bcb522695b Mon Sep 17 00:00:00 2001 From: Thanos paravantis Date: Thu, 21 Jan 2016 21:35:14 +0200 Subject: [PATCH] Start implementing chicken attack on player death. --- .../identified-project-coordinates.json | 2 +- .../arcade/game/games/mineware/MineWare.java | 85 ++++++++++++++++--- .../games/mineware/effect/ChickenAttack.java | 67 +++++++++++++-- 3 files changed, 131 insertions(+), 23 deletions(-) diff --git a/.recommenders/caches/identified-project-coordinates.json b/.recommenders/caches/identified-project-coordinates.json index 9e26dfeeb..02b84ddd1 100644 --- a/.recommenders/caches/identified-project-coordinates.json +++ b/.recommenders/caches/identified-project-coordinates.json @@ -1 +1 @@ -{} \ No newline at end of file +[[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Mineplex.Core.Common","type":"PROJECT","hints":{"PROJECT_NAME":"Mineplex.Core.Common"}},"ABSENT"],[{"location":"C:\\Program Files\\Java\\jre1.8.0_51","type":"JRE","hints":{}},"jre:jre:1.8.0"],[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Libraries\\craftbukkit.jar","type":"JAR","hints":{}},"ABSENT"],[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Nautilus.Game.Arcade","type":"PROJECT","hints":{"PROJECT_NAME":"Nautilus.Game.Arcade"}},"ABSENT"]] \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java index b883ccd30..ed0ba946a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.List; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -55,8 +56,9 @@ import nautilus.game.arcade.ArcadeFormat; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam.PlayerState; -import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeAnvilDance; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeArrowRampage; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockLobbers; @@ -69,7 +71,6 @@ import nautilus.game.arcade.game.games.mineware.challenges.ChallengeDragonEgg; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeFallingBlocks; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeFastFood; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeFishingDay; -import nautilus.game.arcade.game.games.mineware.challenges.ChallengeWaterHorror; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeInfestation; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeKOTL; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeKangarooJump; @@ -90,7 +91,9 @@ import nautilus.game.arcade.game.games.mineware.challenges.ChallengeStandOnColor import nautilus.game.arcade.game.games.mineware.challenges.ChallengeTntLauncher; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeTreasureDigger; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeVolleyPig; +import nautilus.game.arcade.game.games.mineware.challenges.ChallengeWaterHorror; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeWaveCrush; +import nautilus.game.arcade.game.games.mineware.effect.ChickenAttack; import nautilus.game.arcade.game.games.mineware.effect.DeathEffect; import nautilus.game.arcade.game.games.mineware.effect.DeathEffectData; import nautilus.game.arcade.game.games.mineware.events.ChallengeEndEvent; @@ -105,8 +108,11 @@ import nautilus.game.arcade.game.games.mineware.stats.MinewareTagMasterTracker; import nautilus.game.arcade.game.games.mineware.stats.MinewareVeteranTracker; import nautilus.game.arcade.kit.Kit; -public class MineWare extends SoloGame implements IThrown +public class MineWare extends TeamGame implements IThrown { + private GameTeam _playersTeam; + private GameTeam _chickenTeam; + private HashMap _lives = new HashMap(); public boolean _currentCrumble = false; @@ -123,6 +129,7 @@ public class MineWare extends SoloGame implements IThrown private ArrayList> _challengesCopy = new ArrayList>(); private DeathEffect _deathEffect = new DeathEffect(this); + private ChickenAttack _chickenAttack; @SuppressWarnings("unchecked") public MineWare(ArcadeManager manager) @@ -165,6 +172,28 @@ public class MineWare extends SoloGame implements IThrown new MinewareKangarooAtHeart(this) ); } + + @EventHandler + public void onTeamCreation(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Recruit) + return; + + for (GameTeam team : GetTeamList()) + { + if (team.GetColor() == ChatColor.YELLOW) + { + team.SetName("Players"); + _playersTeam = team; + } + else if (team.GetColor() == ChatColor.WHITE) + { + team.SetName("Chickens"); + team.SetVisible(false); + _chickenTeam = team; + } + } + } // Debug Only @SuppressWarnings("unchecked") @@ -372,6 +401,22 @@ public class MineWare extends SoloGame implements IThrown return true; } + + @EventHandler + public void onInitializeChickens(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Live) + return; + + // TODO: Retrieve center and corners from map data. + + _chickenAttack = new ChickenAttack( + this, + new Location(WorldData.World, 500, 0, 500), + new Location(WorldData.World, 510, 0, 500), + new Location(WorldData.World, 500, 0, 510) + ); + } @EventHandler public void onGameLive(GameStateChangeEvent event) @@ -380,7 +425,7 @@ public class MineWare extends SoloGame implements IThrown { return; } - + _challengeTime = System.currentTimeMillis(); } @@ -1008,18 +1053,23 @@ public class MineWare extends SoloGame implements IThrown } else { - if(playersAlive <= 3) + if (playersAlive <= 3) { _places.add(player); } gameLostMessage(player); Scoreboard.ResetScore(player.getName()); - SetPlayerState(player, PlayerState.OUT); + // SetPlayerState(player, PlayerState.OUT); if (isDeath) { - Manager.addSpectator(player, true); + // Manager.addSpectator(player, true); + _chickenAttack.start(player); + } + else + { + SetPlayerState(player, PlayerState.OUT); } } } @@ -1109,7 +1159,6 @@ public class MineWare extends SoloGame implements IThrown Scoreboard.WriteBlank(); for (Player player : GetPlayers(true)) { - int currentLives = getLives(player); String status; String currentlyOut = ""; @@ -1153,11 +1202,11 @@ public class MineWare extends SoloGame implements IThrown Scoreboard.Draw(); } - @Override - public int GetScoreboardScore(Player player) - { - return getLives(player); - } +// @Override +// public int GetScoreboardScore(Player player) +// { +// return getLives(player); +// } @EventHandler public void onPlayerDropItem(PlayerDropItemEvent event) @@ -1174,6 +1223,16 @@ public class MineWare extends SoloGame implements IThrown { return _isChallengeStarted; } + + public GameTeam getPlayersTeam() + { + return _playersTeam; + } + + public GameTeam getChickenTeam() + { + return _chickenTeam; + } @Override public void Idle(ProjectileUser data) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java index 606f1e3f8..d3afc058f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java @@ -1,7 +1,10 @@ package nautilus.game.arcade.game.games.mineware.effect; +import java.util.ArrayList; + import org.bukkit.GameMode; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.Block; @@ -12,10 +15,10 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.disguise.disguises.DisguiseChicken; +import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.games.mineware.MineWare; public class ChickenAttack @@ -24,10 +27,13 @@ public class ChickenAttack private JavaPlugin _plugin; private Location _center; + private World _world; + private Location _corner1; private Location _corner2; private Location[] _spawnpoints = new Location[4]; + private ArrayList _chickens = new ArrayList<>(); private int _chickenSpawnAmount = 12; public ChickenAttack(MineWare host, Location center, Location corner1, Location corner2) @@ -36,6 +42,7 @@ public class ChickenAttack _plugin = host.getArcadeManager().getPlugin(); _center = center; + _world = center.getWorld(); _corner1 = corner1; _corner2 = corner2; @@ -47,6 +54,26 @@ public class ChickenAttack block.getRelative(BlockFace.SOUTH).getLocation(), block.getRelative(BlockFace.WEST).getLocation() }; + + createTestPlatform(); + spawnChickens(); + } + + public void createTestPlatform() + { + ArrayList platform = UtilBlock.getInBoundingBox(_corner1, _corner2, false); + + for (Block block : platform) + { + if (block.getLocation().equals(_center)) + { + block.setType(Material.DIAMOND_BLOCK); + } + else + { + block.setType(Material.STONE); + } + } } public void start(Player player) @@ -56,15 +83,30 @@ public class ChickenAttack UtilTextMiddle.display(null, C.cRed + C.Bold + "Chicken Attack!", 5, 40, 5); player.playSound(player.getLocation(), Sound.FIZZ, 1.0F, 1.0F); + + debugDeathTask(player); + } + private void debugDeathTask(Player player) + { new BukkitRunnable() { @Override public void run() { - spawnChickens(); + if (_host.IsLive()) + kill(player); + else + cancel(); } - }.runTaskLater(_plugin, 40L); + }.runTaskLater(_plugin, 100L); + } + + private void kill(Player player) + { + _host.SetPlayerTeam(player, _host.getChickenTeam(), false); + player.teleport(_host.GetSpectatorLocation()); + new DisguiseChicken(player); } private void spawnChickens() @@ -74,9 +116,6 @@ public class ChickenAttack for (int i = 0; i < _spawnpoints.length; i++) { Location spawn = _spawnpoints[i]; - - UtilParticle.PlayParticleToAll(ParticleType.CLOUD, spawn.clone().add(0, 0.2, 0), 0.2F, 0.2F, 0.2F, 0.0F, 20, ViewDist.NORMAL); - World world = spawn.getWorld(); for (int j = 0; j < spawnAmount; j++) @@ -89,6 +128,16 @@ public class ChickenAttack private void customizeChicken(Chicken chicken) { - // + _chickens.add(chicken); + } + + public void reset() + { + for (Chicken chicken : _chickens) + { + chicken.remove(); + } + + _chickens.clear(); } }