1
mirror of https://github.com/CarmJos/UserPrefix.git synced 2026-06-05 09:01:39 +08:00

Compare commits

...

12 Commits

Author SHA1 Message Date
carm a95d4d8cbb 移除失效代码 2021-09-08 18:39:40 +08:00
carm 7af506362b 1.2.1-SNAPSHOT 修复一些小问题
1. 添加了更多的注释
2. 修复了玩家GUI缓存未清空的问题。
3. 添加了@Nullable与@NotNull的标识,便于后续代码更新维护。
2021-09-08 18:36:16 +08:00
Carm 6c175816ce Update README.md 2021-09-08 17:57:17 +08:00
Carm 2e57e03927 添加CI显示 2021-09-05 10:47:08 +08:00
Carm 03afb12161 添加代码质量显示 2021-09-05 10:45:50 +08:00
carm bcc8d077a9 采用外部库 2021-08-25 14:27:34 +08:00
carm eaa386a6ab 采用外部库 2021-08-25 14:25:43 +08:00
carm 22bf9d7d94 Merge remote-tracking branch 'origin/master' 2021-08-25 14:22:30 +08:00
carm 3de812c42a 采用外部库 2021-08-25 14:21:04 +08:00
Carm 6abc13af23 自动化CI 2021-08-25 14:17:52 +08:00
carm bb126c676e 优化代码结构,移除无用代码,减少代码复用。 2021-08-25 13:37:31 +08:00
carm f6a5538da3 修复高版本重载失效的问题 2021-08-25 13:37:09 +08:00
15 changed files with 203 additions and 292 deletions
+26
View File
@@ -0,0 +1,26 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Java CI with Maven
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
+4 -1
View File
@@ -1,7 +1,10 @@
# 用户前缀系统插件
[![CodeFactor](https://www.codefactor.io/repository/github/carmjos/userprefix/badge?s=b76fec1f64726b5f19989aace6adb5f85fdab840)](https://www.codefactor.io/repository/github/carmjos/userprefix)
[![Java CI with Maven](https://github.com/CarmJos/UserPrefix/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/UserPrefix/actions/workflows/maven.yml)
轻便、高效、实时的用户前缀系统。
本插件基于Spigot实现,**理论上支持全版本**。
数据部分基于 [LuckPerms](https://www.spigotmc.org/resources/luckperms.28140/) 实现。
## 特性
@@ -172,4 +175,4 @@ prefixes:
- "§f您可以输入 §b/vip §f指令查看详细特权!"
- ""
- "§e✯ 加入Pro+会员以使用该前缀!"
```
```
+23 -17
View File
@@ -6,7 +6,7 @@
<groupId>cc.carm.plugin</groupId>
<artifactId>UserPrefix</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.2.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@@ -19,14 +19,34 @@
<repositories>
<repository>
<id>ycraft</id>
<url>https://maven.ycraft.cn/repository/maven-public/</url>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
</repository>
<repository>
<id>placeholder-api-repo</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>lss233-repo</id>
<url>https://lss233.littleservice.cn/repositories/minecraft</url>
</repository>
<repository>
<id>oss-repo</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>luck-repo</id>
<url>https://repo.lucko.me/</url>
</repository>
<repository>
<id>maven-central</id>
<url>https://repo1.maven.org/maven2/</url>
</repository>
</repositories>
<dependencies>
@@ -52,20 +72,6 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
<version>4.5.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.comphenix.packetwrapper</groupId>
<artifactId>PacketWrapper</artifactId>
<version>1.13-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -6,11 +6,12 @@ import cc.carm.plugin.userprefix.configuration.PrefixConfig;
import cc.carm.plugin.userprefix.hooker.UserPrefixExpansion;
import cc.carm.plugin.userprefix.listener.UserListener;
import cc.carm.plugin.userprefix.listener.processor.UserNodeUpdateProcessor;
import cc.carm.plugin.userprefix.manager.ServiceManager;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import cc.carm.plugin.userprefix.manager.ConfigManager;
import cc.carm.plugin.userprefix.manager.PrefixManager;
import cc.carm.plugin.userprefix.manager.ServiceManager;
import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.util.ColorParser;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
@@ -47,6 +48,11 @@ public class Main extends JavaPlugin {
log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。");
if (Bukkit.getOnlinePlayers().size() > 0) {
Bukkit.getOnlinePlayers().forEach(UserManager::initPlayer); // 适配热重载
}
}
@Override
@@ -1,9 +1,10 @@
package cc.carm.plugin.userprefix.command;
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
import cc.carm.plugin.userprefix.manager.ConfigManager;
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.ui.PrefixSelectGUI;
import cc.carm.plugin.userprefix.util.ColorParser;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
@@ -30,7 +31,8 @@ public class UserPrefixAdminCommand implements CommandExecutor {
} else if (aim.equalsIgnoreCase("reload")) {
long s1 = System.currentTimeMillis();
PrefixSelectGUI.closeAll(); // 关掉所有正在显示的前缀列表
PrefixManager.loadConfiguredPrefixes(); //重载配置文件
ConfigManager.reloadConfig(); // 重载配置文件
PrefixManager.loadConfiguredPrefixes(); //加载重载后了的配置文件
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
UserManager.checkPrefix(onlinePlayer, false);
/*
@@ -1,9 +1,6 @@
package cc.carm.plugin.userprefix.listener;
import cc.carm.plugin.userprefix.configuration.PrefixConfig;
import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
@@ -14,25 +11,13 @@ public class UserListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
UserManager.checkPrefix(player, false);
if (PrefixConfig.Functions.NAME_PREFIX.get()) {
UserManager.createNameTag(event.getPlayer());
UserManager.updatePrefixView(event.getPlayer(), true);
}
UserManager.initPlayer(event.getPlayer());
}
@EventHandler
public void onLeave(PlayerQuitEvent event) {
PrefixSelectGUI.removeOpening(event.getPlayer());
UserManager.unloadNameTag(event.getPlayer().getUniqueId());
UserManager.checkingPlayers.remove(event.getPlayer().getUniqueId());
UserManager.unloadPlayer(event.getPlayer());
}
@@ -1,29 +1,16 @@
package cc.carm.plugin.userprefix.listener.processor;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import net.luckperms.api.model.user.User;
import cc.carm.plugin.userprefix.manager.UserManager;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class UserNodeUpdateProcessor {
// public static void process(NodeRemoveEvent event) {
// if (event.getTarget() instanceof User) {
// if (!(event.getNode() instanceof PermissionNode)) return;
// User user = (User) event.getTarget();
// Player player = Bukkit.getPlayer(user.getUniqueId());
// if (player == null) return;
// UserManager.checkPrefix(player, true);
// }
// }
public static void process(UserDataRecalculateEvent event) {
User user = event.getUser();
Player player = Bukkit.getPlayer(user.getUniqueId());
Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
if (player == null) return;
UserManager.checkPrefix(player, true);
}
}
@@ -8,6 +8,8 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Comparator;
import java.util.HashMap;
@@ -33,7 +35,9 @@ public class PrefixManager {
Main.log("配置文件中暂无任何前缀配置,请检查。");
return;
}
HashMap<String, ConfiguredPrefix> dataPrefixes = new HashMap<>();
for (String prefixIdentifier : prefixesSection.getKeys(false)) {
ConfigurationSection configuredPrefixSection = prefixesSection.getConfigurationSection(prefixIdentifier);
if (configuredPrefixSection == null) continue;
@@ -55,10 +59,12 @@ public class PrefixManager {
dataPrefixes.put(prefixIdentifier, new ConfiguredPrefix(prefixIdentifier, name, content, weight, permission, itemHasPermission, itemNoPermission, itemUsing));
}
prefixes = dataPrefixes;
PrefixManager.prefixes.clear();
PrefixManager.prefixes = dataPrefixes;
}
public static void loadDefaultPrefix() {
PrefixManager.defaultPrefix = null;
ConfigurationSection defaultPrefixSection = ConfigManager.getConfig().getConfigurationSection("defaultPrefix");
if (defaultPrefixSection != null) {
String name = defaultPrefixSection.getString("name", "默认前缀");
@@ -80,9 +86,9 @@ public class PrefixManager {
.addFlag(ItemFlag.HIDE_ENCHANTS)
.toItemStack()
);
defaultPrefix = new ConfiguredPrefix("default", name, content, 0, null, itemNotUsing, null, itemUsing);
PrefixManager.defaultPrefix = new ConfiguredPrefix("default", name, content, 0, null, itemNotUsing, null, itemUsing);
} else {
defaultPrefix = new ConfiguredPrefix("default", "默认前缀", "&r", 0, null,
PrefixManager.defaultPrefix = new ConfiguredPrefix("default", "默认前缀", "&r", 0, null,
new ItemStackFactory(Material.NAME_TAG)
.setDisplayName("&f默认前缀")
.addLore(" ")
@@ -109,16 +115,21 @@ public class PrefixManager {
.collect(Collectors.toList());
}
@NotNull
public static ConfiguredPrefix getDefaultPrefix() {
return defaultPrefix;
}
@NotNull
public static HashMap<String, ConfiguredPrefix> getPrefixes() {
return prefixes;
}
@Nullable
public static ConfiguredPrefix getPrefix(String identifier) {
if (identifier == null || identifier.equalsIgnoreCase("default")) {
if (identifier == null) {
return null;
} else if (identifier.equalsIgnoreCase("default")) {
return getDefaultPrefix();
} else {
return getPrefixes().get(identifier);
@@ -4,12 +4,16 @@ import cc.carm.plugin.userprefix.Main;
import cc.carm.plugin.userprefix.configuration.PrefixConfig;
import cc.carm.plugin.userprefix.model.ConfiguredPrefix;
import cc.carm.plugin.userprefix.nametag.UserNameTag;
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
import cc.carm.plugin.userprefix.util.MessageUtil;
import cc.carm.plugin.userprefix.util.gui.GUI;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.NodeType;
import net.luckperms.api.node.types.MetaNode;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.stream.Collectors;
@@ -30,6 +34,21 @@ public class UserManager {
return nameTag;
}
public static void initPlayer(Player player) {
UserManager.checkPrefix(player, false);
if (PrefixConfig.Functions.NAME_PREFIX.get()) {
UserManager.createNameTag(player);
UserManager.updatePrefixView(player, true);
}
}
public static void unloadPlayer(Player player) {
PrefixSelectGUI.removeOpening(player);
UserManager.unloadNameTag(player.getUniqueId());
UserManager.checkingPlayers.remove(player.getUniqueId());
GUI.removeOpenedGUI(player); // 清空打开过的GUI缓存 (用于记录物品点击的
}
/**
* 更新前缀显示效果
*
@@ -58,11 +77,9 @@ public class UserManager {
if (loadOthers) {
ConfiguredPrefix onlinePlayerPrefix = UserManager.getPrefix(onlinePlayer);
if (onlinePlayerPrefix != null) {
tag.setPrefix(onlinePlayer, onlinePlayerPrefix.getContent());
tag.setOrder(onlinePlayer, onlinePlayerPrefix.getWeight());
Main.debug("为玩家 " + player.getName() + " 设置了 " + player.getName() + "的前缀为 #" + onlinePlayerPrefix.getWeight() + " " + onlinePlayerPrefix.getName());
}
tag.setPrefix(onlinePlayer, onlinePlayerPrefix.getContent());
tag.setOrder(onlinePlayer, onlinePlayerPrefix.getWeight());
Main.debug("为玩家 " + player.getName() + " 设置了 " + onlinePlayer.getName() + "的前缀为 #" + onlinePlayerPrefix.getWeight() + " " + onlinePlayerPrefix.getName());
}
}
}
@@ -74,7 +91,13 @@ public class UserManager {
* @param updateView 是否更新头顶与TabList中的前缀
*/
public static void checkPrefix(Player player, boolean updateView) {
if (checkingPlayers.contains(player.getUniqueId())) return;
if (checkingPlayers.contains(player.getUniqueId())) {
/*
* 这里为了避免极短时间内的重复触发导致多次判断且结果相同误导玩家,
* 故没有采用同步锁,而是采用添加到一个临时Set中,对Set中玩家跳过判断。
*/
return;
}
checkingPlayers.add(player.getUniqueId());
String currentPrefixIdentifier = UserManager.getPrefixData(player);
ConfiguredPrefix currentPrefix = PrefixManager.getPrefix(currentPrefixIdentifier);
@@ -104,12 +127,14 @@ public class UserManager {
* @param player 玩家
* @return 前缀配置
*/
@NotNull
public static ConfiguredPrefix getPrefix(Player player) {
String identifier = getPrefixData(player);
if (identifier == null || !isPrefixUsable(player, identifier)) {
return getHighestPrefix(player);
} else {
return PrefixManager.getPrefix(identifier);
ConfiguredPrefix prefix = PrefixManager.getPrefix(identifier);
return prefix == null ? PrefixManager.getDefaultPrefix() : prefix;
}
}
@@ -131,11 +156,12 @@ public class UserManager {
* @param player 玩家
* @return 可用前缀列表
*/
@NotNull
public static List<ConfiguredPrefix> getUsablePrefixes(Player player) {
return PrefixManager.getPrefixes().values().stream()
.filter(configuredPrefix -> isPrefixUsable(player, configuredPrefix))
.sorted(Comparator.comparingInt(ConfiguredPrefix::getWeight))
.collect(Collectors.toList());
.filter(configuredPrefix -> isPrefixUsable(player, configuredPrefix)) //过滤出玩家可用的前缀
.sorted(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 以前缀排序
.collect(Collectors.toList()); // 返回集合
}
@@ -146,13 +172,15 @@ public class UserManager {
* @param player 玩家
* @return 权限内容
*/
@NotNull
public static ConfiguredPrefix getHighestPrefix(Player player) {
if (PrefixConfig.Functions.AUTO_USE.get()) {
// 关闭了自动选择,就直接给默认的前缀,让玩家自己去设置吧
// 关闭了自动选择,就直接给默认的前缀,让玩家自己去设置吧~
return PrefixManager.getDefaultPrefix();
}
List<ConfiguredPrefix> prefixes = getUsablePrefixes(player);
return prefixes.stream().max(Comparator.comparingInt(ConfiguredPrefix::getWeight)).orElseGet(PrefixManager::getDefaultPrefix);
return getUsablePrefixes(player).stream()
.max(Comparator.comparingInt(ConfiguredPrefix::getWeight)) // 取权重最大
.orElseGet(PrefixManager::getDefaultPrefix); // 啥都没有? 返回默认前缀。
}
/**
@@ -177,7 +205,8 @@ public class UserManager {
* @return 若前缀标识不存在,则返回false;若前缀为默认前缀,或该前缀无权限,或玩家有该前缀的权限,则返回true。
*/
public static boolean isPrefixUsable(Player player, ConfiguredPrefix configuredPrefix) {
return configuredPrefix.getPermission() == null || ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission());
return configuredPrefix.getPermission() == null //为null的话说明无需权限了
|| ServiceManager.hasPermission(ServiceManager.getUser(player), configuredPrefix.getPermission());
}
/**
@@ -187,8 +216,11 @@ public class UserManager {
* @param player 玩家
* @return 正在使用的前缀Identifier(若不存在则返回null)
*/
@Nullable
public static String getPrefixData(Player player) {
return ServiceManager.getAPI().getMetaData(player).getMetaValue("userprefix", String::valueOf).orElse(null);
return ServiceManager.getAPI().getMetaData(player)
.getMetaValue("userprefix", String::valueOf)
.orElse(null);
}
/**
@@ -200,11 +232,11 @@ public class UserManager {
*/
public static void setPrefixData(Player player, String prefixIdentifier) {
User user = ServiceManager.getUser(player);
clearPrefixData(player);
// LuckPerms竟然会把所有的metaKey全部转换为小写... 那我这里就直接写成小写吧~
MetaNode node = MetaNode.builder("userprefix", prefixIdentifier).build();
user.data().add(node);
ServiceManager.getService().getUserManager().saveUser(user);
clearPrefixData(player); // 清除掉旧的数据,LuckPerms不会去覆盖一个Meta,需要手动清除。
if (prefixIdentifier != null) {
user.data().add(MetaNode.builder("userprefix", prefixIdentifier).build());
ServiceManager.getService().getUserManager().saveUser(user); // 保存数据
}
}
/**
@@ -37,58 +37,30 @@ public class ConfiguredPrefix {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return ColorParser.parseColor(content);
}
public void setContent(String content) {
this.content = content;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public ItemStack getItemHasPermission() {
return itemHasPermission;
}
public void setItemHasPermission(ItemStack itemHasPermission) {
this.itemHasPermission = itemHasPermission;
}
public ItemStack getItemNoPermission() {
return itemNoPermission;
}
public void setItemNoPermission(ItemStack itemNoPermission) {
this.itemNoPermission = itemNoPermission;
}
public ItemStack getItemWhenUsing() {
return itemWhenUsing;
}
public void setItemWhenUsing(ItemStack itemWhenUsing) {
this.itemWhenUsing = itemWhenUsing;
}
public boolean isVisibleNoPermission() {
return this.itemNoPermission != null;
}
@@ -6,11 +6,11 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
public class ItemStackFactory {
ItemStack item;
@@ -57,85 +57,83 @@ public class ItemStackFactory {
return this;
}
public ItemStackFactory setDisplayName(String name) {
public ItemStackFactory setDisplayName(@NotNull String name) {
ItemMeta im = this.item.getItemMeta();
im.setDisplayName(name.replace("&", "§").replace("§§", "&&"));
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory setLore(List<String> lores) {
ItemMeta im = this.item.getItemMeta();
List<String> lores_ = new ArrayList();
Iterator var4 = lores.iterator();
while (var4.hasNext()) {
String lore = (String) var4.next();
lores_.add(lore.replace("&", "§").replace("§§", "&&"));
if (im != null) {
im.setDisplayName(ColorParser.parseColor(name));
this.item.setItemMeta(im);
}
im.setLore(lores_);
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory addLore(String name) {
public ItemStackFactory setLore(@NotNull List<String> loreList) {
ItemMeta im = this.item.getItemMeta();
Object lores;
if (im.hasLore()) {
lores = im.getLore();
} else {
lores = new ArrayList();
if (im != null) {
im.setLore(
loreList.stream()
.map(ColorParser::parseColor)
.collect(Collectors.toList())
);
this.item.setItemMeta(im);
}
((List) lores).add(name.replace("&", "§").replace("§§", "&&"));
im.setLore((List) lores);
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory addEnchant(Enchantment ench, int level, boolean ignoreLevelRestriction) {
public ItemStackFactory addLore(@NotNull String s) {
ItemMeta im = this.item.getItemMeta();
im.addEnchant(ench, level, ignoreLevelRestriction);
this.item.setItemMeta(im);
if (im != null) {
List<String> lore = im.getLore() != null ? im.getLore() : new ArrayList<>();
lore.add(ColorParser.parseColor(s));
im.setLore(lore);
this.item.setItemMeta(im);
}
return this;
}
public ItemStackFactory removeEnchant(Enchantment ench) {
public ItemStackFactory addEnchant(@NotNull Enchantment enchant, int level, boolean ignoreLevelRestriction) {
ItemMeta im = this.item.getItemMeta();
im.removeEnchant(ench);
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory addFlag(ItemFlag flag) {
ItemMeta im = this.item.getItemMeta();
im.addItemFlags(new ItemFlag[]{flag});
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory removeFlag(ItemFlag flag) {
ItemMeta im = this.item.getItemMeta();
im.removeItemFlags(new ItemFlag[]{flag});
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory setUnbreakable(boolean unbreakable) {
ItemMeta im = this.item.getItemMeta();
im.setUnbreakable(unbreakable);
this.item.setItemMeta(im);
return this;
}
public ItemStackFactory setSkullOwner(String name) {
if (this.item.getType() == Material.PLAYER_HEAD || this.item.getType() == Material.PLAYER_WALL_HEAD) {
SkullMeta im = (SkullMeta) this.item.getItemMeta();
im.setOwner(name);
if (im != null) {
im.addEnchant(enchant, level, ignoreLevelRestriction);
this.item.setItemMeta(im);
}
return this;
}
public ItemStackFactory removeEnchant(@NotNull Enchantment enchant) {
ItemMeta im = this.item.getItemMeta();
if (im != null) {
im.removeEnchant(enchant);
this.item.setItemMeta(im);
}
return this;
}
public ItemStackFactory addFlag(@NotNull ItemFlag flag) {
ItemMeta im = this.item.getItemMeta();
if (im != null) {
im.addItemFlags(flag);
this.item.setItemMeta(im);
}
return this;
}
public ItemStackFactory removeFlag(@NotNull ItemFlag flag) {
ItemMeta im = this.item.getItemMeta();
if (im != null) {
im.removeItemFlags(flag);
this.item.setItemMeta(im);
}
return this;
}
public ItemStackFactory setUnbreakable(boolean unbreakable) {
ItemMeta im = this.item.getItemMeta();
if (im != null) {
im.setUnbreakable(unbreakable);
this.item.setItemMeta(im);
}
return this;
}
}
@@ -58,21 +58,16 @@ public class AutoPagedGUI extends CommonPagedGUI {
.addLore("&7&o右键可前往第一页哦")
.toItemStack() : previousPageUI) {
@Override
public void ClickAction(ClickType type, Player u) {
public void onClick(ClickType type) {
if (type == ClickType.RIGHT) {
goFirstPage();
} else {
goPreviousPage();
}
PrefixConfig.Sounds.GUI_CLICK.play(u);
openGUI(u);
// u.playSound(u.getLocation(), Sound.ENTITY_CHICKEN_EGG, 0.5f, 1);
PrefixConfig.Sounds.GUI_CLICK.play(user);
openGUI(user);
}
});
} else {
// setItem(previousPageSlot, new GUIItem(noPreviousPageUI == null ? new ItemStackFactory(Material.GRAY_STAINED_GLASS_PANE)
// .setDisplayName("已经是第一页啦")
// .toItemStack() : noPreviousPageUI));
}
if (previousPageSlot >= 0)
@@ -82,21 +77,16 @@ public class AutoPagedGUI extends CommonPagedGUI {
.addLore("&7&o右键可前往最后一页哦")
.toItemStack() : nextPageUI) {
@Override
public void ClickAction(ClickType type, Player u) {
public void onClick(ClickType type) {
if (type == ClickType.RIGHT) {
goLastPage();
} else {
goNextPage();
}
PrefixConfig.Sounds.GUI_CLICK.play(u);
openGUI(u);
// u.playSound(u.getLocation(), Sound.ENTITY_CHICKEN_EGG, 0.5f, 1);
PrefixConfig.Sounds.GUI_CLICK.play(user);
openGUI(user);
}
});
} else {
// setItem(nextPageSlot, new GUIItem(noNextPageUI == null ? new ItemStackFactory(Material.GRAY_STAINED_GLASS_PANE)
// .setDisplayName("已经是最后一页啦")
// .toItemStack() : noNextPageUI));
}
super.openGUI(user);
@@ -12,7 +12,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
@@ -60,47 +59,6 @@ public class GUI {
case SIXBYNINE:
this.items = new GUIItem[54];
break;
case HOPPER:
this.items = new GUIItem[InventoryType.HOPPER.getDefaultSize()];
break;
case BEACON:
this.items = new GUIItem[InventoryType.BEACON.getDefaultSize()];
break;
case DISPENSER:
this.items = new GUIItem[InventoryType.DISPENSER.getDefaultSize()];
break;
case DROPPER:
this.items = new GUIItem[InventoryType.DROPPER.getDefaultSize()];
break;
case FURNACE:
this.items = new GUIItem[InventoryType.FURNACE.getDefaultSize()];
break;
case WORKBENCH:
this.items = new GUIItem[InventoryType.WORKBENCH.getDefaultSize()];
break;
case CRAFTING:
this.items = new GUIItem[InventoryType.CRAFTING.getDefaultSize()];
break;
case ENCHANTING:
this.items = new GUIItem[InventoryType.ENCHANTING.getDefaultSize()];
break;
case BREWING:
this.items = new GUIItem[InventoryType.BREWING.getDefaultSize()];
break;
case PLAYER:
this.items = new GUIItem[InventoryType.PLAYER.getDefaultSize()];
break;
case MERCHANT:
this.items = new GUIItem[InventoryType.MERCHANT.getDefaultSize()];
break;
case ENDER_CHEST:
this.items = new GUIItem[InventoryType.ENDER_CHEST.getDefaultSize()];
break;
case CREATIVE:
this.items = new GUIItem[InventoryType.CREATIVE.getDefaultSize()];
break;
case CANCEL:
this.items = null;
}
@@ -219,45 +177,6 @@ public class GUI {
case SIXBYNINE:
inv = Bukkit.createInventory(null, this.items.length, this.name);
break;
case HOPPER:
inv = Bukkit.createInventory(null, InventoryType.HOPPER, this.name);
break;
case BEACON:
inv = Bukkit.createInventory(null, InventoryType.BEACON, this.name);
break;
case DISPENSER:
inv = Bukkit.createInventory(null, InventoryType.DISPENSER, this.name);
break;
case DROPPER:
inv = Bukkit.createInventory(null, InventoryType.DROPPER, this.name);
break;
case FURNACE:
inv = Bukkit.createInventory(null, InventoryType.FURNACE, this.name);
break;
case WORKBENCH:
inv = Bukkit.createInventory(null, InventoryType.WORKBENCH, this.name);
break;
case CRAFTING:
inv = Bukkit.createInventory(null, InventoryType.CRAFTING, this.name);
break;
case ENCHANTING:
inv = Bukkit.createInventory(null, InventoryType.ENCHANTING, this.name);
break;
case BREWING:
inv = Bukkit.createInventory(null, InventoryType.BREWING, this.name);
break;
case PLAYER:
inv = Bukkit.createInventory(null, InventoryType.PLAYER, this.name);
break;
case CREATIVE:
inv = Bukkit.createInventory(null, InventoryType.CREATIVE, this.name);
break;
case MERCHANT:
inv = Bukkit.createInventory(null, InventoryType.MERCHANT, this.name);
break;
case ENDER_CHEST:
inv = Bukkit.createInventory(null, InventoryType.ENDER_CHEST, this.name);
break;
}
for (int index = 0; index < this.items.length; index++) {
@@ -299,7 +218,6 @@ public class GUI {
if (event.getSlot() != -999 && GUI.this.items[event.getSlot()] != null) {
if (GUI.this.items[event.getSlot()].isActionActive()) {
GUI.this.items[event.getSlot()].onClick(event.getClick());
GUI.this.items[event.getSlot()].ClickAction(event.getClick(), player);
GUI.this.items[event.getSlot()].rawClickAction(event);
if (!GUI.this.items[event.getSlot()].actions.isEmpty()) {
for (GUIItem.GUIClickAction action : GUI.this.items[event.getSlot()].actions) {
@@ -36,17 +36,6 @@ public class GUIItem {
actionActive = b;
}
/**
* 玩家点击GUI后执行的代码
*
* @param type 点击的类型
* @param player 点击GUI的玩家
*/
@Deprecated
public void ClickAction(ClickType type, Player player) {
}
/**
* 玩家点击GUI后执行的代码
*
@@ -11,20 +11,6 @@ public enum GUIType {
FOURBYNINE,
FIVEBYNINE,
SIXBYNINE,
DISPENSER,
DROPPER,
FURNACE,
WORKBENCH,
CRAFTING,
ENCHANTING,
BREWING,
PLAYER,
CREATIVE,
MERCHANT,
ENDER_CHEST,
BEACON,
HOPPER,
UNKNOWN,
CANCEL;
}