Skip to content

Instantly share code, notes, and snippets.

@zkingboos
Created September 28, 2020 19:23
Show Gist options
  • Save zkingboos/0884efd7c0b7ef40e8db22b660c4e1e6 to your computer and use it in GitHub Desktop.
Save zkingboos/0884efd7c0b7ef40e8db22b660c4e1e6 to your computer and use it in GitHub Desktop.
public final class DelayCommandExecutor implements CommandExecutor {
private final DelayService delayService = new DelayService();
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
final Player player = (Player) sender;
if(delayService.isPlayerInDelay(player)) {
final int remainPlayerDelay = delayService.getRemainPlayerDelay(player);
player.sendMessage(String.format("You're in delay, remain time %ss%n", remainPlayerDelay));
return true;
}
//TODO: Logic here
delayService.updatePlayerDelayToRegistry(player, 10);
return true;
}
}
public final class DelayService {
private final Map<String, Integer> delayRegistry;
public DelayService() {
this.delayRegistry = new HashMap<>();
}
public int getPlayerDelayFromRegistry(Player player) {
final Integer cachedDelay = delayRegistry.get(player.getName());
return cachedDelay != null
? cachedDelay
: 0;
}
public void updatePlayerDelayToRegistry(Player player, int delay) {
final int totalDelay = (int) (System.currentTimeMillis() / 1000) + delay;
delayRegistry.put(player.getName(), totalDelay);
}
public int getRemainPlayerDelay(Player player) {
final int playerDelayFromRegistry = getPlayerDelayFromRegistry(player);
return (int) (playerDelayFromRegistry - (System.currentTimeMillis() / 1000));
}
public boolean isPlayerInDelay(Player player) {
return getPlayerDelayFromRegistry(player) >= (System.currentTimeMillis() / 1000);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment