Switched to using galaxy's build in afk system for preventing mob spawning/ticking
Moved some displayed text to message config
This commit is contained in:
parent
9bbc4882a0
commit
647922cfc5
|
|
@ -68,10 +68,9 @@ public class AFKCheckTimer extends BukkitRunnable {
|
||||||
private void resetAFKPlayer(Location pastLocation, Player player, AFKPlayer afkPlayer) {
|
private void resetAFKPlayer(Location pastLocation, Player player, AFKPlayer afkPlayer) {
|
||||||
afkPlayer.setPlayerToSphereCenter(pastLocation);
|
afkPlayer.setPlayerToSphereCenter(pastLocation);
|
||||||
afkPlayer.setStandingTime(System.currentTimeMillis());
|
afkPlayer.setStandingTime(System.currentTimeMillis());
|
||||||
afkPlayer.unWarnPlayer();
|
|
||||||
player.setSleepingIgnored(false);
|
player.setSleepingIgnored(false);
|
||||||
plugin.AFKPlayers.removeEntry(player.getName());
|
plugin.AFKPlayers.removeEntry(player.getName());
|
||||||
afkPlayer.ResetAFK(player);
|
afkPlayer.resetAFK(player);
|
||||||
|
|
||||||
MessageTimer currentTimer = plugin.messageTimers.get(player.getUniqueId());
|
MessageTimer currentTimer = plugin.messageTimers.get(player.getUniqueId());
|
||||||
if (currentTimer != null) {
|
if (currentTimer != null) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.alttd.afkdectector;
|
package com.alttd.afkdectector;
|
||||||
|
|
||||||
import com.alttd.afkdectector.afkplayer.AFKPlayer;
|
import com.alttd.afkdectector.afkplayer.AFKPlayer;
|
||||||
import com.alttd.afkdectector.afkplayer.AFKPlayers;
|
|
||||||
import com.alttd.afkdectector.command.AFKCheckCommand;
|
import com.alttd.afkdectector.command.AFKCheckCommand;
|
||||||
import com.alttd.afkdectector.command.AFKListCommand;
|
import com.alttd.afkdectector.command.AFKListCommand;
|
||||||
import com.alttd.afkdectector.command.ReloadCommand;
|
import com.alttd.afkdectector.command.ReloadCommand;
|
||||||
|
|
@ -19,11 +18,9 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
@ -35,10 +32,8 @@ import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class AFKDetector extends JavaPlugin implements Listener {
|
public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
|
|
@ -55,7 +50,6 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
* AFK players need to be added to a team.
|
* AFK players need to be added to a team.
|
||||||
*/
|
*/
|
||||||
Team AFKPlayers;
|
Team AFKPlayers;
|
||||||
private final AFKPlayers afkPlayers = new AFKPlayers();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
|
@ -89,7 +83,7 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
public AFKPlayer getPlayer(Player player) {
|
public AFKPlayer getPlayer(Player player) {
|
||||||
if (!players.containsKey(player.getUniqueId())) {
|
if (!players.containsKey(player.getUniqueId())) {
|
||||||
players.put(player.getUniqueId(), new AFKPlayer(player, this, afkPlayers));
|
players.put(player.getUniqueId(), new AFKPlayer(player, this));
|
||||||
}
|
}
|
||||||
return players.get(player.getUniqueId());
|
return players.get(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
@ -135,7 +129,7 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
PlayerAfkTime.put(uuid, getPlayerAFKTime(player));
|
PlayerAfkTime.put(uuid, getPlayerAFKTime(player));
|
||||||
players.put(uuid, new AFKPlayer(player, this, afkPlayers));
|
players.put(uuid, new AFKPlayer(player, this));
|
||||||
if (Bukkit.getOnlinePlayers().size() >= Config.PLAYER_LIMIT && !Config.SERVER_FULL) {
|
if (Bukkit.getOnlinePlayers().size() >= Config.PLAYER_LIMIT && !Config.SERVER_FULL) {
|
||||||
fullOverride = true;
|
fullOverride = true;
|
||||||
}
|
}
|
||||||
|
|
@ -180,7 +174,7 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
getPlayer(player).ResetAFK(player);
|
getPlayer(player).resetAFK(player);
|
||||||
messageHistory.addEntry(uuid, message);
|
messageHistory.addEntry(uuid, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -200,42 +194,10 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
getPlayer(player).ResetAFK(player);
|
getPlayer(player).resetAFK(player);
|
||||||
commandHistory.addEntry(uuid, command);
|
commandHistory.addEntry(uuid, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @EventHandler
|
|
||||||
public void onPlayerMove(PlayerMoveEvent event) {
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
if (player != null) {
|
|
||||||
if (!player.hasPermission("afkdetect.bypass")) {
|
|
||||||
if(!player.isInsideVehicle()) {
|
|
||||||
float yawDif = Math.abs(event.getFrom().getYaw() - event.getTo().getYaw());
|
|
||||||
float pitchDif = Math.abs(event.getFrom().getPitch() - event.getTo().getPitch());
|
|
||||||
if (yawDif != 0.0F || pitchDif != 0.0F) {
|
|
||||||
//getPlayer(player).ResetAFK();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onMobSpawn(CreatureSpawnEvent event) {
|
|
||||||
CreatureSpawnEvent.SpawnReason spawnReason = event.getSpawnReason();
|
|
||||||
if (!spawnReason.equals(CreatureSpawnEvent.SpawnReason.NATURAL)
|
|
||||||
&& !spawnReason.equals(CreatureSpawnEvent.SpawnReason.RAID)
|
|
||||||
&& !spawnReason.equals(CreatureSpawnEvent.SpawnReason.SPAWNER)
|
|
||||||
&& !spawnReason.equals(CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE)
|
|
||||||
&& !spawnReason.equals(CreatureSpawnEvent.SpawnReason.VILLAGE_INVASION))
|
|
||||||
return;
|
|
||||||
List<UUID> players = event.getEntity().getLocation().getNearbyPlayers(96).stream().map(Player::getUniqueId).collect(Collectors.toList()); //assuming 6 render distance
|
|
||||||
if (afkPlayers.containsNonAfkPlayer(players)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AFKDetector getInstance() {
|
public static AFKDetector getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
@ -244,7 +206,7 @@ public class AFKDetector extends JavaPlugin implements Listener {
|
||||||
Config.reload();
|
Config.reload();
|
||||||
MessagesConfig.reload();
|
MessagesConfig.reload();
|
||||||
if (sender != null) {
|
if (sender != null) {
|
||||||
sender.sendMessage("Configuration reloaded");
|
sender.sendMiniMessage("<green>Configuration reloaded", null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,18 +27,21 @@ public class AFKPlayer {
|
||||||
private final int afkTime;
|
private final int afkTime;
|
||||||
private boolean isAFK;
|
private boolean isAFK;
|
||||||
private boolean isWarned;
|
private boolean isWarned;
|
||||||
private final AFKPlayers afkPlayers;
|
|
||||||
private final BossBar bossBar;
|
private final BossBar bossBar;
|
||||||
|
private final String afkSoon;
|
||||||
|
private final String afkNow;
|
||||||
|
|
||||||
public AFKPlayer(Player player, AFKDetector plugin, AFKPlayers afkPlayers) {
|
public AFKPlayer(Player player, AFKDetector plugin) {
|
||||||
this.playerName = player.getName();
|
this.playerName = player.getName();
|
||||||
this.uuid = player.getUniqueId();
|
this.uuid = player.getUniqueId();
|
||||||
this.playerToSphereCenter = player.getLocation();
|
this.playerToSphereCenter = player.getLocation();
|
||||||
this.standingTime = System.currentTimeMillis();
|
this.standingTime = System.currentTimeMillis();
|
||||||
this.afkTime = plugin.getAllowedAFKTime(player);
|
this.afkTime = plugin.getAllowedAFKTime(player);
|
||||||
this.isAFK = false;
|
this.isAFK = false;
|
||||||
this.afkPlayers = afkPlayers;
|
|
||||||
this.bossBar = Bukkit.createBossBar("Time until AFK", BarColor.PURPLE, BarStyle.SOLID);
|
this.bossBar = Bukkit.createBossBar("Time until AFK", BarColor.PURPLE, BarStyle.SOLID);
|
||||||
|
MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||||
|
this.afkSoon = LegacyComponentSerializer.builder().build().serialize(miniMessage.deserialize(Messages.AFK_SOON_BOSS_BAR.getMessage()));
|
||||||
|
this.afkNow = LegacyComponentSerializer.builder().build().serialize(miniMessage.deserialize(Messages.AFK_NOW_BOSS_BAR.getMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPlayerName() {
|
public String getPlayerName() {
|
||||||
|
|
@ -77,18 +80,7 @@ public class AFKPlayer {
|
||||||
return x < Config.SPAWN_MAX_X && x > Config.SPAWN_MIN_X && z < Config.SPAWN_MAX_Z && z > Config.SPAWN_MIN_Z;
|
return x < Config.SPAWN_MAX_X && x > Config.SPAWN_MIN_X && z < Config.SPAWN_MAX_Z && z > Config.SPAWN_MIN_Z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAFK(Player player) {
|
public void resetAFK(Player player) {
|
||||||
bossBar.setTitle("§cAFK");
|
|
||||||
// player.setAfk(true);
|
|
||||||
isAFK = true;
|
|
||||||
afkPlayers.addAFKPlayer(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAFK() {
|
|
||||||
return isAFK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ResetAFK(Player player) {
|
|
||||||
if (isAFK && Config.AFK_TOGGLE_MESSAGES) {
|
if (isAFK && Config.AFK_TOGGLE_MESSAGES) {
|
||||||
TagResolver placeholders = TagResolver.resolver(
|
TagResolver placeholders = TagResolver.resolver(
|
||||||
Placeholder.parsed("player", playerName)
|
Placeholder.parsed("player", playerName)
|
||||||
|
|
@ -97,35 +89,41 @@ public class AFKPlayer {
|
||||||
Bukkit.broadcast(component, "afkdetector.notify");
|
Bukkit.broadcast(component, "afkdetector.notify");
|
||||||
}
|
}
|
||||||
standingTime = System.currentTimeMillis();
|
standingTime = System.currentTimeMillis();
|
||||||
// player.setAfk(false);
|
player.setAfk(false);
|
||||||
playerToSphereCenter = player.getLocation();
|
playerToSphereCenter = player.getLocation();
|
||||||
isAFK = false;
|
isAFK = false;
|
||||||
bossBar.removeAll();
|
unWarnPlayer();
|
||||||
afkPlayers.removeAFKPlayer(uuid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void warnPlayer(Player player) {
|
public void setAFK(Player player) {
|
||||||
updateBossBar();
|
bossBar.setTitle(afkNow);
|
||||||
if (isWarned)
|
player.setAfk(true);
|
||||||
return;
|
isAFK = true;
|
||||||
Component deserialize = MiniMessage.miniMessage().deserialize("<dark_aqua>Time until AFK.</dark_aqua>");
|
|
||||||
String text = LegacyComponentSerializer.builder().build().serialize(deserialize);
|
|
||||||
bossBar.setTitle(text);
|
|
||||||
bossBar.addPlayer(player);
|
|
||||||
isWarned = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateBossBar() {
|
public boolean isAFK() {
|
||||||
double afkSeconds = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - getStandingTime());
|
return isAFK;
|
||||||
double toggleSeconds = TimeUnit.MINUTES.toSeconds(Config.TOGGLE_TIME);
|
|
||||||
double percentageAFK = Math.min(afkSeconds / toggleSeconds, 1);
|
|
||||||
bossBar.setProgress(percentageAFK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unWarnPlayer() {
|
private void unWarnPlayer() {
|
||||||
if (!isWarned)
|
if (!isWarned)
|
||||||
return;
|
return;
|
||||||
bossBar.removeAll();
|
bossBar.removeAll();
|
||||||
isWarned = false;
|
isWarned = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void warnPlayer(Player player) {
|
||||||
|
updateBossBarProgress();
|
||||||
|
if (isWarned)
|
||||||
|
return;
|
||||||
|
bossBar.setTitle(afkSoon);
|
||||||
|
bossBar.addPlayer(player);
|
||||||
|
isWarned = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateBossBarProgress() {
|
||||||
|
double afkSeconds = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - getStandingTime());
|
||||||
|
double toggleSeconds = TimeUnit.MINUTES.toSeconds(Config.TOGGLE_TIME);
|
||||||
|
bossBar.setProgress(Math.min(afkSeconds / toggleSeconds, 1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
package com.alttd.afkdectector.afkplayer;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class AFKPlayers {
|
|
||||||
private final HashSet<UUID> afkPlayers = new HashSet<>();
|
|
||||||
|
|
||||||
public synchronized boolean containsNonAfkPlayer(List<UUID> uuids) {
|
|
||||||
return uuids.stream().anyMatch(uuid -> !afkPlayers.contains(uuid));
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void addAFKPlayer(UUID uuid) {
|
|
||||||
afkPlayers.add(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void removeAFKPlayer(UUID uuid) {
|
|
||||||
afkPlayers.remove(uuid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -20,7 +20,9 @@ public enum Messages {
|
||||||
AFK_CHECK_SUBTITLE("afkcheck-subtitle", "Please respond to the dm from staff!"),
|
AFK_CHECK_SUBTITLE("afkcheck-subtitle", "Please respond to the dm from staff!"),
|
||||||
AFK_CHECK_MESSAGE("afkcheck-message", "Hey, since you're near a farm and not moving. I'm making sure you aren't afk. Please respond to me if you're not AFK."),
|
AFK_CHECK_MESSAGE("afkcheck-message", "Hey, since you're near a farm and not moving. I'm making sure you aren't afk. Please respond to me if you're not AFK."),
|
||||||
AFK_KICK_STAFF_MESSAGE("afkkick-staff-messsge", "<gold><player> got afk kicked after being afk for <afk_time> minutes."),
|
AFK_KICK_STAFF_MESSAGE("afkkick-staff-messsge", "<gold><player> got afk kicked after being afk for <afk_time> minutes."),
|
||||||
SUSPICIOUS_KICK_COUNT("afkkick-suspicious-message", "<gold><player> has had <count> suspicious AFK kicks since last reboot.");
|
SUSPICIOUS_KICK_COUNT("afkkick-suspicious-message", "<gold><player> has had <count> suspicious AFK kicks since last reboot."),
|
||||||
|
AFK_SOON_BOSS_BAR("afk-soon-boss-bar", "<dark_aqua>Time until AFK.</dark_aqua>"),
|
||||||
|
AFK_NOW_BOSS_BAR("afk-now-boss-bar", "<red>AFK</red>");
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
private String message;
|
private String message;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user