LoChat/src/main/java/com/loki/lochat/utils/PlayerUtil.java

108 lines
No EOL
3.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.loki.lochat.utils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import java.util.UUID;
/**
* Утилиты для работы с игроками
*/
public final class PlayerUtil {
private PlayerUtil() {
}
/**
* Safely parses a sound name from config.
* Uses Registry API for modern sound parsing with fallback to reflection.
*
* @param soundName the sound name to parse
* @param defaultSound the default sound to return if parsing fails
* @return the parsed Sound or the default if invalid
*/
public static Sound parseSound(String soundName, Sound defaultSound) {
if (soundName == null || soundName.isEmpty()) {
return defaultSound;
}
try {
// Try to get sound by key using Registry (modern way)
Sound sound = org.bukkit.Registry.SOUNDS.match(soundName);
if (sound != null) {
return sound;
}
} catch (Exception e) {
// Registry failed, try fallback
}
// Fallback: try direct field access via reflection
try {
java.lang.reflect.Field field = Sound.class.getField(soundName.toUpperCase().trim());
return (Sound) field.get(null);
} catch (Exception ex) {
return defaultSound;
}
}
/**
* Находит игрока по имени (онлайн или оффлайн)
*
* @param name имя игрока
* @return UUID игрока или null если не найден
*/
public static UUID findPlayerUUID(String name) {
// Сначала ищем онлайн игрока
Player onlinePlayer = Bukkit.getPlayer(name);
if (onlinePlayer != null) {
return onlinePlayer.getUniqueId();
}
// Затем ищем оффлайн игрока
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
if (offlinePlayer.hasPlayedBefore() || offlinePlayer.isOnline()) {
return offlinePlayer.getUniqueId();
}
return null;
}
/**
* Проверяет, существует ли игрок (играл на сервере)
*
* @param name имя игрока
* @return true если игрок существует
*/
public static boolean playerExists(String name) {
return findPlayerUUID(name) != null;
}
/**
* Получает имя игрока по UUID
*
* @param uuid UUID игрока
* @return имя игрока или null
*/
public static String getPlayerName(UUID uuid) {
Player onlinePlayer = Bukkit.getPlayer(uuid);
if (onlinePlayer != null) {
return onlinePlayer.getName();
}
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
return offlinePlayer.getName();
}
/**
* Проверяет, онлайн ли игрок
*
* @param uuid UUID игрока
* @return true если игрок онлайн
*/
public static boolean isPlayerOnline(UUID uuid) {
Player player = Bukkit.getPlayer(uuid);
return player != null && player.isOnline();
}
}