From 647922cfc52be7c3f6bed6ac6d216e25550e2ed2 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 26 May 2023 01:44:06 +0200 Subject: [PATCH] Switched to using galaxy's build in afk system for preventing mob spawning/ticking Moved some displayed text to message config --- .../com/alttd/afkdectector/AFKCheckTimer.java | 3 +- .../com/alttd/afkdectector/AFKDetector.java | 48 ++------------ .../afkdectector/afkplayer/AFKPlayer.java | 64 +++++++++---------- .../afkdectector/afkplayer/AFKPlayers.java | 21 ------ .../alttd/afkdectector/config/Messages.java | 4 +- 5 files changed, 40 insertions(+), 100 deletions(-) delete mode 100644 src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayers.java diff --git a/src/main/java/com/alttd/afkdectector/AFKCheckTimer.java b/src/main/java/com/alttd/afkdectector/AFKCheckTimer.java index a070bb7..e5551ad 100755 --- a/src/main/java/com/alttd/afkdectector/AFKCheckTimer.java +++ b/src/main/java/com/alttd/afkdectector/AFKCheckTimer.java @@ -68,10 +68,9 @@ public class AFKCheckTimer extends BukkitRunnable { private void resetAFKPlayer(Location pastLocation, Player player, AFKPlayer afkPlayer) { afkPlayer.setPlayerToSphereCenter(pastLocation); afkPlayer.setStandingTime(System.currentTimeMillis()); - afkPlayer.unWarnPlayer(); player.setSleepingIgnored(false); plugin.AFKPlayers.removeEntry(player.getName()); - afkPlayer.ResetAFK(player); + afkPlayer.resetAFK(player); MessageTimer currentTimer = plugin.messageTimers.get(player.getUniqueId()); if (currentTimer != null) { diff --git a/src/main/java/com/alttd/afkdectector/AFKDetector.java b/src/main/java/com/alttd/afkdectector/AFKDetector.java index 8bb6bb0..c4bf156 100755 --- a/src/main/java/com/alttd/afkdectector/AFKDetector.java +++ b/src/main/java/com/alttd/afkdectector/AFKDetector.java @@ -1,7 +1,6 @@ package com.alttd.afkdectector; import com.alttd.afkdectector.afkplayer.AFKPlayer; -import com.alttd.afkdectector.afkplayer.AFKPlayers; import com.alttd.afkdectector.command.AFKCheckCommand; import com.alttd.afkdectector.command.AFKListCommand; 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 org.bukkit.Bukkit; import org.bukkit.command.CommandSender; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -35,10 +32,8 @@ import org.bukkit.scoreboard.Team; import java.util.Date; import java.util.HashMap; -import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; 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. */ Team AFKPlayers; - private final AFKPlayers afkPlayers = new AFKPlayers(); @Override public void onEnable() { @@ -89,7 +83,7 @@ public class AFKDetector extends JavaPlugin implements Listener { public AFKPlayer getPlayer(Player player) { 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()); } @@ -135,7 +129,7 @@ public class AFKDetector extends JavaPlugin implements Listener { Player player = event.getPlayer(); UUID uuid = player.getUniqueId(); 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) { fullOverride = true; } @@ -180,7 +174,7 @@ public class AFKDetector extends JavaPlugin implements Listener { } Player player = event.getPlayer(); - getPlayer(player).ResetAFK(player); + getPlayer(player).resetAFK(player); messageHistory.addEntry(uuid, message); } @@ -200,42 +194,10 @@ public class AFKDetector extends JavaPlugin implements Listener { } Player player = event.getPlayer(); - getPlayer(player).ResetAFK(player); + getPlayer(player).resetAFK(player); 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 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() { return instance; } @@ -244,7 +206,7 @@ public class AFKDetector extends JavaPlugin implements Listener { Config.reload(); MessagesConfig.reload(); if (sender != null) { - sender.sendMessage("Configuration reloaded"); + sender.sendMiniMessage("Configuration reloaded", null); } } } diff --git a/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayer.java b/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayer.java index 7666ad3..c220e68 100755 --- a/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayer.java +++ b/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayer.java @@ -27,18 +27,21 @@ public class AFKPlayer { private final int afkTime; private boolean isAFK; private boolean isWarned; - private final AFKPlayers afkPlayers; 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.uuid = player.getUniqueId(); this.playerToSphereCenter = player.getLocation(); this.standingTime = System.currentTimeMillis(); this.afkTime = plugin.getAllowedAFKTime(player); this.isAFK = false; - this.afkPlayers = afkPlayers; 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() { @@ -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; } - public void setAFK(Player player) { - bossBar.setTitle("§cAFK"); -// player.setAfk(true); - isAFK = true; - afkPlayers.addAFKPlayer(uuid); - } - - public boolean isAFK() { - return isAFK; - } - - public void ResetAFK(Player player) { + public void resetAFK(Player player) { if (isAFK && Config.AFK_TOGGLE_MESSAGES) { TagResolver placeholders = TagResolver.resolver( Placeholder.parsed("player", playerName) @@ -97,35 +89,41 @@ public class AFKPlayer { Bukkit.broadcast(component, "afkdetector.notify"); } standingTime = System.currentTimeMillis(); -// player.setAfk(false); + player.setAfk(false); playerToSphereCenter = player.getLocation(); isAFK = false; - bossBar.removeAll(); - afkPlayers.removeAFKPlayer(uuid); + unWarnPlayer(); } - public void warnPlayer(Player player) { - updateBossBar(); - if (isWarned) - return; - Component deserialize = MiniMessage.miniMessage().deserialize("Time until AFK."); - String text = LegacyComponentSerializer.builder().build().serialize(deserialize); - bossBar.setTitle(text); - bossBar.addPlayer(player); - isWarned = true; + public void setAFK(Player player) { + bossBar.setTitle(afkNow); + player.setAfk(true); + isAFK = true; } - public void updateBossBar() { - double afkSeconds = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - getStandingTime()); - double toggleSeconds = TimeUnit.MINUTES.toSeconds(Config.TOGGLE_TIME); - double percentageAFK = Math.min(afkSeconds / toggleSeconds, 1); - bossBar.setProgress(percentageAFK); + public boolean isAFK() { + return isAFK; } - public void unWarnPlayer() { + private void unWarnPlayer() { if (!isWarned) return; bossBar.removeAll(); 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)); + } } diff --git a/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayers.java b/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayers.java deleted file mode 100644 index d3a5eb8..0000000 --- a/src/main/java/com/alttd/afkdectector/afkplayer/AFKPlayers.java +++ /dev/null @@ -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 afkPlayers = new HashSet<>(); - - public synchronized boolean containsNonAfkPlayer(List 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); - } -} diff --git a/src/main/java/com/alttd/afkdectector/config/Messages.java b/src/main/java/com/alttd/afkdectector/config/Messages.java index 4fa79c1..a252653 100644 --- a/src/main/java/com/alttd/afkdectector/config/Messages.java +++ b/src/main/java/com/alttd/afkdectector/config/Messages.java @@ -20,7 +20,9 @@ public enum Messages { 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_KICK_STAFF_MESSAGE("afkkick-staff-messsge", " got afk kicked after being afk for minutes."), - SUSPICIOUS_KICK_COUNT("afkkick-suspicious-message", " has had suspicious AFK kicks since last reboot."); + SUSPICIOUS_KICK_COUNT("afkkick-suspicious-message", " has had suspicious AFK kicks since last reboot."), + AFK_SOON_BOSS_BAR("afk-soon-boss-bar", "Time until AFK."), + AFK_NOW_BOSS_BAR("afk-now-boss-bar", "AFK"); private final String key; private String message;