package com.alttd.afkdectector; import java.util.UUID; import com.alttd.afkdectector.afkplayer.AFKPlayer; import com.alttd.afkdectector.config.Config; import com.alttd.afkdectector.config.Messages; 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; public class MessageTimer extends BukkitRunnable { private AFKDetector plugin; private UUID uuid; private 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.MESSAGEDELAY * 20); } // TODO get a better string builder /* private String return_placeholders(Param String ... string) */ private String return_placeholders(String s, Player p) { s = s.replaceAll("%player%", p.getName()).replaceAll("%afktime%", (int) Math.floor((System.currentTimeMillis() - plugin.getPlayer(p).getstandingTime()) / 60 / 1000) +""); 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.COUNTDOWNENABLED) { MiniMessage miniMessage = AFKDetector.miniMessage; Title title = Title.title(miniMessage.deserialize(Messages.COUNTDOWNTITLE1.getMessage()), miniMessage.deserialize(Messages.COUNTDOWNTITLE2.getMessage())); //Title.Times.of(Config.FADEIN, Config.STAY, Config.STAY); player.showTitle(title); player.sendMessage(miniMessage.deserialize(Messages.COUNTDOWNMESSAGE.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.KICKCOMMAND, player)); TagResolver templates = TagResolver.resolver( Placeholder.unparsed("player", player.getName()), Placeholder.unparsed("afk_time", "" + afkPlayer.getafkTime()) ); Component message = MiniMessage.miniMessage().deserialize(Messages.AFKICKSTAFFMESSAGE.getMessage(), templates); Bukkit.getOnlinePlayers().stream() .filter(staff -> staff.hasPermission("afkdetector.notify")) .forEach(staff -> staff.sendMessage(message)); cancel(); } } else { if(player != null) { if(!plugin.messageTimers.isEmpty()) { plugin.messageTimers.remove(player.getUniqueId()); } cancel(); } } } }