From 38fd4f57406c428b5feb343edfb41945774b4cf4 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 12 Apr 2022 15:11:49 -0400 Subject: [PATCH] added custom leaderboard, bug fixes --- .../hideAndSeek/configuration/Config.java | 161 +++++++++++------- .../configuration/ConfigManager.java | 14 ++ .../configuration/Localization.java | 9 +- .../tylermurphy/hideAndSeek/game/Board.java | 118 +++++++------ .../hideAndSeek/game/EventListener.java | 8 + .../tylermurphy/hideAndSeek/game/Game.java | 34 +--- src/main/resources/config.yml | 26 ++- .../resources/lang/localization_de-DE.yml | 1 + .../resources/lang/localization_en-US.yml | 7 +- src/main/resources/leaderboard.yml | 87 ++++++++++ 10 files changed, 326 insertions(+), 139 deletions(-) create mode 100644 src/main/resources/leaderboard.yml diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java index 98b27b2..5213f5d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java @@ -22,9 +22,12 @@ package net.tylermurphy.hideAndSeek.configuration; import net.tylermurphy.hideAndSeek.util.Version; import org.bukkit.util.Vector; +import java.util.Collections; +import java.util.List; + public class Config { - private static ConfigManager manager; + private static ConfigManager config, leaderboard; public static String messagePrefix, @@ -80,106 +83,148 @@ public class Config { seekerPingLevel1, seekerPingLevel2, seekerPingLevel3; + + public static String + LOBBY_TITLE, + GAME_TITLE, + COUNTDOWN_WAITING, + COUNTDOWN_COUNTING, + COUNTDOWN_ADMINSTART, + TAUNT_COUNTING, + TAUNT_ACTIVE, + TAUNT_EXPIRED, + GLOW_ACTIVE, + GLOW_INACTIVE, + BORDER_COUNTING, + BORDER_DECREASING; + + public static List + LOBBY_CONTENTS, + GAME_CONTENTS; + + public static List + blockedCommands; public static void loadConfig() { - manager = new ConfigManager("config.yml"); - manager.saveConfig(); + config = new ConfigManager("config.yml"); + config.saveConfig(); + leaderboard = new ConfigManager("leaderboard.yml"); + leaderboard.saveConfig(); //Spawn spawnPosition = new Vector( - manager.getDouble("spawns.game.x"), - Math.max(0, Math.min(255, manager.getDouble("spawns.game.y"))), - manager.getDouble("spawns.game.z") + config.getDouble("spawns.game.x"), + Math.max(0, Math.min(255, config.getDouble("spawns.game.y"))), + config.getDouble("spawns.game.z") ); - spawnWorld = manager.getString("spawns.game.world"); + spawnWorld = config.getString("spawns.game.world"); ///Lobby lobbyPosition = new Vector( - manager.getDouble("spawns.lobby.x"), - Math.max(0, Math.min(255, manager.getDouble("spawns.lobby.y"))), - manager.getDouble("spawns.lobby.z") + config.getDouble("spawns.lobby.x"), + Math.max(0, Math.min(255, config.getDouble("spawns.lobby.y"))), + config.getDouble("spawns.lobby.z") ); - lobbyWorld = manager.getString("spawns.lobby.world"); + lobbyWorld = config.getString("spawns.lobby.world"); - announceMessagesToNonPlayers = manager.getBoolean("announceMessagesToNonPlayers"); + announceMessagesToNonPlayers = config.getBoolean("announceMessagesToNonPlayers"); exitPosition = new Vector( - manager.getDouble("spawns.exit.x"), - Math.max(0, Math.min(255, manager.getDouble("spawns.exit.y"))), - manager.getDouble("spawns.exit.z") + config.getDouble("spawns.exit.x"), + Math.max(0, Math.min(255, config.getDouble("spawns.exit.y"))), + config.getDouble("spawns.exit.z") ); - exitWorld = manager.getString("spawns.exit.world"); + exitWorld = config.getString("spawns.exit.world"); //World border worldborderPosition = new Vector( - manager.getInt("worldBorder.x"), + config.getInt("worldBorder.x"), 0, - manager.getInt("worldBorder.z") + config.getInt("worldBorder.z") ); - worldborderSize = Math.max(100, manager.getInt("worldBorder.size")); - worldborderDelay = Math.max(1, manager.getInt("worldBorder.delay")); - worldborderEnabled = manager.getBoolean("worldBorder.enabled"); + worldborderSize = Math.max(100, config.getInt("worldBorder.size")); + worldborderDelay = Math.max(1, config.getInt("worldBorder.delay")); + worldborderEnabled = config.getBoolean("worldBorder.enabled"); //Prefix char SYMBOLE = '\u00A7'; String SYMBOLE_STRING = String.valueOf(SYMBOLE); - messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING); - errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING); - tauntPrefix = manager.getString("prefix.taunt").replace("&", SYMBOLE_STRING); - worldborderPrefix = manager.getString("prefix.border").replace("&", SYMBOLE_STRING); - abortPrefix = manager.getString("prefix.abort").replace("&", SYMBOLE_STRING); - gameoverPrefix = manager.getString("prefix.gameover").replace("&", SYMBOLE_STRING); - warningPrefix = manager.getString("prefix.warning").replace("&", SYMBOLE_STRING); + messagePrefix = config.getString("prefix.default").replace("&", SYMBOLE_STRING); + errorPrefix = config.getString("prefix.error").replace("&", SYMBOLE_STRING); + tauntPrefix = config.getString("prefix.taunt").replace("&", SYMBOLE_STRING); + worldborderPrefix = config.getString("prefix.border").replace("&", SYMBOLE_STRING); + abortPrefix = config.getString("prefix.abort").replace("&", SYMBOLE_STRING); + gameoverPrefix = config.getString("prefix.gameover").replace("&", SYMBOLE_STRING); + warningPrefix = config.getString("prefix.warning").replace("&", SYMBOLE_STRING); //Map Bounds - saveMinX = manager.getInt("bounds.min.x"); - saveMinZ = manager.getInt("bounds.min.z"); - saveMaxX = manager.getInt("bounds.max.x"); - saveMaxZ = manager.getInt("bounds.max.z"); + saveMinX = config.getInt("bounds.min.x"); + saveMinZ = config.getInt("bounds.min.z"); + saveMaxX = config.getInt("bounds.max.x"); + saveMaxZ = config.getInt("bounds.max.z"); //Taunt - tauntEnabled = manager.getBoolean("taunt.enabled"); - tauntCountdown = manager.getBoolean("taunt.showCountdown"); - tauntDelay = Math.max(60,manager.getInt("taunt.delay")); - tauntLast = manager.getBoolean("taunt.whenLastPerson"); + tauntEnabled = config.getBoolean("taunt.enabled"); + tauntCountdown = config.getBoolean("taunt.showCountdown"); + tauntDelay = Math.max(60, config.getInt("taunt.delay")); + tauntLast = config.getBoolean("taunt.whenLastPerson"); //Glow - glowLength = Math.max(1,manager.getInt("glow.time")); - glowStackable = manager.getBoolean("glow.stackable"); - glowEnabled = manager.getBoolean("glow.enabled") && Version.atLeast("1.9"); + glowLength = Math.max(1, config.getInt("glow.time")); + glowStackable = config.getBoolean("glow.stackable"); + glowEnabled = config.getBoolean("glow.enabled") && Version.atLeast("1.9"); //Lobby - minPlayers = Math.max(2, manager.getInt("minPlayers")); - countdown = Math.max(10,manager.getInt("lobby.countdown")); - changeCountdown = Math.max(minPlayers,manager.getInt("lobby.changeCountdown")); - lobbyMin = Math.max(minPlayers,manager.getInt("lobby.min")); - lobbyMax = manager.getInt("lobby.max"); - lobbyCountdownEnabled = manager.getBoolean("lobby.enabled"); + minPlayers = Math.max(2, config.getInt("minPlayers")); + countdown = Math.max(10, config.getInt("lobby.countdown")); + changeCountdown = Math.max(minPlayers, config.getInt("lobby.changeCountdown")); + lobbyMin = Math.max(minPlayers, config.getInt("lobby.min")); + lobbyMax = config.getInt("lobby.max"); + lobbyCountdownEnabled = config.getBoolean("lobby.enabled"); //SeekerPing - seekerPing = manager.getBoolean("seekerPing.enabled"); - seekerPingLevel1 = manager.getInt("seekerPing.distances.level1"); - seekerPingLevel2 = manager.getInt("seekerPing.distances.level2"); - seekerPingLevel3 = manager.getInt("seekerPing.distances.level3"); + seekerPing = config.getBoolean("seekerPing.enabled"); + seekerPingLevel1 = config.getInt("seekerPing.distances.level1"); + seekerPingLevel2 = config.getInt("seekerPing.distances.level2"); + seekerPingLevel3 = config.getInt("seekerPing.distances.level3"); //Other - nametagsVisible = manager.getBoolean("nametagsVisible"); - permissionsRequired = manager.getBoolean("permissionsRequired"); - gameLength = manager.getInt("gameLength"); - pvpEnabled = manager.getBoolean("pvp"); - autoJoin = manager.getBoolean("autoJoin"); - teleportToExit = manager.getBoolean("teleportToExit"); - locale = manager.getString("locale", "local"); + nametagsVisible = config.getBoolean("nametagsVisible"); + permissionsRequired = config.getBoolean("permissionsRequired"); + gameLength = config.getInt("gameLength"); + pvpEnabled = config.getBoolean("pvp"); + autoJoin = config.getBoolean("autoJoin"); + teleportToExit = config.getBoolean("teleportToExit"); + locale = config.getString("locale", "local"); + blockedCommands = config.getStringList("blockedCommands"); + + //Leaderboard + LOBBY_TITLE = leaderboard.getString("lobby.title"); + GAME_TITLE = leaderboard.getString("game.title"); + LOBBY_CONTENTS = leaderboard.getStringList("lobby.content"); + Collections.reverse(LOBBY_CONTENTS); + GAME_CONTENTS = leaderboard.getStringList("game.content"); + Collections.reverse(GAME_CONTENTS); + COUNTDOWN_WAITING = leaderboard.getString("countdown.waiting"); + COUNTDOWN_COUNTING = leaderboard.getString("countdown.counting"); + COUNTDOWN_ADMINSTART = leaderboard.getString("countdown.adminStart"); + TAUNT_COUNTING = leaderboard.getString("taunt.counting"); + TAUNT_ACTIVE = leaderboard.getString("taunt.active"); + TAUNT_EXPIRED = leaderboard.getString("taunt.expired"); + GLOW_ACTIVE = leaderboard.getString("glow.active"); + GLOW_INACTIVE = leaderboard.getString("glow.inactive"); + BORDER_COUNTING = leaderboard.getString("border.counting"); + BORDER_DECREASING = leaderboard.getString("border.decreasing"); } public static void addToConfig(String path, Object value) { - manager.set(path, value); + config.set(path, value); } public static void saveConfig() { - manager.saveConfig(); + config.saveConfig(); } } \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java index 2217273..66073cd 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/ConfigManager.java @@ -26,6 +26,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.Map; public class ConfigManager { @@ -121,6 +122,10 @@ public class ConfigManager { } } + public int getDefaultInt(String path){ + return defaultConfig.getInt(path); + } + public String getString(String path){ String value = config.getString(path); if(value == null){ @@ -144,6 +149,15 @@ public class ConfigManager { } } + public List getStringList(String path){ + List value = config.getStringList(path); + if(value == null){ + return defaultConfig.getStringList(path); + } else { + return value; + } + } + public void reset(String path){ config.set(path, defaultConfig.get(path)); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java index 5ea9e53..07402d1 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Localization.java @@ -29,18 +29,21 @@ public class Localization { public static final Map LOCAL = new HashMap<>(); - private static final String[][] CHANGES = {{"WORLDBORDER_DECREASING"}}; + private static final Map CHANGES = new HashMap() {{ + put("en-US", new String[][]{{"WORLDBORDER_DECREASING"},{"START","TAUNTED"}}); + put("de-DE", new String[][]{{}}); + }}; public static void loadLocalization() { ConfigManager manager = new ConfigManager("localization.yml", "lang"+File.separator+"localization_"+Config.locale +".yml"); - int PLUGIN_VERSION = 2; + int PLUGIN_VERSION = manager.getDefaultInt("version"); int VERSION = manager.getInt("version"); if(VERSION < PLUGIN_VERSION){ for(int i = VERSION; i < PLUGIN_VERSION; i++){ if(i < 1) continue; - String[] changeList = CHANGES[i-1]; + String[] changeList = CHANGES.get(Config.locale)[i-1]; for(String change : changeList) manager.reset("Localization." + change); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java index 71060b9..fd75040 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java @@ -21,10 +21,7 @@ package net.tylermurphy.hideAndSeek.game; import static net.tylermurphy.hideAndSeek.configuration.Config.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import net.tylermurphy.hideAndSeek.util.Status; @@ -151,19 +148,28 @@ public class Board { board = new CustomBoard(player, "&l&eHIDE AND SEEK"); board.updateTeams(); } - board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER %" + ChatColor.WHITE + getHiderPercent()); - board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER %" + ChatColor.WHITE + getSeekerPercent()); - board.addBlank(); - board.setLine("players", "Players: " + playerList.values().size()); - board.addBlank(); - if(lobbyCountdownEnabled){ - if(Game.countdownTime == -1){ - board.setLine("waiting", "Waiting for players..."); + int i=0; + for(String line : LOBBY_CONTENTS){ + if(line.equalsIgnoreCase("")){ + board.addBlank(); + } else if(line.contains("{COUNTDOWN}")){ + if(!lobbyCountdownEnabled){ + board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_ADMINSTART)); + } else if(Game.countdownTime == -1){ + board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_WAITING)); + } else { + board.setLine(String.valueOf(i), line.replace("{COUNTDOWN}", COUNTDOWN_COUNTING.replace("{AMOUNT}",Game.countdownTime+""))); + } + } else if(line.contains("{COUNT}")){ + board.setLine(String.valueOf(i), line.replace("{COUNT}", getPlayers().size()+"")); + } else if(line.contains("{SEEKER%}")){ + board.setLine(String.valueOf(i), line.replace("{SEEKER%}", getSeekerPercent()+"")); + } else if(line.contains("{HIDER%}")){ + board.setLine(String.valueOf(i), line.replace("{HIDER%}", getHiderPercent()+"")); } else { - board.setLine("waiting", "Starting in: "+ChatColor.GREEN + Game.countdownTime+"s"); + board.setLine(String.valueOf(i), line); } - } else { - board.setLine("waiting", "Waiting for gamemaster..."); + i++; } board.display(); customBoards.put(player.getName(), board); @@ -176,42 +182,58 @@ public class Board { private static void createGameBoard(Player player, boolean recreate){ CustomBoard board = customBoards.get(player.getName()); if(recreate) { - board = new CustomBoard(player, "&l&eHIDE AND SEEK"); + board = new CustomBoard(player, GAME_TITLE); board.updateTeams(); } - board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDERS:" + ChatColor.WHITE + " " + Hider.size()); - board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size()); - board.addBlank(); - if(glowEnabled){ - if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning()) - board.setLine("glow", "Glow: " + ChatColor.RED + "Inactive"); - else - board.setLine("glow", "Glow: " + ChatColor.GREEN + "Active"); - } - if(tauntEnabled && tauntCountdown){ - if(Game.taunt == null || Game.status == Status.STARTING) - board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "0m0s"); - else if(!tauntLast && Hider.size() == 1){ - board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Expired"); - } else if(!Game.taunt.isRunning()) - board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Game.taunt.getDelay()/60 + "m" + Game.taunt.getDelay()%60 + "s"); - else - board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Active"); - } - if(worldborderEnabled){ - if(Game.worldBorder == null || Game.status == Status.STARTING){ - board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "0m0s"); - } else if(!Game.worldBorder.isRunning()) { - board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + Game.worldBorder.getDelay()/60 + "m" + Game.worldBorder.getDelay()%60 + "s"); + + int i = 0; + for(String line : GAME_CONTENTS){ + if(line.equalsIgnoreCase("")){ + board.addBlank(); } else { - board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "Decreasing"); + if(line.contains("{TIME}")) { + String value = Game.timeLeft/60 + "m" + Game.timeLeft%60 + "s"; + board.setLine(String.valueOf(i), line.replace("{TIME}", value)); + } else if(line.contains("{TEAM}")) { + String value = getTeam(player); + board.setLine(String.valueOf(i), line.replace("{TEAM}", value)); + } else if(line.contains("{BORDER}")) { + if(!worldborderEnabled) continue; + if(Game.worldBorder == null || Game.status == Status.STARTING){ + board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replace("{AMOUNT}", "0"))); + } else if(!Game.worldBorder.isRunning()) { + board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_COUNTING.replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()/60+"").replaceFirst("\\{AMOUNT}", Game.worldBorder.getDelay()%60+""))); + } else { + board.setLine(String.valueOf(i), line.replace("{BORDER}", BORDER_DECREASING)); + } + } else if(line.contains("{TAUNT}")){ + if(!tauntEnabled) continue; + if(Game.taunt == null || Game.status == Status.STARTING) { + board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replace("{AMOUNT}", "0"))); + } else if(!tauntLast && Hider.size() == 1){ + board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_EXPIRED)); + } else if(!Game.taunt.isRunning()) { + board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_COUNTING.replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() / 60 + "").replaceFirst("\\{AMOUNT}", Game.taunt.getDelay() % 60 + ""))); + } else { + board.setLine(String.valueOf(i), line.replace("{TAUNT}", TAUNT_ACTIVE)); + } + } else if(line.contains("{GLOW}")){ + if(!glowEnabled) return; + if(Game.glow == null || Game.status == Status.STARTING || !Game.glow.isRunning()) { + board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_INACTIVE)); + } else { + board.setLine(String.valueOf(i), line.replace("{GLOW}", GLOW_ACTIVE)); + } + } else if(line.contains("{#SEEKER}")) { + board.setLine(String.valueOf(i), line.replace("{#SEEKER}", getSeekers().size()+"")); + } else if(line.contains("{#HIDER}")) { + board.setLine(String.valueOf(i), line.replace("{#HIDER}", getHiders().size()+"")); + } else { + board.setLine(String.valueOf(i), line); + } } + i++; } - if(glowEnabled || (tauntEnabled && tauntCountdown) || worldborderEnabled) - board.addBlank(); - board.setLine("time", "Time Left: " + ChatColor.GREEN + Game.timeLeft/60 + "m" + Game.timeLeft%60 + "s"); - board.addBlank(); - board.setLine("team", "Team: " + getTeam(player)); board.display(); customBoards.put(player.getName(), board); } @@ -332,9 +354,9 @@ class CustomBoard { public void setLine(String key, String message){ Line line = LINES.get(key); if(line == null) - addLine(key, message); + addLine(key, ChatColor.translateAlternateColorCodes('&',message)); else - updateLine(key, message); + updateLine(key, ChatColor.translateAlternateColorCodes('&',message)); } private void addLine(String key, String message){ diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java index 9271e5c..698d650 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java @@ -271,5 +271,13 @@ public class EventListener implements Listener { } } } + for(String handle : blockedCommands){ + System.out.println(handle); + if(array[0].substring(1).equalsIgnoreCase(handle) && Board.isPlayer(player) && Game.status != Status.STANDBY){ + player.sendMessage(errorPrefix + message("BLOCKED_COMMAND")); + event.setCancelled(true); + break; + } + } } } \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index 3b1a0dd..a016a4e 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -96,6 +96,7 @@ public class Game { for(Player player : Board.getSeekers()) { player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false)); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1000000,127,false,false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP,1000000,128,false,false)); Titles.sendTitle(player, 10, 70, 20, ChatColor.RED + "" + ChatColor.BOLD + "SEEKER", ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString()); } for(Player player : Board.getHiders()) { @@ -273,8 +274,10 @@ public class Game { countdownTime = countdown; if(Board.size() >= changeCountdown) countdownTime = Math.min(countdownTime, 10); - if(tick % 20 == 0) + if(tick % 20 == 0) { countdownTime--; + Board.reloadLobbyBoards(); + } if(countdownTime == 0){ Optional rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst(); if(!rand.isPresent()){ @@ -308,22 +311,6 @@ public class Game { distance = temp; } } -// if(seekerPing) switch(tick%10) { -// case 0: -// if(distance < seekerPingLevel1) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_BASEDRUM.parseSound(), .5f, 1f); -// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f); -// break; -// case 3: -// if(distance < seekerPingLevel1) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_BASEDRUM.parseSound(), .3f, 1f); -// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f); -// break; -// case 6: -// if(distance < seekerPingLevel3) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f); -// break; -// case 9: -// if(distance < seekerPingLevel2) Packet.playSound(hider, XSound.BLOCK_NOTE_BLOCK_PLING.parseSound(), .3f, 1f); -// break; -// } if(seekerPing) switch(tick%10) { case 0: if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .5f, 1f); @@ -390,21 +377,18 @@ class Glow { public void onProjectile() { if(glowStackable) glowTime += glowLength; else glowTime = glowLength; - if(!running) - startGlow(); + running = true; } - private void startGlow() { - running = true; - for(Player hider : Board.getHiders()) { - for(Player seeker : Board.getSeekers()) { + private void sendPackets(){ + for(Player hider : Board.getHiders()) + for(Player seeker : Board.getSeekers()) Packet.setGlow(hider, seeker, true); - } - } } protected void update() { if(running) { + sendPackets(); glowTime--; glowTime = Math.max(glowTime, 0); if (glowTime == 0) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1e3cbda..0cb2517 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,11 @@ +#============================================================# +# +--------------------------------------------------------+ # +# | Kenshins Hide and Seek | # +# | Configuration file | # +# | by KenshinEto | # +# +--------------------------------------------------------+ # +#============================================================# + # How long in seconds will the game last, set it < 1 to disable # default: 1200 aka 20min gameLength: 1200 @@ -30,7 +38,7 @@ pvp: true autoJoin: false # (When autoJoin is false), when players join the world containing the lobby, they are automatically teleported -# to the designated exit position so that they possibly don't spawn in the lobby while not in the queue. Anyone +# to the designated exit position so that they don't spawn in the lobby while not in the queue. Anyone # who ever joins in the game world (the duplicated world where the game is played) will always be teleported # out regardless. # default: false @@ -105,13 +113,27 @@ seekerPing: # de-DE (German - Germany) locale: "en-US" +# Block's commands being run by any user while playing the game. +# Can be usefully If you aren't using a permission plugin and want +# to op people, but still want to block certain commands. +# Not really usefully if using permission plugins. +# You can add /kill for any use, but it's already blocked on those +# playing the game. +blockedCommands: + - msg + - tp + - gamemode + - kill + - give + - effect + # ---------------------------------------------------------- # # ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING # # ---------------------------------------------------------- # # The 2 coordinate bounds that will contain your hideAndSeek map. Its recommended # that you use /hs setbounds for this, and not edit this directly, as breaking -# this section will completely break the entire plugin when you run /hs mapsave. +# this section will completely break the entire plugin when you run /hs savemap. bounds: min: x: 0 diff --git a/src/main/resources/lang/localization_de-DE.yml b/src/main/resources/lang/localization_de-DE.yml index d2dcc1e..67c14fd 100644 --- a/src/main/resources/lang/localization_de-DE.yml +++ b/src/main/resources/lang/localization_de-DE.yml @@ -64,6 +64,7 @@ Localization: NOT_AT_ZERO: "Bitte nicht an einer Position setzen, die eine Koordinate bei 0 enthält." NO_GAME_INFO: "Keine Informationen zum Gameplay für diesen Spieler vorhanden." INFORMATION_FOR: "Gewinninformationen für {PLAYER}:" + BLOCKED_COMMAND: "Command blocked by Kenshin's Hide And Seek" # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE version: 2 diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index 93cbd4e..16dacc8 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -37,7 +37,7 @@ Localization: WORLDBORDER_ENABLE: "Set border center to current location, size to {AMOUNT}, and delay to {AMOUNT}." WORLDBORDER_DECREASING: "World border decreasing by 100 blocks over the next 30s." WORLDBORDER_WARN: "World border will shrink in the next 30s!" - TAUNTED: "$c$oOh no! You have been chosen to be taunted." + TAUNTED: "&c&oOh no! You have been chosen to be taunted." TAUNT: "A random hider will be taunted in the next 30s." TAUNT_ACTIVATE: "Taunt has been activated." ERROR_GAME_SPAWN: "Please set game spawn location first" @@ -54,7 +54,7 @@ Localization: START_MIN_PLAYERS: "You must have at least {AMOUNT} players to start." START_INVALID_NAME: "Invalid player: {PLAYER}." START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!" - START: "Attention SEEKERS, its time to fin the hiders!" + START: "Attention SEEKERS, its time to find the hiders!" STOP: "Game has been force stopped." HIDERS_SUBTITLE: "Hide away from the seekers" SEEKERS_SUBTITLE: "Eliminate all hiders" @@ -64,7 +64,8 @@ Localization: NOT_AT_ZERO: "Please do not set at a location containing a coordinate at 0." NO_GAME_INFO: "Player has no gameplay information." INFORMATION_FOR: "Win information for {PLAYER}:" + BLOCKED_COMMAND: "Command blocked by Hide And Seek plugin." # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE -version: 2 +version: 3 type: "en-US" \ No newline at end of file diff --git a/src/main/resources/leaderboard.yml b/src/main/resources/leaderboard.yml new file mode 100644 index 0000000..376ae9f --- /dev/null +++ b/src/main/resources/leaderboard.yml @@ -0,0 +1,87 @@ +#============================================================# +# +--------------------------------------------------------+ # +# | Kenshins Hide and Seek | # +# | Leaderboard file | # +# | by KenshinEto | # +# +--------------------------------------------------------+ # +#============================================================# +# This config file allows you to change what is displayed on the scoreboard\leaderboard +# while in the lobby, or in the game. Below are a list of predefined placeholders. +# +# LOBBY BOARD PLACEHOLDERS +# +# {COUNTDOWN} - Displays the time left in the lobby countdown. If there are not enough +# people in the lobby, or the lobby countdown its disabled, it just +# displays waiting for players. The text displayed can be changed below. +# {COUNT} - The amount of player currently in the lobby. +# {SEEKER%} - The chance that a player will be selected to be a seeker. +# {HIDER%} - The chance that a player will be selected to be a hider. +# +# GAME BOARD PLACEHOLDERS +# +# {TIME} - The amount of time left in the game in MmSs. +# {TEAM} - The team you are on. Hider, Seeker, or Spectator. +# {BORDER} - The current status of the world boarder, if enabled. +# If the world border is disabled, this line is removed +# automatically. Displays the time left until the border +# moves in MmSs, or "Decreasing" if it's decreasing. +# What is displayed exactly can be changed below. +# {TAUNT} - The current status of the taunt system, if enabled. +# If taunts are disabled, any line with {TAUNT} will be +# automatically removed. Shows the time left till next +# taunt in MmSs, if the taunt is active, and if the taunt +# has expired (one player left). What is displayed exactly +# can be changed below. +# {GLOW} - The current status of the glow powerup, if enabled. +# This line is automatically removed if the glow poewrup +# is disabled. Tells all players if a Glow powerup is active, +# only Hiders will be able to see its effects though. +# {#SEEKER} - Number of current seekers. +# {#HIDER} - Number of current hiders. +# +# YOU CANNOT USE TWO PLACEHOLDERS ON THE SAME LINE. ONLY THE FIRST ONE WILL +# BE CHANGED, AND THE SECOND ONE WILL SAY A PLACEHOLDER MARKER! + +lobby: + title: "&eHIDE AND SEEK" + content: [ + "{COUNTDOWN}", + "", + "Players: {COUNT}", + "", + "&cSEEKER % &f{SEEKER%}", + "&6HIDER % &f{HIDER%}" + ] + +game: + title: "&eHIDE AND SEEK" + content: [ + "Team: {TEAM}", + "", + "Time Left: &a{TIME}", + "", + "Taunt: &e{TAUNT}", + "Glow: {GLOW}", + "WorldBorder: &b{BORDER}", + "", + "&cSEEKERS: &f{#SEEKER}", + "&6HIDERS: &f{#HIDER}" + ] + +countdown: + waiting: "Waiting for players..." + adminStart: "Waiting for gamemaster..." + counting: "Starting in: $a{AMOUNT}s" + +taunt: + counting: "{AMOUNT}m{AMOUNT}s" + active: "Active" + expired: "Expired" + +glow: + active: "&aActive" + inactive: "&cInactive" + +border: + counting: "{AMOUNT}m{AMOUNT}s" + decreasing: "Decreasing" \ No newline at end of file