diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index 7b7bed621..39837984f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -763,11 +763,17 @@ public enum Achievement new int[] {5}, AchievementCategory.BAWK_BAWK_BATTLES), - BAWK_BAWK_BATTLES_QUICK_CLIMBER("Quick Climber", 500, - new String[]{"Bawk Bawk Battles.QuickClimber"}, - new String[]{C.cGray + "King of the Ladder Challenge", "Climb the ladder without", "getting knocked off by others"}, - new int[] {3}, - AchievementCategory.BAWK_BAWK_BATTLES), +// BAWK_BAWK_BATTLES_QUICK_CLIMBER("Quick Climber", 500, +// new String[]{"Bawk Bawk Battles.QuickClimber"}, +// new String[]{C.cGray + "King of the Ladder Challenge", "Climb the ladder without", "getting knocked off by others"}, +// new int[] {3}, +// AchievementCategory.BAWK_BAWK_BATTLES), + + BAWK_BAWK_BATTLES_BUILDING_CHAMPION("Building Champion", 500, + new String[]{"Bawk Bawk Battles.BuildingChampion"}, + new String[]{C.cGray + "Build Race Challenge", "Place all blocks in your", "inventory within 15 seconds"}, + new int[] {3}, + AchievementCategory.BAWK_BAWK_BATTLES), BAWK_BAWK_BATTLES_BOUNCING_SHADOW("Bouncing Shadow", 500, new String[]{"Bawk Bawk Battles.BouncingShadow"}, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java index 55793d1c7..119191363 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java @@ -119,12 +119,12 @@ import nautilus.game.arcade.game.games.mineware.effect.DeathEffectData; import nautilus.game.arcade.game.games.mineware.events.ChallengeEndEvent; import nautilus.game.arcade.game.games.mineware.kit.KitBawksFood; import nautilus.game.arcade.game.games.mineware.tracker.BouncingShadowTracker; +import nautilus.game.arcade.game.games.mineware.tracker.BuildingChampionTracker; import nautilus.game.arcade.game.games.mineware.tracker.DragonKingTracker; import nautilus.game.arcade.game.games.mineware.tracker.EliteArcherTracker; import nautilus.game.arcade.game.games.mineware.tracker.MilkManTracker; import nautilus.game.arcade.game.games.mineware.tracker.PinataMasterTracker; import nautilus.game.arcade.game.games.mineware.tracker.PixelNinjaTracker; -import nautilus.game.arcade.game.games.mineware.tracker.QuickClimberTracker; import nautilus.game.arcade.game.games.mineware.tracker.SurfUpTracker; import nautilus.game.arcade.game.games.mineware.tracker.TagMasterTracker; import nautilus.game.arcade.game.games.mineware.tracker.VeteranTracker; @@ -189,7 +189,6 @@ public class BawkBawkBattles extends TeamGame implements IThrown /* * Changes * - Refactoring - * - Improve Zombie Infection * - Improve Scoreboard * * Bugs @@ -198,13 +197,10 @@ public class BawkBawkBattles extends TeamGame implements IThrown * - Some players spawn into the void on Lava Run * - // Zombie Infection can disguise spectators as Zombies * - // Egg smash dragon eggs stay on the map - * - Chicken Attack chickens are getting stuck in water * - // "Next challenge will begin shortly" message also displays on players in chicken island - * - 918 null pointer exception * - Array index out of bounds during challenge rotation * - Achievement for not getting hit in king of the ladder is impossible in public games * - Players sometimes gain a life when dying (not confirmed) - * - Block lobbers needs a slightly bigger platform * - // Spectators being teleported over and over to the same location in certain games (no knockback aura around the game area) * - No suitable challenge was found ends the game, does not give exp * - Chicken platform needs water reducing (add lilipads?) @@ -265,12 +261,12 @@ public class BawkBawkBattles extends TeamGame implements IThrown registerStatTrackers( new BouncingShadowTracker(this), + new BuildingChampionTracker(this), new DragonKingTracker(this), new EliteArcherTracker(this), new MilkManTracker(this), new PinataMasterTracker(this), new PixelNinjaTracker(this), - new QuickClimberTracker(this), new SurfUpTracker(this), new TagMasterTracker(this), new VeteranTracker(this)); @@ -1098,24 +1094,16 @@ public class BawkBawkBattles extends TeamGame implements IThrown for (Player player : _chickenTeam.GetPlayers(true)) { Chicken chicken = UtilMath.randomElement(_chickenAttack.getChickens()); + Material feetType = chicken.getLocation().getBlock().getType(); - if (!chicken.isOnGround()) + if (!chicken.isOnGround() && feetType != Material.STATIONARY_WATER && feetType != Material.WATER) + { return; + } UtilEnt.CreatureLook(chicken, player); - UtilAction.velocity(chicken, UtilAlg.getTrajectory(chicken, player).multiply(1.5D).setY(0.3D)); - - Manager.GetProjectile().AddThrow( - chicken, - null, - this, - -1, - true, - false, - false, - true, - 0.8F); + Manager.GetProjectile().AddThrow(chicken, null, this, -1, true, false, false, true, 0.8F); } } @@ -1130,9 +1118,10 @@ public class BawkBawkBattles extends TeamGame implements IThrown for (Chicken chicken : _chickenAttack.getChickens()) { - Block below = chicken.getLocation().getBlock().getRelative(BlockFace.DOWN); // Detect when falling into the void. + Material feetType = chicken.getLocation().getBlock().getType(); + Block below = chicken.getLocation().getBlock().getRelative(BlockFace.DOWN); - if (!chicken.isOnGround() && !below.isEmpty()) + if (!chicken.isOnGround() && feetType != Material.STATIONARY_WATER && feetType != Material.WATER && !below.isEmpty()) { UtilParticle.PlayParticle(ParticleType.FLAME, chicken.getLocation(), 0.1F, 0.1F, 0.1F, 0.02F, 1, ViewDist.NORMAL); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java index 926070b07..a80c90630 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java @@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.mineware.challenge.type; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.List; import org.bukkit.Effect; import org.bukkit.Location; @@ -12,6 +13,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; @@ -24,12 +26,15 @@ import mineplex.core.common.util.UtilTextMiddle; import nautilus.game.arcade.game.games.mineware.BawkBawkBattles; import nautilus.game.arcade.game.games.mineware.challenge.Challenge; import nautilus.game.arcade.game.games.mineware.challenge.ChallengeType; +import nautilus.game.arcade.game.games.mineware.challenge.LogicTracker; /** * A challenge based on fast block placement. */ -public class ChallengeBuildRace extends Challenge +public class ChallengeBuildRace extends Challenge implements LogicTracker { + private List _speedTracker = new ArrayList<>(); + // The amount of blocks for every hotbar slot. private int _inventoryBlockAmount = 5; @@ -92,7 +97,7 @@ public class ChallengeBuildRace extends Challenge Host.BlockPlaceAllow.add(allowed.getId()); } - for (Player player : Host.GetPlayers(true)) + for (Player player : getPlayersAlive()) { setupInventoryContents(player); } @@ -177,11 +182,32 @@ public class ChallengeBuildRace extends Challenge { if (items.get(0).getAmount() == 1) { + trackSpeed(player); setCompleted(player); } } } + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) + { + if (!isChallengeValid()) + return; + + _speedTracker.remove(event.getPlayer()); + } + + private void trackSpeed(Player player) + { + long startTime = Settings.getStartTime(); + long finishTime = System.currentTimeMillis(); + + if (finishTime <= startTime + 15000) + { + _speedTracker.add(player); + } + } + private void setupInventoryContents(Player player) { ArrayList shuffledMaterials = new ArrayList(Arrays.asList(_materials)); @@ -201,4 +227,10 @@ public class ChallengeBuildRace extends Challenge block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); block.setType(Material.AIR); } + + @Override + public boolean hasData(Player player) + { + return _speedTracker.contains(player); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeKingOfTheLadder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeKingOfTheLadder.java index fe15a3cb6..acffd8026 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeKingOfTheLadder.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeKingOfTheLadder.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.mineware.challenge.type; import java.util.ArrayList; -import java.util.List; import org.bukkit.Effect; import org.bukkit.Location; @@ -12,7 +11,6 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -25,14 +23,12 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.games.mineware.BawkBawkBattles; import nautilus.game.arcade.game.games.mineware.challenge.Challenge; import nautilus.game.arcade.game.games.mineware.challenge.ChallengeType; -import nautilus.game.arcade.game.games.mineware.challenge.LogicTracker; /** * A challenge based on climbling ladders. */ -public class ChallengeKingOfTheLadder extends Challenge implements LogicTracker +public class ChallengeKingOfTheLadder extends Challenge { - private List _hitTracker = new ArrayList<>(); private Location _winCornerA; private Location _winCornerB; @@ -211,13 +207,6 @@ public class ChallengeKingOfTheLadder extends Challenge implements LogicTracker { event.SetCancelled("Fall damage"); } - - Player damagee = event.GetDamageePlayer(); - - if (!_hitTracker.contains(damagee)) - { - _hitTracker.add(damagee); - } } @EventHandler @@ -231,19 +220,4 @@ public class ChallengeKingOfTheLadder extends Challenge implements LogicTracker } } } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) - { - if (!isChallengeValid()) - return; - - _hitTracker.remove(event.getPlayer()); - } - - @Override - public boolean hasData(Player player) - { - return !_hitTracker.contains(player); - } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/BuildingChampionTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/BuildingChampionTracker.java new file mode 100644 index 000000000..f35ecd68d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/BuildingChampionTracker.java @@ -0,0 +1,41 @@ +package nautilus.game.arcade.game.games.mineware.tracker; + +import org.bukkit.entity.Player; + +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.mineware.challenge.Challenge; +import nautilus.game.arcade.game.games.mineware.challenge.type.ChallengeBuildRace; + +/** + * A tracker for the Building Champion achievement. + *
+ *
+ * Challenge: Build Race + *
+ * Goal: Place all blocks in your inventory within 15 seconds + */ +public class BuildingChampionTracker extends ChallengeStatTracker +{ + public BuildingChampionTracker(Game game) + { + super(game); + } + + @Override + protected void track(Challenge challenge) + { + if (challenge instanceof ChallengeBuildRace) + { + ChallengeBuildRace buildRace = (ChallengeBuildRace) challenge; + + for (Player player : getGame().GetPlayers(true)) + { + if (buildRace.hasData(player) && buildRace.getData().isDone(player)) + { + System.out.println("Building Champion: " + player.getName()); + addStat(player, "BuildingChampion", 1, false, false); + } + } + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/QuickClimberTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/QuickClimberTracker.java deleted file mode 100644 index 711fe24e3..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/tracker/QuickClimberTracker.java +++ /dev/null @@ -1,41 +0,0 @@ -package nautilus.game.arcade.game.games.mineware.tracker; - -import org.bukkit.entity.Player; - -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.games.mineware.challenge.Challenge; -import nautilus.game.arcade.game.games.mineware.challenge.type.ChallengeKingOfTheLadder; - -/** - * A tracker for the Quick Climber achievement. - *
- *
- * Challenge: King of the Ladder - *
- * Goal: Climb the ladder without getting knocked off by others - */ -public class QuickClimberTracker extends ChallengeStatTracker -{ - public QuickClimberTracker(Game game) - { - super(game); - } - - @Override - protected void track(Challenge challenge) - { - if (challenge instanceof ChallengeKingOfTheLadder) - { - ChallengeKingOfTheLadder kotl = (ChallengeKingOfTheLadder) challenge; - - for (Player player : getGame().GetPlayers(true)) - { - if (kotl.hasData(player) && kotl.getData().isDone(player)) - { - System.out.println("Quick Climber: " + player.getName()); - addStat(player, "QuickClimber", 1, false, false); - } - } - } - } -}