diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeChickenShooting.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeChickenShooting.java index 1d1121153..c41285262 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeChickenShooting.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeChickenShooting.java @@ -37,6 +37,7 @@ import nautilus.game.arcade.game.games.mineware.challenge.NumberTracker; public class ChallengeChickenShooting extends Challenge implements NumberTracker { private ArrayList _chickens = new ArrayList(); + private ArrayList _chickenSpawns = new ArrayList(); private HashMap _score = new HashMap(); public ChallengeChickenShooting(BawkBawkBattles host) @@ -102,6 +103,8 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker } } } + + initializeChickenSpawns(); } @Override @@ -111,25 +114,7 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker Host.DamagePvE = true; - ItemStack bow = new ItemBuilder(Material.BOW) - .setUnbreakable(true) - .addEnchantment(Enchantment.ARROW_INFINITE, 1) - .addItemFlags(ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_UNBREAKABLE) - .build(); - - ItemStack arrow = new ItemStack(Material.ARROW); - - for (Player player : getPlayersAlive()) - { - // It's better to add the items without setItem() method, to minimize for-loops. - - PlayerInventory inv = player.getInventory(); - inv.setItem(Settings.getLockedSlot(), bow); - inv.setItem(31, arrow); - - _score.put(player, 0); - } - + addBowAndArrow(); } @Override @@ -198,20 +183,14 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker } event.AddMod("Ensure Death", null, 10, false); - - int score = showAndIncrementScore(player, entity); - - if (score == 6) - { - setCompleted(player); - } + checkCompleted(player, entity); } @EventHandler public void onUpdate(UpdateEvent event) { UpdateType speed; - int alive = getPlayersIn(false).size(); + int alive = getPlayersIn(true).size(); if (alive >= 40) speed = UpdateType.FASTEST; @@ -236,13 +215,42 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker if (!isChallengeValid()) return; - Player player = event.getPlayer(); + _score.remove(event.getPlayer()); + } - if (_score.containsKey(player)) + private void initializeChickenSpawns() + { + _chickenSpawns = (ArrayList) circle(getCenter(), getArenaSize() - 2, 1, false, false, 15); + } + + private void addBowAndArrow() + { + ItemStack bow = new ItemBuilder(Material.BOW) + .setUnbreakable(true) + .addEnchantment(Enchantment.ARROW_INFINITE, 1) + .addItemFlags(ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_UNBREAKABLE) + .build(); + + ItemStack arrow = new ItemStack(Material.ARROW); + + for (Player player : getPlayersAlive()) { - _score.remove(player); - } + PlayerInventory inv = player.getInventory(); + inv.setItem(Settings.getLockedSlot(), bow); + inv.setItem(31, arrow); + _score.put(player, 0); + } + } + + private void checkCompleted(Player player, LivingEntity entity) + { + int score = showAndIncrementScore(player, entity); + + if (score == 6) + { + setCompleted(player); + } } private int showAndIncrementScore(Player player, LivingEntity entity) @@ -252,12 +260,40 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker Location location = player.getEyeLocation(); location.add(UtilAlg.getTrajectory(location, entity.getEyeLocation()).multiply(Math.min(7, entity.getLocation().distance(location)))); - displayCount(player, location, (score >= 6 ? C.cDGreen : score >= 4 ? C.cGreen : score >= 2 ? C.cRed : C.cDRed) + score); + displayCount(player, location, selectScoreColor(score)); _score.put(player, score); return score; } + private String selectScoreColor(int score) + { + if (score == 1) + { + return C.cWhiteB + score; + } + else if (score == 2) + { + return C.cGrayB + score; + } + else if (score == 3) + { + return C.cGreenB + score; + } + else if (score == 4) + { + return C.cYellowB + score; + } + else if (score == 5) + { + return C.cGoldB + score; + } + else + { + return C.cRedB + score; + } + } + private void removeChickensOnGround() { Iterator iterator = _chickens.iterator(); @@ -276,9 +312,9 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker private void spawnChicken() { - if (_chickens.size() < 11 + (getPlayersAlive().size() * 2)) + if (_chickens.size() < 10 + (getPlayersIn(true).size() * 3)) { - Location spawn = getRandomLocation(); + Location spawn = UtilMath.randomElement(_chickenSpawns); Host.CreatureAllow = true; Chicken chicken = (Chicken) spawn.getWorld().spawnEntity(spawn, EntityType.CHICKEN); @@ -287,17 +323,15 @@ public class ChallengeChickenShooting extends Challenge implements NumberTracker chicken.setMaxHealth(0.1); chicken.setHealth(0.1); + if (Math.random() < 0.3) + { + chicken.setBaby(); + } + _chickens.add(chicken); } } - private Location getRandomLocation() - { - int random = UtilMath.r(getArenaSize() * 2) - (getArenaSize()); - - return getCenter().add(random, 15, random); - } - @Override public Number getData(Player player) {