From ee44b5fb7f23be1079a1a6f8e63a219e3164741c Mon Sep 17 00:00:00 2001 From: Super_ Date: Thu, 12 Dec 2019 17:02:33 -0500 Subject: [PATCH] command cooldowns --- .../command/CommandPermissions.java | 2 + .../command/Command_opall.java | 2 +- .../command/FreedomCommand.java | 1 + .../command/FreedomCommandExecutor.java | 40 ++++++++++++++++++- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/CommandPermissions.java b/src/main/java/me/totalfreedom/totalfreedommod/command/CommandPermissions.java index 0fe15b70..1dc0ee35 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/CommandPermissions.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/CommandPermissions.java @@ -13,4 +13,6 @@ public @interface CommandPermissions SourceType source(); boolean blockHostConsole() default false; + + int cooldown() default 0; } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_opall.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_opall.java index 5d0daf93..c59e7f2f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_opall.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_opall.java @@ -7,7 +7,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH) +@CommandPermissions(level = Rank.OP, source = SourceType.BOTH, cooldown = 30) @CommandParameters(description = "Op everyone on the server, optionally change everyone's gamemode at the same time.", usage = "/ [-c | -s | -a]") public class Command_opall extends FreedomCommand { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java index 2c5e6c0f..870190be 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java @@ -2,6 +2,7 @@ package me.totalfreedom.totalfreedommod.command; import com.google.common.collect.Lists; import java.util.List; +import java.util.Timer; import lombok.Getter; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.admin.Admin; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommandExecutor.java b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommandExecutor.java index a07bb2d3..3c9f6cc5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommandExecutor.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommandExecutor.java @@ -1,6 +1,10 @@ package me.totalfreedom.totalfreedommod.command; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FLog; @@ -20,6 +24,9 @@ public class FreedomCommandExecutor> extends Abstra { private final TotalFreedomMod plugin; + // + private Map commandCooldown = new HashMap<>(); + private final Timer timer = new Timer(); public FreedomCommandExecutor(TotalFreedomMod plugin, AeroCommandHandler handler, String name, C command) { @@ -76,9 +83,29 @@ public class FreedomCommandExecutor> extends Abstra return true; } + if (isOnCooldown(sender)) + { + return true; + } + try { - return commandBase.runCommand(sender, command, label, args); + boolean run = commandBase.runCommand(sender, command, label, args); + FreedomCommand c = getCommand(); + CommandPermissions perms = c.getPerms(); + if (perms.cooldown() > 0 && !plugin.al.isAdmin(sender)) + { + commandCooldown.put(sender, c); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + commandCooldown.remove(sender); + } + }, perms.cooldown() * 1000); + } + return run; } catch (Exception ex) { @@ -162,6 +189,17 @@ public class FreedomCommandExecutor> extends Abstra return result; } + public boolean isOnCooldown(CommandSender sender) + { + final FreedomCommand command = getCommand(); + if (commandCooldown.containsKey(sender) && commandCooldown.containsValue(command)) + { + sender.sendMessage(ChatColor.RED + "You're on cooldown for this command."); + return true; + } + return false; + } + public static class FreedomExecutorFactory implements AeroCommandExecutorFactory {