92 lines
3.8 KiB
Java
Executable File
92 lines
3.8 KiB
Java
Executable File
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();
|
|
}
|
|
}
|
|
}
|
|
}
|