本帖最后由 yumc 于 2021-1-25 23:50 编辑


新插件发布 通过广告给服务器增加收入啦 活动期间 绑定服务器并达标的 免费获得10-100RMB的奖励
[经济]MiaoReward —— 喵式奖励 让玩家看广告为服务器提供收入吧[1.7.10+全版本]
==============================================================
本群每天定时发红包=>【圈云腐竹交流群】
==============================================================
  • 构建状态
  • 当前版本
  • 下载地址
  • 为了方便阅读 我对帖子进行了分页 请点击目录阅读!

如果发现有BUG 或者好的建议 欢迎提出https://git.yumc.pw/502647092/MiaoMenu/issues

本插件所用所有代码均为原创,不存在借用/抄袭等行为

Miao系列插件



MiaoMenu 基本介绍

MiaoMenu 是基于 PlaceholderAPI 插件开发的高度自定义的菜单插件

起源

  • 这里解释一下 之前这个菜单是众筹开发的 也就是收费的为何最近公开了呐
  • 因为要重构这个插件 出3.0版本 两个版本差距比较大
  • 考虑到老版本丢了 不如造福大众 就放出来了
  • 之前购买的不要担心 你们将会免费获得3.0的版本 具体更新请见更新日志

http://w.yumc.pw/zc/MiaoMenu.html 如果觉得插件对您有用 欢迎打赏

MiaoMenu 能干什么?

  • 制作最基本的菜单
  • 制作服务器队列传送
  • 制作超屌的抽奖菜单
  • 制作一个动画菜单
  • 制作一个自定义合成界面
  • 制作一个开箱菜单
  • 制作一个签到界面
  • 等等...

MiaoMenu 使用方法

首先 我会分为三部分来展示菜单的功能 因为自定义强度比较高 涉及到的内容也比较多 照顾一下新手腐竹 以及不会编程的腐竹

插件内部提供了三个实例菜单供大家参考 可能很多人还是不会写 我这里分开讲解一下

注: 凡是支持PAPI变量的地方都会用 % 标注

先来一个案例菜单配置 这个配置包含了大部分示例

  1. #############################################
  2. ###### 喵式菜单示例配置以及说明 #############
  3. ###### 请不要修改使用当前文件!!  ############
  4. ###### 此文件仅用于演示 版本更新会变动 ######
  5. #############################################
  6. Version: 1.0
  7. #------------- 处理器(handler)解释 -------------
  8. # 该部分仅针对熟悉JavaScript和BukkitAPI的人设计
  9. # 普通人员请勿修改 以免造成插件运行错误
  10. # 所有的 handler 可以为空 将使用默认值
  11. # 默认 菜单 => menu.js 按钮 => button.js
  12. # 如果 handler 以 file: 开头 则去 插件目录下的 handler 寻找对应名称的 js 文件
  13. # 当然 handler 也可直接填写JS 不过最好加上 load(__HANDLER__ + 'common.js'); 载入公共方法
  14. #
  15. #------------- 表达式(requirement)解释 -------------
  16. # 表达式(requirement) 用于返回结果让插件判断下一步操作 返回值只能为 布尔值(boolean) 或者数值 JS会自动转换
  17. # 表达式需要用单引号 ' 包含
  18. # 表达式内部的字符串需要用双引号 " 包含
  19. # ### 表达式可用参数 #####################################################
  20. # # menu => 菜单对象 方法详见 menu.js 可以在表达式调用
  21. # # player => 玩家对象 下方列出简单使用方法 具体详见 BukkitAPI 文档
  22. # #           player.hasPermission('MiaoMenu.default'); 判断玩家是否有权限
  23. # # bukkit => Bukkit对象 具体详见 BukkitAPI 文档
  24. # ########################################################################
  25. #表达式可以使用PAPI变量 使用的时候会自动解析
  26. #
  27. #------------- 命令(commands和deny_commands)解释 -------------
  28. # 命令目前共有 7 种形式 标准格式为 '[关键词] 参数' 中间必须有空格!!!
  29. # [close] 关闭菜单
  30. # [message] 给玩家发送命令
  31. # [command] 玩家执行命令
  32. # [console] 控制台执行命令
  33. # [op] 玩家以OP权限执行命令
  34. # [open] 打开其他菜单
  35. # [connect] 连接到其他服务器
  36. # [js] 执行 JS 脚本
  37. # ### Player 扩展方法 ####################################################
  38. # # player.sendMessage('消息'); 向玩家发送消息 直接用 message 也可以
  39. # # player.setAllowFlight(true); 设置玩家允许飞行
  40. # # player.setVelocity(player.getVelocity().setY(5)); 把玩家弹射上天
  41. # ########################################################################
  42. #
  43. #------------- %mjs_xxx%变量解释 -------------
  44. # %mjs_xxx%是MiaoMenu自带的JavaScript计算脚本
  45. # 变量位于javascript.yml配置文件
  46. # js文件存储于js文件夹
  47. # 为了保证动态物品不过于复杂
  48. # 动态变量只支持PAPI替换 不直接运行JS
  49. # 需要计算生成变量请配置mjs脚本
  50. #
  51. # 算了 太多了 不写了 有问题问 QQ: 502647092 或者支付宝 admin@yumc.pw
  52. #
  53. #菜单名称
  54. menu_title: '&6示例菜单'
  55. #处理器 不填则默认为config.yml中的MenuHandler
  56. handler: 'file:menu.js'
  57. #按钮处理器 不填则默认为config.yml中的ButtonHandler
  58. button_handler: 'file:button.js'
  59. #菜单打开类型
  60. #默认值为CHEST 如果设定了类型 size 选项将无效
  61. #可选的值为 CHEST, DISPENSER, DROPPER, FURNACE, WORKBENCH, CRAFTING, ENCHANTING, BREWING, PLAYER, CREATIVE, MERCHANT, ENDER_CHEST, ANVIL, BEACON, HOPPER
  62. #inventory_type: 'CHEST'
  63. #箱子大小 必须是9的倍数 最大为54
  64. size: 27
  65. #打开检测 失败则不打开菜单
  66. open:
  67.   #表达式
  68.   requirement: 'player.hasPermission("MiaoMenu.admin")'
  69.   #检测通过执行命令
  70.   commands:
  71.   - '[sound] BLOCK_CHEST_OPEN'
  72.   - '[message] &a你打开了 &bExample &a菜单!'
  73.   #检测失败执行命令
  74.   deny_commands:
  75.   - '[message] &c你没有打开这个菜单的权限!'
  76. #点击检测 全局的 所有按钮点击前会执行 如果检测失败就不会执行按钮的操作
  77. click:
  78.   #表达式
  79.   requirement: 'true'
  80.   #检测通过执行命令
  81.   commands:
  82.   - '[sound] UI_BUTTON_CLICK'
  83.   - '[message] &a你点击了一个按钮!'
  84. #关闭检测 关闭无法被阻止 只能被动关闭
  85. #但是如果 requirement 返回了 false 将会再次打开菜单
  86. #当然 你也可以返回 true 然后在 commands 里新增一条 '[open] example'
  87. close:
  88.   #表达式
  89.   requirement: 'player.hasPermission("MiaoMenu.admin")'
  90.   #检测通过执行命令
  91.   commands:
  92.   - '[sound] BLOCK_CHEST_CLOSE'
  93.   - '[message] &a你关闭了 &bExample &a菜单!'
  94.   #检测失败执行命令
  95.   deny_commands:
  96.   - '[message] &c虽然你没有这个菜单的权限!'
  97.   - '[message] &c但我不知道你是怎么打开的!'
  98.   - '[message] &c既然打开了那就不用关闭了!'
  99. #窗口操作定义
  100. window:
  101.   #点击窗口左边空白处执行
  102.   left:
  103.     #表达式
  104.     requirement: 'player.hasPermission("MiaoMenu.admin")'
  105.     #检测通过执行命令
  106.     commands:
  107.     - '[message] &a你以管理员的身份左击了面板!'
  108.     #检测失败执行命令
  109.     deny_commands:
  110.     - '[message] &c你以玩家的身份左击了面板!'
  111.   #点击窗口左边空白处执行
  112.   right:
  113.     #表达式
  114.     requirement: 'player.hasPermission("MiaoMenu.admin")'
  115.     #检测通过执行命令
  116.     commands:
  117.     - '[message] &a你以管理员的身份右击了面板!'
  118.     #检测失败执行命令
  119.     deny_commands:
  120.     - '[message] &c你以玩家的身份右击了面板!'
  121. #自定义打开命令
  122. command: 'example'
  123. #动态刷新菜单 异步执行 不用担心卡主线程
  124. #实时刷新频率 单位 Tick 不写或者0 则不自动刷新
  125. update: 20
  126. #重新计算优先级(仅在update开启下有效 可能会轻微增加CPU)
  127. rebuild: false
  128. #菜单按钮
  129. button:
  130.   #按钮名称(插件内部使用 必须唯一)
  131.   btn1:
  132.     #处理器 不填则默认为菜单中配置的button_handler
  133.     handler: 'file:button.js'
  134.     #物品位置(0开始)
  135.     slot: 0
  136.     #优先级
  137.     priority: 1
  138.     #显示条件
  139.     view_requirement: 'player.hasPermission("MiaoMenu.default")'
  140.     #按钮
  141.     icon:
  142.       #物品类型或者ID(格式 类型:子类型) 注意: 如果存在变量 必须用动态类型
  143.       type: WOOL:13
  144.       #动态类型(如果定义 则 type 无效 若解析失败则使用 type 或默认 STONE)
  145.       dynamic_type: '%mjs_server_type%'
  146.       #物品数量
  147.       amount: 2
  148.       #动态数量(如果定义 则 amount 无效 若解析失败则使用 amount 或默认 1)
  149.       dynamic_amount: '%server_online%'
  150.       #显示名称
  151.       display_name: '&6在线人数: &b%server_online%'
  152.       #物品Lore
  153.       lore:
  154.       - '&6累计玩家: &a%server_unique_joins%'
  155.       - '&6运行时间: &a%server_uptime%'
  156.       - '&6使用内存: &a%server_ram_used%MB'
  157.       - '&6最大内存: &a%server_ram_max%MB'
  158.       #物品附魔(名称自行百度) 格式 附魔名称:等级
  159.       #ench:
  160.       #- 'DURABILITY:1'
  161.       #
  162.       #物品flag 仅限Spigot1.8+
  163.       #HIDE_ENCHANTS=>设置是否显示 附魔
  164.       #HIDE_ATTRIBUTES=>设置是否显示 属性 例如伤害
  165.       #HIDE_UNBREAKABLE=>设置是否显示 无法破坏
  166.       #HIDE_DESTROYS=>设置是否显示 破坏或修复
  167.       #HIDE_PLACED_ON=>设置是否显示 放置或建造
  168.       #HIDE_POTION_EFFECTS=>设置是否显示 药水状态
  169.       #flag:
  170.       #- 'HIDE_ATTRIBUTES'
  171.       #- 'HIDE_ENCHANTS'
  172.     #左键点击
  173.     left_click:
  174.       #点击执行要求
  175.       requirement: '"%player_name%" == "Mr_jtb"'
  176.       #检测通过执行命令
  177.       commands:
  178.       - '[close]'
  179.       - '[message] &a你是插件作者!'
  180.       - |
  181.         [js]
  182.         player.setHealth(20);
  183.         player.setFoodLevel(20);
  184.         actionbar.broadcast("&c热烈欢迎! &eMiaoMenu &6作者: &bMr_jtb")
  185.       #检测失败执行命令
  186.       deny_commands:
  187.       - '[close]'
  188.       - '[message] &c你不是插件作者 即将被弹射上天!'
  189.       - |
  190.         [js]
  191.         player.setHealth(10);
  192.         player.setVelocity(player.getVelocity().setY(10));
  193.     right_click:
  194.       requirement: 'player.hasPermission("MiaoMenu.admin")'
  195.       commands:
  196.       - '[close]'
  197.       - '[message] &a你有权限点击这个物品!'
  198.       deny_commands:
  199.       - '[close]'
  200.       - '[message] &c你没有权限点击这个物品!'
  201.   #用于演示刷新日期
  202.   time:
  203.     slot: 1
  204.     icon:
  205.       type: 347
  206.       display_name: '&6当前时间: &b%mjs_now%'
  207.   #用于购买操作
  208.   heal:
  209.     slot: 2
  210.     icon:
  211.       type: 260
  212.       display_name: '&b花费 &e100 &d治疗自身'
  213.     #左键点击
  214.     left_click:
  215.       #点击执行要求
  216.       requirement: 'vault.money.has(player,100)'
  217.       #检测通过执行命令
  218.       commands:
  219.       - '[close]'
  220.       - '[js] file: heal.js'
  221.       #检测失败执行命令
  222.       deny_commands:
  223.       - '[close]'
  224.       - '[js] log.sender(player,"&c没钱治疗个篮子!")'
  225.   #头颅显示
  226.   head:
  227.     slot: 3
  228.     icon:
  229.       display_name: '&6玩家 &a%player_name% &6的头颅 '
  230.       #头颅格式 head:玩家名称 注意: 如果存在变量 必须用动态类型
  231.       #头颅还支持直接设置材质 格式为 head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ==
  232.       dynamic_type: 'head:%player_name%'
  233.       #dynamic_type: 'head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ=='
  234.   headbase:
  235.     slot: 12
  236.     icon:
  237.       display_name: '&6通过材质显示的头颅 '
  238.       dynamic_type: 'head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ=='
  239.   color1:
  240.     slot: 4
  241.     icon:
  242.       display_name: '&6皮革染色实例'
  243.       #染色格式 color:物品类型:红色,绿色,蓝色 注意: 如果存在变量 必须用动态类型
  244.       dynamic_type: 'color:LEATHER_CHESTPLATE:0,255,0'
  245.   color2:
  246.     slot: 5
  247.     icon:
  248.       display_name: '&6皮革染色实例'
  249.       #染色格式 color:物品类型:#十六进制颜色 注意: 如果存在变量 必须用动态类型
  250.       dynamic_type: 'color:LEATHER_CHESTPLATE:#33FF66'
  251.   ##为了兼容老版本 旗帜只能在1.8以上版本使用 请自行配置
  252.   banner:
  253.     slot: 6
  254.     icon:
  255.       display_name: '&6旗帜实例'
  256.       #旗帜格式 banner:旗帜颜色,旗帜图标;旗帜颜色,旗帜图标
  257.       #             冒号     逗号     分号
  258.       #注意: 如果存在变量 必须用动态类型
  259.       dynamic_type: 'banner:WHITE,BASE;ORANGE,CREEPER'
  260.   #默认按钮配置 用于某一个slot的view_requirement全都不通过时显示 当然 这个也支持view_requirement检测
  261.   default:
  262.     slot: 998
  263.     view_requirement: 'player.hasPermission("MiaoMenu.default")'
  264.     icon:
  265.       display_name: '&c默认按钮配置'
  266.       type: 'EYE_OF_ENDER'
  267.       lore:
  268.       - '&c这个格子的所有检查都未通过'
  269.       - '&e所以显示了这个按钮'
  270.   #默认按钮配置测试
  271.   defaulttest:
  272.     slot: 7
  273.     view_requirement: '"player.getName()"=="不存在"'
  274.     icon:
  275.       display_name: '&c默认按钮测试'
  276.       type: 'STONE'
  277.   serverinfo:
  278.     slot: 8
  279.     icon:
  280.       display_name: '&b测试服务器在线情况'
  281.       type: '341'
  282.       lore:
  283.       - '%mjs_server_info#server.yumc.pw%'
复制代码

MiaoMenu 基础配置

MiaoMenu 菜单信息

  • menu_title %
    • 这个很好理解不解释了
  • handler [url=]菜单处理器[/url]
    • 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
  • button_handler[url=]按钮处理器[/url]
    • 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
  • inventory_typesize 箱子类型和箱子大小
    • 这两个参数同时配置时 inventory_type 生效 size 配置无效
    • inventory_type 箱子类型
      • 支持所有的箱子类型 可用的值有 [CHEST, DISPENSER, DROPPER, FURNACE, WORKBENCH, CRAFTING, ENCHANTING, BREWING, PLAYER, CREATIVE, MERCHANT, ENDER_CHEST, ANVIL, BEACON, HOPPER] (部分值可能无法使用 自行测试)
      • 默认为 CHEST
  • size 箱子大小 必须是9的倍数 最大为54 (可以超出 但是界面会很鬼畜)
  • open 打开菜单之前的检查块
  • window 点击窗体的检查
    • left 左键点击检查块
    • right 右键点击检查块
  • command 自定义打开命令
  • update: 20
    • 动态刷新菜单 异步执行 不用担心卡主线程
    • 实时刷新频率 单位 Tick 不写或者0 则不自动刷新
  • rebuild
    • 重新计算优先级(仅在update开启下有效 可能会轻微增加CPU)
  • button 按钮列表 包含一系列的按扭

MiaoMenu 命令(指令)

  • 这个命令并不是 Minecraft 里面的命令 而是 MiaoMenu 的命令 目前包含下列几个可用的命令 开发者可以自行扩展
    • [close] 关闭菜单
    • [message] 给玩家发送消息
    • [console] 控制台执行命令
    • [command] 玩家执行命令
    • [op] 玩家以OP的权限执行命令
    • [open] 打开另一个菜单
    • [js] 执行JS脚本 这个指令可以完成上面所有的操作 功能强大 但是比较复杂 需要有一定的编程能力
    • [connect] 连接到另一个服务器 (BungeeCord支持)

MiaoMenu 配置块

条件检查

这里先讲一下最常用的配置块(条件检查块)

  1. #点击执行要求
  2. requirement: '"%player_name%" == "Mr_jtb"'
  3. #检测通过执行命令
  4. commands:
  5. - '[close]'
  6. - '[message] &a你是插件作者!'
  7. - |
  8. [js]
  9. player.setHealth(20);
  10. player.setFoodLevel(20);
  11. actionbar.broadcast("&c热烈欢迎! &eMiaoMenu &6作者: &bMr_jtb")
  12. #检测失败执行命令
  13. deny_commands:
  14. - '[close]'
  15. - '[message] &c你不是插件作者 即将被弹射上天!'
  16. - |
  17. [js]
  18. player.setHealth(10);
  19. player.setVelocity(player.getVelocity().setY(10));
复制代码

  • 每一个配置块都包含三个字段
    • requirement % 条件检查
    • commands % 通过检查执行的 MiaoMenu命令 列表
    • deny_commands % 未通过检查执行的 MiaoMenu命令 列表
  • 大部分操作都支持这个检查块
    • 打开菜单 open
    • 点击按钮 click
    • 等等... 我会把支持的地方都指向这个链接的

点击

  1. #窗口操作定义
  2. window:
  3.   #点击窗口左边空白处执行
  4.   left:
  5.     <<: *条件检查块
  6.   #点击窗口左边空白处执行
  7.   right:
  8.     <<: *条件检查块
复制代码

  • 这里的点击包含了所有的点击
    • click 包含下列所有操作
    • left 左键
    • right 右键
    • middle 中键
    • shift_left 按住 Shift 然后左键
    • shift_right 按住 Shift 然后右键
    • 具体处理逻辑如下 默认按钮处理器
  • 每个点击块下方 有且只有条件检查块

物品

  1. icon:
  2.   #物品类型或者ID(格式 类型:子类型) 注意: 如果存在变量 必须用动态类型
  3.   type: WOOL:13
  4.   #动态类型(如果定义 则 type 无效 若解析失败则使用 type 或默认 STONE)
  5.   dynamic_type: '%mjs_server_type%'
  6.   #物品数量
  7.   amount: 2
  8.   #动态数量(如果定义 则 amount 无效 若解析失败则使用 amount 或默认 1)
  9.   dynamic_amount: '%server_online%'
  10.   #显示名称
  11.   display_name: '&6在线人数: &b%server_online%'
  12.   #物品Lore
  13.   lore:
  14.   - '&6累计玩家: &a%server_unique_joins%'
  15.   - '&6运行时间: &a%server_uptime%'
  16.   - '&6使用内存: &a%server_ram_used%MB'
  17.   - '&6最大内存: &a%server_ram_max%MB'
  18.   #物品附魔(名称自行百度) 格式 附魔名称:等级
  19.   ench:
  20.   - 'DURABILITY:1'
  21.   #物品flag 仅限Spigot1.8+
  22.   #HIDE_ENCHANTS=>设置是否显示 附魔
  23.   #HIDE_ATTRIBUTES=>设置是否显示 属性 例如伤害
  24.   #HIDE_UNBREAKABLE=>设置是否显示 无法破坏
  25.   #HIDE_DESTROYS=>设置是否显示 破坏或修复
  26.   #HIDE_PLACED_ON=>设置是否显示 放置或建造
  27.   #HIDE_POTION_EFFECTS=>设置是否显示 药水状态
  28.   flag:
  29.   - 'HIDE_ATTRIBUTES'
  30.   - 'HIDE_ENCHANTS'
复制代码

  • 物品块 用于显示给玩家看 每一个按钮都会包含一个物品块
  • 物品块配置如下
    • type 物品类型
    • dynamic_type % 动态物品类型
      • 用于覆盖 type 会进行动态解析
      • 必须返回有效的 物品枚举
      • 如果无效 则默认使用 STONE
    • amount 物品数量
    • dynamic_amount % 动态物品数量
      • 用于覆盖 amount 会进行动态解析
      • 必须返回数字
      • 如果无效 则默认使用 1
    • display_name % 物品显示名称
    • lore % 物品的展示LORE
      • 支持 \n 换行
    • ench 附魔配置
      • 格式为 附魔名称:等级 具体请查询 Minecraft 官方文档
    • flag 附加属性 可选值如下
      • HIDE_ENCHANTS       =>设置是否显示 附魔
      • HIDE_ATTRIBUTES     =>设置是否显示 属性 例如伤害
      • HIDE_UNBREAKABLE    =>设置是否显示 无法破坏
      • HIDE_DESTROYS       =>设置是否显示 破坏或修复
      • HIDE_PLACED_ON      =>设置是否显示 放置或建造
      • HIDE_POTION_EFFECTS =>设置是否显示 药水状态

按扭

  1. #按钮名称(插件内部使用 必须唯一)
  2. btn1:
  3.   #处理器 不填则默认为菜单中配置的button_handler
  4.   handler: 'file:button.js'
  5.   #物品位置(0开始)
  6.   slot: 0
  7.   #优先级
  8.   priority: 1
  9.   #显示条件
  10.   view_requirement: 'player.hasPermission("MiaoMenu.default")'
  11.   #按钮
  12.   icon:
  13.     <<: *物品块
  14.   #左键点击
  15.   left_click:
  16.     <<: *条件检查块
  17.   right_click:
  18.     <<: *条件检查块
复制代码

  • 菜单上的每一个格子都是一个按钮
  • 按钮配置如下
    • handler 按钮处理器 每个按钮可以单独配置 如果不配置 默认使用菜单的按钮处理器
    • slot 插槽配置 用于指定显示的位置 从 0 开始
    • slots 多插槽配置 用于复制按钮 用 , 分割 比如 配置了 0,1,2,3,4,5,6,7,8 那么 第一排都会显示这个按钮
    • priority 优先级(好像还不支持 不过通过view_requirement检测就好了)
    • view_requirement 用于检测这个按钮是否显示
      • 如果同一个slot存在多个按钮 就会按照priority优先级进行检测
      • 如果都检测不通过 则会尝试获取 default 按钮 获取到则展示默认按钮
    • icon 详见 物品块
    • left_click 之类的请参考点击块和条件检查块




[groupid=1465]银河系气功协会[/groupid]