diff --git a/pom.xml b/pom.xml
index 294eacb..5e04a93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,6 +90,11 @@
papermc-repo
https://repo.papermc.io/repository/maven-public/
+
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/repository/public/
+
@@ -99,5 +104,13 @@
1.21.11-R0.1-SNAPSHOT
provided
+
+
+
+ net.dmulloy2
+ ProtocolLib
+ 5.4.0
+ provided
+
diff --git a/src/main/java/cn/infstar/essentialsC/EssentialsC.java b/src/main/java/cn/infstar/essentialsC/EssentialsC.java
index 2ba929c..18a4a0e 100644
--- a/src/main/java/cn/infstar/essentialsC/EssentialsC.java
+++ b/src/main/java/cn/infstar/essentialsC/EssentialsC.java
@@ -1,6 +1,7 @@
package cn.infstar.essentialsC;
import cn.infstar.essentialsC.commands.*;
+import cn.infstar.essentialsC.listeners.InventoryTitleListener;
import cn.infstar.essentialsC.listeners.ShulkerBoxListener;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
@@ -12,12 +13,24 @@ import java.lang.reflect.Field;
public final class EssentialsC extends JavaPlugin {
private static LangManager langManager;
+ private static InventoryTitleListener inventoryTitleListener;
@Override
public void onEnable() {
// 初始化语言管理器
langManager = new LangManager(this);
+ // 检查 ProtocolLib 是否可用
+ boolean protocolLibAvailable = checkProtocolLib();
+
+ // 如果 ProtocolLib 可用,注册 InventoryTitleListener
+ if (protocolLibAvailable) {
+ inventoryTitleListener = new InventoryTitleListener(this);
+ getLogger().info("ProtocolLib 已检测到,启用自定义标题功能!");
+ } else {
+ getLogger().warning("ProtocolLib 未检测到,将使用默认标题。");
+ }
+
// 注册监听器
registerListeners();
@@ -30,6 +43,10 @@ public final class EssentialsC extends JavaPlugin {
@Override
public void onDisable() {
+ // 清理 InventoryTitleListener
+ if (inventoryTitleListener != null) {
+ inventoryTitleListener.cleanup();
+ }
getLogger().info("EssentialsC 插件已禁用!");
}
@@ -40,6 +57,20 @@ public final class EssentialsC extends JavaPlugin {
return langManager;
}
+ /**
+ * 获取 InventoryTitleListener 实例
+ */
+ public static InventoryTitleListener getInventoryTitleListener() {
+ return inventoryTitleListener;
+ }
+
+ /**
+ * 检查 ProtocolLib 是否可用
+ */
+ private boolean checkProtocolLib() {
+ return Bukkit.getPluginManager().isPluginEnabled("ProtocolLib");
+ }
+
/**
* 注册所有监听器
*/
diff --git a/src/main/java/cn/infstar/essentialsC/commands/EnderChestCommand.java b/src/main/java/cn/infstar/essentialsC/commands/EnderChestCommand.java
index 099e644..cfa424b 100644
--- a/src/main/java/cn/infstar/essentialsC/commands/EnderChestCommand.java
+++ b/src/main/java/cn/infstar/essentialsC/commands/EnderChestCommand.java
@@ -1,8 +1,12 @@
package cn.infstar.essentialsC.commands;
import cn.infstar.essentialsC.EssentialsC;
+import cn.infstar.essentialsC.listeners.InventoryTitleListener;
import org.bukkit.entity.Player;
+/**
+ * 末影箱命令 - 使用 ProtocolLib 实现自定义标题
+ */
public class EnderChestCommand extends BaseCommand {
public EnderChestCommand() {
@@ -11,18 +15,15 @@ public class EnderChestCommand extends BaseCommand {
@Override
protected boolean execute(Player player, String[] args) {
- EssentialsC plugin = EssentialsC.getInstance();
+ InventoryTitleListener titleListener = EssentialsC.getInventoryTitleListener();
- // 如果启用了 ProtocolLib,使用自定义标题
- if (plugin.isProtocolLibEnabled()) {
- // 从配置读取标题
- String title = plugin.getConfig().getString("enderchest.title", "&5随身末影箱");
-
- // 标记下一个打开的 inventory 需要修改标题
- plugin.getInventoryTitleListener().markForTitleChange(player, title);
+ // 如果 ProtocolLib 可用,设置自定义标题
+ if (titleListener != null) {
+ String title = "&5随身末影箱";
+ titleListener.markForTitleChange(player, title);
}
- // 直接打开玩家的末影箱(参考 EssentialsX 实现)
+ // 打开末影箱
player.openInventory(player.getEnderChest());
return true;
}
diff --git a/src/main/java/cn/infstar/essentialsC/listeners/ShulkerBoxListener.java b/src/main/java/cn/infstar/essentialsC/listeners/ShulkerBoxListener.java
index 23c2c13..0f923d1 100644
--- a/src/main/java/cn/infstar/essentialsC/listeners/ShulkerBoxListener.java
+++ b/src/main/java/cn/infstar/essentialsC/listeners/ShulkerBoxListener.java
@@ -208,16 +208,22 @@ public class ShulkerBoxListener implements Listener {
// 使用配置文件中的默认标题
String defaultTitle = plugin.getConfig().getString("shulkerbox.default-title", "");
if (defaultTitle != null && !defaultTitle.isEmpty()) {
- // 转换颜色代码 & -> §
- title = defaultTitle.replace('&', '§');
+ title = defaultTitle;
} else {
- // 如果配置为空,使用 "Shulker Box"(客户端会自动翻译)
- title = "Shulker Box";
+ title = "&e潜影盒";
}
}
+ // 如果 ProtocolLib 可用,标记需要修改标题
+ InventoryTitleListener titleListener = EssentialsC.getInventoryTitleListener();
+ if (titleListener != null) {
+ titleListener.markForTitleChange(player, title);
+ }
+
// 创建一个新的 inventory(基于潜影盒的内容)
- Inventory inventory = Bukkit.createInventory(null, 27, title);
+ // 注意:如果使用 ProtocolLib,标题会被拦截修改,这里用临时标题
+ String inventoryTitle = titleListener != null ? "Opening..." : title.replace('&', '§');
+ Inventory inventory = Bukkit.createInventory(null, 27, inventoryTitle);
// 复制潜影盒的内容到新 inventory
ItemStack[] contents = shulkerBoxBlock.getInventory().getContents();
diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml
index 4e29c7a..b3969e7 100644
--- a/src/main/resources/paper-plugin.yml
+++ b/src/main/resources/paper-plugin.yml
@@ -6,6 +6,14 @@ main: cn.infstar.essentialsC.EssentialsC
api-version: '1.21'
load: POSTWORLD
+# ProtocolLib 依赖(可选)
+dependencies:
+ server:
+ ProtocolLib:
+ load: BEFORE
+ required: false
+ join-classpath: true
+
authors: [ Coldsmiles_7 ]
website: www.infstar.cn