KaMenu API 文档¶
KaMenu 提供了公开 API,允许其他插件打开 KaMenu 菜单。
API 类¶
org.katacr.kamenu.api.KaMenuAPI¶
方法¶
openMenu(Player player, String menuId)¶
打开指定的菜单。
参数:
player- 目标玩家menuId- 菜单 ID(如 "main_menu" 或 "shop/weapons")
返回值:
boolean- 是否成功打开菜单
示例:
import org.katacr.kamenu.api.KaMenuAPI
import org.bukkit.entity.Player
// 打开主菜单
val success = KaMenuAPI.openMenu(player, "main_menu")
if (!success) {
player.sendMessage("§c打开菜单失败!")
}
// 打开子文件夹菜单
KaMenuAPI.openMenu(player, "shop/weapons")
import org.katacr.kamenu.api.KaMenuAPI;
import org.bukkit.entity.Player;
// 打开主菜单
boolean success = KaMenuAPI.openMenu(player, "main_menu");
if (!success) {
player.sendMessage("§c打开菜单失败!");
}
// 打开子文件夹菜单
KaMenuAPI.openMenu(player, "shop/weapons");
isAvailable()¶
检查 KaMenu 是否已加载。
返回值:
boolean- KaMenu 是否可用
示例:
if (KaMenuAPI.isAvailable()) {
KaMenuAPI.openMenu(player, "main_menu")
} else {
player.sendMessage("§cKaMenu 插件未安装或未启用")
}
getPlugin()¶
获取 KaMenu 插件实例。
返回值:
KaMenuPlugin- KaMenu 插件实例,如果未加载则返回 null
在其他插件中使用¶
方法 1:直接使用反射(无需依赖)¶
如果你的插件不需要直接依赖 KaMenu,可以使用反射调用 API:
fun openKaMenu(player: Player, menuId: String): Boolean {
try {
val kaMenuPlugin = player.server.pluginManager.getPlugin("KaMenu")
if (kaMenuPlugin == null) {
player.sendMessage("§cKaMenu 插件未安装或未启用")
return false
}
val apiClass = Class.forName("org.katacr.kamenu.api.KaMenuAPI")
val openMenuMethod = apiClass.getMethod("openMenu", org.bukkit.entity.Player::class.java, String::class.java)
val result = openMenuMethod.invoke(null, player, menuId)
return result == true
} catch (e: Exception) {
e.printStackTrace()
return false
}
}
方法 2:添加依赖(推荐)¶
如果希望使用类型安全的 API,可以在 plugin.yml 中添加 KaMenu 作为依赖:
name: YourPlugin
version: 1.0.0
main: com.yourname.yourplugin.Main
api-version: "1.21"
depend:
- KaMenu
然后直接使用:
import org.katacr.kamenu.api.KaMenuAPI
fun openShop(player: Player) {
KaMenuAPI.openMenu(player, "shop/weapons")
}
在动作中使用¶
KaGuilds 插件已经集成了 KaMenu API,可以在菜单配置中使用 kamenu: 动作:
# KaGuilds 菜单配置示例
guild_manage:
type: NOTICE
layout: ...
buttons:
kamenu_demo:
icon: BOOK
text: "&a打开 KaMenu 演示菜单"
actions:
right:
- 'kamenu: condition_demo'
left:
- 'tell: &a正在打开 KaMenu 菜单...'
- 'kamenu: example/actions_demo'
注意事项¶
- 插件依赖:确保 KaMenu 已安装并启用
- 菜单存在:确保要打开的菜单 ID 存在
- 异步调用:API 方法本身是同步的,但在某些情况下可能需要异步调用
- 错误处理:建议添加适当的错误处理,以便在 API 调用失败时提供反馈
完整示例¶
以下是一个完整的插件示例,展示如何使用 KaMenu API:
package com.example.plugin
import org.bukkit.plugin.java.JavaPlugin
import org.bukkit.command.Command
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.katacr.kamenu.api.KaMenuAPI
class ExamplePlugin : JavaPlugin() {
override fun onEnable() {
logger.info("ExamplePlugin 已启用")
// 检查 KaMenu 是否可用
if (!KaMenuAPI.isAvailable()) {
logger.warning("KaMenu 插件未安装,部分功能将不可用")
}
}
override fun onCommand(
sender: CommandSender,
command: Command,
label: String,
args: Array<out String>
): Boolean {
if (command.name.equals("openmenu", ignoreCase = true)) {
if (sender !is Player) {
sender.sendMessage("§c该指令只能由玩家执行")
return true
}
if (!KaMenuAPI.isAvailable()) {
sender.sendMessage("§cKaMenu 插件未安装或未启用")
return true
}
val menuId = if (args.isNotEmpty()) args[0] else "main_menu"
val success = KaMenuAPI.openMenu(sender, menuId)
if (success) {
sender.sendMessage("§a成功打开菜单: $menuId")
} else {
sender.sendMessage("§c打开菜单失败,请检查菜单 ID 是否正确")
}
return true
}
return false
}
}
对应的 plugin.yml: