rezzy01

Untitled

Aug 27th, 2023
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  1. import org.bukkit.Bukkit;
  2. import org.bukkit.ChatColor;
  3. import org.bukkit.command.Command;
  4. import org.bukkit.command.CommandExecutor;
  5. import org.bukkit.command.CommandSender;
  6. import org.bukkit.entity.Player;
  7. import org.bukkit.event.EventHandler;
  8. import org.bukkit.event.Listener;
  9. import org.bukkit.event.entity.PlayerDeathEvent;
  10. import org.bukkit.plugin.java.JavaPlugin;
  11. import org.bukkit.scheduler.BukkitRunnable;
  12.  
  13. import java.util.*;
  14.  
  15.  
  16.  
  17. public class CoolKills extends JavaPlugin implements CommandExecutor, Listener {
  18. private Map<String, Integer> playerKills = new HashMap<>();
  19. private static final TimeZone MOSCOW_TIMEZONE = TimeZone.getTimeZone("Europe/Moscow");
  20.  
  21. @Override
  22. public void onEnable() {
  23. getCommand("topkills").setExecutor(this);
  24. getCommand("givereward").setExecutor(this);
  25. getServer().getPluginManager().registerEvents(this, this);
  26.  
  27. // Регистрируем задачу для очистки топа убийств каждый день в 22:00 по московскому времени
  28. BukkitRunnable dailyResetTask = new BukkitRunnable() {
  29. @Override
  30. public void run() {
  31. giveRewardToTopPlayer();
  32. resetTopKills();
  33. }
  34. };
  35.  
  36. long now = System.currentTimeMillis();
  37. Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
  38. calendar.set(Calendar.HOUR_OF_DAY, 22);
  39. calendar.set(Calendar.MINUTE, 0);
  40. calendar.set(Calendar.SECOND, 0);
  41. calendar.set(Calendar.MILLISECOND, 0);
  42.  
  43. long dailyResetTime = calendar.getTimeInMillis();
  44. long delay = dailyResetTime > now ? dailyResetTime - now : dailyResetTime + 24 * 60 * 60 * 1000 - now;
  45.  
  46. dailyResetTask.runTaskTimer(this, delay, 24 * 60 * 60 * 20); // 20 ticks per second (1 second = 20 ticks)
  47. }
  48.  
  49. @Override
  50. public void onDisable() {
  51. }
  52.  
  53. @Override
  54. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  55. if (!isWithinTimeRange()) {
  56. sender.sendMessage(ChatColor.RED + "Команда работает только с 12:00 до 22:00 по МСК.");
  57. return true;
  58. }
  59.  
  60. if (sender instanceof Player) {
  61. Player playerSender = (Player) sender;
  62. String senderName = playerSender.getName();
  63.  
  64. if (cmd.getName().equalsIgnoreCase("topkills")) {
  65. sender.sendMessage("§e§l▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀");
  66. sender.sendMessage("§f");
  67. sender.sendMessage("§e§n За 1 игрока засчитывается максимум 1 килл.");
  68. sender.sendMessage("§e§n Киллы засчитываются только с версии 1.12.2!");
  69. sender.sendMessage("§f");
  70. sender.sendMessage("§d1. §a§n" + topPlayer + "§7 забил §d§n" + playerKills.get(topPlayer) + "§7 игроков.");
  71. sender.sendMessage("§f");
  72. sender.sendMessage("§a§n" + senderName + "§7 вы забили §d§n" + playerKills.get(senderName) + "§7 игроков.");
  73. sender.sendMessage("§f");
  74. sender.sendMessage("§e§n За 1 игрока засчитывается максимум 1 килл.");
  75. sender.sendMessage("§e§n Киллы засчитываются только с версии 1.12.2!");
  76. sender.sendMessage("§f");
  77. sender.sendMessage("§e§l▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀");
  78.  
  79. }
  80.  
  81. return true;
  82.  
  83. } else if (cmd.getName().equalsIgnoreCase("givereward")) {
  84. giveRewardToTopPlayer();
  85. sender.sendMessage(ChatColor.GREEN + "Награда успешно начислена топ-игроку.");
  86. return true;
  87. }
  88.  
  89. return false;
  90. }
  91.  
  92.  
  93. @EventHandler
  94. public void onPlayerDeath(PlayerDeathEvent event) {
  95. Player victim = event.getEntity();
  96. Player killer = victim.getKiller();
  97.  
  98. // Проверяем, что убийство было осуществлено другим игроком
  99. if (killer != null) {
  100. addKill(killer);
  101. }
  102. }
  103.  
  104. public void addKill(Player player) {
  105. String playerName = player.getName();
  106. playerKills.put(playerName, playerKills.getOrDefault(playerName, 0) + 1);
  107.  
  108. if (playerKills.get(playerName) > topKills) {
  109. topPlayer = playerName;
  110. topKills = playerKills.get(playerName);
  111. }
  112. }
  113.  
  114. public String[] getTopKills(int count) {
  115. return playerKills.entrySet().stream()
  116. .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
  117. .limit(count)
  118. .map(Map.Entry::getKey)
  119. .toArray(String[]::new);
  120. }
  121.  
  122.  
  123. private boolean isWithinTimeRange() {
  124. Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
  125. int hour = calendar.get(Calendar.HOUR_OF_DAY);
  126. int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
  127. return hour >= 12 && hour < 22 && dayOfWeek != Calendar.SUNDAY && dayOfWeek != Calendar.SATURDAY;
  128. }
  129.  
  130. private void resetTopKills() {
  131. playerKills.clear();
  132. Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW + "[CoolKills] Top kills has been reset.");
  133. }
  134.  
  135. private String topPlayer = null;
  136. private int topKills = 0;
  137.  
  138. private void giveRewardToTopPlayer() {
  139. if (topPlayer != null) {
  140. int rewardAmount = isWeekend() ? 20000 : 10000;
  141. Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "p give " + topPlayer + " " + rewardAmount);
  142. }
  143. }
  144.  
  145. private boolean isWeekend() {
  146. Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
  147. int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
  148. return dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY;
  149. }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment