Dateien nach "src/main/java/com/mviper/zenithjoin/listeners" hochladen

This commit is contained in:
2025-12-14 19:23:53 +00:00
parent 884d897ba4
commit 6ebc776052
7 changed files with 489 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class ActionBarListener implements Listener {
private final Main plugin;
public ActionBarListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
if (config.getBoolean("ActionBar.EnabledActionBar") && player.hasPermission("zenithjoin.actionbar")) {
String actionBarMessage = PlaceholderAPI.setPlaceholders(player,
ChatColor.translateAlternateColorCodes('&',
messages.getString("ActionBar.Message")
.replace("{player}", player.getName())));
int duration = config.getInt("ActionBar.Duration");
// Erstelle den /title Befehl für die Action-Bar
// JSON-Format wird benötigt, um Farben korrekt darzustellen
String jsonMessage = "{\"text\":\"" + actionBarMessage.replace("\"", "\\\"") + "\"}";
String command = "title " + player.getName() + " actionbar " + jsonMessage;
// Sende den Befehl über die Konsole
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
// Da der /title Befehl eine eingebaute Dauer hat,
// ist kein separater Scheduler mehr nötig.
}
}
}

View File

@@ -0,0 +1,71 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class FirstJoinListener implements Listener {
private final Main plugin;
public FirstJoinListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onFirstJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
// Prüfen, ob der Spieler neu ist
if (!player.hasPlayedBefore()) {
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
// Erste Beitrittsnachricht in der Konsole
if (config.getBoolean("FirstJoin.EnabledFirstJoinMessage")) {
// KORREKTUR: Die Reihenfolge ist entscheidend!
// 1. Hole die rohe Nachricht.
String rawMessage = messages.getString("FirstJoin.JoinMessage");
// 2. Ersetze die Platzhalter (z.B. %luckperms_prefix%).
String messageWithPlaceholders = PlaceholderAPI.setPlaceholders(player, rawMessage);
// 3. Übersetze ALLE Farbcodes (&a, &4, etc.) in das finale Format.
String finalMessage = ChatColor.translateAlternateColorCodes('&', messageWithPlaceholders);
finalMessage = finalMessage
.replace("{displayname}", player.getDisplayName())
.replace("{player}", player.getName())
.replace("{>}", "»")
.replace("{<}", "«");
event.setJoinMessage(finalMessage);
return; // Verhindert, dass die normale Join-Nachricht auch gesendet wird
}
// Titel beim ersten Beitritt
if (config.getBoolean("FirstJoin.SendTitleOnFirstJoin") && player.hasPermission("zenithjoin.title")) {
String title = ChatColor.translateAlternateColorCodes('&',
messages.getString("FirstJoin.Title")
.replace("{player}", player.getName()));
String subtitle = ChatColor.translateAlternateColorCodes('&',
messages.getString("FirstJoin.SubTitle")
.replace("{player}", player.getName()));
player.sendTitle(title, subtitle);
}
// Feuerwerk beim ersten Beitritt
if (config.getBoolean("FirstJoin.SendFireworkOnFirstJoin") && player.hasPermission("zenithjoin.firework")) {
// Hier könntest du ein spezielles Feuerwerk entfachen lassen
// oder einfach das normale Feuerwerk auslösen, indem du das Event neu feuerts.
// Für den Moment lassen wir es so, wie es ist.
}
}
}
}

View File

@@ -0,0 +1,97 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.meta.FireworkMeta;
import java.util.ArrayList;
import java.util.List;
public class JoinFireworkListener implements Listener {
private final Main plugin;
public JoinFireworkListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
ConfigManager configManager = plugin.getConfigManager();
FileConfiguration config = configManager.getConfig();
Player player = event.getPlayer();
if (config.getBoolean("JoinFirework.EnabledFirework") &&
player.hasPermission("zenithjoin.firework")) {
int amount = config.getInt("JoinFirework.AmountFirework");
for (int i = 0; i < amount; i++) {
Location location = player.getLocation();
// ÄNDERUNG: FIREWORK wurde zu FIREWORK_ROCKET
Firework firework = (Firework) player.getWorld().spawnEntity(location, EntityType.FIREWORK_ROCKET);
FireworkMeta meta = firework.getFireworkMeta();
meta.setPower(config.getInt("JoinFirework.Firework.Power"));
ArrayList<Color> colors = new ArrayList<>();
ArrayList<Color> fadeColors = new ArrayList<>();
List<String> colorList = config.getStringList("JoinFirework.Firework.Colors");
List<String> fadeColorList = config.getStringList("JoinFirework.Firework.FadeColor");
for (String colorName : colorList) {
colors.add(getColor(colorName));
}
for (String colorName : fadeColorList) {
fadeColors.add(getColor(colorName));
}
meta.addEffect(FireworkEffect.builder()
.flicker(config.getBoolean("JoinFirework.Flicker"))
.trail(config.getBoolean("JoinFirework.Trail"))
.with(FireworkEffect.Type.valueOf(config.getString("JoinFirework.Type")))
.withColor(colors)
.withFade(fadeColors)
.build());
firework.setFireworkMeta(meta);
}
}
}
private Color getColor(String name) {
switch (name.toUpperCase()) {
case "AQUA": return Color.AQUA;
case "BLACK": return Color.BLACK;
case "BLUE": return Color.BLUE;
case "FUCHSIA": return Color.FUCHSIA;
case "GRAY": return Color.GRAY;
case "GREEN": return Color.GREEN;
case "LIME": return Color.LIME;
case "MAROON": return Color.MAROON;
case "NAVY": return Color.NAVY;
case "OLIVE": return Color.OLIVE;
case "ORANGE": return Color.ORANGE;
case "PURPLE": return Color.PURPLE;
case "RED": return Color.RED;
case "SILVER": return Color.SILVER;
case "TEAL": return Color.TEAL;
case "WHITE": return Color.WHITE;
case "YELLOW": return Color.YELLOW;
default: return Color.WHITE;
}
}
}

View File

@@ -0,0 +1,118 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import com.mviper.zenithjoin.utils.ChatUtils; // WICHTIG: Import der neuen Hilfsklasse
import me.clip.placeholderapi.PlaceholderAPI;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import java.util.List;
public class JoinLinksListener implements Listener {
private final Main plugin;
public JoinLinksListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
if (config.getBoolean("PlayerJoin.MessageJoin") && player.hasPermission("zenithjoin.welcomemessage")) {
// Erste Willkommensnachricht senden
List<String> welcomeMessages = messages.getStringList("ZenithJoin.FirstWelcomeMessage");
for (String message : welcomeMessages) {
String formattedMessage = formatString(player, message);
// Nachricht zentrieren und senden
player.sendMessage(ChatUtils.centerText(formattedMessage));
}
// Klickbare Links als eine zentrierte Zeile senden
TextComponent website = createLinkComponent(messages, "ZenithJoin.ServerLinks.website", player);
TextComponent store = createLinkComponent(messages, "ZenithJoin.ServerLinks.store", player);
TextComponent twitter = createLinkComponent(messages, "ZenithJoin.ServerLinks.twitter", player);
TextComponent discord = createLinkComponent(messages, "ZenithJoin.ServerLinks.discord", player);
// Erstellen einer Komponente, die alle Links enthält
TextComponent line = new TextComponent();
// Den gesamten Text der Links für die Zentrierung zusammenfügen
String fullLinkText = website.getText() + store.getText() + twitter.getText() + discord.getText();
// Den zusammengesetzten Text zentrieren
String centeredFullLinkText = ChatUtils.centerText(fullLinkText);
// Die Anzahl der führenden Leerzeichen ermitteln
String strippedCenteredText = ChatColor.stripColor(centeredFullLinkText);
String strippedFullText = ChatColor.stripColor(fullLinkText);
int leadingSpaces = strippedCenteredText.length() - strippedCenteredText.trim().length() - (strippedFullText.length() - strippedFullText.trim().length());
// Füge die Leerzeichen als "unformatierten" Text hinzu
line.addExtra(new TextComponent(" ".repeat(Math.max(0, leadingSpaces))));
// Füge die eigentlichen Link-Komponenten hinzu
line.addExtra(website);
line.addExtra(store);
line.addExtra(twitter);
line.addExtra(discord);
player.spigot().sendMessage(line);
// Zweite Willkommensnachricht senden
List<String> secondWelcomeMessages = messages.getStringList("ZenithJoin.SecondWelcomeMessage");
for (String message : secondWelcomeMessages) {
String formattedMessage = formatString(player, message);
// Nachricht zentrieren und senden
player.sendMessage(ChatUtils.centerText(formattedMessage));
}
}
}
/**
* Hilfsmethode zum Formatieren eines Strings mit Platzhaltern und Farbcodes.
*/
private String formatString(Player player, String message) {
return PlaceholderAPI.setPlaceholders(player,
ChatColor.translateAlternateColorCodes('&', message)
.replace("{player}", player.getName())
.replace("<1>", "»")
.replace("<3>", "«")
.replace("<2>", "◀ ▶")
.replace("<4>", "")
.replace("<5>", "")
.replace("<6>", ""));
}
/**
* Erstellt eine klickbare TextComponent für einen Link.
*/
private TextComponent createLinkComponent(FileConfiguration messages, String path, Player player) {
String name = formatString(player, messages.getString(path + ".name"));
String url = messages.getString(path + ".pagelink");
String hoverText = formatString(player, messages.getString(path + ".description"));
TextComponent component = new TextComponent(name);
component.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url));
component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
new ComponentBuilder(hoverText).create()));
return component;
}
}

View File

@@ -0,0 +1,55 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import com.mviper.zenithjoin.utils.ChatUtils; // WICHTIG: Import der neuen Hilfsklasse
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class JoinMessageListener implements Listener {
private final Main plugin;
public JoinMessageListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
Player player = event.getPlayer();
// Standard-Join-Nachricht leeren
event.setJoinMessage("");
// Benutzerdefinierte Join-Nachricht senden, wenn aktiviert
if (config.getBoolean("PlayerJoinMessage.PlayerJoin") &&
player.hasPermission("zenithjoin.joinmessage")) {
String rawMessage = messages.getString("PlayerJoinMessage.Join");
String messageWithPlaceholders = PlaceholderAPI.setPlaceholders(player, rawMessage);
String finalMessage = ChatColor.translateAlternateColorCodes('&', messageWithPlaceholders);
finalMessage = finalMessage
.replace("{displayname}", player.getDisplayName())
.replace("{player}", player.getName())
.replace("{>}", "»")
.replace("{<}", "«");
// Nachricht zentrieren und setzen
String centeredMessage = ChatUtils.centerText(finalMessage);
event.setJoinMessage(centeredMessage);
}
}
}

View File

@@ -0,0 +1,53 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
public class LeaveMessageListener implements Listener {
private final Main plugin;
public LeaveMessageListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onLeave(PlayerQuitEvent event) {
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
Player player = event.getPlayer();
// Clear default leave message
event.setQuitMessage("");
// Send custom leave message if enabled
if (config.getBoolean("PlayerLeaveMessage.PlayerLeave") &&
player.hasPermission("zenithjoin.leavemessage")) {
// KORREKTUR: Die Reihenfolge ist entscheidend!
String rawMessage = messages.getString("PlayerLeaveMessage.Leave");
String messageWithPlaceholders = PlaceholderAPI.setPlaceholders(player, rawMessage);
String finalMessage = ChatColor.translateAlternateColorCodes('&', messageWithPlaceholders);
finalMessage = finalMessage
.replace("{displayname}", player.getDisplayName())
.replace("{player}", player.getName())
.replace("{>}", "»")
.replace("{<}", "«");
event.setQuitMessage(finalMessage);
}
}
}

View File

@@ -0,0 +1,43 @@
package com.mviper.zenithjoin.listeners;
import com.mviper.zenithjoin.Main;
import com.mviper.zenithjoin.config.ConfigManager;
import com.mviper.zenithjoin.config.MessagesManager;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class TitleListener implements Listener {
private final Main plugin;
public TitleListener(Main plugin) {
this.plugin = plugin;
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
ConfigManager configManager = plugin.getConfigManager();
MessagesManager messagesManager = plugin.getMessagesManager();
FileConfiguration config = configManager.getConfig();
FileConfiguration messages = messagesManager.getMessages();
if (config.getBoolean("TitlesEnabled.PlayerJoinTitle") && event.getPlayer().hasPermission("zenithjoin.title")) {
Player player = event.getPlayer();
String title = ChatColor.translateAlternateColorCodes('&',
messages.getString("JoinTitle.Title")
.replace("{player}", player.getName()));
String subtitle = ChatColor.translateAlternateColorCodes('&',
messages.getString("JoinTitle.SubTitle")
.replace("{player}", player.getName()));
player.sendTitle(title, subtitle);
}
}
}