Initial commit: LoChat v1.0.0 with Gradient module

This commit is contained in:
loki5512344 2025-12-29 14:57:49 +01:00
commit 252b0a60db
86 changed files with 8922 additions and 0 deletions

View file

@ -0,0 +1,129 @@
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();
}
}