From 3f13c5f51824e2e7b5c06130c3375e1f9fd88fc5 Mon Sep 17 00:00:00 2001 From: Thanos Paravantis Date: Tue, 5 Jul 2016 14:52:25 +0300 Subject: [PATCH] Refactor Block Lobbers and Bouncing Block --- .../games/mineware/challenge/Challenge.java | 10 +- .../challenge/type/ChallengeAnvilDance.java | 7 +- .../challenge/type/ChallengeArrowRampage.java | 14 +-- .../challenge/type/ChallengeBlockLobbers.java | 73 ++++++----- .../type/ChallengeBouncingBlock.java | 118 +++++++++++------- 5 files changed, 132 insertions(+), 90 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java index 599fbf751..02a5bf675 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java @@ -72,8 +72,11 @@ public abstract class Challenge implements Listener protected ChallengeSettings Settings; protected ChallengeData Data; - + protected static final int TICK_MULTIPLIER = 20; + private static final int TITLE_FADE_IN_TICKS = 5; + private static final int TITLE_STAY_TICKS = 40; + private static final int TITLE_FADE_OUT_TICKS = 5; public Challenge(BawkBawkBattles host, ChallengeType type, String name, String... description) { @@ -512,6 +515,11 @@ public abstract class Challenge implements Listener Host.Manager.GetCondition().Factory().Cloak(reason, player, player, 7777, true, false); } + protected void alert(Player player, String message) + { + UtilTextMiddle.display(null, message, TITLE_FADE_IN_TICKS, TITLE_STAY_TICKS, TITLE_FADE_OUT_TICKS, player); + } + @SuppressWarnings("deprecation") public void setBlock(Block block, Material type, byte data) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeAnvilDance.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeAnvilDance.java index 861e9dae4..341f8d428 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeAnvilDance.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeAnvilDance.java @@ -36,6 +36,7 @@ import nautilus.game.arcade.game.games.mineware.challenge.ChallengeType; */ public class ChallengeAnvilDance extends Challenge { + private static final int MAP_HEIGHT = 1; private static final int MAP_SPAWN_SHIFT = 2; private static final int SMOOTH_BRICK_DATA_RANGE = 3; @@ -84,9 +85,9 @@ public class ChallengeAnvilDance extends Challenge ArrayList spawns = new ArrayList(); int size = getArenaSize() - MAP_SPAWN_SHIFT; - for (Location location : circle(getCenter(), size, 1, true, false, 0)) + for (Location location : circle(getCenter(), size, MAP_HEIGHT, true, false, 0)) { - spawns.add(location.add(0.5, 1.1, 0.5)); + spawns.add(location.add(0.5, MAP_HEIGHT, 0.5)); } return spawns; @@ -97,7 +98,7 @@ public class ChallengeAnvilDance extends Challenge { _arenaStartSize = getArenaSize(); - for (Location location : circle(getCenter(), _arenaStartSize, 1, false, false, 0)) + for (Location location : circle(getCenter(), _arenaStartSize, MAP_HEIGHT, false, false, 0)) { Block block = location.getBlock(); setBlock(block, Material.SMOOTH_BRICK); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeArrowRampage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeArrowRampage.java index 3299a9520..02645b3a9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeArrowRampage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeArrowRampage.java @@ -32,11 +32,11 @@ import nautilus.game.arcade.game.games.mineware.challenge.ChallengeType; public class ChallengeArrowRampage extends Challenge { private static final int LOCKED_INVENTORY_SLOT = 4; - private static final int ARENA_MIN_SIZE = 9; + private static final int MAP_MIN_SIZE = 9; private static final int MAP_SPAWN_SHIFT = 2; - private static final int MAP_HEIGHT = 3; + private static final int MAP_HEIGHT = 3; private static final int MAP_SPAWN_HEIGHT = MAP_HEIGHT + 1; - + private static final int HEIGHT_LVL0 = 0; private static final int HEIGHT_LVL1 = 1; private static final int HEIGHT_LVL2 = 2; @@ -45,11 +45,11 @@ public class ChallengeArrowRampage extends Challenge private static final byte WOOL_DATA_LVL1 = 4; private static final byte WOOL_DATA_LVL2 = 5; private static final int WOOL_DATA_RANGE_LVL3 = 16; - + private static final int JUMP_EFFECT_AMPLIFIER = 2; private static final int ARROW_EXPLOSION_RADIUS = 3; private static final int ARROW_HIT_BLOCK_MAX_DISTANCE = 4; - + public ChallengeArrowRampage(BawkBawkBattles host) { super( @@ -68,7 +68,7 @@ public class ChallengeArrowRampage extends Challenge public ArrayList createSpawns() { ArrayList spawns = new ArrayList(); - int size = getArenaSize(ARENA_MIN_SIZE) - MAP_SPAWN_SHIFT; + int size = getArenaSize(MAP_MIN_SIZE) - MAP_SPAWN_SHIFT; for (int x = -size; x < size; x++) { @@ -87,7 +87,7 @@ public class ChallengeArrowRampage extends Challenge @Override public void createMap() { - int size = getArenaSize(ARENA_MIN_SIZE); + int size = getArenaSize(MAP_MIN_SIZE); for (int x = -size; x <= size; x++) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBlockLobbers.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBlockLobbers.java index 6fef7c2b6..65a93fee3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBlockLobbers.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBlockLobbers.java @@ -36,7 +36,22 @@ import nautilus.game.arcade.game.games.mineware.challenge.ChallengeType; */ public class ChallengeBlockLobbers extends Challenge { - private List _throwTypes = new ArrayList<>(Arrays.asList( + private static final int MAP_HEIGHT = 1; + private static final int MAP_MIN_SIZE = 11; + private static final int WOOL_DATA_RANGE = 16; + private static final int INVENTORY_HOTBAR_SIZE = 9; + + private static final double FALLING_BLOCK_HEIGHT_ADD = 0.4; + private static final double FALLING_BLOCK_VECTOR_MULTIPLY = 1.5; + private static final double FALLING_BLOCK_VECTOR_HEIGHT_ADD = 0.3; + private static final double FALLING_BLOCK_VECTOR_HEIGHT_MAX = 10.0; + private static final float FALLING_BLOCK_HITBOX_GROW = 0.2F; + + private static final double KNOCKBACK_VECTOR_MULTIPLY = 0.8; + private static final double KNOCKBACK_VECTOR_HEIGHT_ADD = 0.3; + private static final double KNOCKBACK_VECTOR_HEIGHT_MAX = 0.5; + + private static final List THROW_TYPES = new ArrayList<>(Arrays.asList( Material.STONE, Material.COBBLESTONE, Material.GRASS, @@ -60,9 +75,9 @@ public class ChallengeBlockLobbers extends Challenge { ArrayList spawns = new ArrayList(); - for (Location location : circle(getCenter(), getArenaSize(), 1, false, false, 0)) + for (Location location : circle(getCenter(), getArenaSize(), MAP_HEIGHT, false, false, 0)) { - spawns.add(location.add(0.5, 1.1, 0.5)); + spawns.add(location.add(0.5, MAP_HEIGHT, 0.5)); } return spawns; @@ -71,10 +86,10 @@ public class ChallengeBlockLobbers extends Challenge @Override public void createMap() { - for (Location location : circle(getCenter(), getArenaSize(11), 1, false, false, 0)) + for (Location location : circle(getCenter(), getArenaSize(MAP_MIN_SIZE), MAP_HEIGHT, false, false, 0)) { Block block = location.getBlock(); - setBlock(block, Material.WOOL, (byte) UtilMath.r(16)); + setBlock(block, Material.WOOL, (byte) UtilMath.r(WOOL_DATA_RANGE)); addBlock(block); } @@ -96,33 +111,22 @@ public class ChallengeBlockLobbers extends Challenge if (event.getType() != UpdateType.FAST) return; - for (Player player : getPlayersAlive()) + for (Player player : getPlayersIn(true)) { - Material material = UtilMath.randomElement(_throwTypes); - - if (Data.isDone(player)) - continue; - PlayerInventory inventory = player.getInventory(); + Material material = UtilMath.randomElement(THROW_TYPES); if (inventory.contains(material)) { - for (int i = 0; i < 10; i++) + if (UtilInv.getAmount(player, material) <= INVENTORY_HOTBAR_SIZE) { - if (inventory.getItem(i) != null) - { - if (inventory.getItem(i).getType() == material) - { - if (inventory.getItem(i).getAmount() < 10) - inventory.addItem(new ItemStack(material)); - - break; - } - } + inventory.addItem(new ItemStack(material)); } } - - inventory.addItem(new ItemStack(material)); + else + { + inventory.addItem(new ItemStack(material)); + } } } @@ -142,13 +146,12 @@ public class ChallengeBlockLobbers extends Challenge Material material = player.getItemInHand().getType(); - if (!_throwTypes.contains(material)) + if (!THROW_TYPES.contains(material)) return; - FallingBlock falling = player.getWorld().spawnFallingBlock(player.getLocation().add(0, 0.4, 0), material, (byte) 0); - UtilAction.velocity(falling, player.getLocation().getDirection(), 1.5, false, 0.0, 0.3, 10.0, true); - Host.Manager.GetProjectile().AddThrow(falling, player, Host, -1, true, false, true, true, 0.2f); - + FallingBlock falling = player.getWorld().spawnFallingBlock(player.getLocation().add(0, FALLING_BLOCK_HEIGHT_ADD, 0), material, (byte) 0); + UtilAction.velocity(falling, player.getLocation().getDirection(), FALLING_BLOCK_VECTOR_MULTIPLY, false, 0.0, FALLING_BLOCK_VECTOR_HEIGHT_ADD, FALLING_BLOCK_VECTOR_HEIGHT_MAX, true); + Host.Manager.GetProjectile().AddThrow(falling, player, Host, -1, true, false, true, true, FALLING_BLOCK_HITBOX_GROW); UtilInv.remove(player, material, (byte) 0, 1); } @@ -179,8 +182,10 @@ public class ChallengeBlockLobbers extends Challenge if (!isChallengeValid()) return; - if (_throwTypes.contains(event.getEntity().getItemStack().getType())) + if (THROW_TYPES.contains(event.getEntity().getItemStack().getType())) + { event.setCancelled(true); + } } @Override @@ -201,7 +206,7 @@ public class ChallengeBlockLobbers extends Challenge if (target.equals(data.getThrower())) return; - UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.getThrown().getLocation(), target.getLocation()), 0.8, false, 0, 0.3, 0.5, true); + UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.getThrown().getLocation(), target.getLocation()), KNOCKBACK_VECTOR_MULTIPLY, false, 0, KNOCKBACK_VECTOR_HEIGHT_ADD, KNOCKBACK_VECTOR_HEIGHT_MAX, true); data.getThrown().remove(); } @@ -211,17 +216,17 @@ public class ChallengeBlockLobbers extends Challenge if (handType == Material.AIR || handType == null) { - for (int i = 0; i <= 8; i++) + for (int i = 0; i <= INVENTORY_HOTBAR_SIZE; i++) { ItemStack current = player.getInventory().getItem(i); if (current == null) continue; - if (current.getType() != Material.AIR) + if (current != null && current.getType() != Material.AIR) { player.getInventory().setHeldItemSlot(i); - return; + break; } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java index 249541ef7..b720efe76 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java @@ -24,7 +24,6 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilTextBottom; -import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -38,10 +37,34 @@ import nautilus.game.arcade.game.games.mineware.challenge.LogicTracker; */ public class ChallengeBouncingBlock extends Challenge implements LogicTracker { + private static final int SCORE_GOAL = 10; + + private static final int MAP_MIN_SIZE = 9; + private static final int MAP_SPAWN_SHIFT = 2; + private static final int MAP_HEIGHT = 1; + + private static final byte PLATFORM_BLOCK_DATA = 0; + private static final int JUMP_EFFECT_MULTIPLIER = 6; + + private static final double TRAP_SPAWN_CHANCE = 0.2; + private static final byte TRAP_BLOCK_DATA = 14; + private static final int TRAP_SCORE_LOSS_MAX = 2; + private static final int TRAP_SCORE_LOSS_MIN = 1; + + private static final float SCORE_SOUND_VOLUME = 0.2F; + private static final float SCORE_SOUND_PITCH = 0.2F; + private static final int SCORE_BLOCK_HEIGHT = 6; + private static final int SCORE_BLOCK_HEIGHT_ADD = 5; + private static final int SCORE_BLOCK_HEIGHT_MAX = SCORE_BLOCK_HEIGHT + SCORE_BLOCK_HEIGHT_ADD; + private static final int SCORE_BLOCK_SPAWN_SHIFT = 2; + private static final int SCORE_BLOCK_BOUND_MULTIPLY = 2; + private static final double SCORE_FIREWORK_LOCATION_ADD = 0.5; + + private static final int MILLISECONDS_UNTIL_NEXT_SCORE_LOSS = 300; + private List _stepTracker = new ArrayList<>(); private List _blocks = new ArrayList<>(); private Map _score = new HashMap<>(); - private static int _goal = 10; public ChallengeBouncingBlock(BawkBawkBattles host) { @@ -51,7 +74,7 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker "Bouncing Block", "Jump and punch floating wool blocks.", "Avoid landing on red wool.", - "First to " + _goal + " wins!"); + "First to " + SCORE_GOAL + " wins!"); Settings.setUseMapHeight(); } @@ -60,11 +83,11 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker public ArrayList createSpawns() { ArrayList spawns = new ArrayList(); - int size = getArenaSize(9) - 2; + int size = getArenaSize(MAP_MIN_SIZE) - MAP_SPAWN_SHIFT; - for (Location location : circle(getCenter(), size, 1, true, false, 0)) + for (Location location : circle(getCenter(), size, MAP_HEIGHT, true, false, 0)) { - spawns.add(location.add(0.5, 1.1, 0.5)); + spawns.add(location.add(0.5, MAP_HEIGHT, 0.5)); } return spawns; @@ -73,18 +96,18 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker @Override public void createMap() { - for (Location location : circle(getCenter(), getArenaSize(9), 1, false, false, 0)) + for (Location location : circle(getCenter(), getArenaSize(MAP_MIN_SIZE), MAP_HEIGHT, false, false, 0)) { Block block = location.getBlock(); setBlock(block, Material.WOOL); - if (Math.random() < 0.2) + if (Math.random() < TRAP_SPAWN_CHANCE) { - setData(block, (byte) 14); + setData(block, (byte) TRAP_BLOCK_DATA); } else { - setData(block, (byte) 0); + setData(block, (byte) PLATFORM_BLOCK_DATA); } addBlock(block); @@ -98,7 +121,7 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker { Host.StrictAntiHack = false; - addEffect(PotionEffectType.JUMP, 6); + addEffect(PotionEffectType.JUMP, JUMP_EFFECT_MULTIPLIER); for (Player player : getPlayersAlive()) { @@ -205,15 +228,14 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker private void hitBlock(Player player, Block block) { increment(player, 1); - player.playSound(player.getLocation(), Sound.SUCCESSFUL_HIT, 0.2f, 0.2f); - - setBlock(block, Material.AIR); - spawnRandomWool(getArenaSize(9), (UtilMath.r(6) + 5)); + player.playSound(player.getLocation(), Sound.SUCCESSFUL_HIT, SCORE_SOUND_VOLUME, SCORE_SOUND_PITCH); + resetBlock(block); + spawnRandomWool(); } private void checkCompleted(Player player) { - if (_score.get(player) >= _goal) + if (_score.get(player) >= SCORE_GOAL) { setCompleted(player); UtilTextBottom.display(C.cGreen + C.Bold + "Completed!", player); @@ -227,16 +249,16 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker private boolean canLooseScore(Player player) { - return Recharge.Instance.use(player, "Movement", 300, false, false) && _score.get(player) > 0; + return Recharge.Instance.use(player, "Score Loss", MILLISECONDS_UNTIL_NEXT_SCORE_LOSS, false, false) && _score.get(player) > 0; } private int subtractFromScore(Player player) { - int amount = 2; + int amount = TRAP_SCORE_LOSS_MAX; if (_score.get(player) == 1) { - amount = 1; + amount = TRAP_SCORE_LOSS_MIN; } subtract(player, amount); @@ -245,7 +267,7 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker private void showSubtractMessage(Player player, int amount) { - UtilTextMiddle.display(null, "Score decreased by " + C.cRed + amount + C.Reset + "!", 5, 40, 5, player); + alert(player, "Score decreased by " + C.cRed + amount + C.Reset + "!"); player.playSound(player.getLocation(), Sound.NOTE_BASS, 1.0F, 1.0F); } @@ -257,33 +279,28 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker } } + private static final double SCORE_BLOCK_SPAWN_CHANCE = 0.1; + private static final int SCORE_BLOCK_DATA_RANGE = 16; + private void spawnStartingWool() { - whileLoop: while (_blocks.size() <= Math.ceil(Host.getPlayersWithRemainingLives() / 2) + 1) + whileLoop: while (_blocks.size() <= Settings.getMaxCompletedCount() + 1) { for (int x = -getArenaSize(); x <= getArenaSize(); x++) { for (int z = -getArenaSize(); z <= getArenaSize(); z++) { - for (int y = 5; y <= 11; y++) + for (int y = SCORE_BLOCK_HEIGHT; y <= SCORE_BLOCK_HEIGHT_MAX; y++) { Block block = getCenter().getBlock().getRelative(x, y, z); if (block.isEmpty() || block.getType() == null) { - if (UtilMath.r(50) == 0) + if (Math.random() < SCORE_BLOCK_SPAWN_CHANCE) { - Byte color = (byte) UtilMath.r(16); + spawnRandomWoolAt(x, y, z); - while (color == 14) - { - color = (byte) UtilMath.r(16); - } - - setBlock(block, Material.WOOL, (byte) UtilMath.r(16)); - _blocks.add(block); - - if (_blocks.size() >= Math.ceil(Host.getPlayersWithRemainingLives() / 2) + 1) + if (_blocks.size() >= Settings.getMaxCompletedCount() + 1) { break whileLoop; } @@ -295,25 +312,30 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker } } - @SuppressWarnings("deprecation") - private void spawnRandomWool(int size, int height) + private void spawnRandomWool() { - size = size - 2; - int x = UtilMath.r(size * 2) - size; - int y = height; - int z = UtilMath.r(size * 2) - size; + int size = getArenaSize(MAP_MIN_SIZE) - SCORE_BLOCK_SPAWN_SHIFT; + int x = UtilMath.r(size * SCORE_BLOCK_BOUND_MULTIPLY) - size; + int y = SCORE_BLOCK_HEIGHT + UtilMath.r(SCORE_BLOCK_HEIGHT_ADD); + int z = UtilMath.r(size * SCORE_BLOCK_BOUND_MULTIPLY) - size; + + spawnRandomWoolAt(x, y, z); + } + + @SuppressWarnings("deprecation") + private void spawnRandomWoolAt(int x, int y, int z) + { Block b = getCenter().getBlock().getRelative(x, y, z); - Byte color = (byte) UtilMath.r(16); + Byte color = (byte) UtilMath.r(SCORE_BLOCK_DATA_RANGE); - while (color == 14) + while (color == TRAP_BLOCK_DATA) { - color = (byte) UtilMath.r(16); + color = (byte) UtilMath.r(SCORE_BLOCK_DATA_RANGE); } setBlock(b, Material.WOOL, color); - - UtilFirework.playFirework(b.getLocation().add(0.5, 0.5, 0.5), Type.BALL, DyeColor.getByWoolData(b.getData()).getColor(), false, false); + UtilFirework.playFirework(b.getLocation().add(SCORE_FIREWORK_LOCATION_ADD, SCORE_FIREWORK_LOCATION_ADD, SCORE_FIREWORK_LOCATION_ADD), Type.BALL, DyeColor.getByWoolData(b.getData()).getColor(), false, false); _blocks.add(b); } @@ -323,8 +345,10 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker int score = _score.get(player); int updatedScore = score + amount; - if (updatedScore <= 10) + if (updatedScore <= SCORE_GOAL) + { _score.put(player, updatedScore); + } } private void subtract(Player player, int amount) @@ -333,9 +357,13 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker int updatedScore = score - amount; if (updatedScore > 0) + { _score.put(player, updatedScore); + } else + { _score.put(player, 0); + } } @Override