1
mirror of https://github.com/CarmJos/UserPrefix.git synced 2024-09-19 20:15:47 +00:00

1. 修复closeAll方法中,未移除玩家缓存的bug。

2. 当玩家权限更新时,将关闭玩家的GUI,令其自行打开刷新所有前缀。
3. 允许配置GUI的标题。
This commit is contained in:
carm 2021-09-17 18:07:26 +08:00
parent 0d20860166
commit 7ea3934db9
8 changed files with 46 additions and 10 deletions

View File

@ -6,7 +6,7 @@
<groupId>cc.carm.plugin</groupId>
<artifactId>UserPrefix</artifactId>
<version>1.2.3</version>
<version>1.2.4</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>

View File

@ -24,7 +24,7 @@ public class UserPrefixAdminCommand implements CommandExecutor {
MessageUtil.send(sender, "&3&l用户前缀系统 &f前缀列表");
for (ConfiguredPrefix value : PrefixManager.getPrefixes().values()) {
MessageUtil.send(sender, "&8#" + value.getWeight() + " &f" + value.getIdentifier());
MessageUtil.send(sender, "&8- &7显示名 &r" + value.getName() + " &7权限&r " + value.getPermission());
MessageUtil.send(sender, "&8- &7显示名 &r" + value.getName() + (value.isPublic() ? "" : " &7权限&r " + value.getPermission()));
MessageUtil.send(sender, "&8- &7内容示例&r " + value.getContent() + sender.getName());
}
return true;

View File

@ -15,6 +15,12 @@ public class PrefixConfig {
}
public static class GUI {
public static ConfigValue<String> TITLE = new ConfigValue<>("GUI.title", String.class, "&f&l我的前缀 &8| 列表");
}
public static class Messages {
public static ConfigValueList<String> SELECTED = new ConfigValueList<>("messages.selected", String.class);

View File

@ -1,6 +1,7 @@
package cc.carm.plugin.userprefix.listener.processor;
import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@ -11,6 +12,11 @@ public class UserNodeUpdateProcessor {
Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
if (player == null) return;
UserManager.checkPrefix(player, true);
if (PrefixSelectGUI.openingUsers.contains(player)) {
// 玩家权限更新关闭其GUI以令其重新打开刷新自己的前缀
player.closeInventory();
PrefixSelectGUI.removeOpening(player);
}
}
}

View File

@ -205,7 +205,7 @@ public class UserManager {
* @return 若前缀标识不存在则返回false若前缀为默认前缀或该前缀无权限或玩家有该前缀的权限则返回true
*/
public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) {
return configuredPrefix.getPermission() == null //为null的话说明无需权限了
return configuredPrefix.isPublic()
|| ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission());
}

View File

@ -2,6 +2,8 @@ package cc.carm.plugin.userprefix.model;
import cc.carm.plugin.userprefix.util.ColorParser;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ConfiguredPrefix {
@ -18,7 +20,13 @@ public class ConfiguredPrefix {
ItemStack itemNoPermission;
ItemStack itemWhenUsing;
public ConfiguredPrefix(String identifier, String name, String content, int weight, String permission, ItemStack itemHasPermission, ItemStack itemNoPermission, ItemStack itemWhenUsing) {
public ConfiguredPrefix(@NotNull String identifier,
@NotNull String name,
@NotNull String content,
int weight, @Nullable String permission,
@NotNull ItemStack itemHasPermission,
@Nullable ItemStack itemNoPermission,
@Nullable ItemStack itemWhenUsing) {
this.identifier = identifier;
this.name = name;
this.content = content;
@ -29,14 +37,17 @@ public class ConfiguredPrefix {
this.itemWhenUsing = itemWhenUsing;
}
@NotNull
public String getIdentifier() {
return identifier;
}
@NotNull
public String getName() {
return name;
}
@NotNull
public String getContent() {
return ColorParser.parse(content);
}
@ -45,22 +56,30 @@ public class ConfiguredPrefix {
return weight;
}
@Nullable
public String getPermission() {
return permission;
}
@NotNull
public ItemStack getItemHasPermission() {
return itemHasPermission;
}
@Nullable
public ItemStack getItemNoPermission() {
return itemNoPermission;
}
@Nullable
public ItemStack getItemWhenUsing() {
return itemWhenUsing;
}
public boolean isPublic() {
return getPermission() == null;
}
public boolean isVisibleNoPermission() {
return this.itemNoPermission != null;
}

View File

@ -1,13 +1,13 @@
package cc.carm.plugin.userprefix.ui;
import cc.carm.plugin.userprefix.configuration.PrefixConfig;
import cc.carm.plugin.userprefix.util.MessageUtil;
import cc.carm.plugin.userprefix.util.gui.GUIType;
import cc.carm.plugin.userprefix.manager.PrefixManager;
import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.model.ConfiguredPrefix;
import cc.carm.plugin.userprefix.util.MessageUtil;
import cc.carm.plugin.userprefix.util.gui.AutoPagedGUI;
import cc.carm.plugin.userprefix.util.gui.GUIItem;
import cc.carm.plugin.userprefix.util.gui.GUIType;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
@ -22,7 +22,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
Player player;
public PrefixSelectGUI(Player player) {
super(GUIType.SIXBYNINE, "&f&l我的前缀 &8| 列表", 10, 43);
super(GUIType.SIXBYNINE, PrefixConfig.GUI.TITLE.get(), 10, 43);
this.player = player;
setPreviousPageSlot(18);
@ -38,7 +38,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
public void loadItems() {
List<ConfiguredPrefix> prefixList = new ArrayList<>();
prefixList.add(PrefixManager.getDefaultPrefix());
prefixList.addAll(PrefixManager.getVisiblePrefix());
prefixList.addAll(PrefixManager.getVisiblePrefix()); //只需要读取看得见的
ConfiguredPrefix usingPrefix = UserManager.getPrefix(getPlayer());
@ -49,7 +49,8 @@ public class PrefixSelectGUI extends AutoPagedGUI {
addItem(new GUIItem(prefix.getItemHasPermission()) {
@Override
public void onClick(ClickType type) {
if (UserManager.isPrefixUsable(player, prefix)) { //再次检查防止打开GUI后选择前的时间段内权限消失
//再次检查防止打开GUI后选择前的时间段内权限消失
if (UserManager.isPrefixUsable(player, prefix)) {
player.closeInventory();
UserManager.setPrefix(player, prefix, true);
@ -71,7 +72,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
@Override
public void onClose() {
openingUsers.remove(player);
removeOpening(player);
}
public static void removeOpening(Player player) {
@ -82,6 +83,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
for (Player player : new HashSet<>(openingUsers)) {
player.closeInventory();
}
openingUsers.clear();
}
public static void open(Player player) {

View File

@ -6,6 +6,9 @@ functions:
OnNamePrefix: true # 是否给头顶上添加前缀,该方法用到了头顶的那个计分板,如有冲突请关掉哦~
autoUsePrefix: true # 自动前缀显示 当玩家没有自己选择一个前缀的时候,会自动使用所拥有的的前缀中权重最高的那一个
GUI:
title: "&f&l我的前缀 &8| 列表"
messages:
selected:
- "&7您选择了 &f%(name) &7作为当前显示的前缀。"