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> <groupId>cc.carm.plugin</groupId>
<artifactId>UserPrefix</artifactId> <artifactId>UserPrefix</artifactId>
<version>1.2.3</version> <version>1.2.4</version>
<properties> <properties>
<maven.compiler.source>8</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>

View File

@ -24,7 +24,7 @@ public class UserPrefixAdminCommand implements CommandExecutor {
MessageUtil.send(sender, "&3&l用户前缀系统 &f前缀列表"); MessageUtil.send(sender, "&3&l用户前缀系统 &f前缀列表");
for (ConfiguredPrefix value : PrefixManager.getPrefixes().values()) { for (ConfiguredPrefix value : PrefixManager.getPrefixes().values()) {
MessageUtil.send(sender, "&8#" + value.getWeight() + " &f" + value.getIdentifier()); 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()); MessageUtil.send(sender, "&8- &7内容示例&r " + value.getContent() + sender.getName());
} }
return true; 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 class Messages {
public static ConfigValueList<String> SELECTED = new ConfigValueList<>("messages.selected", String.class); public static ConfigValueList<String> SELECTED = new ConfigValueList<>("messages.selected", String.class);

View File

@ -1,6 +1,7 @@
package cc.carm.plugin.userprefix.listener.processor; package cc.carm.plugin.userprefix.listener.processor;
import cc.carm.plugin.userprefix.manager.UserManager; import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
import net.luckperms.api.event.user.UserDataRecalculateEvent; import net.luckperms.api.event.user.UserDataRecalculateEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -11,6 +12,11 @@ public class UserNodeUpdateProcessor {
Player player = Bukkit.getPlayer(event.getUser().getUniqueId()); Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
if (player == null) return; if (player == null) return;
UserManager.checkPrefix(player, true); 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 * @return 若前缀标识不存在则返回false若前缀为默认前缀或该前缀无权限或玩家有该前缀的权限则返回true
*/ */
public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) { public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) {
return configuredPrefix.getPermission() == null //为null的话说明无需权限了 return configuredPrefix.isPublic()
|| ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission()); || 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 cc.carm.plugin.userprefix.util.ColorParser;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ConfiguredPrefix { public class ConfiguredPrefix {
@ -18,7 +20,13 @@ public class ConfiguredPrefix {
ItemStack itemNoPermission; ItemStack itemNoPermission;
ItemStack itemWhenUsing; 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.identifier = identifier;
this.name = name; this.name = name;
this.content = content; this.content = content;
@ -29,14 +37,17 @@ public class ConfiguredPrefix {
this.itemWhenUsing = itemWhenUsing; this.itemWhenUsing = itemWhenUsing;
} }
@NotNull
public String getIdentifier() { public String getIdentifier() {
return identifier; return identifier;
} }
@NotNull
public String getName() { public String getName() {
return name; return name;
} }
@NotNull
public String getContent() { public String getContent() {
return ColorParser.parse(content); return ColorParser.parse(content);
} }
@ -45,22 +56,30 @@ public class ConfiguredPrefix {
return weight; return weight;
} }
@Nullable
public String getPermission() { public String getPermission() {
return permission; return permission;
} }
@NotNull
public ItemStack getItemHasPermission() { public ItemStack getItemHasPermission() {
return itemHasPermission; return itemHasPermission;
} }
@Nullable
public ItemStack getItemNoPermission() { public ItemStack getItemNoPermission() {
return itemNoPermission; return itemNoPermission;
} }
@Nullable
public ItemStack getItemWhenUsing() { public ItemStack getItemWhenUsing() {
return itemWhenUsing; return itemWhenUsing;
} }
public boolean isPublic() {
return getPermission() == null;
}
public boolean isVisibleNoPermission() { public boolean isVisibleNoPermission() {
return this.itemNoPermission != null; return this.itemNoPermission != null;
} }

View File

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

View File

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