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