mirror of
https://github.com/CarmJos/UserPrefix.git
synced 2026-06-05 09:01:39 +08:00
Compare commits
12 Commits
1.0.0-SNAPSHOT
...
1.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
| a95d4d8cbb | |||
| 7af506362b | |||
| 6c175816ce | |||
| 2e57e03927 | |||
| 03afb12161 | |||
| bcc8d077a9 | |||
| eaa386a6ab | |||
| 22bf9d7d94 | |||
| 3de812c42a | |||
| 6abc13af23 | |||
| bb126c676e | |||
| f6a5538da3 |
@@ -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
|
||||
@@ -1,7 +1,10 @@
|
||||
# 用户前缀系统插件
|
||||
[](https://www.codefactor.io/repository/github/carmjos/userprefix)
|
||||
[](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+会员以使用该前缀!"
|
||||
```
|
||||
```
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
+2
-15
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user