Dateien nach "src/main/java/de/nexuslobby/modules/tablist" hochladen
This commit is contained in:
156
src/main/java/de/nexuslobby/modules/tablist/TablistModule.java
Normal file
156
src/main/java/de/nexuslobby/modules/tablist/TablistModule.java
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
package de.nexuslobby.modules.tablist;
|
||||||
|
|
||||||
|
import de.nexuslobby.NexusLobby;
|
||||||
|
import de.nexuslobby.api.Module;
|
||||||
|
import net.luckperms.api.LuckPerms;
|
||||||
|
import net.luckperms.api.LuckPermsProvider;
|
||||||
|
import net.luckperms.api.model.user.User;
|
||||||
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TablistModule implements Module {
|
||||||
|
|
||||||
|
private BukkitTask refreshTask;
|
||||||
|
private int currentHeaderIndex = 0;
|
||||||
|
private int currentFooterIndex = 0;
|
||||||
|
private LuckPerms luckPerms;
|
||||||
|
private boolean placeholderAPIEnabled;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return "Tablist"; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
if (!vConfig.getBoolean("tablist.enabled", true)) return;
|
||||||
|
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("LuckPerms") != null) luckPerms = LuckPermsProvider.get();
|
||||||
|
placeholderAPIEnabled = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null;
|
||||||
|
|
||||||
|
// Nutzt jetzt das Intervall aus der visuals.yml
|
||||||
|
long interval = vConfig.getLong("tablist.interval-ticks", 40L);
|
||||||
|
refreshTask = Bukkit.getScheduler().runTaskTimer(NexusLobby.getInstance(), this::refreshAll, 10L, interval);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshAll() {
|
||||||
|
updateAnimationIndices();
|
||||||
|
for (Player viewer : Bukkit.getOnlinePlayers()) {
|
||||||
|
viewer.setPlayerListHeader(getHeader(viewer));
|
||||||
|
viewer.setPlayerListFooter(getFooter(viewer));
|
||||||
|
updateTeams(viewer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTeams(Player viewer) {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
if (!vConfig.getBoolean("tablist.show-prefix-in-playerlist", true)) return;
|
||||||
|
|
||||||
|
Scoreboard sb = viewer.getScoreboard();
|
||||||
|
if (sb == Bukkit.getScoreboardManager().getMainScoreboard()) return;
|
||||||
|
|
||||||
|
for (Player target : Bukkit.getOnlinePlayers()) {
|
||||||
|
String teamName = "tab_" + target.getName();
|
||||||
|
if (teamName.length() > 16) teamName = teamName.substring(0, 16);
|
||||||
|
|
||||||
|
Team team = sb.getTeam(teamName);
|
||||||
|
if (team == null) team = sb.registerNewTeam(teamName);
|
||||||
|
|
||||||
|
String prefix = getPlayerPrefix(target);
|
||||||
|
String suffix = getPlayerSuffix(target);
|
||||||
|
|
||||||
|
if (!team.getPrefix().equals(prefix)) team.setPrefix(prefix);
|
||||||
|
if (!team.getSuffix().equals(suffix)) team.setSuffix(suffix);
|
||||||
|
|
||||||
|
if (!team.hasEntry(target.getName())) {
|
||||||
|
team.addEntry(target.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPlayerPrefix(Player player) {
|
||||||
|
String prefix = "";
|
||||||
|
if (luckPerms != null) {
|
||||||
|
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
|
||||||
|
if (user != null && user.getCachedData().getMetaData().getPrefix() != null) {
|
||||||
|
prefix = user.getCachedData().getMetaData().getPrefix();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefix.isEmpty() && placeholderAPIEnabled) {
|
||||||
|
prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
|
||||||
|
}
|
||||||
|
return colorize(prefix.isEmpty() ? "&7" : prefix + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPlayerSuffix(Player player) {
|
||||||
|
// Hier könnte man später auch Suffixe aus der Config laden
|
||||||
|
return colorize(" &8[&a" + player.getPing() + "ms&8]");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateAnimationIndices() {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
List<String> h = vConfig.getStringList("tablist.header-animations");
|
||||||
|
List<String> f = vConfig.getStringList("tablist.footer-animations");
|
||||||
|
if (!h.isEmpty()) currentHeaderIndex = (currentHeaderIndex + 1) % h.size();
|
||||||
|
if (!f.isEmpty()) currentFooterIndex = (currentFooterIndex + 1) % f.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getHeader(Player p) {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
List<String> list = vConfig.getStringList("tablist.header-animations");
|
||||||
|
if (list.isEmpty()) return "§6NexusLobby";
|
||||||
|
return replacePlaceholders(list.get(currentHeaderIndex), p);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getFooter(Player p) {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
List<String> list = vConfig.getStringList("tablist.footer-animations");
|
||||||
|
if (list.isEmpty()) return "§7Willkommen";
|
||||||
|
return replacePlaceholders(list.get(currentFooterIndex), p);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String replacePlaceholders(String text, Player p) {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
|
||||||
|
text = text.replace("{server}", vConfig.getString("tablist.server-name", "NexusLobby"));
|
||||||
|
text = text.replace("{player}", p.getName());
|
||||||
|
text = text.replace("{online}", String.valueOf(Bukkit.getOnlinePlayers().size()));
|
||||||
|
text = text.replace("{staff}", String.valueOf(getOnlineStaffCount()));
|
||||||
|
text = text.replace("{separator}", vConfig.getString("tablist.separator-line", ""));
|
||||||
|
|
||||||
|
text = text.replace("{website}", vConfig.getBoolean("tablist.show-website") ? vConfig.getString("tablist.website", "") : "");
|
||||||
|
text = text.replace("{teamspeak}", vConfig.getBoolean("tablist.show-teamspeak") ? vConfig.getString("tablist.teamspeak-address", "") : "");
|
||||||
|
text = text.replace("{discord}", vConfig.getBoolean("tablist.show-discord") ? vConfig.getString("tablist.discord-address", "") : "");
|
||||||
|
|
||||||
|
if (placeholderAPIEnabled) {
|
||||||
|
text = PlaceholderAPI.setPlaceholders(p, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
return colorize(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getOnlineStaffCount() {
|
||||||
|
FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig();
|
||||||
|
String permission = vConfig.getString("tablist.staff-permission", "nexuslobby.staff");
|
||||||
|
int count = 0;
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (p.hasPermission(permission)) count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String colorize(String s) {
|
||||||
|
return s == null ? "" : s.replace("&", "§");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
if (refreshTask != null) refreshTask.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user