mirror of
https://github.com/Freezy-Studios/BlazeSMP.git
synced 2025-04-22 00:54: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.ProtectedBlocks;
|
||||
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.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
@ -26,6 +27,7 @@ public final class BlazeSMP extends JavaPlugin {
|
|||
@Getter private FileConfiguration configuration;
|
||||
@Getter private Logger log;
|
||||
@Getter private BukkitTask nameUpdateTask;
|
||||
@Getter private BukkitTask tabListUpdateTask;
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
|
@ -87,6 +89,7 @@ public final class BlazeSMP extends JavaPlugin {
|
|||
|
||||
this.log.info("Starting Timer tasks...");
|
||||
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("Enabled BlazeSMP!");
|
||||
|
|
|
@ -10,15 +10,15 @@ import java.io.InputStream;
|
|||
import java.io.Reader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class L4M4 {
|
||||
private static final Logger LOGGER = Logger.getLogger("L4M4");
|
||||
private static final String MESSAGES_STORAGE_PATH = "plugins/BlazeSMP/storage/messages.json";
|
||||
|
||||
// Map zum Speichern der geladenen Nachrichten
|
||||
private static Map<String, String> messages;
|
||||
// Map zum Speichern der geladenen Nachrichten (jetzt mit Object als Wert)
|
||||
private static Map<String, Object> messages;
|
||||
|
||||
/**
|
||||
* Initialisiert die messages.json und lädt anschließend die Nachrichten.
|
||||
|
@ -36,7 +36,6 @@ public class L4M4 {
|
|||
private static void initializeMessages() {
|
||||
File messagesFile = new File(MESSAGES_STORAGE_PATH);
|
||||
if (!messagesFile.exists()) {
|
||||
// Erstelle die notwendigen Verzeichnisse
|
||||
if (messagesFile.getParentFile() != null && !messagesFile.getParentFile().exists()) {
|
||||
if (messagesFile.getParentFile().mkdirs()) {
|
||||
LOGGER.info("Verzeichnis für messages.json erstellt: " + messagesFile.getParentFile().getAbsolutePath());
|
||||
|
@ -45,13 +44,11 @@ public class L4M4 {
|
|||
return;
|
||||
}
|
||||
}
|
||||
// Lade die Ressource als Stream
|
||||
try (InputStream in = L4M4.class.getClassLoader().getResourceAsStream("storage/messages.json")) {
|
||||
if (in == null) {
|
||||
LOGGER.severe("Resource 'storage/messages.json' nicht gefunden!");
|
||||
return;
|
||||
}
|
||||
// Kopiere den Inhalt der Ressource in die Zieldatei
|
||||
Files.copy(in, messagesFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||
LOGGER.info("Default messages.json wurde kopiert nach: " + MESSAGES_STORAGE_PATH);
|
||||
} catch (IOException e) {
|
||||
|
@ -73,7 +70,7 @@ public class L4M4 {
|
|||
}
|
||||
try (Reader reader = new FileReader(messagesFile)) {
|
||||
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.");
|
||||
} catch (IOException e) {
|
||||
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.
|
||||
*
|
||||
* @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) {
|
||||
if (messages == null) {
|
||||
LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen.");
|
||||
return "404 not found";
|
||||
}
|
||||
String value = messages.get(key);
|
||||
String value = (String) messages.get(key);
|
||||
if (value == null) {
|
||||
LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden.");
|
||||
return "404 not found";
|
||||
}
|
||||
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.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