Initial commit: LoChat v1.0.0 with Gradient module
This commit is contained in:
commit
252b0a60db
86 changed files with 8922 additions and 0 deletions
129
surce/gradientnick/hooks/LuckPermsHook.java
Normal file
129
surce/gradientnick/hooks/LuckPermsHook.java
Normal 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();
|
||||
}
|
||||
}
|
||||
139
surce/gradientnick/hooks/PlaceholderAPIHook.java
Normal file
139
surce/gradientnick/hooks/PlaceholderAPIHook.java
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
package ru.lovar.gradientnick.hooks;
|
||||
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import ru.lovar.gradientnick.GradientNick;
|
||||
import ru.lovar.gradientnick.data.PlayerData;
|
||||
import ru.lovar.gradientnick.util.GradientUtil;
|
||||
|
||||
public class PlaceholderAPIHook extends PlaceholderExpansion {
|
||||
|
||||
private final GradientNick plugin;
|
||||
|
||||
public PlaceholderAPIHook(GradientNick plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getIdentifier() {
|
||||
return "lopreff";
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getAuthor() {
|
||||
return "loki";
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getVersion() {
|
||||
return "1.0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean persist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
|
||||
if (player == null) return null;
|
||||
|
||||
PlayerData data = plugin.getDataManager().getPlayerData(player.getUniqueId());
|
||||
org.bukkit.entity.Player onlinePlayer = player.getPlayer();
|
||||
|
||||
return switch (params.toLowerCase()) {
|
||||
case "name" -> {
|
||||
if (!data.isColorEnabled() || !data.hasColors()) {
|
||||
yield player.getName();
|
||||
}
|
||||
yield GradientUtil.applyGradient(
|
||||
player.getName(),
|
||||
data.getColors(),
|
||||
plugin.getConfigManager().isUseLegacyRgbFormat()
|
||||
);
|
||||
}
|
||||
case "prefix" -> {
|
||||
if (!data.isPrefixEnabled() || !data.hasPrefix()) {
|
||||
yield "";
|
||||
}
|
||||
String format = plugin.getConfigManager().getPrefixFormat();
|
||||
String prefix = format.replace("{prefix}", data.getPrefix());
|
||||
if (data.isColorEnabled() && data.hasColors() && plugin.getConfigManager().isGradientOnPrefix()) {
|
||||
yield GradientUtil.applyGradient(prefix, data.getColors(), plugin.getConfigManager().isUseLegacyRgbFormat());
|
||||
}
|
||||
yield prefix;
|
||||
}
|
||||
case "full", "displayname" -> {
|
||||
yield GradientUtil.buildDisplayName(
|
||||
data.isPrefixEnabled() ? data.getPrefix() : null,
|
||||
player.getName(),
|
||||
data.isColorEnabled() ? data.getColors() : null,
|
||||
plugin.getConfigManager().isGradientOnPrefix(),
|
||||
plugin.getConfigManager().isContinuousGradient(),
|
||||
plugin.getConfigManager().getPrefixFormat(),
|
||||
plugin.getConfigManager().isUseLegacyRgbFormat()
|
||||
);
|
||||
}
|
||||
case "tabname" -> {
|
||||
if (!data.isColorEnabled() || !data.hasColors()) {
|
||||
yield player.getName();
|
||||
}
|
||||
yield GradientUtil.applyGradient(
|
||||
player.getName(),
|
||||
data.getColors(),
|
||||
plugin.getConfigManager().isUseLegacyRgbFormat()
|
||||
);
|
||||
}
|
||||
case "tab" -> {
|
||||
String prefix = null;
|
||||
boolean hasCustomPrefix = data.isPrefixEnabled() && data.hasPrefix();
|
||||
|
||||
if (hasCustomPrefix) {
|
||||
prefix = plugin.getConfigManager().getPrefixFormat()
|
||||
.replace("{prefix}", data.getPrefix());
|
||||
} else if (onlinePlayer != null) {
|
||||
String lpPrefix = plugin.getLuckPermsHook().getActivePrefix(onlinePlayer);
|
||||
if (lpPrefix != null && !lpPrefix.isEmpty()) {
|
||||
prefix = stripColors(lpPrefix);
|
||||
}
|
||||
}
|
||||
|
||||
String nick = player.getName();
|
||||
|
||||
if (data.isColorEnabled() && data.hasColors()) {
|
||||
if (prefix != null && !prefix.isEmpty()) {
|
||||
String fullText = prefix + nick;
|
||||
yield GradientUtil.applyGradient(fullText, data.getColors(),
|
||||
plugin.getConfigManager().isUseLegacyRgbFormat());
|
||||
} else {
|
||||
yield GradientUtil.applyGradient(nick, data.getColors(),
|
||||
plugin.getConfigManager().isUseLegacyRgbFormat());
|
||||
}
|
||||
} else {
|
||||
if (prefix != null && !prefix.isEmpty()) {
|
||||
if (!hasCustomPrefix && onlinePlayer != null) {
|
||||
String lpPrefix = plugin.getLuckPermsHook().getActivePrefix(onlinePlayer);
|
||||
if (lpPrefix != null) {
|
||||
yield lpPrefix + nick;
|
||||
}
|
||||
}
|
||||
yield prefix + nick;
|
||||
}
|
||||
yield nick;
|
||||
}
|
||||
}
|
||||
case "hasprefix" -> (data.isPrefixEnabled() && data.hasPrefix()) ? "true" : "false";
|
||||
case "colors" -> data.hasColors() ? String.join(", ", data.getColors()) : "нет";
|
||||
case "color_enabled" -> data.isColorEnabled() ? "да" : "нет";
|
||||
case "prefix_enabled" -> data.isPrefixEnabled() ? "да" : "нет";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
private String stripColors(String text) {
|
||||
if (text == null) return null;
|
||||
return text.replaceAll("(?i)(§x(§[0-9a-f]){6}|§[0-9a-fk-or]|&[0-9a-fk-or]|&#[0-9a-f]{6})", "");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue