diff --git a/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDown.java b/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDown.java index a534dcd..95be454 100644 --- a/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDown.java +++ b/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDown.java @@ -35,6 +35,7 @@ import cz.boosik.boosCooldown.Listeners.BoosPlayerToggleSprintListener; import cz.boosik.boosCooldown.Listeners.BoosSignChangeListener; import cz.boosik.boosCooldown.Listeners.BoosSignInteractListener; import cz.boosik.boosCooldown.Managers.BoosConfigManager; +import cz.boosik.boosCooldown.Managers.BoosCoolDownManager; import cz.boosik.boosCooldown.Managers.BoosLimitManager; import cz.boosik.boosCooldown.Runnables.BoosGlobalLimitResetRunnable; import net.milkbowl.vault.Vault; @@ -209,6 +210,25 @@ public class BoosCoolDown extends JavaPlugin implements Runnable { return true; } } else if (args.length == 2) { + if (sender.hasPermission("booscooldowns.check.cooldown") && args[0].equalsIgnoreCase("checkcooldown")) { + final String regexCommand = BoosCoolDownListener.getRegexCommand(args[1], BoosConfigManager.getCommands((Player)sender)); + if (BoosCoolDownManager.getTime((Player) sender, regexCommand) == null) { + BoosChat.sendMessageToCommandSender(sender, BoosConfigManager.getCheckCoolDownOkMessage().replaceAll("&command&", + args[1])); + } else { + final long secondsBetween = BoosCoolDownManager.getSecondsBetween(BoosCoolDownManager.getTime((Player) sender, regexCommand)); + final int coolDown = BoosConfigManager.getCoolDown(regexCommand, (Player) sender); + if (secondsBetween > coolDown) { + BoosChat.sendMessageToCommandSender(sender, BoosConfigManager.getCheckCoolDownOkMessage().replaceAll("&command&", + args[1])); + } else { + BoosChat.sendMessageToCommandSender(sender, + BoosCoolDownManager.getFormatedCooldownMessage(args[1], coolDown, secondsBetween, + BoosConfigManager.getCheckCoolDownMessage())); + } + } + return true; + } final String jmeno = args[1]; final Player player = Bukkit.getPlayerExact(jmeno); final UUID uuid = player.getUniqueId(); diff --git a/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDownListener.java b/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDownListener.java index 49a2b3d..b64b941 100644 --- a/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDownListener.java +++ b/plugin/src/main/java/cz/boosik/boosCooldown/BoosCoolDownListener.java @@ -251,47 +251,41 @@ public class BoosCoolDownListener implements Listener { event.setMessage(originalCommand); } if (on && commands != null) { - for (final String group : commands) { - final String group2 = group.replace("*", ".*"); - if (originalCommand.matches("(?i)" + group2)) { - regexCommad = group; - if (BoosConfigManager.getWarmupEnabled()) { - warmupTime = BoosConfigManager.getWarmUp(regexCommad, - player); - } - if (BoosConfigManager.getCooldownEnabled()) { - cooldownTime = BoosConfigManager.getCoolDown( - regexCommad, player); - } - if (BoosConfigManager.getPriceEnabled()) { - price = BoosConfigManager.getPrice(regexCommad, player); - } - if (BoosConfigManager.getXpPriceEnabled()) { - xpPrice = BoosConfigManager.getXpPrice(regexCommad, - player); - xpRequirement = BoosConfigManager.getXpRequirement(regexCommad, player); - } - if (BoosConfigManager.getPlayerPointsEnabled()) { - playerPoints = BoosConfigManager.getPlayerPointsPrice(regexCommad, - player); - } - if (BoosConfigManager.getItemCostEnabled()) { - item = BoosConfigManager.getItemCostItem(regexCommad, - player); - name = BoosConfigManager.getItemCostName(regexCommad, - player); - lore = BoosConfigManager.getItemCostLore(regexCommad, - player); - count = BoosConfigManager.getItemCostCount(regexCommad, - player); - enchants = BoosConfigManager.getItemCostEnchants(regexCommad, - player); - } - if (BoosConfigManager.getLimitEnabled()) { - limit = BoosConfigManager.getLimit(regexCommad, player); - } - break; - } + regexCommad = getRegexCommand(originalCommand, commands); + if (BoosConfigManager.getWarmupEnabled()) { + warmupTime = BoosConfigManager.getWarmUp(regexCommad, + player); + } + if (BoosConfigManager.getCooldownEnabled()) { + cooldownTime = BoosConfigManager.getCoolDown( + regexCommad, player); + } + if (BoosConfigManager.getPriceEnabled()) { + price = BoosConfigManager.getPrice(regexCommad, player); + } + if (BoosConfigManager.getXpPriceEnabled()) { + xpPrice = BoosConfigManager.getXpPrice(regexCommad, + player); + xpRequirement = BoosConfigManager.getXpRequirement(regexCommad, player); + } + if (BoosConfigManager.getPlayerPointsEnabled()) { + playerPoints = BoosConfigManager.getPlayerPointsPrice(regexCommad, + player); + } + if (BoosConfigManager.getItemCostEnabled()) { + item = BoosConfigManager.getItemCostItem(regexCommad, + player); + name = BoosConfigManager.getItemCostName(regexCommad, + player); + lore = BoosConfigManager.getItemCostLore(regexCommad, + player); + count = BoosConfigManager.getItemCostCount(regexCommad, + player); + enchants = BoosConfigManager.getItemCostEnchants(regexCommad, + player); + } + if (BoosConfigManager.getLimitEnabled()) { + limit = BoosConfigManager.getLimit(regexCommad, player); } if (!BoosConfigManager.getConfirmCommandEnabled(player) || (commandQueue .containsKey(uuid + "@" + originalCommand) && commandQueue.get(uuid + "@" + originalCommand))) { @@ -378,6 +372,16 @@ public class BoosCoolDownListener implements Listener { event.setMessage(originalCommand); } + public static String getRegexCommand(final String originalCommand, final Set commands) { + for (final String group : commands) { + final String group2 = group.replace("*", ".*"); + if (originalCommand.matches("(?i)" + group2)) { + return group; + } + } + return originalCommand; + } + @EventHandler(priority = EventPriority.NORMAL) private void onPlayerChatEvent(final AsyncPlayerChatEvent event) { final Player player = event.getPlayer(); diff --git a/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosConfigManager.java b/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosConfigManager.java index 7371ed5..97da99a 100644 --- a/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosConfigManager.java +++ b/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosConfigManager.java @@ -227,6 +227,14 @@ public class BoosConfigManager { return conf.getString("options.messages.cooling_down", "&6Wait&e &seconds& seconds&6 before you can use command&e &command& &6again.&f"); } + public static String getCheckCoolDownMessage() { + return conf.getString("options.messages.check_cooldown", "&6Command&e &command& &6is still on cooldown. It will be available again in&e &seconds& &unit&.&f"); + } + + public static String getCheckCoolDownOkMessage() { + return conf.getString("options.messages.check_cooldown_ok", "&6Command&e &command& &6is available."); + } + static Set getCooldowns(final Player player) { final String cool = getCommandGroup(player); return conf.getConfigurationSection("commands.groups." + cool).getKeys(false); diff --git a/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosCoolDownManager.java b/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosCoolDownManager.java index 36c24d2..d30e5fc 100644 --- a/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosCoolDownManager.java +++ b/plugin/src/main/java/cz/boosik/boosCooldown/Managers/BoosCoolDownManager.java @@ -23,11 +23,7 @@ public class BoosCoolDownManager { if (lastTime == null) { return false; } - final Calendar calcurrTime = Calendar.getInstance(); - calcurrTime.setTime(getCurrTime()); - final Calendar callastTime = Calendar.getInstance(); - callastTime.setTime(lastTime); - final long secondsBetween = secondsBetween(callastTime, calcurrTime); + final long secondsBetween = getSecondsBetween(lastTime); return (secondsBetween <= time) && secondsBetween != 0; } @@ -48,11 +44,7 @@ public class BoosCoolDownManager { } return false; } else { - final Calendar calcurrTime = Calendar.getInstance(); - calcurrTime.setTime(getCurrTime()); - final Calendar callastTime = Calendar.getInstance(); - callastTime.setTime(lastTime); - final long secondsBetween = secondsBetween(callastTime, calcurrTime); + final long secondsBetween = getSecondsBetween(lastTime); long waitSeconds = coolDownSeconds - secondsBetween; long waitMinutes = (long) Math.floor(waitSeconds / 60.0); final long waitHours = (long) Math.floor(waitMinutes / 60.0); @@ -129,7 +121,7 @@ public class BoosCoolDownManager { } } - private static Date getTime(final Player player, final String regexCommand) { + public static Date getTime(final Player player, final String regexCommand) { final int pre2 = regexCommand.toLowerCase().hashCode(); String confTime = ""; confTime = BoosConfigManager.getConfusers().getString( @@ -158,47 +150,12 @@ public class BoosCoolDownManager { if (lastTime == null) { return true; } else { - final Calendar calcurrTime = Calendar.getInstance(); - calcurrTime.setTime(getCurrTime()); - final Calendar callastTime = Calendar.getInstance(); - callastTime.setTime(lastTime); - final long secondsBetween = secondsBetween(callastTime, calcurrTime); - long waitSeconds = time - secondsBetween; - long waitMinutes = (long) Math.floor(waitSeconds / 60.0); - final long waitHours = (long) Math.floor(waitMinutes / 60.0); + final long secondsBetween = getSecondsBetween(lastTime); if (secondsBetween > time) { return true; } else { String msg = BoosConfigManager.getCoolDownMessage(); - final StringBuilder stringBuilder = new StringBuilder(); - msg = msg.replaceAll("&command&", originalCommand); - if (waitSeconds >= 3600) { - stringBuilder.append(waitHours); - stringBuilder.append(" "); - stringBuilder.append(BoosConfigManager.getUnitHoursMessage()); - stringBuilder.append(", "); - waitSeconds = waitSeconds - (waitHours * 3600); - } - if (waitSeconds >= 60) { - waitMinutes = waitMinutes - (waitHours * 60); - stringBuilder.append(waitMinutes); - stringBuilder.append(" "); - stringBuilder.append(BoosConfigManager.getUnitMinutesMessage()); - stringBuilder.append(", "); - waitSeconds = waitSeconds - (waitMinutes * 60); - } - String secs = Long.toString(waitSeconds); - if (secs.equals("0")) { - secs = "1"; - } - stringBuilder.append(secs); - stringBuilder.append(" "); - stringBuilder.append(BoosConfigManager.getUnitSecondsMessage()); - - msg = msg.replaceAll("&seconds&", stringBuilder.toString()); - msg = msg.replaceAll("&unit&", ""); - msg = msg.replaceAll(" +", " "); - + msg = getFormatedCooldownMessage(originalCommand, time, secondsBetween, msg); BoosChat.sendMessageToPlayer(player, msg); return false; } @@ -207,6 +164,49 @@ public class BoosCoolDownManager { return true; } + public static String getFormatedCooldownMessage(final String originalCommand, final int time, final long secondsBetween, String msg) { + long waitSeconds = time - secondsBetween; + long waitMinutes = (long) Math.floor(waitSeconds / 60.0); + final long waitHours = (long) Math.floor(waitMinutes / 60.0); + final StringBuilder stringBuilder = new StringBuilder(); + msg = msg.replaceAll("&command&", originalCommand); + if (waitSeconds >= 3600) { + stringBuilder.append(waitHours); + stringBuilder.append(" "); + stringBuilder.append(BoosConfigManager.getUnitHoursMessage()); + stringBuilder.append(", "); + waitSeconds = waitSeconds - (waitHours * 3600); + } + if (waitSeconds >= 60) { + waitMinutes = waitMinutes - (waitHours * 60); + stringBuilder.append(waitMinutes); + stringBuilder.append(" "); + stringBuilder.append(BoosConfigManager.getUnitMinutesMessage()); + stringBuilder.append(", "); + waitSeconds = waitSeconds - (waitMinutes * 60); + } + String secs = Long.toString(waitSeconds); + if (secs.equals("0")) { + secs = "1"; + } + stringBuilder.append(secs); + stringBuilder.append(" "); + stringBuilder.append(BoosConfigManager.getUnitSecondsMessage()); + + msg = msg.replaceAll("&seconds&", stringBuilder.toString()); + msg = msg.replaceAll("&unit&", ""); + msg = msg.replaceAll(" +", " "); + return msg; + } + + public static long getSecondsBetween(final Date lastTime) { + final Calendar calcurrTime = Calendar.getInstance(); + calcurrTime.setTime(getCurrTime()); + final Calendar callastTime = Calendar.getInstance(); + callastTime.setTime(lastTime); + return secondsBetween(callastTime, calcurrTime); + } + private static long secondsBetween(final Calendar startDate, final Calendar endDate) { long secondsBetween = 0; secondsBetween = (endDate.getTimeInMillis() - startDate diff --git a/plugin/src/main/resources/config.yml b/plugin/src/main/resources/config.yml index e7f8c08..5c55ec1 100644 --- a/plugin/src/main/resources/config.yml +++ b/plugin/src/main/resources/config.yml @@ -64,6 +64,8 @@ options: gamemode.&f' cooling_down: '&6Wait&e &seconds& &unit&&6 before you can use command&e &command& &6again.&f' + cooldown_check: '&6Command&e &command& &6is still on cooldown. It will be available again in&e &seconds& &unit&.&f' + check_cooldown_ok: '&6Command&e &command& &6is available.' warming_up: '&6Wait&e &seconds& &unit&&6 before command&e &command& &6has warmed up.&f' warmup_already_started: '&6Warm-Up process for&e &command& &6has already started.&f' diff --git a/plugin/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml index 0e91111..088f21e 100644 --- a/plugin/src/main/resources/plugin.yml +++ b/plugin/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: boosCooldowns main: cz.boosik.boosCooldown.BoosCoolDown -version: 3.17.0 +version: 3.17.1 api-version: 1.13 authors: [LordBoos (boosik)] softdepend: [Vault, PlayerPoints] @@ -114,4 +114,7 @@ permissions: default: false booscooldowns.signs.server.place: description: Player can place/create boosCooldowns signs (marked as server on second line). !!WARNING!! With this permission, player can create sign with commands that are run as if used from console! - default: false \ No newline at end of file + default: false + booscooldowns.check.cooldown: + description: Player can use "/booscooldowns checkcooldown [command]" to check if a command is still on cooldown or not. + default: true \ No newline at end of file diff --git a/pom.xml b/pom.xml index c38f1c1..74ffc8c 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pom http://maven.apache.org - 3.17.0 + 3.17.1 UTF-8 UTF-8 1.16.1