The string to be shortened
+ * @param maxLengthThe maximum amount of characters allowed
+ * @returnThe shortened string, or the original string if already short enough
*/ public static String cutString(String string, int maxLength) { - if (string.length() > maxLength) { - string = string.substring(0, maxLength); + if (string.length() <= maxLength) { + return string; + } else { + return string.substring(0, maxLength); + } + } + + private void updateArenaStates() { + for (Arena arena : MemoryStorage.arenaMap.values()) { + if (arena.gameState == ArenaState.WAITING) { + if (arena.playersInArena.size() >= arena.minPlayers) { + arena.gameState = ArenaState.STARTING; + arena.timer = arena.timeInLobbyUntilStart; + ArenaHandler.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + + arena.timeInLobbyUntilStart); + } + } else if (arena.gameState == ArenaState.STARTING) { + updateStartingArena(arena); + } + + // TODO: Figure out a better way to do this. Currently, individual seeker timers are used to allow another + // player to take over if a seeker leaves the game. But assuming the game is already running, wouldn't it + // make more sense to allow the seeker to seek immediately? + for (Player player : arena.seekers) { + // Reduce the seeker wait timer if necessary + Integer seekerTime = MemoryStorage.seekerTime.get(player); + if (seekerTime != null) { + MemoryStorage.seekerTime.put(player, --seekerTime); + if (seekerTime <= 0) { + // Teleport the seeker to the hiders warp, and allow them to seek + PlayerHandler.teleport(player, arena.arenaLocations.getHidersWarp()); + MemoryStorage.seekerTime.remove(player); + ArenaHandler.sendMessage(arena, MessageKey.NORMAL_IN_GAME_SEEKER_SPAWNED, + "%playerName%-" + player.getName()); + } + } + } + + if (arena.gameState == ArenaState.IN_GAME) { + updateInGameArena(arena); + } + + for (Player pl : arena.playersInArena) { + pl.setLevel(arena.timer); + if (arena.seekers.contains(pl)) { + pl.setGameMode(GameMode.SURVIVAL); + } else { + pl.setGameMode(GameMode.ADVENTURE); + } + } + } + SignsHandler.updateSigns(); //TODO Only do this when needed (game-state change or player count change) + } + + /** + * Updates the state of an arena that's in the process of starting + * + * @param arenaAn arena in the STARTING state
+ */ + private void updateStartingArena(Arena arena) { + // Reduce the arena's timer + arena.timer -= 1; + if (arena.timer > 0) { + if (arena.timer == 60 || arena.timer == 30 || arena.timer == 10) { + // Announce when the arena starts + ArenaHandler.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.timer); + } else if (arena.timer <= 5) { + // Count down from 5 seconds + World world = null; + Location warp = arena.arenaLocations.getLobbyWarp(); + if (warp != null) { + world = warp.getWorld(); + } + if (world != null) { + int pitch = (int) (2 - Math.floor(arena.timer / 2.0)); + world.playSound(arena.arenaLocations.getLobbyWarp(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, + pitch); + } + ArenaHandler.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.timer); + } + } else { + startArena(arena); + } + } + + /** + * Starts an arena + * + * @param arenaThe arena to start
+ */ + private void startArena(Arena arena) { + // Update the game state, and set the timer to count down from the specified game-time + arena.gameState = ArenaState.IN_GAME; + arena.timer = arena.gameTime; + + // Assign the necessary seekers + assignSeekers(arena); + + // Assign the necessary hiders + assignHiders(arena); + + MessageHelper.broadcastMessage(arena.hiders, MessageKey.NORMAL_LOBBY_ARENA_STARTED_HIDERS, + "seconds-" + arena.waitingTimeSeeker); + MessageHelper.broadcastMessage(arena.seekers, MessageKey.NORMAL_LOBBY_ARENA_STARTED_SEEKERS, + "seconds-" + arena.waitingTimeSeeker); + } + + /** + * Assigns all non-seekers in an arena as hiders + * + * @param arenaThe arena to assign hiders for
+ */ + private void assignHiders(Arena arena) { + ListThe arena to assign seekers to
+ */ + private void assignSeekers(Arena arena) { + ListThe arena to assign a seeker for
+ * @param playerThe player to assign as a seeker
+ */ + private void addSeeker(Arena arena, Player player) { + ArenaHandler.sendMessage(arena, MessageKey.NORMAL_IN_GAME_SEEKER_CHOSEN, "seeker-" + player.getName()); + arena.seekers.add(player); + PlayerHandler.teleport(player, arena.arenaLocations.getSeekersWarp()); + player.getInventory().clear(); + player.setWalkSpeed(0.3F); + MemoryStorage.seekerTime.put(player, arena.waitingTimeSeeker); + + // Give the seeker their armor and sword + giveSeekerItems(player); + } + + /** + * Gives a seeker their armor, sword and bow items + * + * @param playerThe player to give seeker items to
+ */ + private void giveSeekerItems(Player player) { + ItemStack swordItem = new ItemStack(Material.DIAMOND_SWORD, 1); + swordItem.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 10); + player.getInventory().setItem(0, swordItem); + + player.getInventory().setHelmet(new ItemStack(Material.IRON_HELMET, 1)); + player.getInventory().setChestplate(new ItemStack(Material.IRON_CHESTPLATE, 1)); + player.getInventory().setLeggings(new ItemStack(Material.IRON_LEGGINGS, 1)); + player.getInventory().setBoots(new ItemStack(Material.IRON_BOOTS, 1)); + + ItemStack infinityBowItem = new ItemStack(Material.BOW, 1); + infinityBowItem.addEnchantment(Enchantment.ARROW_INFINITE, 1); + player.getInventory().setItem(1, infinityBowItem); + player.getInventory().setItem(2, new ItemStack(Material.ARROW, 1)); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + } + + /** + * Updates an arena that's currently in-game + * + * @param arenaThe arena to update
+ */ + private void updateInGameArena(Arena arena) { + arena.timer--; + + // If the game ends, trigger the hiders' win + if (arena.timer <= 0) { + ArenaHandler.hidersWin(arena); + return; + } + + // If "timeUntilHidersSword" has passed, give the hiders their sword + if (arena.timer == arena.gameTime - arena.timeUntilHidersSword) { + ItemStack sword = new ItemStack(Material.WOODEN_SWORD, 1); + sword.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2); + + for (Player arenaPlayer : arena.hiders) { + arenaPlayer.getInventory().addItem(sword); + MessageHelper.sendMessage(arenaPlayer, MessageKey.NORMAL_IN_GAME_GIVEN_SWORD); + } + } + + // Announce the type of blocks the remaining hiders are disguised as + if (arena.blockAnnouncerTime > 0 && arena.timer == arena.blockAnnouncerTime) { + SetA player that's currently a hider
+ */ + private void updateHiddenState(Player player) { + Location playerLocation = player.getLocation(); + Location moveLocation = MemoryStorage.moveLocation.get(player); + + // If the hider has somehow lost their disguise block from their inventory, + ItemStack inventoryBlock = player.getInventory().getItem(8); + if (inventoryBlock == null && MemoryStorage.playerBlock.get(player) != null) { + inventoryBlock = MemoryStorage.playerBlock.get(player); + player.getInventory().setItem(8, inventoryBlock); + } + + if (moveLocation == null || inventoryBlock == null) { + return; + } + + // If the player is standing still, try to turn the player into a solid block + if (moveLocation.getX() == playerLocation.getX() && moveLocation.getY() == playerLocation.getY() && + moveLocation.getZ() == playerLocation.getZ()) { + if (inventoryBlock.getAmount() > 1) { + // Just decrease the timer + inventoryBlock.setAmount(inventoryBlock.getAmount() - 1); + } else { + // Try to make the player solid + Block playerBlock = player.getLocation().getBlock(); + BlockData playerBlockData = playerBlock.getBlockData(); + if (playerBlockData.getMaterial().isAir() || playerBlockData.getMaterial().equals(Material.WATER)) { + makePlayerSolid(player, playerBlock, playerBlockData, inventoryBlock, playerLocation); + } else { + MessageHelper.sendMessage(player, MessageKey.WARNING_IN_GAME_NO_SOLID_PLACE); + } + } + } else { + // The player moved. Un-hide and reset the hide timer + inventoryBlock.setAmount(5); + if (!DisguiseAPI.isDisguised(player)) { + SolidBlockHandler.makePlayerUnsolid(player); + } + } + } + + /** + * Makes a player into a perceived solid block + * + * @param playerThe player to make solid
+ * @param playerBlockThe block the player is currently standing at
+ * @param playerBlockDataThe data of the block the player is currently standing at
+ * @param inventoryBlockThe inventory block which corresponds to the player's hide material
+ * @param playerLocationThe current location of the player
+ */ + private void makePlayerSolid(Player player, Block playerBlock, BlockData playerBlockData, ItemStack inventoryBlock, + Location playerLocation) { + // Store whether the player is replacing water so the water can be restored afterwards + if (playerBlockData.getMaterial().equals(Material.WATER)) { + MemoryStorage.hiddenLocationWater.put(player, true); + } else { + MemoryStorage.hiddenLocationWater.put(player, false); + } + + if (DisguiseAPI.isDisguised(player)) { + // Hide the player, and make all other players see a full block in the player's location + DisguiseAPI.undisguiseToAll(player); + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (!onlinePlayer.equals(player)) { + onlinePlayer.hidePlayer(this, player); + onlinePlayer.sendBlockChange(playerBlock.getLocation(), + inventoryBlock.getType().createBlockData()); + } + } + + inventoryBlock.addUnsafeEnchantment(Enchantment.DURABILITY, 10); + player.playSound(playerLocation, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1); + // Store the location the player is hidden at + MemoryStorage.hiddenLocation.put(player, playerLocation); + + // Announce to the player that they are now hidden + String blockName = inventoryBlock.getType().name(); + blockName = uppercaseAllFirst(blockName.replace("_", " ")); + MessageHelper.sendMessage(player, MessageKey.NORMAL_IN_GAME_NOW_SOLID, "block-" + + blockName); + } + + for (Player otherPlayer : Bukkit.getOnlinePlayers()) { + if (otherPlayer.equals(player)) { + continue; + } + + // Hide the player and update the perceived + otherPlayer.hidePlayer(this, player); + otherPlayer.sendBlockChange(playerBlock.getLocation(), inventoryBlock.getType().createBlockData()); } - return string; } } diff --git a/src/main/java/net/knarcraft/blockhunt/InventoryHandler.java b/src/main/java/net/knarcraft/blockhunt/InventoryHandler.java index b9993a8..1ea6b3c 100644 --- a/src/main/java/net/knarcraft/blockhunt/InventoryHandler.java +++ b/src/main/java/net/knarcraft/blockhunt/InventoryHandler.java @@ -5,8 +5,8 @@ import net.knarcraft.blockhunt.arena.ArenaProperty; import net.knarcraft.blockhunt.config.ConfigKey; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.config.Permission; -import net.knarcraft.blockhunt.manager.MessageManager; import net.knarcraft.blockhunt.manager.PermissionsManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -28,11 +28,11 @@ public class InventoryHandler { if (shorten.length() > 6) { shorten = shorten.substring(0, 6); } - Inventory panel = Bukkit.createInventory(null, 54, MessageManager.replaceAll("\u00A7r%N&lBlockHunt Arena: %A" + shorten)); + Inventory panel = Bukkit.createInventory(null, 54, MessageHelper.replaceAll("\u00A7r%N&lBlockHunt Arena: %A" + shorten)); ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1); ItemMeta arenaNameNote_IM = arenaNameNote.getItemMeta(); - arenaNameNote_IM.setDisplayName(MessageManager.replaceAll("%NBlockHunt arena: %A" + arena.arenaName)); + arenaNameNote_IM.setDisplayName(MessageHelper.replaceAll("%NBlockHunt arena: %A" + arena.arenaName)); arenaNameNote.setItemMeta(arenaNameNote_IM); panel.setItem(0, arenaNameNote); @@ -64,7 +64,7 @@ public class InventoryHandler { ItemStack disguiseBlocks_NOTE = new ItemStack(Material.BOOK, 1); ItemMeta disguiseBlocks_NOTE_IM = disguiseBlocks_NOTE.getItemMeta(); - disguiseBlocks_NOTE_IM.setDisplayName(MessageManager.replaceAll("%NSet the %AdisguiseBlocks%N.")); + disguiseBlocks_NOTE_IM.setDisplayName(MessageHelper.replaceAll("%NSet the %AdisguiseBlocks%N.")); disguiseBlocks_NOTE.setItemMeta(disguiseBlocks_NOTE_IM); panel.setItem(36, disguiseBlocks_NOTE); @@ -119,7 +119,7 @@ public class InventoryHandler { player.openInventory(panel); } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + arenaName); + MessageHelper.sendMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + arenaName); } } @@ -127,7 +127,7 @@ public class InventoryHandler { String addRemove, ItemStack upItem, ItemStack buttonItem, ItemStack downItem, int up, int button, int down) { ItemMeta upItemItemMeta = upItem.getItemMeta(); - upItemItemMeta.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.messages.get(MessageKey.BUTTON_ADD), + upItemItemMeta.setDisplayName(MessageHelper.replaceAll((String) MemoryStorage.messages.get(MessageKey.BUTTON_ADD), "1-" + addRemove, "2-" + option)); upItem.setItemMeta(upItemItemMeta); @@ -146,12 +146,12 @@ public class InventoryHandler { }; ItemMeta buttonItemMeta = buttonItem.getItemMeta(); - buttonItemMeta.setDisplayName(MessageManager.replaceAll( + buttonItemMeta.setDisplayName(MessageHelper.replaceAll( (String) MemoryStorage.messages.get(MessageKey.BUTTON_SETTING), "1-" + option, "2-" + setting)); buttonItem.setItemMeta(buttonItemMeta); ItemMeta DOWN_IM = downItem.getItemMeta(); - DOWN_IM.setDisplayName(MessageManager.replaceAll( + DOWN_IM.setDisplayName(MessageHelper.replaceAll( (String) MemoryStorage.messages.get(MessageKey.BUTTON_REMOVE), "1-" + addRemove, "2-" + option)); downItem.setItemMeta(DOWN_IM); @@ -162,13 +162,13 @@ public class InventoryHandler { public static void openDisguiseBlocks(Arena arena, Player player) { String arenaName = arena.arenaName; - Inventory panel = Bukkit.createInventory(null, 36, MessageManager.replaceAll("%N&lDisguiseBlocks")); + Inventory panel = Bukkit.createInventory(null, 36, MessageHelper.replaceAll("%N&lDisguiseBlocks")); ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1); ItemMeta arenaNameNoteItemMeta = arenaNameNote.getItemMeta(); - arenaNameNoteItemMeta.setDisplayName(MessageManager.replaceAll("%NDisguiseBlocks of arena: %A" + arenaName)); + arenaNameNoteItemMeta.setDisplayName(MessageHelper.replaceAll("%NDisguiseBlocks of arena: %A" + arenaName)); ListThe arena to announce to
+ * @param messageThe message to display
+ * @param variablesThe variables to replace in the message
+ */ public static void sendMessage(Arena arena, String message, String... variables) { - for (Player player : arena.playersInArena) { - String playerMessage = message.replaceAll("%player%", player.getDisplayName()); - player.sendMessage(MessageManager.replaceAll(playerMessage, variables)); - } + MessageHelper.broadcastMessage(arena.playersInArena, message, variables); } - public static void sendFMessage(Arena arena, Key location, String... variables) { - for (Player player : arena.playersInArena) { - Location realLocation = location.getConfigManager().getFile().getLocation(location.getPath()); - if (realLocation == null) { - continue; - } - String playerMessage = realLocation.toString().replaceAll("%player%", player.getDisplayName()); - player.sendMessage(MessageManager.replaceAll(playerMessage, variables)); - } + /** + * Sends a message to all players in an arena + * + * @param arenaThe arena to announce to
+ * @param messageKeyThe message key defining the string to display
+ * @param variablesThe variables to replace in the message
+ */ + public static void sendMessage(Arena arena, MessageKey messageKey, String... variables) { + MessageHelper.broadcastMessage(arena.playersInArena, messageKey, variables); } public static void playerJoinArena(Player player, String arenaName) { - boolean found; boolean alreadyJoined = false; for (Arena arena : MemoryStorage.arenaMap.values()) { if (arena.playersInArena != null && arena.playersInArena.contains(player)) { @@ -74,53 +76,49 @@ public class ArenaHandler { } if (alreadyJoined) { - MessageManager.sendFMessage(player, MessageKey.ERROR_JOIN_ALREADY_JOINED); + MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_ALREADY_JOINED); return; } Arena arena = MemoryStorage.arenaMap.get(arenaName.toLowerCase()); if (arena != null) { if (arena.disguiseBlocks.isEmpty()) { - MessageManager.sendFMessage(player, MessageKey.ERROR_JOIN_NO_BLOCKS_SET); + MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_NO_BLOCKS_SET); } else { boolean inventoryEmpty = true; for (ItemStack inventoryItem : player.getInventory()) { - if (inventoryItem != null) { - if (inventoryItem.getType() != Material.AIR) { - inventoryEmpty = false; - } + if (inventoryItem != null && inventoryItem.getType() != Material.AIR) { + inventoryEmpty = false; } } for (ItemStack inventoryItem : player.getInventory().getArmorContents()) { - if (inventoryItem != null) { - if (inventoryItem.getType() != Material.AIR) { - inventoryEmpty = false; - } + if (inventoryItem != null && inventoryItem.getType() != Material.AIR) { + inventoryEmpty = false; } } if ((Boolean) MemoryStorage.config.get(ConfigKey.REQUIRE_INVENTORY_CLEAR_ON_JOIN) && !inventoryEmpty) { - MessageManager.sendFMessage(player, MessageKey.ERROR_JOIN_INVENTORY_NOT_EMPTY); + MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_INVENTORY_NOT_EMPTY); return; } Location zero = new Location(Bukkit.getWorld(player.getWorld().getName()), 0, 0, 0, 0, 0); ArenaLocations locations = arena.arenaLocations; if (locations.getLobbyWarp() != null && locations.getHidersWarp() != null && - locations.getSeekersWarp() != null && locations.getSpawnWarp() != null) { + locations.getSeekersWarp() != null && locations.getExitWarp() != null) { if (!locations.getLobbyWarp().equals(zero) && !locations.getHidersWarp().equals(zero) && - !locations.getSeekersWarp().equals(zero) && !locations.getSpawnWarp().equals(zero)) { + !locations.getSeekersWarp().equals(zero) && !locations.getExitWarp().equals(zero)) { if (arena.gameState == ArenaState.WAITING || arena.gameState == ArenaState.STARTING) { if (arena.playersInArena.size() >= arena.maxPlayers && !PermissionsManager.hasPermission(player, Permission.JOIN_FULL, false)) { - MessageManager.sendFMessage(player, MessageKey.ERROR_JOIN_FULL); + MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_FULL); return; } boolean canWarp = PlayerHandler.teleport(player, locations.getLobbyWarp()); if (!canWarp) { - MessageManager.sendFMessage(player, MessageKey.ERROR_TELEPORT_FAILED); + MessageHelper.sendMessage(player, MessageKey.ERROR_TELEPORT_FAILED); return; } @@ -133,7 +131,7 @@ public class ArenaHandler { .getInventory().getArmorContents(), player.getExp(), player.getLevel(), player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(), player.getHealth(), player.getFoodLevel(), player.getActivePotionEffects(), player.getAllowFlight()); - MemoryStorage.pData.put(player, pad); + MemoryStorage.playerData.put(player, pad); player.setGameMode(GameMode.SURVIVAL); for (PotionEffect pe : player.getActivePotionEffects()) { @@ -176,15 +174,15 @@ public class ArenaHandler { } if ((Boolean) MemoryStorage.config.get(ConfigKey.SHOP_BLOCK_CHOOSER_V_1_ENABLED)) { - if (MemoryStorage.shop.getFile().get(player.getName() + ".blockchooser") != null + if (MemoryStorage.shop.getFileConfiguration().get(player.getName() + ".blockchooser") != null || PermissionsManager.hasPermission(player, Permission.SHOP_BLOCK_CHOOSER, false)) { ItemStack shopBlockChooser = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigKey.SHOP_BLOCK_CHOOSER_V_1_ID_NAME)), 1); ItemMeta shopBlockChooser_IM = shopBlockChooser.getItemMeta(); - shopBlockChooser_IM.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigKey.SHOP_BLOCK_CHOOSER_V_1_NAME))); - ListThe location of the lobby's warp
* @param hidersWarpThe location of the hiders' warp
* @param seekersWarpThe location of the temporary seekers warp (should not be able to see hiders from this location)
- * @param spawnWarpThe location of the spawn warp where players are sent once this arena's game ends
+ * @param exitWarpThe location of the exit warp where players are sent once this arena's game ends
*/ public ArenaLocations(@NotNull Location corner1, @NotNull Location corner2, @Nullable Location lobbyWarp, - @Nullable Location hidersWarp, @Nullable Location seekersWarp, @Nullable Location spawnWarp) { + @Nullable Location hidersWarp, @Nullable Location seekersWarp, @Nullable Location exitWarp) { this.corner1 = corner1; this.corner2 = corner2; this.lobbyWarp = lobbyWarp; this.hidersWarp = hidersWarp; this.seekersWarp = seekersWarp; - this.spawnWarp = spawnWarp; + this.exitWarp = exitWarp; } /** @@ -111,23 +111,23 @@ public class ArenaLocations { } /** - * Gets the location of the "spawn" warp + * Gets the location of the exit warp * *This location is where players are teleported to when leaving the arena
* - * @returnThe location of the "spawn" warp
+ * @returnThe location of the exit warp
*/ - public @Nullable Location getSpawnWarp() { - return spawnWarp; + public @Nullable Location getExitWarp() { + return exitWarp; } /** - * Sets the location of the "spawn" warp + * Sets the location of the exit warp * - * @param spawnWarpThe location of the "spawn" warp
+ * @param exitWarpThe location of the exit warp
*/ - public void setSpawnWarp(@NotNull Location spawnWarp) { - this.spawnWarp = spawnWarp; + public void setExitWarp(@NotNull Location exitWarp) { + this.exitWarp = exitWarp; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/BlockHuntCommand.java b/src/main/java/net/knarcraft/blockhunt/command/BlockHuntCommand.java index 87edc88..9b2c95f 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/BlockHuntCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/BlockHuntCommand.java @@ -3,8 +3,8 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.Command; -import net.knarcraft.blockhunt.manager.MessageManager; import net.knarcraft.blockhunt.manager.PermissionsManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -55,7 +55,7 @@ public class BlockHuntCommand implements CommandExecutor { if (commandRecord.enabled()) { return commandRecord.command().execute(player, arguments); } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_COMMAND_NOT_ENABLED); + MessageHelper.sendMessage(player, MessageKey.ERROR_COMMAND_NOT_ENABLED); } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/BlockHuntTabCompleter.java b/src/main/java/net/knarcraft/blockhunt/command/BlockHuntTabCompleter.java index f61cc31..82b0fd6 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/BlockHuntTabCompleter.java +++ b/src/main/java/net/knarcraft/blockhunt/command/BlockHuntTabCompleter.java @@ -18,6 +18,7 @@ public class BlockHuntTabCompleter implements TabCompleter { return command.mainTabList(); } } + //TODO: Make proper tab-completions return null; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java b/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java index 206b27c..ea9a98f 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java @@ -6,7 +6,7 @@ import net.knarcraft.blockhunt.arena.Arena; import net.knarcraft.blockhunt.arena.ArenaState; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -17,12 +17,12 @@ public class CreateCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { if (player == null) { - MessageManager.sendFMessage(null, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(null, MessageKey.ERROR_ONLY_IN_GAME); return true; } if (args.length <= 1) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getCreateCommand().usage()); } else { if (MemoryStorage.pos1.get(player) != null && MemoryStorage.pos2.get(player) != null) { @@ -35,19 +35,19 @@ public class CreateCommand extends DefaultCommand { new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), 10, 50, 8, new ArrayList<>(), ArenaState.WAITING, 0, new ArrayList<>(), Bukkit.getScoreboardManager().getNewScoreboard()); - MemoryStorage.arenas.getFile().set(args[1], arena); + MemoryStorage.arenas.getFileConfiguration().set(args[1], arena); MemoryStorage.arenas.save(); MemoryStorage.signs.load(); MemoryStorage.arenaMap.put(args[1].toLowerCase(), arena); ScoreboardHandler.createScoreboard(arena); - MessageManager.sendFMessage(player, MessageKey.NORMAL_CREATE_CREATED_ARENA, "name-" + args[1]); + MessageHelper.sendMessage(player, MessageKey.NORMAL_CREATE_CREATED_ARENA, "name-" + args[1]); } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_CREATE_NOT_SAME_WORLD); + MessageHelper.sendMessage(player, MessageKey.ERROR_CREATE_NOT_SAME_WORLD); } } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_CREATE_SELECTION_FIRST); + MessageHelper.sendMessage(player, MessageKey.ERROR_CREATE_SELECTION_FIRST); } } return true; diff --git a/src/main/java/net/knarcraft/blockhunt/command/HelpCommand.java b/src/main/java/net/knarcraft/blockhunt/command/HelpCommand.java index 01daee8..ca933bc 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/HelpCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/HelpCommand.java @@ -4,8 +4,8 @@ import net.knarcraft.blockhunt.BlockHunt; import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.config.ConfigKey; import net.knarcraft.blockhunt.manager.Command; -import net.knarcraft.blockhunt.manager.MessageManager; import net.knarcraft.blockhunt.manager.PermissionsManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class HelpCommand extends DefaultCommand { @@ -26,15 +26,15 @@ public class HelpCommand extends DefaultCommand { int page = 1; if (args.length == 1) { - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages); int i = 1; for (Command command : MemoryStorage.commands) { if (i <= 4) { if (command.usage() != null) { if (PermissionsManager.hasPermission(player, command.permission(), false)) { - MessageManager.sendMessage(player, "%A" + command.usage() + "%N - " + MemoryStorage.messages.getFile().get(command.help().getPath())); + MessageHelper.sendMessage(player, "%A" + command.usage() + "%N - " + MemoryStorage.messages.getFileConfiguration().get(command.help().getPath())); } else { - MessageManager.sendMessage(player, "%MemoryStorage" + command.usage() + "%N - " + MemoryStorage.messages.getFile().get(command.help().getPath())); + MessageHelper.sendMessage(player, "%MemoryStorage" + command.usage() + "%N - " + MemoryStorage.messages.getFileConfiguration().get(command.help().getPath())); } i = i + 1; } @@ -51,7 +51,7 @@ public class HelpCommand extends DefaultCommand { maxPages = page; } - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName() + " %Nhelp page %A" + page + "%N/%A" + maxPages); int i = 1; for (Command command : MemoryStorage.commands) { @@ -59,9 +59,9 @@ public class HelpCommand extends DefaultCommand { if (command.usage() != null) { if (i >= ((page - 1) * 4) + 1 && i <= ((page - 1) * 4) + 4) { if (PermissionsManager.hasPermission(player, command.permission(), false)) { - MessageManager.sendMessage(player, "%A" + command.usage() + "%N - " + MemoryStorage.messages.getFile().get(command.help().getPath())); + MessageHelper.sendMessage(player, "%A" + command.usage() + "%N - " + MemoryStorage.messages.getFileConfiguration().get(command.help().getPath())); } else { - MessageManager.sendMessage(player, "%MemoryStorage" + command.usage() + "%N - " + MemoryStorage.messages.getFile().get(command.help().getPath())); + MessageHelper.sendMessage(player, "%MemoryStorage" + command.usage() + "%N - " + MemoryStorage.messages.getFileConfiguration().get(command.help().getPath())); } } i = i + 1; @@ -69,7 +69,7 @@ public class HelpCommand extends DefaultCommand { } } } - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oHelp Page"); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oHelp Page"); return true; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/InfoCommand.java b/src/main/java/net/knarcraft/blockhunt/command/InfoCommand.java index 9d5352a..a918e4d 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/InfoCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/InfoCommand.java @@ -3,23 +3,23 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.BlockHunt; import net.knarcraft.blockhunt.config.ConfigKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class InfoCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName()); - MessageManager.sendMessage(player, "%A%name%%N made by %A%authors%%N.", "name-" + + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName()); + MessageHelper.sendMessage(player, "%A%name%%N made by %A%authors%%N.", "name-" + BlockHunt.getPluginDescriptionFile().getName(), "authors-" + BlockHunt.getPluginDescriptionFile().getAuthors().get(0)); - MessageManager.sendMessage(player, "%NVersion: %A%version%%N.", "version-" + BlockHunt.getPluginDescriptionFile().getVersion()); - MessageManager.sendMessage(player, "%NType %A%helpusage% %Nfor help.", "helpusage-" + + MessageHelper.sendMessage(player, "%NVersion: %A%version%%N.", "version-" + BlockHunt.getPluginDescriptionFile().getVersion()); + MessageHelper.sendMessage(player, "%NType %A%helpusage% %Nfor help.", "helpusage-" + CommandManager.getHelpCommand().usage()); - MessageManager.sendMessage(player, "%NDev-Page: %Ahttp://dev.bukkit.org/bukkit-plugins/blockhunt/"); - MessageManager.sendMessage(player, "%NDonations are welcome!"); - MessageManager.sendMessage(player, "%NMade by help from some friends &c<3%N!"); - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oInfo Page"); + MessageHelper.sendMessage(player, "%NDev-Page: %Ahttp://dev.bukkit.org/bukkit-plugins/blockhunt/"); + MessageHelper.sendMessage(player, "%NDonations are welcome!"); + MessageHelper.sendMessage(player, "%NMade by help from some friends &c<3%N!"); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oInfo Page"); return true; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/JoinCommand.java b/src/main/java/net/knarcraft/blockhunt/command/JoinCommand.java index 1c0dcf1..f484f00 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/JoinCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/JoinCommand.java @@ -3,7 +3,7 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.arena.ArenaHandler; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class JoinCommand extends DefaultCommand { @@ -12,13 +12,13 @@ public class JoinCommand extends DefaultCommand { public boolean execute(Player player, String[] args) { if (player != null) { if (args.length <= 1) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getJoinCommand().usage()); } else { ArenaHandler.playerJoinArena(player, args[1]); } } else { - MessageManager.sendFMessage(null, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(null, MessageKey.ERROR_ONLY_IN_GAME); } return true; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/LeaveCommand.java b/src/main/java/net/knarcraft/blockhunt/command/LeaveCommand.java index 11c08fc..bf7883e 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/LeaveCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/LeaveCommand.java @@ -2,7 +2,7 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.arena.ArenaHandler; import net.knarcraft.blockhunt.config.MessageKey; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class LeaveCommand extends DefaultCommand { @@ -12,7 +12,7 @@ public class LeaveCommand extends DefaultCommand { if (player != null) { ArenaHandler.playerLeaveArena(player, true, true); } else { - MessageManager.sendFMessage(null, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(null, MessageKey.ERROR_ONLY_IN_GAME); } return true; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java b/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java index 1d95392..a90953d 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java @@ -4,24 +4,24 @@ import net.knarcraft.blockhunt.BlockHunt; import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.arena.Arena; import net.knarcraft.blockhunt.config.ConfigKey; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class ListCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName()); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName()); if (MemoryStorage.arenaMap.size() >= 1) { - MessageManager.sendMessage(player, "&7Available arena(s):"); + MessageHelper.sendMessage(player, "&7Available arena(s):"); for (Arena arena : MemoryStorage.arenaMap.values()) { - MessageManager.sendMessage(player, "%A" + arena.arenaName); + MessageHelper.sendMessage(player, "%A" + arena.arenaName); } } else { - MessageManager.sendMessage(player, "&7&oNo arenas available..."); - MessageManager.sendMessage(player, "&7&oCreate an arena first please."); + MessageHelper.sendMessage(player, "&7&oNo arenas available..."); + MessageHelper.sendMessage(player, "&7&oCreate an arena first please."); } - MessageManager.sendFMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oArenas list"); + MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-&oArenas list"); return true; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/NotFoundCommand.java b/src/main/java/net/knarcraft/blockhunt/command/NotFoundCommand.java index b8f2c67..7b92365 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/NotFoundCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/NotFoundCommand.java @@ -1,14 +1,14 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.config.MessageKey; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class NotFoundCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { - MessageManager.sendFMessage(player, MessageKey.ERROR_COMMAND_NOT_FOUND); + MessageHelper.sendMessage(player, MessageKey.ERROR_COMMAND_NOT_FOUND); return true; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java b/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java index 15ceea1..1c25dff 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java @@ -5,7 +5,7 @@ import net.knarcraft.blockhunt.arena.Arena; import net.knarcraft.blockhunt.arena.ArenaHandler; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.ConfigManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class ReloadCommand extends DefaultCommand { @@ -26,7 +26,7 @@ public class ReloadCommand extends DefaultCommand { } ArenaHandler.loadArenas(); - MessageManager.sendFMessage(player, MessageKey.NORMAL_RELOADED_CONFIGS); + MessageHelper.sendMessage(player, MessageKey.NORMAL_RELOADED_CONFIGS); return true; } } diff --git a/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java b/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java index d161369..852fe75 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java @@ -4,7 +4,7 @@ import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.arena.Arena; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -17,20 +17,20 @@ public class RemoveCommand extends DefaultCommand { public boolean execute(Player player, String[] args) { if (player != null) { if (args.length <= 1) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getRemoveCommand().usage()); } else { Arena arena = MemoryStorage.arenaMap.get(args[1].toLowerCase()); if (arena != null) { - MessageManager.sendFMessage(player, MessageKey.NORMAL_REMOVE_REMOVED_ARENA, "name-" + args[1]); - MemoryStorage.arenas.getFile().set(args[1], null); - for (String sign : MemoryStorage.signs.getFile().getKeys(false)) { - if (MemoryStorage.signs.getFile().get(sign + ".arenaName").toString().equalsIgnoreCase(args[1])) { - Location signLoc = (Location) MemoryStorage.signs.getFile().get(sign + ".location"); + MessageHelper.sendMessage(player, MessageKey.NORMAL_REMOVE_REMOVED_ARENA, "name-" + args[1]); + MemoryStorage.arenas.getFileConfiguration().set(args[1], null); + for (String sign : MemoryStorage.signs.getFileConfiguration().getKeys(false)) { + if (MemoryStorage.signs.getFileConfiguration().get(sign + ".arenaName").toString().equalsIgnoreCase(args[1])) { + Location signLoc = (Location) MemoryStorage.signs.getFileConfiguration().get(sign + ".location"); signLoc.getBlock().setType(Material.AIR); signLoc.getWorld().playEffect(signLoc, Effect.MOBSPAWNER_FLAMES, 0); signLoc.getWorld().playSound(signLoc, Sound.ENTITY_ENDER_DRAGON_FLAP, 1, 1); - MemoryStorage.signs.getFile().set(sign, null); + MemoryStorage.signs.getFileConfiguration().set(sign, null); } } @@ -41,10 +41,10 @@ public class RemoveCommand extends DefaultCommand { return true; } - MessageManager.sendFMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + args[1]); + MessageHelper.sendMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + args[1]); } } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(player, MessageKey.ERROR_ONLY_IN_GAME); } return true; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/SetCommand.java b/src/main/java/net/knarcraft/blockhunt/command/SetCommand.java index d0f16da..8eabb79 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/SetCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/SetCommand.java @@ -3,7 +3,7 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.InventoryHandler; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class SetCommand extends DefaultCommand { @@ -12,14 +12,14 @@ public class SetCommand extends DefaultCommand { public boolean execute(Player player, String[] args) { if (player != null) { if (args.length <= 1) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getSetCommand().usage()); } else { String arenaName = args[1]; InventoryHandler.openPanel(player, arenaName); } } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(player, MessageKey.ERROR_ONLY_IN_GAME); } return true; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java b/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java index c11fc2f..970fcca 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java @@ -6,7 +6,7 @@ import net.knarcraft.blockhunt.arena.ArenaHandler; import net.knarcraft.blockhunt.arena.ArenaLocations; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -16,7 +16,7 @@ public class SetWarpCommand extends DefaultCommand { public boolean execute(Player player, String[] args) { if (player != null) { if (args.length <= 2) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.setWarpCommand().usage()); } else { String arenaName = args[2]; @@ -29,34 +29,34 @@ public class SetWarpCommand extends DefaultCommand { if (warpName.equalsIgnoreCase("lobby")) { locations.setLobbyWarp(playerLocation); save(arena); - MessageManager.sendFMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); } else if (warpName.equalsIgnoreCase("hiders")) { locations.setHidersWarp(playerLocation); save(arena); - MessageManager.sendFMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); } else if (warpName.equalsIgnoreCase("seekers")) { locations.setSeekersWarp(playerLocation); save(arena); - MessageManager.sendFMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); } else if (warpName.equalsIgnoreCase("spawn")) { - locations.setSpawnWarp(playerLocation); + locations.setExitWarp(playerLocation); save(arena); - MessageManager.sendFMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_SET_WARP_WARP_SET, "warp-" + warpName); } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_SET_WARP_WARP_NOT_FOUND, "warp-" + warpName); + MessageHelper.sendMessage(player, MessageKey.ERROR_SET_WARP_WARP_NOT_FOUND, "warp-" + warpName); } } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + arenaName); + MessageHelper.sendMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + arenaName); } } } else { - MessageManager.sendFMessage(null, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(null, MessageKey.ERROR_ONLY_IN_GAME); } return true; } public void save(Arena arena) { - MemoryStorage.arenas.getFile().set(arena.arenaName, arena); + MemoryStorage.arenas.getFileConfiguration().set(arena.arenaName, arena); MemoryStorage.arenas.save(); ArenaHandler.loadArenas(); } diff --git a/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java b/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java index b8c186d..59bb150 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java @@ -5,7 +5,7 @@ import net.knarcraft.blockhunt.arena.Arena; import net.knarcraft.blockhunt.arena.ArenaState; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.entity.Player; public class StartCommand extends DefaultCommand { @@ -14,7 +14,7 @@ public class StartCommand extends DefaultCommand { public boolean execute(Player player, String[] args) { if (player != null) { if (args.length <= 1) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getStartCommand().usage()); } else { Arena arena = MemoryStorage.arenaMap.get(args[1].toLowerCase()); @@ -24,9 +24,9 @@ public class StartCommand extends DefaultCommand { if (arena.playersInArena.size() >= 2) { arena.timer = 11; arena.gameState = ArenaState.STARTING; - MessageManager.sendFMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName); } else { - MessageManager.sendFMessage(player, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-2"); + MessageHelper.sendMessage(player, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-2"); } } else if (arena.gameState.equals(ArenaState.STARTING)) { if (arena.playersInArena.size() < arena.maxPlayers) { @@ -37,14 +37,14 @@ public class StartCommand extends DefaultCommand { arena.timer = 1; } - MessageManager.sendFMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName); + MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName); } } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + args[1]); + MessageHelper.sendMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + args[1]); } } } else { - MessageManager.sendFMessage(null, MessageKey.ERROR_ONLY_IN_GAME); + MessageHelper.sendMessage(null, MessageKey.ERROR_ONLY_IN_GAME); } return true; } diff --git a/src/main/java/net/knarcraft/blockhunt/command/TokensCommand.java b/src/main/java/net/knarcraft/blockhunt/command/TokensCommand.java index ed7dd3d..7314342 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/TokensCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/TokensCommand.java @@ -3,7 +3,7 @@ package net.knarcraft.blockhunt.command; import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.config.MessageKey; import net.knarcraft.blockhunt.manager.CommandManager; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -13,7 +13,7 @@ public class TokensCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { if (args.length <= 3) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_ENOUGH_ARGUMENTS, "syntax-" + CommandManager.getTokensCommand().usage()); } else { String option = args[1]; @@ -22,13 +22,13 @@ public class TokensCommand extends DefaultCommand { try { amount = Integer.parseInt(args[3]); } catch (NumberFormatException e) { - MessageManager.sendFMessage(player, MessageKey.ERROR_NOT_A_NUMBER, "1-" + args[3]); + MessageHelper.sendMessage(player, MessageKey.ERROR_NOT_A_NUMBER, "1-" + args[3]); return true; } Player tokenPlayer = Bukkit.getPlayer(playerName); if (tokenPlayer == null) { - MessageManager.sendFMessage(player, MessageKey.ERROR_TOKENS_PLAYER_NOT_ONLINE, "%playerName%-" + playerName); + MessageHelper.sendMessage(player, MessageKey.ERROR_TOKENS_PLAYER_NOT_ONLINE, "%playerName%-" + playerName); return true; } String name = "\u00A78Console"; @@ -37,30 +37,30 @@ public class TokensCommand extends DefaultCommand { } if (option.equalsIgnoreCase("set")) { - MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", amount); + MemoryStorage.shop.getFileConfiguration().set(tokenPlayer.getName() + ".tokens", amount); MemoryStorage.shop.save(); - MessageManager.sendFMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Set", "%playerName%-" + tokenPlayer.getName(), "option2-to", "amount-" + amount); - MessageManager.sendFMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-set", "%playerName%-" + name, "option2-to", "amount-" + amount); + MessageHelper.sendMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Set", "%playerName%-" + tokenPlayer.getName(), "option2-to", "amount-" + amount); + MessageHelper.sendMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-set", "%playerName%-" + name, "option2-to", "amount-" + amount); } else if (option.equalsIgnoreCase("add")) { int tokens = 0; - if (MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens") != 0) { - tokens = MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens"); + if (MemoryStorage.shop.getFileConfiguration().getInt(tokenPlayer.getName() + ".tokens") != 0) { + tokens = MemoryStorage.shop.getFileConfiguration().getInt(tokenPlayer.getName() + ".tokens"); } - MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", tokens + amount); + MemoryStorage.shop.getFileConfiguration().set(tokenPlayer.getName() + ".tokens", tokens + amount); MemoryStorage.shop.save(); - MessageManager.sendFMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Added", "%playerName%-" + tokenPlayer.getName(), "option2-to", "amount-" + amount); - MessageManager.sendFMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-added", "%playerName%-" + name, "option2-to", "amount-" + amount); + MessageHelper.sendMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Added", "%playerName%-" + tokenPlayer.getName(), "option2-to", "amount-" + amount); + MessageHelper.sendMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-added", "%playerName%-" + name, "option2-to", "amount-" + amount); } else if (option.equalsIgnoreCase("take")) { int tokens = 0; - if (MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens") != 0) { - tokens = MemoryStorage.shop.getFile().getInt(tokenPlayer.getName() + ".tokens"); + if (MemoryStorage.shop.getFileConfiguration().getInt(tokenPlayer.getName() + ".tokens") != 0) { + tokens = MemoryStorage.shop.getFileConfiguration().getInt(tokenPlayer.getName() + ".tokens"); } - MemoryStorage.shop.getFile().set(tokenPlayer.getName() + ".tokens", tokens - amount); + MemoryStorage.shop.getFileConfiguration().set(tokenPlayer.getName() + ".tokens", tokens - amount); MemoryStorage.shop.save(); - MessageManager.sendFMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Took", "%playerName%-" + tokenPlayer.getName(), "option2-from", "amount-" + amount); - MessageManager.sendFMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-took", "%playerName%-" + name, "option2-from", "amount-" + amount); + MessageHelper.sendMessage(player, MessageKey.NORMAL_TOKENS_CHANGED, "option-Took", "%playerName%-" + tokenPlayer.getName(), "option2-from", "amount-" + amount); + MessageHelper.sendMessage(tokenPlayer, MessageKey.NORMAL_TOKENS_CHANGED_PERSON, "option-took", "%playerName%-" + name, "option2-from", "amount-" + amount); } else { - MessageManager.sendFMessage(player, MessageKey.ERROR_TOKENS_UNKNOWN_SETTING, "option-" + option); + MessageHelper.sendMessage(player, MessageKey.ERROR_TOKENS_UNKNOWN_SETTING, "option-" + option); } } return true; diff --git a/src/main/java/net/knarcraft/blockhunt/command/WandCommand.java b/src/main/java/net/knarcraft/blockhunt/command/WandCommand.java index afc1f87..5e01022 100644 --- a/src/main/java/net/knarcraft/blockhunt/command/WandCommand.java +++ b/src/main/java/net/knarcraft/blockhunt/command/WandCommand.java @@ -1,9 +1,10 @@ package net.knarcraft.blockhunt.command; +import net.knarcraft.blockhunt.BlockHunt; import net.knarcraft.blockhunt.MemoryStorage; import net.knarcraft.blockhunt.config.ConfigKey; import net.knarcraft.blockhunt.config.MessageKey; -import net.knarcraft.blockhunt.manager.MessageManager; +import net.knarcraft.blockhunt.util.MessageHelper; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -12,29 +13,39 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.logging.Level; public class WandCommand extends DefaultCommand { @Override public boolean execute(Player player, String[] args) { if (player != null) { - ItemStack wand = new ItemStack(Material.getMaterial((String) MemoryStorage.config.get(ConfigKey.WAND_ID_NAME))); - ItemMeta im = wand.getItemMeta(); - im.setDisplayName(MessageManager.replaceAll((String) MemoryStorage.config.get(ConfigKey.WAND_NAME))); + Material material = Material.getMaterial((String) MemoryStorage.config.get(ConfigKey.WAND_ID_NAME)); + if (material == null) { + BlockHunt.plugin.getLogger().log(Level.SEVERE, "Invalid wand material specified in the config file!"); + return true; + } + ItemStack wand = new ItemStack(material); + ItemMeta itemMeta = wand.getItemMeta(); + Objects.requireNonNull(itemMeta).setDisplayName(MessageHelper.replaceAll( + (String) MemoryStorage.config.get(ConfigKey.WAND_NAME))); MemoryStorage.config.load(); - ListThe placeholder used to specify this message type
+ * @param configKeysThe configuration keys used to select this chat message type
+ */ + ChatMessageTypeIdentifier(String placeholder, ConfigKey... configKeys) { + this.placeholder = placeholder; + this.configKeys = configKeys; + } + + /** + * Replaces every instance of this chat message type identifier + * + * @param inputThe input string to replace for
+ * @returnThe input with this chat message type identifier replaced
+ */ + public String replace(String input) { + StringBuilder replacement = new StringBuilder(); + for (ConfigKey key : configKeys) { + replacement.append((String) MemoryStorage.config.get(key)); + } + return input.replaceAll(this.placeholder, replacement.toString()); + } + + /** + * Replaces every instance for every chat message type identifier + * + * @param inputThe input string to replace for
+ * @returnThe input with all chat message type identifiers replaced
+ */ + public static String replaceAll(String input) { + for (ChatMessageTypeIdentifier identifier : ChatMessageTypeIdentifier.values()) { + input = identifier.replace(input); + } + return input; + } + +} diff --git a/src/main/java/net/knarcraft/blockhunt/config/MessageKey.java b/src/main/java/net/knarcraft/blockhunt/config/MessageKey.java index 2498a99..2b77437 100644 --- a/src/main/java/net/knarcraft/blockhunt/config/MessageKey.java +++ b/src/main/java/net/knarcraft/blockhunt/config/MessageKey.java @@ -49,8 +49,10 @@ public enum MessageKey implements Key { "normal.createCreatedArena"), NORMAL_LOBBY_ARENA_IS_STARTING("%TAG%NThe arena will start in %A%1%%N second(s)!", "normal.lobbyArenaIsStarting"), - NORMAL_LOBBY_ARENA_STARTED("%TAG%NThe arena has been started! The seeker is coming to find you in " + - "%A%secs%%N seconds!", "normal.lobbyArenaStarted"), + NORMAL_LOBBY_ARENA_STARTED_HIDERS("%TAG%NThe arena has been started! The seeker is coming to find you" + + " in %A%seconds%%N seconds!", "normal.lobbyArenaStartedHiders"), + NORMAL_LOBBY_ARENA_STARTED_SEEKERS("%TAG%NThe arena has been started! You can start seeking in " + + "%A%seconds%%N seconds!", "normal.lobbyArenaStartedSeekers"), NORMAL_IN_GAME_SEEKER_CHOSEN("%TAG%NPlayer %A%seeker%%N has been chosen as seeker!", "normal.inGameSeekerChosen"), NORMAL_IN_GAME_BLOCK("%TAG%NYou're disguised as a(n) '%A%block%%N' block.", "normal.inGameBlock"), @@ -61,7 +63,7 @@ public enum MessageKey implements Key { NORMAL_IN_GAME_HIDER_DIED("%TAG%NHider %A%%playerName%%%N was killed by %A%killer%%N!", "normal.inGameHiderDied"), NORMAL_IN_GAME_HIDERS_LEFT("%NHider(s) left: %A%left%%N", "normal.inGameHidersLeft"), - NORMAL_IN_GAME_SEEKER_DIED("%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%secs%%N" + + NORMAL_IN_GAME_SEEKER_DIED("%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%seconds%%N" + "seconds!", "normal.inGameSeekerDied"), normal_winSeekers("%TAG%NThe %ASEEKERS%N have won!", "normal.winSeekers"), NORMAL_WIN_HIDERS("%TAG%NThe %AHIDERS%N have won!", "normal.winHiders"), diff --git a/src/main/java/net/knarcraft/blockhunt/config/Permission.java b/src/main/java/net/knarcraft/blockhunt/config/Permission.java index 80bbb40..e26197b 100644 --- a/src/main/java/net/knarcraft/blockhunt/config/Permission.java +++ b/src/main/java/net/knarcraft/blockhunt/config/Permission.java @@ -19,7 +19,7 @@ public enum Permission { SIGN_CREATE("signcreate", PermissionDefault.MODERATOR), REMOVE("remove", PermissionDefault.ADMIN), TOKENS("tokens", PermissionDefault.ADMIN), - ALL_COMMANDS("allcommands", PermissionDefault.OP); + ; public final String perm; public final PermissionDefault type; diff --git a/src/main/java/net/knarcraft/blockhunt/event/EndArenaEvent.java b/src/main/java/net/knarcraft/blockhunt/event/EndArenaEvent.java index 901e9b6..5776cf0 100644 --- a/src/main/java/net/knarcraft/blockhunt/event/EndArenaEvent.java +++ b/src/main/java/net/knarcraft/blockhunt/event/EndArenaEvent.java @@ -8,12 +8,13 @@ import org.jetbrains.annotations.NotNull; import java.util.List; +@SuppressWarnings("unused") public class EndArenaEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private ListThe triggered interaction event
+ * @param playerThe player that interacted with a block
+ * @param blockThe block the player clicked
+ */ + private void handleWandClick(PlayerInteractEvent event, Player player, Block block) { + ItemStack item = player.getInventory().getItemInMainHand(); + if (item.getType() == Material.AIR || item.getItemMeta() == null || !item.getItemMeta().hasDisplayName()) { + return; + } + + ItemMeta itemMeta = item.getItemMeta(); + if (!itemMeta.getDisplayName().equals(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.WAND_NAME)))) { + return; + } + + Action action = event.getAction(); + if (!event.hasBlock() || block == null) { + return; + } + + Location location = block.getLocation(); + if (!action.equals(Action.LEFT_CLICK_BLOCK) && !action.equals(Action.RIGHT_CLICK_BLOCK)) { + return; + } + + event.setCancelled(true); + + int number; + MapAlso replaces the "%player%" variable to the player's name
+ * + * @param playerThe player to receive the message
+ * @param messageThe message to send to a player
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void sendMessage(Player player, String message, String... variables) { + if (message == null) { + return; + } + String playerString = player == null ? "Console" : player.getDisplayName(); + message = MessageHelper.replaceAll(message.replaceAll("%player%", playerString), variables); + Objects.requireNonNullElseGet(player, Bukkit::getConsoleSender).sendMessage(message); + } + + /** + * Sends a message to a player defined + * + *Also replaces the "%player%" variable to the player's name
+ * + * @param playerThe player to receive the message
+ * @param messageKeyA key pointing to a message
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void sendMessage(Player player, Key messageKey, String... variables) { + sendMessage(player, getMessageFromConfig(player, messageKey), variables); + } + + /** + * Sends a message to the specified players + * + *Also replaces the "%player%" variable to the player's name.
+ * + * @param playersThe players to broadcast the message to
+ * @param messageThe message to send to a player
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void broadcastMessage(Collection extends Player> players, String message, String... variables) { + if (message == null) { + return; + } + for (Player player : players) { + sendMessage(player, message, variables); + } + } + + /** + * Sends a message to all players online + * + *Also replaces the "%player%" variable to the player's name.
+ * + * @param messageThe message to send to a player
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void broadcastMessage(String message, String... variables) { + broadcastMessage(Bukkit.getOnlinePlayers(), message, variables); + } + + /** + * Sends a message to the specified players + * + *Also replaces the "%player%" variable to the player's name.
+ * + * @param playersThe players to broadcast the message to
+ * @param messageKeyA key pointing to a message
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void broadcastMessage(Collection extends Player> players, Key messageKey, String... variables) { + broadcastMessage(players, getMessageFromConfig(null, messageKey), variables); + } + + /** + * Sends a message to all players online + * + *Also replaces the "%player%" variable to the player's name.
+ * + * @param messageKeyA key pointing to a message
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ */ + public static void broadcastMessage(Key messageKey, String... variables) { + broadcastMessage(getMessageFromConfig(null, messageKey), variables); + } + + /** + * Replaces all variables and color variables in a string + * + * @param messageThe message to replace variables for
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ * @returnThe input string with any variables and color variables replaced
+ */ + public static String replaceAll(String message, String... variables) { + return MessageHelper.replaceColors(MessageHelper.replaceFormattingVariables( + MessageHelper.replaceVariables(message, variables))); + } + + /** + * Replaces default Minecraft colour codes + * + * @param messageThe message to replace color codes for
+ * @returnThe input string with any default colors replaced
+ */ + public static String replaceColors(String message) { + return ChatColor.translateAlternateColorCodes('&', message); + } + + /** + * Replaces special formatting variables defined by this plugin + * + * @param messageThe message to replace formatting placeholders for
+ * @returnThe input string with any formatting placeholders replaced
+ */ + public static String replaceFormattingVariables(String message) { + return ChatMessageTypeIdentifier.replaceAll(message); + } + + /** + * Replaces custom variables + * + * @param messageThe message to replace variables for
+ * @param variablesVariables specified with the format "name-value" corresponding to %name%
+ * @returnThe input string with any variables replaced
+ */ + public static String replaceVariables(String message, String... variables) { + for (String variable : variables) { + // Note: The splitting needs to be limited, or negative numbers will become empty strings + String[] split = variable.split("-", 2); + message = message.replaceAll("%" + split[0] + "%", split[1]); + } + return message; + } + + /** + * Gets a message from the messages configuration file + * + * @param playerThe player to get the message for, or null
+ * @param messageKeyThe key specifying the message
+ * @returnThe stored message, or null if not found
+ */ + private static String getMessageFromConfig(Player player, Key messageKey) { + String message = messageKey.getConfigManager().getFileConfiguration().getString(messageKey.getPath(), null); + if (message == null) { + BlockHunt.plugin.getLogger().log(Level.SEVERE, "Unable to read value for " + messageKey.getPath()); + if (player != null) { + player.sendMessage("An error occurred while generating a BlockHunt message. " + + "Please notify an administrator."); + } + } + return message; + } + +} diff --git a/src/main/java/net/knarcraft/blockhunt/util/StringHelper.java b/src/main/java/net/knarcraft/blockhunt/util/StringHelper.java new file mode 100644 index 0000000..b06e08f --- /dev/null +++ b/src/main/java/net/knarcraft/blockhunt/util/StringHelper.java @@ -0,0 +1,37 @@ +package net.knarcraft.blockhunt.util; + +public final class StringHelper { + + private StringHelper() { + + } + + /** + * Turns the first character of each of a string's words into uppercase + * + * @param inputThe input to uppercase
+ * @returnThe input string with more uppercase
+ */ + public static String uppercaseAllFirst(String input) { + String[] parts = input.split(" "); + for (int i = 0; i < parts.length; i++) { + parts[i] = parts[i].substring(0, 1).toUpperCase() + parts[i].substring(1); + } + return String.join(" ", parts); + } + + /** + * Gets an object array as a string array by running toString + * + * @param arrayThe input array
+ * @returnThe resulting string array
+ */ + public static String[] toString(Object[] array) { + String[] output = new String[array.length]; + for (int i = 0; i < array.length; i++) { + output[i] = array[i].toString(); + } + return output; + } + +} diff --git a/src/main/resources/lang/messages.properties b/src/main/resources/lang/messages.properties index d7721b3..c8fe387 100644 --- a/src/main/resources/lang/messages.properties +++ b/src/main/resources/lang/messages.properties @@ -30,7 +30,8 @@ wandGaveWand='%TAG%NHere you go! &o(Use the %A&o%type%%N&o!)' wandSetPosition='%TAG%NSet position %A#%number%%N to location: (%A%x%%N, %A%y%%N,%A%z%%N).' createCreatedArena='%TAG%NCreated an arena with the name ''%A%name%%N''.' lobbyArenaIsStarting='%TAG%NThe arena will start in %A%1%%N second(s)!' -lobbyArenaStarted='%TAG%NThe arena has been started! The seeker is coming to find you in %A%secs%%N seconds!' +lobbyArenaStartedHiders='%TAG%NThe arena has been started! The seeker is coming to find you in %A%seconds%%N seconds!' +lobbyArenaStartedSeekers='%TAG%NThe arena has been started! You can start seeking in %A%seconds%%N seconds!' inGameSeekerChosen='%TAG%NPlayer %A%seeker%%N has been chosen as seeker!' inGameBlock='%TAG%NYou''re disguised as a(n) ''%A%block%%N'' block.' inGameArenaEnd='%TAG%NThe arena will end in %A%1%%N second(s)!' @@ -38,7 +39,7 @@ inGameSeekerSpawned='%TAG%A%%playerName%%%N has spawned as a seeker!' inGameGivenSword='%TAG%NYou were given a sword!' inGameHiderDied='%TAG%NHider %A%%playerName%%%N was killed by %A%killer%%N!' inGameHidersLeft='%NHider(s) left: %A%left%%N' -inGameSeekerDied='%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%secs%%N seconds!' +inGameSeekerDied='%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%seconds%%N seconds!' winSeekers='%TAG%NThe %ASEEKERS%N have won!' winHiders='%TAG%NThe %AHIDERS%N have won!' setWarpWarpSet='%TAG%NSet warp ''%A%warp%%N'' to your location!' diff --git a/src/main/resources/lang/messages_en.properties b/src/main/resources/lang/messages_en.properties index d7721b3..c8fe387 100644 --- a/src/main/resources/lang/messages_en.properties +++ b/src/main/resources/lang/messages_en.properties @@ -30,7 +30,8 @@ wandGaveWand='%TAG%NHere you go! &o(Use the %A&o%type%%N&o!)' wandSetPosition='%TAG%NSet position %A#%number%%N to location: (%A%x%%N, %A%y%%N,%A%z%%N).' createCreatedArena='%TAG%NCreated an arena with the name ''%A%name%%N''.' lobbyArenaIsStarting='%TAG%NThe arena will start in %A%1%%N second(s)!' -lobbyArenaStarted='%TAG%NThe arena has been started! The seeker is coming to find you in %A%secs%%N seconds!' +lobbyArenaStartedHiders='%TAG%NThe arena has been started! The seeker is coming to find you in %A%seconds%%N seconds!' +lobbyArenaStartedSeekers='%TAG%NThe arena has been started! You can start seeking in %A%seconds%%N seconds!' inGameSeekerChosen='%TAG%NPlayer %A%seeker%%N has been chosen as seeker!' inGameBlock='%TAG%NYou''re disguised as a(n) ''%A%block%%N'' block.' inGameArenaEnd='%TAG%NThe arena will end in %A%1%%N second(s)!' @@ -38,7 +39,7 @@ inGameSeekerSpawned='%TAG%A%%playerName%%%N has spawned as a seeker!' inGameGivenSword='%TAG%NYou were given a sword!' inGameHiderDied='%TAG%NHider %A%%playerName%%%N was killed by %A%killer%%N!' inGameHidersLeft='%NHider(s) left: %A%left%%N' -inGameSeekerDied='%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%secs%%N seconds!' +inGameSeekerDied='%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%seconds%%N seconds!' winSeekers='%TAG%NThe %ASEEKERS%N have won!' winHiders='%TAG%NThe %AHIDERS%N have won!' setWarpWarpSet='%TAG%NSet warp ''%A%warp%%N'' to your location!' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 73ad655..0573273 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -21,4 +21,109 @@ commands: - hs - seekandfind - saf - - sf \ No newline at end of file + - sf + +permissions: + blockhunt.*: + description: Gives all BlockHunt permissions + default: false + children: + - blockhunt.admin + - blockhunt.moderator + - blockhunt.player + - blockhunt.allcommands + blockhunt.admin: + description: Gives all admin-related BlockHunt permissions + default: false + children: + - blockhunt.reload + - blockhunt.create + - blockhunt.remove + - blockhunt.tokens + - blockhunt.shop.blockchooser + blockhunt.moderator: + description: Gives all moderator-related BlocHunt permissions + default: false + children: + - blockhunt.start + - blockhunt.set + - blockhunt.setWarp + - blockhunt.joinfull + - blockhunt.signcreate + blockhunt.player: + description: Gives all player-related BlockHunt permissions + default: false + children: + - blockhunt.join + - blockhunt.leave + - blockhunt.list + - blockhunt.shop + - blockhunt.joinsign + blockhunt.allcommands: + description: Gives access to all BlockHunt commands + default: op + children: + - blockhunt.info + - blockhunt.help + - blockhunt.reload + - blockhunt.join + - blockhunt.leave + - blockhunt.list + - blockhunt.shop + - blockhunt.start + - blockhunt.create + - blockhunt.set + - blockhunt.setWarp + - blockhunt.remove + - blockhunt.tokens + blockhunt.info: + description: Gives access to the "/bh info" command + default: true + blockhunt.help: + description: Gives access to the "/bh help" command + default: true + blockhunt.reload: + description: Gives access to the "/bh reload" command + default: false + blockhunt.join: + description: Gives access to the "/bh join" command + default: false + blockhunt.leave: + description: Gives access to the "/bh leave" command + default: false + blockhunt.list: + description: Gives access to the "/bh list" command + default: false + blockhunt.shop: + description: Gives access to the "/bh shop" command + default: false + blockhunt.start: + description: Gives access to the "/bh start" command + default: false + blockhunt.create: + description: Gives access to the "/bh create" and "/bh wand" commands + default: false + blockhunt.set: + description: Gives access to the "/bh set" command + default: false + blockhunt.setWarp: + description: Gives access to the "/bh setWarp" command + default: false + blockhunt.remove: + description: Gives access to the "/bh remove" command + default: false + blockhunt.tokens: + description: Gives access to the "/bh tokens" command + default: false + blockhunt.joinfull: + description: Gives access to joining a full BlockHunt arena + default: false + blockhunt.joinsign: + description: Gives access to join/leave sign usage + default: false + blockhunt.signcreate: + description: Gives access to create a join/leave sign + default: false + blockhunt.shop.blockchooser: + description: Gives access to the block chooser + default: false \ No newline at end of file diff --git a/src/test/resources/messages.yml b/src/test/resources/messages.yml index f507dc5..82a42ef 100644 --- a/src/test/resources/messages.yml +++ b/src/test/resources/messages.yml @@ -33,8 +33,9 @@ normal: %A%z%%N).' createCreatedArena: '%TAG%NCreated an arena with the name ''%A%name%%N''.' lobbyArenaIsStarting: '%TAG%NThe arena will start in %A%1%%N second(s)!' - lobbyArenaStarted: '%TAG%NThe arena has been started! The seeker is coming to find - you in %A%secs%%N seconds!' + lobbyArenaStartedHiders: '%TAG%NThe arena has been started! The seeker is coming to find + you in %A%seconds%%N seconds!' + lobbyArenaStartedSeekers: "%TAG%NThe arena has been started! You can start seeking in %A%seconds%%N seconds!" inGameSeekerChosen: '%TAG%NPlayer %A%seeker%%N has been chosen as seeker!' inGameBlock: '%TAG%NYou''re disguised as a(n) ''%A%block%%N'' block.' inGameArenaEnd: '%TAG%NThe arena will end in %A%1%%N second(s)!' @@ -42,7 +43,7 @@ normal: inGameGivenSword: '%TAG%NYou were given a sword!' inGameHiderDied: '%TAG%NHider %A%%playerName%%%N was killed by %A%killer%%N!' inGameHidersLeft: '%NHider(s) left: %A%left%%N' - inGameSeekerDied: '%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%secs%%N + inGameSeekerDied: '%TAG%NSeeker %A%%playerName%%%N died and will respawn in %A%seconds%%N seconds!' winSeekers: '%TAG%NThe %ASEEKERS%N have won!' winHiders: '%TAG%NThe %AHIDERS%N have won!'