LoChat/surce/gradientnick/hooks/LuckPermsHook.java

129 lines
4.5 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 ru.lovar.gradientnick.hooks;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.cacheddata.CachedMetaData;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.types.PrefixNode;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import ru.lovar.gradientnick.GradientNick;
import ru.lovar.gradientnick.util.Constants;
import java.util.UUID;
public class LuckPermsHook {
private LuckPerms luckPerms;
private boolean enabled;
public LuckPermsHook(GradientNick plugin) {
this.enabled = false;
if (Bukkit.getPluginManager().isPluginEnabled("LuckPerms")) {
try {
this.luckPerms = LuckPermsProvider.get();
this.enabled = true;
plugin.getLogger().info("LuckPerms подключен!");
} catch (Exception e) {
plugin.getLogger().warning("Не удалось подключить LuckPerms: " + e.getMessage());
}
}
}
public boolean isEnabled() {
return enabled && luckPerms != null;
}
public LuckPerms getApi() {
return luckPerms;
}
/**
* Устанавливает кастомный префикс игроку (приоритет 100 — выше групповых)
*/
public void setPrefix(Player player, String prefix) {
if (!isEnabled()) return;
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return;
// Удаляем старые кастомные префиксы (приоритет 100)
user.data().clear(node ->
node instanceof PrefixNode && ((PrefixNode) node).getPriority() == Constants.LUCKPERMS_PREFIX_PRIORITY
);
// Добавляем новый префикс если есть
if (prefix != null && !prefix.isEmpty()) {
PrefixNode prefixNode = PrefixNode.builder(prefix, Constants.LUCKPERMS_PREFIX_PRIORITY).build();
user.data().add(prefixNode);
}
luckPerms.getUserManager().saveUser(user);
}
/**
* Устанавливает кастомный префикс по UUID (асинхронно)
*/
public void setPrefix(UUID uuid, String prefix) {
if (!isEnabled()) return;
luckPerms.getUserManager().loadUser(uuid).thenAccept(user -> {
if (user == null) return;
user.data().clear(node ->
node instanceof PrefixNode && ((PrefixNode) node).getPriority() == Constants.LUCKPERMS_PREFIX_PRIORITY
);
if (prefix != null && !prefix.isEmpty()) {
PrefixNode prefixNode = PrefixNode.builder(prefix, Constants.LUCKPERMS_PREFIX_PRIORITY).build();
user.data().add(prefixNode);
}
luckPerms.getUserManager().saveUser(user);
});
}
/**
* Удаляет кастомный префикс — будет показываться префикс от группы
*/
public void removePrefix(Player player) {
setPrefix(player, null);
}
/**
* Удаляет кастомный префикс по UUID
*/
public void removePrefix(UUID uuid) {
setPrefix(uuid, null);
}
/**
* Получает текущий активный префикс игрока (включая групповой)
*/
public String getActivePrefix(Player player) {
if (!isEnabled()) return null;
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return null;
CachedMetaData metaData = user.getCachedData().getMetaData();
return metaData.getPrefix();
}
/**
* Получает префикс от группы (без кастомного)
*/
public String getGroupPrefix(Player player) {
if (!isEnabled()) return null;
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return null;
// Временно убираем кастомный префикс чтобы получить групповой
// Это сложно сделать правильно, поэтому просто возвращаем активный
// Групповой префикс будет показан когда кастомный удалён
CachedMetaData metaData = user.getCachedData().getMetaData();
return metaData.getPrefix();
}
}