Add cooldown mechanism to Login command
This commit is contained in:
parent
e591a0c9c3
commit
4e66e00eae
|
|
@ -1,6 +1,12 @@
|
||||||
package com.alttd.webinterface.commands;
|
package com.alttd.webinterface.commands;
|
||||||
|
|
||||||
import com.alttd.webinterface.config.Config;
|
import com.alttd.webinterface.config.Config;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import com.alttd.webinterface.web_interact.AuthService;
|
import com.alttd.webinterface.web_interact.AuthService;
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||||
|
|
@ -13,6 +19,8 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class Login {
|
public class Login {
|
||||||
|
private static final Map<UUID, Instant> cooldowns = new ConcurrentHashMap<>();
|
||||||
|
private static final int COOLDOWN_SECONDS = 15;
|
||||||
|
|
||||||
public Login(ProxyServer proxyServer) {
|
public Login(ProxyServer proxyServer) {
|
||||||
LiteralCommandNode<CommandSource> commandStart = LiteralArgumentBuilder
|
LiteralCommandNode<CommandSource> commandStart = LiteralArgumentBuilder
|
||||||
|
|
@ -23,6 +31,13 @@ public class Login {
|
||||||
context.getSource().sendMessage(MiniMessage.miniMessage().deserialize("<red>You must be a player to use this command.</red>"));
|
context.getSource().sendMessage(MiniMessage.miniMessage().deserialize("<red>You must be a player to use this command.</red>"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isOnCooldown(player.getUniqueId())) {
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>Please wait before using this command again.</red>"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cooldowns.put(player.getUniqueId(), Instant.now().plusSeconds(COOLDOWN_SECONDS));
|
||||||
|
|
||||||
AuthService.getLoginCodeAsync(player.getUniqueId()).thenAccept(optionalLoginCode -> {
|
AuthService.getLoginCodeAsync(player.getUniqueId()).thenAccept(optionalLoginCode -> {
|
||||||
optionalLoginCode.ifPresentOrElse((loginCode) -> {
|
optionalLoginCode.ifPresentOrElse((loginCode) -> {
|
||||||
player.sendMessage(MiniMessage.miniMessage().deserialize(resolveLogin(Config.YOUR_LOGIN_CODE, loginCode)));
|
player.sendMessage(MiniMessage.miniMessage().deserialize(resolveLogin(Config.YOUR_LOGIN_CODE, loginCode)));
|
||||||
|
|
@ -42,6 +57,17 @@ public class Login {
|
||||||
proxyServer.getCommandManager().register(metaStart, brigadierCommandStart);
|
proxyServer.getCommandManager().register(metaStart, brigadierCommandStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isOnCooldown(UUID uuid) {
|
||||||
|
Instant lastUsage = cooldowns.get(uuid);
|
||||||
|
if (lastUsage != null) {
|
||||||
|
if (lastUsage.isAfter(Instant.now())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
cooldowns.remove(uuid);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private @NotNull String resolveLogin(String message, String loginCode) {
|
private @NotNull String resolveLogin(String message, String loginCode) {
|
||||||
return message
|
return message
|
||||||
.replace("<login_endpoint>", Config.LOGIN_ENDPOINT)
|
.replace("<login_endpoint>", Config.LOGIN_ENDPOINT)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user