Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandExecutor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitRunnable;
- import java.util.*;
- public class CoolKills extends JavaPlugin implements CommandExecutor, Listener {
- private Map<String, Integer> playerKills = new HashMap<>();
- private static final TimeZone MOSCOW_TIMEZONE = TimeZone.getTimeZone("Europe/Moscow");
- @Override
- public void onEnable() {
- getCommand("topkills").setExecutor(this);
- getCommand("givereward").setExecutor(this);
- getServer().getPluginManager().registerEvents(this, this);
- // Регистрируем задачу для очистки топа убийств каждый день в 22:00 по московскому времени
- BukkitRunnable dailyResetTask = new BukkitRunnable() {
- @Override
- public void run() {
- giveRewardToTopPlayer();
- resetTopKills();
- }
- };
- long now = System.currentTimeMillis();
- Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
- calendar.set(Calendar.HOUR_OF_DAY, 22);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- long dailyResetTime = calendar.getTimeInMillis();
- long delay = dailyResetTime > now ? dailyResetTime - now : dailyResetTime + 24 * 60 * 60 * 1000 - now;
- dailyResetTask.runTaskTimer(this, delay, 24 * 60 * 60 * 20); // 20 ticks per second (1 second = 20 ticks)
- }
- @Override
- public void onDisable() {
- }
- @Override
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
- if (!isWithinTimeRange()) {
- sender.sendMessage(ChatColor.RED + "Команда работает только с 12:00 до 22:00 по МСК.");
- return true;
- }
- if (sender instanceof Player) {
- Player playerSender = (Player) sender;
- String senderName = playerSender.getName();
- if (cmd.getName().equalsIgnoreCase("topkills")) {
- sender.sendMessage("§e§l▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀");
- sender.sendMessage("§f");
- sender.sendMessage("§e§n За 1 игрока засчитывается максимум 1 килл.");
- sender.sendMessage("§e§n Киллы засчитываются только с версии 1.12.2!");
- sender.sendMessage("§f");
- sender.sendMessage("§d1. §a§n" + topPlayer + "§7 забил §d§n" + playerKills.get(topPlayer) + "§7 игроков.");
- sender.sendMessage("§f");
- sender.sendMessage("§a§n" + senderName + "§7 вы забили §d§n" + playerKills.get(senderName) + "§7 игроков.");
- sender.sendMessage("§f");
- sender.sendMessage("§e§n За 1 игрока засчитывается максимум 1 килл.");
- sender.sendMessage("§e§n Киллы засчитываются только с версии 1.12.2!");
- sender.sendMessage("§f");
- sender.sendMessage("§e§l▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀");
- }
- return true;
- } else if (cmd.getName().equalsIgnoreCase("givereward")) {
- giveRewardToTopPlayer();
- sender.sendMessage(ChatColor.GREEN + "Награда успешно начислена топ-игроку.");
- return true;
- }
- return false;
- }
- @EventHandler
- public void onPlayerDeath(PlayerDeathEvent event) {
- Player victim = event.getEntity();
- Player killer = victim.getKiller();
- // Проверяем, что убийство было осуществлено другим игроком
- if (killer != null) {
- addKill(killer);
- }
- }
- public void addKill(Player player) {
- String playerName = player.getName();
- playerKills.put(playerName, playerKills.getOrDefault(playerName, 0) + 1);
- if (playerKills.get(playerName) > topKills) {
- topPlayer = playerName;
- topKills = playerKills.get(playerName);
- }
- }
- public String[] getTopKills(int count) {
- return playerKills.entrySet().stream()
- .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
- .limit(count)
- .map(Map.Entry::getKey)
- .toArray(String[]::new);
- }
- private boolean isWithinTimeRange() {
- Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
- int hour = calendar.get(Calendar.HOUR_OF_DAY);
- int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
- return hour >= 12 && hour < 22 && dayOfWeek != Calendar.SUNDAY && dayOfWeek != Calendar.SATURDAY;
- }
- private void resetTopKills() {
- playerKills.clear();
- Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW + "[CoolKills] Top kills has been reset.");
- }
- private String topPlayer = null;
- private int topKills = 0;
- private void giveRewardToTopPlayer() {
- if (topPlayer != null) {
- int rewardAmount = isWeekend() ? 20000 : 10000;
- Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "p give " + topPlayer + " " + rewardAmount);
- }
- }
- private boolean isWeekend() {
- Calendar calendar = new GregorianCalendar(MOSCOW_TIMEZONE);
- int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
- return dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment