mirror of
https://github.com/Freezy-Studios/BlazeSMP.git
synced 2025-04-22 04:44:04 +02:00
Added updator for TabList
This commit is contained in:
parent
595e3005d7
commit
989079757e
4 changed files with 130 additions and 10 deletions
|
@ -12,6 +12,7 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.Homes;
|
||||||
import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4;
|
import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4;
|
||||||
import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks;
|
import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks;
|
||||||
import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate;
|
import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate;
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
@ -26,6 +27,7 @@ public final class BlazeSMP extends JavaPlugin {
|
||||||
@Getter private FileConfiguration configuration;
|
@Getter private FileConfiguration configuration;
|
||||||
@Getter private Logger log;
|
@Getter private Logger log;
|
||||||
@Getter private BukkitTask nameUpdateTask;
|
@Getter private BukkitTask nameUpdateTask;
|
||||||
|
@Getter private BukkitTask tabListUpdateTask;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
|
@ -87,6 +89,7 @@ public final class BlazeSMP extends JavaPlugin {
|
||||||
|
|
||||||
this.log.info("Starting Timer tasks...");
|
this.log.info("Starting Timer tasks...");
|
||||||
this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L);
|
this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L);
|
||||||
|
this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L);
|
||||||
this.log.info("Started Timer tasks!");
|
this.log.info("Started Timer tasks!");
|
||||||
|
|
||||||
this.log.info("Enabled BlazeSMP!");
|
this.log.info("Enabled BlazeSMP!");
|
||||||
|
|
|
@ -10,15 +10,15 @@ import java.io.InputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class L4M4 {
|
public class L4M4 {
|
||||||
private static final Logger LOGGER = Logger.getLogger("L4M4");
|
private static final Logger LOGGER = Logger.getLogger("L4M4");
|
||||||
private static final String MESSAGES_STORAGE_PATH = "plugins/BlazeSMP/storage/messages.json";
|
private static final String MESSAGES_STORAGE_PATH = "plugins/BlazeSMP/storage/messages.json";
|
||||||
|
|
||||||
// Map zum Speichern der geladenen Nachrichten
|
// Map zum Speichern der geladenen Nachrichten (jetzt mit Object als Wert)
|
||||||
private static Map<String, String> messages;
|
private static Map<String, Object> messages;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialisiert die messages.json und lädt anschließend die Nachrichten.
|
* Initialisiert die messages.json und lädt anschließend die Nachrichten.
|
||||||
|
@ -36,7 +36,6 @@ public class L4M4 {
|
||||||
private static void initializeMessages() {
|
private static void initializeMessages() {
|
||||||
File messagesFile = new File(MESSAGES_STORAGE_PATH);
|
File messagesFile = new File(MESSAGES_STORAGE_PATH);
|
||||||
if (!messagesFile.exists()) {
|
if (!messagesFile.exists()) {
|
||||||
// Erstelle die notwendigen Verzeichnisse
|
|
||||||
if (messagesFile.getParentFile() != null && !messagesFile.getParentFile().exists()) {
|
if (messagesFile.getParentFile() != null && !messagesFile.getParentFile().exists()) {
|
||||||
if (messagesFile.getParentFile().mkdirs()) {
|
if (messagesFile.getParentFile().mkdirs()) {
|
||||||
LOGGER.info("Verzeichnis für messages.json erstellt: " + messagesFile.getParentFile().getAbsolutePath());
|
LOGGER.info("Verzeichnis für messages.json erstellt: " + messagesFile.getParentFile().getAbsolutePath());
|
||||||
|
@ -45,13 +44,11 @@ public class L4M4 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Lade die Ressource als Stream
|
|
||||||
try (InputStream in = L4M4.class.getClassLoader().getResourceAsStream("storage/messages.json")) {
|
try (InputStream in = L4M4.class.getClassLoader().getResourceAsStream("storage/messages.json")) {
|
||||||
if (in == null) {
|
if (in == null) {
|
||||||
LOGGER.severe("Resource 'storage/messages.json' nicht gefunden!");
|
LOGGER.severe("Resource 'storage/messages.json' nicht gefunden!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Kopiere den Inhalt der Ressource in die Zieldatei
|
|
||||||
Files.copy(in, messagesFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(in, messagesFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
LOGGER.info("Default messages.json wurde kopiert nach: " + MESSAGES_STORAGE_PATH);
|
LOGGER.info("Default messages.json wurde kopiert nach: " + MESSAGES_STORAGE_PATH);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -73,7 +70,7 @@ public class L4M4 {
|
||||||
}
|
}
|
||||||
try (Reader reader = new FileReader(messagesFile)) {
|
try (Reader reader = new FileReader(messagesFile)) {
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
messages = gson.fromJson(reader, new TypeToken<Map<String, String>>() {}.getType());
|
messages = gson.fromJson(reader, new TypeToken<Map<String, Object>>() {}.getType());
|
||||||
LOGGER.info("messages.json wurde erfolgreich geladen.");
|
LOGGER.info("messages.json wurde erfolgreich geladen.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.severe("Fehler beim Laden von messages.json: " + e.getMessage());
|
LOGGER.severe("Fehler beim Laden von messages.json: " + e.getMessage());
|
||||||
|
@ -84,17 +81,71 @@ public class L4M4 {
|
||||||
* Gibt den Wert zum gegebenen Schlüssel zurück.
|
* Gibt den Wert zum gegebenen Schlüssel zurück.
|
||||||
*
|
*
|
||||||
* @param key der Schlüssel
|
* @param key der Schlüssel
|
||||||
* @return der Wert, falls vorhanden, ansonsten null.
|
* @return der Wert als Object, falls vorhanden, ansonsten "404 not found".
|
||||||
*/
|
*/
|
||||||
public static String get(String key) {
|
public static String get(String key) {
|
||||||
if (messages == null) {
|
if (messages == null) {
|
||||||
LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen.");
|
LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen.");
|
||||||
return "404 not found";
|
return "404 not found";
|
||||||
}
|
}
|
||||||
String value = messages.get(key);
|
String value = (String) messages.get(key);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden.");
|
LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden.");
|
||||||
|
return "404 not found";
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt eine Liste aller Nachrichtenwerte zurück.
|
||||||
|
*
|
||||||
|
* @return LinkedList mit allen gespeicherten Werten aus messages.json.
|
||||||
|
*/
|
||||||
|
public static LinkedList<Object> getStringList() {
|
||||||
|
if (messages == null) {
|
||||||
|
LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen.");
|
||||||
|
return new LinkedList<>();
|
||||||
|
}
|
||||||
|
return new LinkedList<>(messages.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt eine Liste von Strings für einen bestimmten Key zurück.
|
||||||
|
* Falls der Wert ein Array ist, wird es als Liste zurückgegeben.
|
||||||
|
* Falls der Wert ein einzelner String ist, wird eine Liste mit einem Element zurückgegeben.
|
||||||
|
* Falls der Key nicht existiert, wird eine leere Liste zurückgegeben.
|
||||||
|
*
|
||||||
|
* @param key der Schlüssel, dessen Werte als Liste zurückgegeben werden sollen.
|
||||||
|
* @return LinkedList<String> mit den gespeicherten Werten.
|
||||||
|
*/
|
||||||
|
public static LinkedList<String> getStringList(String key) {
|
||||||
|
LinkedList<String> result = new LinkedList<>();
|
||||||
|
|
||||||
|
if (messages == null) {
|
||||||
|
LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen.");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object value = messages.get(key);
|
||||||
|
switch (value) {
|
||||||
|
case null -> {
|
||||||
|
LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden.");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
case List<?> objects -> {
|
||||||
|
// Falls es eine Liste ist, konvertiere sie zu einer Liste von Strings
|
||||||
|
for (Object obj : objects) {
|
||||||
|
if (obj instanceof String) {
|
||||||
|
result.add((String) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case String s ->
|
||||||
|
// Falls der Wert nur ein einzelner String ist, füge ihn zur Liste hinzu
|
||||||
|
result.add(s);
|
||||||
|
default -> LOGGER.warning("Key '" + key + "' enthält keine Liste oder String in messages.json.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
package me.freezy.plugins.papermc.blazesmp.tasks;
|
||||||
|
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
public class TabListTimer extends BukkitRunnable {
|
||||||
|
private LinkedList<String> header = new LinkedList<>();
|
||||||
|
private LinkedList<String> footer = new LinkedList<>();
|
||||||
|
private int index = 0;
|
||||||
|
|
||||||
|
public TabListTimer() {
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt die Header- und Footer-Daten neu.
|
||||||
|
* Falls eine Liste leer ist, wird ein Standardwert gesetzt, um Fehler zu vermeiden.
|
||||||
|
*/
|
||||||
|
private void reloadData() {
|
||||||
|
header = L4M4.getStringList("tablist.header");
|
||||||
|
footer = L4M4.getStringList("tablist.footer");
|
||||||
|
|
||||||
|
// Falls eine Liste leer ist, setzen wir eine Fallback-Nachricht
|
||||||
|
if (header.isEmpty()) {
|
||||||
|
header.add("<gray>Error</gray>");
|
||||||
|
}
|
||||||
|
if (footer.isEmpty()) {
|
||||||
|
footer.add("<gray>Error</gray>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (header.isEmpty() || footer.isEmpty()) {
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
int headerIndex = index % header.size();
|
||||||
|
int footerIndex = index % footer.size();
|
||||||
|
|
||||||
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
|
player.sendPlayerListHeaderAndFooter(
|
||||||
|
MiniMessage.miniMessage().deserialize(header.get(headerIndex)),
|
||||||
|
MiniMessage.miniMessage().deserialize(footer.get(footerIndex))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (index >= Math.max(header.size(), footer.size())) {
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -116,5 +116,13 @@
|
||||||
|
|
||||||
"teleport.cancelled": "<red>Teleporting cancelled, you moved!</red>",
|
"teleport.cancelled": "<red>Teleporting cancelled, you moved!</red>",
|
||||||
"teleport.success": "<green>Teleported!</green>",
|
"teleport.success": "<green>Teleported!</green>",
|
||||||
"teleport.countdown": "<yellow>Teleporting to home in %s seconds!</yellow>"
|
"teleport.countdown": "<yellow>Teleporting to home in %s seconds!</yellow>",
|
||||||
|
|
||||||
|
"tablist.header": [
|
||||||
|
"<b><gold>BlazeSMP</gold></b>"
|
||||||
|
],
|
||||||
|
"tablist.footer": [
|
||||||
|
"<aqua>hosted by merged.games</aqua>",
|
||||||
|
"<c:light_gray>made by BlazeHC Team & Freezy/DaTTV</c>"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue