Add checkcooldown command

This commit is contained in:
boosik 2020-07-27 18:04:32 +02:00
parent 9cf41f4f01
commit 55ba20cdb6
7 changed files with 129 additions and 92 deletions

View File

@ -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();

View File

@ -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<String> 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();

View File

@ -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<String> getCooldowns(final Player player) {
final String cool = getCommandGroup(player);
return conf.getConfigurationSection("commands.groups." + cool).getKeys(false);

View File

@ -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

View File

@ -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'

View File

@ -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
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

View File

@ -11,7 +11,7 @@
<packaging>pom</packaging>
<url>http://maven.apache.org</url>
<properties>
<boosCooldowns.version>3.17.0</boosCooldowns.version>
<boosCooldowns.version>3.17.1</boosCooldowns.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<minecraft.version>1.16.1</minecraft.version>