package com.alttd.afkdectector; import com.alttd.afkdectector.afkplayer.AFKPlayer; import com.alttd.afkdectector.config.Config; import com.alttd.afkdectector.config.Messages; import com.alttd.afkdectector.trackers.AutoJoinTracker; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.title.Title; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import java.util.Date; import java.util.UUID; import java.util.concurrent.TimeUnit; public class MessageTimer extends BukkitRunnable { private final AFKDetector plugin; private final UUID uuid; private final AFKPlayer afkPlayer; private int repeats; public MessageTimer(AFKDetector plugin, AFKPlayer afkPlayer, int repeats) { this.plugin = plugin; this.afkPlayer = afkPlayer; this.repeats = repeats; this.uuid = afkPlayer.getPlayerUuid(); } public void init() { runTaskTimer(plugin, 0, Config.MESSAGE_DELAY * 20L); } // TODO get a better string builder /* private String return_placeholders(Param String ... string) */ private String return_placeholders(String s, Player p) { int afkTime = (int) TimeUnit.MILLISECONDS.toMinutes((long) Math.floor(System.currentTimeMillis() - plugin.getPlayer(p).getStandingTime())); s = s.replaceAll("%player%", p.getName()).replaceAll("%afktime%", afkTime + ""); return s; } @Override public void run() { Player player = Bukkit.getPlayer(uuid); if (plugin.messageTimers.containsKey(uuid)) { if (player == null || player.hasPermission("afkdetector.kickexempt")) { cancel(); return; } if (Config.COUNT_DOWN_ENABLED) { MiniMessage miniMessage = AFKDetector.miniMessage; Title title = Title.title(miniMessage.deserialize(Messages.COUNT_DOWN_TITLE_1.getMessage()), miniMessage.deserialize(Messages.COUNT_DOWN_TITLE_2.getMessage())); //Title.Times.of(Config.FADEIN, Config.STAY, Config.STAY); player.showTitle(title); player.sendMessage(miniMessage.deserialize(Messages.COUNT_DOWN_MESSAGE.getMessage())); } repeats = repeats - 1; if (repeats <= 0) { if (player.isInsideVehicle()) { player.leaveVehicle(); } //Bukkit.dispatchCommand(Bukkit.getConsoleSender(), plugin.kickCommand.replace("%player%", player.getName())); plugin.messageTimers.remove(player.getUniqueId()); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), return_placeholders(Config.KICK_COMMAND, player)); AutoJoinTracker.getInstance().setLastKick(player.getUniqueId(), new Date().getTime()); TagResolver templates = TagResolver.resolver( Placeholder.unparsed("player", player.getName()), Placeholder.unparsed("afk_time", "" + (int) Math.floor((System.currentTimeMillis() - plugin.getPlayer(player).getStandingTime()) / 60f / 1000)) ); Component message = MiniMessage.miniMessage().deserialize(Messages.AFK_KICK_STAFF_MESSAGE.getMessage(), templates); Bukkit.broadcast(message, "afkdetector.notify"); cancel(); } } else { if (player != null) { if (!plugin.messageTimers.isEmpty()) { plugin.messageTimers.remove(player.getUniqueId()); } cancel(); } } } }