Guest User

Untitled

a guest
May 21st, 2023
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. package ru.mralexeimk.minecraft.islandia.services;
  2.  
  3. import lombok.Getter;
  4. import org.bukkit.entity.Player;
  5. import org.springframework.scheduling.annotation.Scheduled;
  6. import org.springframework.stereotype.Service;
  7. import ru.mralexeimk.minecraft.islandia.builders.MessageConstructor;
  8. import ru.mralexeimk.minecraft.islandia.services.additional.LogService;
  9.  
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. import java.util.UUID;
  13. import java.util.concurrent.ConcurrentHashMap;
  14.  
  15. @Service
  16. public class CooldownService {
  17. private final ConfigService configService;
  18. private final LogService logService;
  19.  
  20. @Getter
  21. private final ConcurrentHashMap<UUID, Map<String, Long>> playersCooldowns = new ConcurrentHashMap<>();
  22.  
  23. public CooldownService(ConfigService configService, LogService logService) {
  24. this.configService = configService;
  25. this.logService = logService;
  26. }
  27.  
  28. private void add(Player p, String tag, long periodSeconds) {
  29. Map<String, Long> cd = playersCooldowns.getOrDefault(p.getUniqueId(),
  30. new HashMap<>());
  31. cd.put(tag, System.currentTimeMillis() / 1000 + periodSeconds);
  32. playersCooldowns.put(p.getUniqueId(), cd);
  33. }
  34.  
  35. /**
  36. * Clear 'playersCooldowns' every 30 minutes
  37. */
  38. @Scheduled(fixedDelay = 1000*60*30)
  39. public void clear() {
  40. if(playersCooldowns.isEmpty()) return;
  41. for(UUID uuid : playersCooldowns.keySet()) {
  42. if(!playersCooldowns.containsKey(uuid)) continue;
  43. for(String tag : playersCooldowns.get(uuid).keySet()) {
  44. long curTime = System.currentTimeMillis() / 1000;
  45. Long endTime = playersCooldowns.get(uuid).get(tag);
  46. if(endTime == null || curTime >= endTime) {
  47. playersCooldowns.get(uuid).remove(tag);
  48. }
  49. }
  50. if(playersCooldowns.get(uuid).isEmpty()) {
  51. playersCooldowns.remove(uuid);
  52. }
  53. }
  54. }
  55.  
  56. /**
  57. * Set cooldown for player at this line of code
  58. * @return next lines of code will be run?
  59. */
  60. public boolean cooldown(Player p, String tag, long periodSeconds) {
  61. if(p.hasPermission("islandia.admin")) return true;
  62. if(!playersCooldowns.containsKey(p.getUniqueId()) ||
  63. !playersCooldowns.get(p.getUniqueId()).containsKey(tag)) {
  64. add(p, tag, periodSeconds);
  65. return true;
  66. }
  67. long curTime = System.currentTimeMillis() / 1000;
  68. long endTime = playersCooldowns.get(p.getUniqueId()).get(tag);
  69.  
  70. if(curTime >= endTime) {
  71. add(p, tag, periodSeconds);
  72. return true;
  73. }
  74.  
  75. MessageConstructor
  76. .of(configService.getMessage(p, "cooldown"))
  77. .replace("%cooldown%", String.valueOf(endTime - curTime))
  78. .send(p);
  79.  
  80. return false;
  81. }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment