mirror of
https://github.com/CarmJos/UserPrefix.git
synced 2024-09-19 20:15:47 +00:00
[2.4.3] 版本更新
- [F] 修复 #12 相关问题。 - [R] 修改配置文件中两个字段的名称使其符合yaml规范。 - [A] 添加“functions.on-name-prefix.order-desc”选项,用于决定在TabList中排序顺序。
This commit is contained in:
parent
774e9b764e
commit
ac55fc135c
21
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
21
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
@ -1,30 +1,29 @@
|
|||||||
---
|
---
|
||||||
name: 问题提交
|
name: 问题提交 about: 描述问题并提交,帮助我们对其进行检查与修复。 title: ''
|
||||||
about: 描述问题并提交,帮助我们对其进行检查与修复。
|
labels: bug assignees: ''
|
||||||
title: ''
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **问题简述**
|
### **问题简述**
|
||||||
用简短的话语描述一下大概问题。
|
<!--用简短的话语描述一下大概问题。-->
|
||||||
|
|
||||||
### **问题来源**
|
### **问题来源**
|
||||||
|
|
||||||
|
<!--
|
||||||
描述一下通过哪些操作才发现的问题,如:
|
描述一下通过哪些操作才发现的问题,如:
|
||||||
1. 打开 '...'
|
1. 打开 '...'
|
||||||
2. 点击了 '....'
|
2. 点击了 '....'
|
||||||
3. 出现了报错 '....'
|
3. 出现了报错 '....'
|
||||||
|
-->
|
||||||
|
|
||||||
### **预期结果**(可选)
|
### **预期结果**(可选)
|
||||||
如果问题不发生,应该是什么情况
|
<!--如果问题不发生,应该是什么情况-->
|
||||||
|
|
||||||
### **问题截图/问题报错**
|
### **问题截图/问题报错**
|
||||||
如果有报错或输出,请提供截图。
|
<!--如果有报错或输出,请提供截图。-->
|
||||||
|
|
||||||
### **操作环境**
|
### **操作环境**
|
||||||
请在后台输入 `version` 并复制相关输出。
|
<!--请在后台输入 `version` 并复制相关输出。-->
|
||||||
|
|
||||||
|
|
||||||
### **其他补充**
|
### **其他补充**
|
||||||
如有其他补充,可以在这里描述。
|
<!--如有其他补充,可以在这里描述。-->
|
||||||
|
8
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
8
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
@ -8,13 +8,13 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
|
|
||||||
### **功能简述**
|
### **功能简述**
|
||||||
简单的描述一下你想要的功能
|
<!--简单的描述一下你想要的功能-->
|
||||||
|
|
||||||
### **需求来源**
|
### **需求来源**
|
||||||
简单的描述一下为什么需要这个功能。
|
<!--简单的描述一下为什么需要这个功能。-->
|
||||||
|
|
||||||
### **功能参考**(可选)
|
### **功能参考**(可选)
|
||||||
如果有相关功能的参考,如文本、截图,请提供给我们。
|
<!--如果有相关功能的参考,如文本、截图,请提供给我们。-->
|
||||||
|
|
||||||
### **附加内容**
|
### **附加内容**
|
||||||
如果有什么小细节需要重点注意,请在这里告诉我们。
|
<!--如果有什么小细节需要重点注意,请在这里告诉我们。-->
|
||||||
|
2
pom.xml
2
pom.xml
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
<artifactId>userprefix</artifactId>
|
<artifactId>userprefix</artifactId>
|
||||||
<version>2.4.2</version>
|
<version>2.4.3</version>
|
||||||
|
|
||||||
<name>UserPrefix</name>
|
<name>UserPrefix</name>
|
||||||
<description>轻便、高效、实时的用户前缀系统。</description>
|
<description>轻便、高效、实时的用户前缀系统。</description>
|
||||||
|
@ -25,8 +25,10 @@ public class PluginConfig {
|
|||||||
|
|
||||||
public static class Functions {
|
public static class Functions {
|
||||||
|
|
||||||
public static ConfigValue<Boolean> NAME_PREFIX = new ConfigValue<>("functions.OnNamePrefix", Boolean.class, true);
|
public static ConfigValue<Boolean> NAME_PREFIX = new ConfigValue<>("functions.auto-prefix-use.enable", Boolean.class, true);
|
||||||
public static ConfigValue<Boolean> AUTO_USE = new ConfigValue<>("functions.autoUsePrefix", Boolean.class, true);
|
public static ConfigValue<Boolean> NAME_ORDER_DESC = new ConfigValue<>("functions.auto-prefix-use.order", Boolean.class, true);
|
||||||
|
|
||||||
|
public static ConfigValue<Boolean> AUTO_USE = new ConfigValue<>("functions.auto-prefix-use", Boolean.class, true);
|
||||||
|
|
||||||
public static class Chat {
|
public static class Chat {
|
||||||
|
|
||||||
|
@ -21,269 +21,271 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class UserManager {
|
public class UserManager {
|
||||||
|
|
||||||
public static HashMap<UUID, UserNameTag> nameTags = new HashMap<>();
|
public static HashMap<UUID, UserNameTag> nameTags = new HashMap<>();
|
||||||
|
|
||||||
public static HashSet<UUID> checkingPlayers = new HashSet<>();
|
public static HashSet<UUID> checkingPlayers = new HashSet<>();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static UserNameTag getNameTag(Player player) {
|
public static UserNameTag getNameTag(Player player) {
|
||||||
if (PluginConfig.Functions.NAME_PREFIX.get()) {
|
if (PluginConfig.Functions.NAME_PREFIX.get()) {
|
||||||
if (nameTags.containsKey(player.getUniqueId())) {
|
if (nameTags.containsKey(player.getUniqueId())) {
|
||||||
return nameTags.get(player.getUniqueId());
|
return nameTags.get(player.getUniqueId());
|
||||||
} else {
|
} else {
|
||||||
return createNameTag(player);
|
return createNameTag(player);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static UserNameTag createNameTag(Player player) {
|
public static UserNameTag createNameTag(Player player) {
|
||||||
if (nameTags.containsKey(player.getUniqueId())) return nameTags.get(player.getUniqueId());
|
if (nameTags.containsKey(player.getUniqueId())) return nameTags.get(player.getUniqueId());
|
||||||
UserNameTag nameTag = new UserNameTag(player);
|
UserNameTag nameTag = new UserNameTag(player);
|
||||||
nameTags.put(player.getUniqueId(), nameTag);
|
nameTags.put(player.getUniqueId(), nameTag);
|
||||||
return nameTag;
|
return nameTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initPlayer(Player player) {
|
public static void initPlayer(Player player) {
|
||||||
UserManager.checkPrefix(player, false);
|
UserManager.checkPrefix(player, false);
|
||||||
if (PluginConfig.Functions.NAME_PREFIX.get()) {
|
if (PluginConfig.Functions.NAME_PREFIX.get()) {
|
||||||
UserManager.createNameTag(player);
|
UserManager.createNameTag(player);
|
||||||
UserManager.updatePrefixView(player, true);
|
UserManager.updatePrefixView(player, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unloadPlayer(Player player) {
|
public static void unloadPlayer(Player player) {
|
||||||
PrefixSelectGUI.removeOpening(player);
|
PrefixSelectGUI.removeOpening(player);
|
||||||
UserManager.unloadNameTag(player.getUniqueId());
|
UserManager.unloadNameTag(player.getUniqueId());
|
||||||
UserManager.checkingPlayers.remove(player.getUniqueId());
|
UserManager.checkingPlayers.remove(player.getUniqueId());
|
||||||
GUI.removeOpenedGUI(player); // 清空打开过的GUI缓存 (用于记录物品点击的
|
GUI.removeOpenedGUI(player); // 清空打开过的GUI缓存 (用于记录物品点击的
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新前缀显示效果
|
* 更新前缀显示效果
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param loadOthers 是否为玩家更新其他人的前缀(一般用于加入游戏)
|
* @param loadOthers 是否为玩家更新其他人的前缀(一般用于加入游戏)
|
||||||
*/
|
*/
|
||||||
public static void updatePrefixView(Player player, boolean loadOthers) {
|
public static void updatePrefixView(Player player, boolean loadOthers) {
|
||||||
if (!PluginConfig.Functions.NAME_PREFIX.get()) return; //未启用的情况下,不需要进行任何操作。
|
if (!PluginConfig.Functions.NAME_PREFIX.get()) return; //未启用的情况下,不需要进行任何操作。
|
||||||
UserNameTag tag = getNameTag(player);
|
UserNameTag tag = getNameTag(player);
|
||||||
if (tag == null) return; //未启用的情况下,不需要进行任何操作。
|
if (tag == null) return; //未启用的情况下,不需要进行任何操作。
|
||||||
|
|
||||||
ConfiguredPrefix playerPrefix = UserManager.getPrefix(player);
|
ConfiguredPrefix playerPrefix = UserManager.getPrefix(player);
|
||||||
|
|
||||||
tag.setPrefix(playerPrefix.getContent());
|
tag.setPrefix(playerPrefix.getContent());
|
||||||
tag.setOrder(playerPrefix.getWeight());
|
tag.setOrder(playerPrefix.getWeight());
|
||||||
|
|
||||||
Main.debug("为玩家 " + player.getName() + " 设置了 " + player.getName() + "的前缀为 #" + playerPrefix.getWeight() + " " + playerPrefix.getName());
|
Main.debug("为玩家 " + player.getName() + " 设置了 " + player.getName() + "的前缀为 #" + playerPrefix.getWeight() + " " + playerPrefix.getName());
|
||||||
|
|
||||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||||
if (onlinePlayer.equals(player)) continue;
|
if (onlinePlayer.equals(player)) continue;
|
||||||
UserNameTag onlinePlayerTag = getNameTag(onlinePlayer);
|
UserNameTag onlinePlayerTag = getNameTag(onlinePlayer);
|
||||||
if (onlinePlayerTag != null) {
|
boolean descOrder = PluginConfig.Functions.NAME_ORDER_DESC.get();
|
||||||
onlinePlayerTag.setPrefix(player, playerPrefix.getContent());
|
if (onlinePlayerTag != null) {
|
||||||
onlinePlayerTag.setOrder(player, playerPrefix.getWeight());
|
onlinePlayerTag.setPrefix(player, playerPrefix.getContent());
|
||||||
Main.debug("为玩家 " + onlinePlayer.getName() + " 设置了 " + player.getName() + "的前缀为 #" + playerPrefix.getWeight() + " " + playerPrefix.getName());
|
onlinePlayerTag.setOrder(player, descOrder ? 99999 - playerPrefix.getWeight() : playerPrefix.getWeight());
|
||||||
|
Main.debug("为玩家 " + onlinePlayer.getName() + " 设置了 " + player.getName() + "的前缀为 #" + playerPrefix.getWeight() + " " + playerPrefix.getName());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadOthers) {
|
if (loadOthers) {
|
||||||
ConfiguredPrefix onlinePlayerPrefix = UserManager.getPrefix(onlinePlayer);
|
ConfiguredPrefix onlinePlayerPrefix = UserManager.getPrefix(onlinePlayer);
|
||||||
tag.setPrefix(onlinePlayer, onlinePlayerPrefix.getContent());
|
tag.setPrefix(onlinePlayer, onlinePlayerPrefix.getContent());
|
||||||
tag.setOrder(onlinePlayer, onlinePlayerPrefix.getWeight());
|
tag.setOrder(onlinePlayer, descOrder ? 99999 - onlinePlayerPrefix.getWeight() : onlinePlayerPrefix.getWeight());
|
||||||
Main.debug("为玩家 " + player.getName() + " 设置了 " + onlinePlayer.getName() + "的前缀为 #" + onlinePlayerPrefix.getWeight() + " " + onlinePlayerPrefix.getName());
|
Main.debug("为玩家 " + player.getName() + " 设置了 " + onlinePlayer.getName() + "的前缀为 #" + onlinePlayerPrefix.getWeight() + " " + onlinePlayerPrefix.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查玩家的前缀的使用权
|
* 检查玩家的前缀的使用权
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param updateView 是否更新头顶与TabList中的前缀
|
* @param updateView 是否更新头顶与TabList中的前缀
|
||||||
*/
|
*/
|
||||||
public static void checkPrefix(Player player, boolean updateView) {
|
public static void checkPrefix(Player player, boolean updateView) {
|
||||||
if (checkingPlayers.contains(player.getUniqueId())) {
|
if (checkingPlayers.contains(player.getUniqueId())) {
|
||||||
/*
|
/*
|
||||||
* 这里为了避免极短时间内的重复触发导致多次判断且结果相同误导玩家,
|
* 这里为了避免极短时间内的重复触发导致多次判断且结果相同误导玩家,
|
||||||
* 故没有采用同步锁,而是采用添加到一个临时Set中,对Set中玩家跳过判断。
|
* 故没有采用同步锁,而是采用添加到一个临时Set中,对Set中玩家跳过判断。
|
||||||
*/
|
*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkingPlayers.add(player.getUniqueId());
|
checkingPlayers.add(player.getUniqueId());
|
||||||
String currentPrefixData = UserManager.getPrefixData(player);
|
String currentPrefixData = UserManager.getPrefixData(player);
|
||||||
|
|
||||||
if (!UserManager.isPrefixUsable(player, currentPrefixData)) {
|
if (!UserManager.isPrefixUsable(player, currentPrefixData)) {
|
||||||
ConfiguredPrefix currentPrefix = PrefixManager.getPrefix(currentPrefixData);
|
ConfiguredPrefix currentPrefix = PrefixManager.getPrefix(currentPrefixData);
|
||||||
ConfiguredPrefix newPrefix = UserManager.getHighestPrefix(player);
|
ConfiguredPrefix newPrefix = UserManager.getHighestPrefix(player);
|
||||||
|
|
||||||
if (currentPrefix != null) {
|
if (currentPrefix != null) {
|
||||||
//当前前缀不为空,则代表属于前缀过期的情况
|
//当前前缀不为空,则代表属于前缀过期的情况
|
||||||
UserPrefixExpireEvent.call(player, currentPrefix);
|
UserPrefixExpireEvent.call(player, currentPrefix);
|
||||||
|
|
||||||
// 发送消息
|
// 发送消息
|
||||||
PluginConfig.Messages.EXPIRED.sendWithPlaceholders(player,
|
PluginConfig.Messages.EXPIRED.sendWithPlaceholders(player,
|
||||||
new String[]{"%(newName)", "%(oldName)"},
|
new String[]{"%(newName)", "%(oldName)"},
|
||||||
new Object[]{newPrefix.getName(), currentPrefix.getName()}
|
new Object[]{newPrefix.getName(), currentPrefix.getName()}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 播放声音
|
// 播放声音
|
||||||
PluginConfig.Sounds.PREFIX_EXPIRED.play(player);
|
PluginConfig.Sounds.PREFIX_EXPIRED.play(player);
|
||||||
} else {
|
} else {
|
||||||
// 当前前缀为空,则代表是旧的前缀不存在了,
|
// 当前前缀为空,则代表是旧的前缀不存在了,
|
||||||
PluginConfig.Messages.REMOVED.sendWithPlaceholders(player,
|
PluginConfig.Messages.REMOVED.sendWithPlaceholders(player,
|
||||||
new String[]{"%(newName)", "%(oldName)"},
|
new String[]{"%(newName)", "%(oldName)"},
|
||||||
new Object[]{newPrefix.getName(), currentPrefixData}
|
new Object[]{newPrefix.getName(), currentPrefixData}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> {
|
UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> {
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
UserManager.setPrefix(player, after, updateView);
|
UserManager.setPrefix(player, after, updateView);
|
||||||
}
|
}
|
||||||
checkingPlayers.remove(player.getUniqueId());
|
checkingPlayers.remove(player.getUniqueId());
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
checkingPlayers.remove(player.getUniqueId());
|
checkingPlayers.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unloadNameTag(UUID uuid) {
|
public static void unloadNameTag(UUID uuid) {
|
||||||
nameTags.remove(uuid);
|
nameTags.remove(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到玩家的前缀。
|
* 得到玩家的前缀。
|
||||||
* 该方法会自动判断玩家当前的前缀是否可用,并返回最终可用的前缀。
|
* 该方法会自动判断玩家当前的前缀是否可用,并返回最终可用的前缀。
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @return 前缀配置
|
* @return 前缀配置
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ConfiguredPrefix getPrefix(Player player) {
|
public static ConfiguredPrefix getPrefix(Player player) {
|
||||||
String identifier = getPrefixData(player);
|
String identifier = getPrefixData(player);
|
||||||
if (identifier == null || !isPrefixUsable(player, identifier)) {
|
if (identifier == null || !isPrefixUsable(player, identifier)) {
|
||||||
return getHighestPrefix(player);
|
return getHighestPrefix(player);
|
||||||
} else {
|
} else {
|
||||||
ConfiguredPrefix prefix = PrefixManager.getPrefix(identifier);
|
ConfiguredPrefix prefix = PrefixManager.getPrefix(identifier);
|
||||||
return prefix == null ? PrefixManager.getDefaultPrefix() : prefix;
|
return prefix == null ? PrefixManager.getDefaultPrefix() : prefix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定玩家前缀
|
* 设定玩家前缀
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param prefix 前缀配置
|
* @param prefix 前缀配置
|
||||||
* @param updateView 是否更新头顶上、TabList的前缀
|
* @param updateView 是否更新头顶上、TabList的前缀
|
||||||
*/
|
*/
|
||||||
public static void setPrefix(Player player, ConfiguredPrefix prefix, boolean updateView) {
|
public static void setPrefix(Player player, ConfiguredPrefix prefix, boolean updateView) {
|
||||||
setPrefixData(player, prefix.getIdentifier());
|
setPrefixData(player, prefix.getIdentifier());
|
||||||
if (updateView) updatePrefixView(player, false);
|
if (updateView) updatePrefixView(player, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到玩家所有可用的前缀
|
* 得到玩家所有可用的前缀
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @return 可用前缀列表
|
* @return 可用前缀列表
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public static List<ConfiguredPrefix> getUsablePrefixes(Player player) {
|
public static List<ConfiguredPrefix> getUsablePrefixes(Player player) {
|
||||||
return PrefixManager.getPrefixes().values().stream()
|
return PrefixManager.getPrefixes().values().stream()
|
||||||
.filter(configuredPrefix -> isPrefixUsable(player, configuredPrefix)) //过滤出玩家可用的前缀
|
.filter(configuredPrefix -> isPrefixUsable(player, configuredPrefix)) //过滤出玩家可用的前缀
|
||||||
.sorted(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 以前缀排序
|
.sorted(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 以前缀排序
|
||||||
.collect(Collectors.toList()); // 返回集合
|
.collect(Collectors.toList()); // 返回集合
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到玩家可使用的最高权重的权限
|
* 得到玩家可使用的最高权重的权限
|
||||||
* 注意:若配置文件中关闭了 “autoUsePrefix” ,则会返回默认前缀。
|
* 注意:若配置文件中关闭了 “autoUsePrefix” ,则会返回默认前缀。
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @return 权限内容
|
* @return 权限内容
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ConfiguredPrefix getHighestPrefix(Player player) {
|
public static ConfiguredPrefix getHighestPrefix(Player player) {
|
||||||
if (PluginConfig.Functions.AUTO_USE.get()) {
|
if (PluginConfig.Functions.AUTO_USE.get()) {
|
||||||
// 关闭了自动选择,就直接给默认的前缀,让玩家自己去设置吧~
|
// 关闭了自动选择,就直接给默认的前缀,让玩家自己去设置吧~
|
||||||
return PrefixManager.getDefaultPrefix();
|
return PrefixManager.getDefaultPrefix();
|
||||||
}
|
}
|
||||||
return getUsablePrefixes(player).stream()
|
return getUsablePrefixes(player).stream()
|
||||||
.max(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 取权重最大
|
.max(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 取权重最大
|
||||||
.orElseGet(PrefixManager::getDefaultPrefix); // 啥都没有? 返回默认前缀。
|
.orElseGet(PrefixManager::getDefaultPrefix); // 啥都没有? 返回默认前缀。
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断一个前缀对某玩家是否可用
|
* 判断一个前缀对某玩家是否可用
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param prefixIdentifier 前缀标识
|
* @param prefixIdentifier 前缀标识
|
||||||
* @return 若前缀标识不存在,则返回false;若前缀为默认前缀,或该前缀无权限,或玩家有该前缀的权限,则返回true。
|
* @return 若前缀标识不存在,则返回false;若前缀为默认前缀,或该前缀无权限,或玩家有该前缀的权限,则返回true。
|
||||||
*/
|
*/
|
||||||
public static boolean isPrefixUsable(Player player, String prefixIdentifier) {
|
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||||
if (prefixIdentifier == null || prefixIdentifier.equalsIgnoreCase("default")) return true;
|
public static boolean isPrefixUsable(Player player, String prefixIdentifier) {
|
||||||
ConfiguredPrefix prefix = PrefixManager.getPrefix(prefixIdentifier);
|
if (prefixIdentifier == null || prefixIdentifier.equalsIgnoreCase("default")) return true;
|
||||||
if (prefix == null) return false;
|
ConfiguredPrefix prefix = PrefixManager.getPrefix(prefixIdentifier);
|
||||||
return isPrefixUsable(player, prefix);
|
if (prefix == null) return false;
|
||||||
}
|
return isPrefixUsable(player, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断一个前缀对某玩家是否可用
|
* 判断一个前缀对某玩家是否可用
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param configuredPrefix 前缀配置
|
* @param configuredPrefix 前缀配置
|
||||||
* @return 若前缀标识不存在,则返回false;若前缀为默认前缀,或该前缀无权限,或玩家有该前缀的权限,则返回true。
|
* @return 若前缀标识不存在,则返回false;若前缀为默认前缀,或该前缀无权限,或玩家有该前缀的权限,则返回true。
|
||||||
*/
|
*/
|
||||||
public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) {
|
public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) {
|
||||||
return configuredPrefix.isPublic()
|
return configuredPrefix.isPublic()
|
||||||
|| ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission());
|
|| ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到用户当前正在使用的前缀Identifier。
|
* 得到用户当前正在使用的前缀Identifier。
|
||||||
* 该方法通过LuckPerms的MetaData实现,因此可以通过指令去操作。
|
* 该方法通过LuckPerms的MetaData实现,因此可以通过指令去操作。
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @return 正在使用的前缀Identifier(若不存在则返回null, 代表未设置前缀)
|
* @return 正在使用的前缀Identifier(若不存在则返回null, 代表未设置前缀)
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public static String getPrefixData(Player player) {
|
public static String getPrefixData(Player player) {
|
||||||
return ServiceManager.getAPI().getMetaData(player)
|
return ServiceManager.getAPI().getMetaData(player)
|
||||||
.getMetaValue("userprefix", String::valueOf)
|
.getMetaValue("userprefix", String::valueOf)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定用户所使用的的prefix。
|
* 设定用户所使用的的prefix。
|
||||||
* 该方法通过LuckPerms的MetaData实现,因此可以通过指令去操作。
|
* 该方法通过LuckPerms的MetaData实现,因此可以通过指令去操作。
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
* @param prefixIdentifier 前缀的标识
|
* @param prefixIdentifier 前缀的标识
|
||||||
*/
|
*/
|
||||||
public static void setPrefixData(Player player, String prefixIdentifier) {
|
public static void setPrefixData(Player player, String prefixIdentifier) {
|
||||||
User user = ServiceManager.getUser(player);
|
User user = ServiceManager.getUser(player);
|
||||||
clearPrefixData(player); // 清除掉旧的数据,LuckPerms不会去覆盖一个Meta,需要手动清除。
|
clearPrefixData(player); // 清除掉旧的数据,LuckPerms不会去覆盖一个Meta,需要手动清除。
|
||||||
if (prefixIdentifier != null) {
|
if (prefixIdentifier != null) {
|
||||||
user.data().add(MetaNode.builder("userprefix", prefixIdentifier).build());
|
user.data().add(MetaNode.builder("userprefix", prefixIdentifier).build());
|
||||||
ServiceManager.getService().getUserManager().saveUser(user); // 保存数据
|
ServiceManager.getService().getUserManager().saveUser(user); // 保存数据
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清除玩家所选择的前缀数据
|
* 清除玩家所选择的前缀数据
|
||||||
*
|
*
|
||||||
* @param player 玩家
|
* @param player 玩家
|
||||||
*/
|
*/
|
||||||
public static void clearPrefixData(Player player) {
|
public static void clearPrefixData(Player player) {
|
||||||
User user = ServiceManager.getUser(player);
|
User user = ServiceManager.getUser(player);
|
||||||
// LuckPerms竟然会把所有的metaKey全部转换为小写... 那我这里就直接写成小写吧~
|
// LuckPerms竟然会把所有的metaKey全部转换为小写... 那我这里就直接写成小写吧~
|
||||||
user.data().clear(NodeType.META.predicate(mn -> mn.getMetaKey().equals("userprefix")));
|
user.data().clear(NodeType.META.predicate(mn -> mn.getMetaKey().equals("userprefix")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ public class UserNameTag {
|
|||||||
/**
|
/**
|
||||||
* 设置自己的前缀
|
* 设置自己的前缀
|
||||||
*
|
*
|
||||||
* @param prefix
|
* @param prefix 前缀内容
|
||||||
*/
|
*/
|
||||||
public void setPrefix(String prefix) {
|
public void setPrefix(String prefix) {
|
||||||
team.setPrefix(prefix);
|
team.setPrefix(prefix);
|
||||||
@ -45,8 +45,8 @@ public class UserNameTag {
|
|||||||
/**
|
/**
|
||||||
* 设置某个玩家的前缀
|
* 设置某个玩家的前缀
|
||||||
*
|
*
|
||||||
* @param target
|
* @param target 目标
|
||||||
* @param prefix
|
* @param prefix 前缀内容
|
||||||
*/
|
*/
|
||||||
public void setPrefix(Player target, String prefix) {
|
public void setPrefix(Player target, String prefix) {
|
||||||
if (target == viewer) {
|
if (target == viewer) {
|
||||||
@ -63,7 +63,7 @@ public class UserNameTag {
|
|||||||
/**
|
/**
|
||||||
* 设置名字在TabList中的顺序
|
* 设置名字在TabList中的顺序
|
||||||
*
|
*
|
||||||
* @param order
|
* @param order 顺序 (0~99999)
|
||||||
*/
|
*/
|
||||||
public void setOrder(int order) {
|
public void setOrder(int order) {
|
||||||
if (order < 0 || order > 99999)
|
if (order < 0 || order > 99999)
|
||||||
@ -79,15 +79,14 @@ public class UserNameTag {
|
|||||||
* @param order 顺序
|
* @param order 顺序
|
||||||
*/
|
*/
|
||||||
public void setOrder(Player target, int order) {
|
public void setOrder(Player target, int order) {
|
||||||
if (order < 0 || order > 99999)
|
if (order < 0 || order > 99999) throw new IllegalArgumentException("order must be in 0~99999");
|
||||||
throw new IllegalArgumentException("order must be in 0~99999");
|
|
||||||
Team targetTeam = checkTeam(target);
|
Team targetTeam = checkTeam(target);
|
||||||
String teamName = order + UUID.randomUUID().toString().substring(0, 10);
|
String teamName = order + UUID.randomUUID().toString().substring(0, 10);
|
||||||
targetTeam.setDisplayName(teamName);
|
targetTeam.setDisplayName(teamName);
|
||||||
targetOrders.put(target.getUniqueId(), order);
|
targetOrders.put(target.getUniqueId(), order);
|
||||||
update(viewer);
|
update(viewer);
|
||||||
if (viewer != target)
|
if (viewer != target) update(target);
|
||||||
update(target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(Player target) {
|
public void update(Player target) {
|
||||||
|
@ -21,8 +21,11 @@ custom-storage:
|
|||||||
path: "prefixes/" # 一定要指向一个文件夹!
|
path: "prefixes/" # 一定要指向一个文件夹!
|
||||||
|
|
||||||
functions:
|
functions:
|
||||||
OnNamePrefix: true # 是否给头顶上添加前缀,该方法用到了头顶的那个计分板,如有冲突请关掉哦~
|
# 头顶与TabList前缀功能,该方法用到了玩家名计分板接口,如有冲突请关掉哦~
|
||||||
autoUsePrefix: true # 自动前缀显示 当玩家没有自己选择一个前缀的时候,会自动使用所拥有的的前缀中权重最高的那一个
|
on-name-prefix:
|
||||||
|
enable: true # 是否开启本功能
|
||||||
|
order-desc: true # 是否按降序排列,即权重越高的前缀显示在越上面;若为false则按升序排列。
|
||||||
|
auto-prefix-use: true # 自动使用前缀,即当玩家没有自己选择一个前缀的时候,会自动使用所拥有的的前缀中权重最高的那一个
|
||||||
chat:
|
chat:
|
||||||
# 聊天功能
|
# 聊天功能
|
||||||
# - 我不推荐使用本插件的聊天功能,而是建议使用其他的聊天插件。
|
# - 我不推荐使用本插件的聊天功能,而是建议使用其他的聊天插件。
|
||||||
|
@ -14,7 +14,7 @@ content: "&b&lPro &b"
|
|||||||
# 权重 [必须]
|
# 权重 [必须]
|
||||||
# 用于GUI、TabList的排序和自动前缀显示
|
# 用于GUI、TabList的排序和自动前缀显示
|
||||||
# 在GUI中,权重越高的会显示在越后面
|
# 在GUI中,权重越高的会显示在越后面
|
||||||
# 在TabList中,权重越高的会显示在越上面
|
# 在TabList中,显示顺序可以在 config.yml 中自定义
|
||||||
weight: 1
|
weight: 1
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user