新插件发布 通过广告给服务器增加收入啦 活动期间 绑定服务器并达标的 免费获得10-100RMB的奖励
[经济]MiaoReward —— 喵式奖励 让玩家看广告为服务器提供收入吧[1.7.10+全版本]
==============================================================
本群每天定时发红包=>【圈云腐竹交流群】
==============================================================
如果发现有BUG 或者好的建议 欢迎提出https://git.yumc.pw/502647092/MiaoMenu/issues
本插件所用所有代码均为原创,不存在借用/抄袭等行为
Miao系列插件
- [经济]MiaoReward —— 喵式奖励 让玩家看广告为服务器提供收入吧[1.7.10+全版本]
- [编程]MiaoBlockly —— 喵式积木 用简单的积木来写插件吧[1.12.2+全版本]
- [编程]MiaoConsole —— 喵式终端 通过MC端口直接控制服务器 调试插件[1.12.2+全版本]
- [管理]MiaoBind —— 喵式绑定 兼容SoulBound的绑定插件 支持自定义关键词[1.7+全版本]
- [信息]MiaoBoard —— 喵式记分板 自定义动态记分板[1.7+全版本]
- [聊天]MiaoChat —— 喵式聊天 多功能自定义聊天格式 新增支持跨服[1.7.10+全版本]
- [菜单]MiaoMenu —— 喵式菜单 强大的自定义菜单 支持多种自定义操作[1.7+全版本]
- [管理]YUM —— 全能的服务器插件管理工具 全自动安装插件 更新插件[1.7.2+全版本]
MiaoMenu 基本介绍
MiaoMenu 是基于 PlaceholderAPI 插件开发的高度自定义的菜单插件
起源
- 这里解释一下 之前这个菜单是众筹开发的 也就是收费的为何最近公开了呐
- 因为要重构这个插件 出3.0版本 两个版本差距比较大
- 考虑到老版本丢了 不如造福大众 就放出来了
- 之前购买的不要担心 你们将会免费获得3.0的版本 具体更新请见更新日志
http://w.yumc.pw/zc/MiaoMenu.html 如果觉得插件对您有用 欢迎打赏
MiaoMenu 能干什么?
- 制作最基本的菜单
- 制作服务器队列传送
- 制作超屌的抽奖菜单
- 制作一个动画菜单
- 制作一个自定义合成界面
- 制作一个开箱菜单
- 制作一个签到界面
- 等等...
MiaoMenu 使用方法
首先 我会分为三部分来展示菜单的功能 因为自定义强度比较高 涉及到的内容也比较多 照顾一下新手腐竹 以及不会编程的腐竹
插件内部提供了三个实例菜单供大家参考 可能很多人还是不会写 我这里分开讲解一下
注: 凡是支持PAPI变量的地方都会用 % 标注
先来一个案例菜单配置 这个配置包含了大部分示例
- #############################################
- ###### 喵式菜单示例配置以及说明 #############
- ###### 请不要修改使用当前文件!! ############
- ###### 此文件仅用于演示 版本更新会变动 ######
- #############################################
- Version: 1.0
- #------------- 处理器(handler)解释 -------------
- # 该部分仅针对熟悉JavaScript和BukkitAPI的人设计
- # 普通人员请勿修改 以免造成插件运行错误
- # 所有的 handler 可以为空 将使用默认值
- # 默认 菜单 => menu.js 按钮 => button.js
- # 如果 handler 以 file: 开头 则去 插件目录下的 handler 寻找对应名称的 js 文件
- # 当然 handler 也可直接填写JS 不过最好加上 load(__HANDLER__ + 'common.js'); 载入公共方法
- #
- #------------- 表达式(requirement)解释 -------------
- # 表达式(requirement) 用于返回结果让插件判断下一步操作 返回值只能为 布尔值(boolean) 或者数值 JS会自动转换
- # 表达式需要用单引号 ' 包含
- # 表达式内部的字符串需要用双引号 " 包含
- # ### 表达式可用参数 #####################################################
- # # menu => 菜单对象 方法详见 menu.js 可以在表达式调用
- # # player => 玩家对象 下方列出简单使用方法 具体详见 BukkitAPI 文档
- # # player.hasPermission('MiaoMenu.default'); 判断玩家是否有权限
- # # bukkit => Bukkit对象 具体详见 BukkitAPI 文档
- # ########################################################################
- #表达式可以使用PAPI变量 使用的时候会自动解析
- #
- #------------- 命令(commands和deny_commands)解释 -------------
- # 命令目前共有 7 种形式 标准格式为 '[关键词] 参数' 中间必须有空格!!!
- # [close] 关闭菜单
- # [message] 给玩家发送命令
- # [command] 玩家执行命令
- # [console] 控制台执行命令
- # [op] 玩家以OP权限执行命令
- # [open] 打开其他菜单
- # [connect] 连接到其他服务器
- # [js] 执行 JS 脚本
- # ### Player 扩展方法 ####################################################
- # # player.sendMessage('消息'); 向玩家发送消息 直接用 message 也可以
- # # player.setAllowFlight(true); 设置玩家允许飞行
- # # player.setVelocity(player.getVelocity().setY(5)); 把玩家弹射上天
- # ########################################################################
- #
- #------------- %mjs_xxx%变量解释 -------------
- # %mjs_xxx%是MiaoMenu自带的JavaScript计算脚本
- # 变量位于javascript.yml配置文件
- # js文件存储于js文件夹
- # 为了保证动态物品不过于复杂
- # 动态变量只支持PAPI替换 不直接运行JS
- # 需要计算生成变量请配置mjs脚本
- #
- # 算了 太多了 不写了 有问题问 QQ: 502647092 或者支付宝 admin@yumc.pw
- #
- #菜单名称
- menu_title: '&6示例菜单'
- #处理器 不填则默认为config.yml中的MenuHandler
- handler: 'file:menu.js'
- #按钮处理器 不填则默认为config.yml中的ButtonHandler
- button_handler: 'file:button.js'
- #菜单打开类型
- #默认值为CHEST 如果设定了类型 size 选项将无效
- #可选的值为 CHEST, DISPENSER, DROPPER, FURNACE, WORKBENCH, CRAFTING, ENCHANTING, BREWING, PLAYER, CREATIVE, MERCHANT, ENDER_CHEST, ANVIL, BEACON, HOPPER
- #inventory_type: 'CHEST'
- #箱子大小 必须是9的倍数 最大为54
- size: 27
- #打开检测 失败则不打开菜单
- open:
- #表达式
- requirement: 'player.hasPermission("MiaoMenu.admin")'
- #检测通过执行命令
- commands:
- - '[sound] BLOCK_CHEST_OPEN'
- - '[message] &a你打开了 &bExample &a菜单!'
- #检测失败执行命令
- deny_commands:
- - '[message] &c你没有打开这个菜单的权限!'
- #点击检测 全局的 所有按钮点击前会执行 如果检测失败就不会执行按钮的操作
- click:
- #表达式
- requirement: 'true'
- #检测通过执行命令
- commands:
- - '[sound] UI_BUTTON_CLICK'
- - '[message] &a你点击了一个按钮!'
- #关闭检测 关闭无法被阻止 只能被动关闭
- #但是如果 requirement 返回了 false 将会再次打开菜单
- #当然 你也可以返回 true 然后在 commands 里新增一条 '[open] example'
- close:
- #表达式
- requirement: 'player.hasPermission("MiaoMenu.admin")'
- #检测通过执行命令
- commands:
- - '[sound] BLOCK_CHEST_CLOSE'
- - '[message] &a你关闭了 &bExample &a菜单!'
- #检测失败执行命令
- deny_commands:
- - '[message] &c虽然你没有这个菜单的权限!'
- - '[message] &c但我不知道你是怎么打开的!'
- - '[message] &c既然打开了那就不用关闭了!'
- #窗口操作定义
- window:
- #点击窗口左边空白处执行
- left:
- #表达式
- requirement: 'player.hasPermission("MiaoMenu.admin")'
- #检测通过执行命令
- commands:
- - '[message] &a你以管理员的身份左击了面板!'
- #检测失败执行命令
- deny_commands:
- - '[message] &c你以玩家的身份左击了面板!'
- #点击窗口左边空白处执行
- right:
- #表达式
- requirement: 'player.hasPermission("MiaoMenu.admin")'
- #检测通过执行命令
- commands:
- - '[message] &a你以管理员的身份右击了面板!'
- #检测失败执行命令
- deny_commands:
- - '[message] &c你以玩家的身份右击了面板!'
- #自定义打开命令
- command: 'example'
- #动态刷新菜单 异步执行 不用担心卡主线程
- #实时刷新频率 单位 Tick 不写或者0 则不自动刷新
- update: 20
- #重新计算优先级(仅在update开启下有效 可能会轻微增加CPU)
- rebuild: false
- #菜单按钮
- button:
- #按钮名称(插件内部使用 必须唯一)
- btn1:
- #处理器 不填则默认为菜单中配置的button_handler
- handler: 'file:button.js'
- #物品位置(0开始)
- slot: 0
- #优先级
- priority: 1
- #显示条件
- view_requirement: 'player.hasPermission("MiaoMenu.default")'
- #按钮
- icon:
- #物品类型或者ID(格式 类型:子类型) 注意: 如果存在变量 必须用动态类型
- type: WOOL:13
- #动态类型(如果定义 则 type 无效 若解析失败则使用 type 或默认 STONE)
- dynamic_type: '%mjs_server_type%'
- #物品数量
- amount: 2
- #动态数量(如果定义 则 amount 无效 若解析失败则使用 amount 或默认 1)
- dynamic_amount: '%server_online%'
- #显示名称
- display_name: '&6在线人数: &b%server_online%'
- #物品Lore
- lore:
- - '&6累计玩家: &a%server_unique_joins%'
- - '&6运行时间: &a%server_uptime%'
- - '&6使用内存: &a%server_ram_used%MB'
- - '&6最大内存: &a%server_ram_max%MB'
- #物品附魔(名称自行百度) 格式 附魔名称:等级
- #ench:
- #- 'DURABILITY:1'
- #
- #物品flag 仅限Spigot1.8+
- #HIDE_ENCHANTS=>设置是否显示 附魔
- #HIDE_ATTRIBUTES=>设置是否显示 属性 例如伤害
- #HIDE_UNBREAKABLE=>设置是否显示 无法破坏
- #HIDE_DESTROYS=>设置是否显示 破坏或修复
- #HIDE_PLACED_ON=>设置是否显示 放置或建造
- #HIDE_POTION_EFFECTS=>设置是否显示 药水状态
- #flag:
- #- 'HIDE_ATTRIBUTES'
- #- 'HIDE_ENCHANTS'
- #左键点击
- left_click:
- #点击执行要求
- requirement: '"%player_name%" == "Mr_jtb"'
- #检测通过执行命令
- commands:
- - '[close]'
- - '[message] &a你是插件作者!'
- - |
- [js]
- player.setHealth(20);
- player.setFoodLevel(20);
- actionbar.broadcast("&c热烈欢迎! &eMiaoMenu &6作者: &bMr_jtb")
- #检测失败执行命令
- deny_commands:
- - '[close]'
- - '[message] &c你不是插件作者 即将被弹射上天!'
- - |
- [js]
- player.setHealth(10);
- player.setVelocity(player.getVelocity().setY(10));
- right_click:
- requirement: 'player.hasPermission("MiaoMenu.admin")'
- commands:
- - '[close]'
- - '[message] &a你有权限点击这个物品!'
- deny_commands:
- - '[close]'
- - '[message] &c你没有权限点击这个物品!'
- #用于演示刷新日期
- time:
- slot: 1
- icon:
- type: 347
- display_name: '&6当前时间: &b%mjs_now%'
- #用于购买操作
- heal:
- slot: 2
- icon:
- type: 260
- display_name: '&b花费 &e100 &d治疗自身'
- #左键点击
- left_click:
- #点击执行要求
- requirement: 'vault.money.has(player,100)'
- #检测通过执行命令
- commands:
- - '[close]'
- - '[js] file: heal.js'
- #检测失败执行命令
- deny_commands:
- - '[close]'
- - '[js] log.sender(player,"&c没钱治疗个篮子!")'
- #头颅显示
- head:
- slot: 3
- icon:
- display_name: '&6玩家 &a%player_name% &6的头颅 '
- #头颅格式 head:玩家名称 注意: 如果存在变量 必须用动态类型
- #头颅还支持直接设置材质 格式为 head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ==
- dynamic_type: 'head:%player_name%'
- #dynamic_type: 'head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ=='
- headbase:
- slot: 12
- icon:
- display_name: '&6通过材质显示的头颅 '
- dynamic_type: 'head:base:eyJ0aW1lc3RhbXAiOjE1MDAyNDk0MjE4MDYsInByb2ZpbGVJZCI6IjRkNjUzOGEyOWVlZjQxZTI4OGNlZTY5MzgwNjY3MGI3IiwicHJvZmlsZU5hbWUiOiIxNDUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NkNjgzNmRmNTAyM2ZlZThiNzY5NzVlNWJkYTk2MGIwMzQ4MTljMmNlODI2Mjg1N2JiNTZkNDI1NmY3ODMyIn19fQ=='
- color1:
- slot: 4
- icon:
- display_name: '&6皮革染色实例'
- #染色格式 color:物品类型:红色,绿色,蓝色 注意: 如果存在变量 必须用动态类型
- dynamic_type: 'color:LEATHER_CHESTPLATE:0,255,0'
- color2:
- slot: 5
- icon:
- display_name: '&6皮革染色实例'
- #染色格式 color:物品类型:#十六进制颜色 注意: 如果存在变量 必须用动态类型
- dynamic_type: 'color:LEATHER_CHESTPLATE:#33FF66'
- ##为了兼容老版本 旗帜只能在1.8以上版本使用 请自行配置
- banner:
- slot: 6
- icon:
- display_name: '&6旗帜实例'
- #旗帜格式 banner:旗帜颜色,旗帜图标;旗帜颜色,旗帜图标
- # 冒号 逗号 分号
- #注意: 如果存在变量 必须用动态类型
- dynamic_type: 'banner:WHITE,BASE;ORANGE,CREEPER'
- #默认按钮配置 用于某一个slot的view_requirement全都不通过时显示 当然 这个也支持view_requirement检测
- default:
- slot: 998
- view_requirement: 'player.hasPermission("MiaoMenu.default")'
- icon:
- display_name: '&c默认按钮配置'
- type: 'EYE_OF_ENDER'
- lore:
- - '&c这个格子的所有检查都未通过'
- - '&e所以显示了这个按钮'
- #默认按钮配置测试
- defaulttest:
- slot: 7
- view_requirement: '"player.getName()"=="不存在"'
- icon:
- display_name: '&c默认按钮测试'
- type: 'STONE'
- serverinfo:
- slot: 8
- icon:
- display_name: '&b测试服务器在线情况'
- type: '341'
- lore:
- - '%mjs_server_info#server.yumc.pw%'
MiaoMenu 基础配置
MiaoMenu 菜单信息
- menu_title %
- 这个很好理解不解释了
- 这个很好理解不解释了
- handler [url=]菜单处理器[/url]
- 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
- 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
- button_handler[url=]按钮处理器[/url]
- 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
- 这个部分暂时可以不管 到时候我会出专门的教程 可以做到兼容DM
- inventory_type 和 size 箱子类型和箱子大小
- 这两个参数同时配置时 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)
- 重新计算优先级(仅在update开启下有效 可能会轻微增加CPU)
- button 按钮列表 包含一系列的按扭
MiaoMenu 命令(指令)
- 这个命令并不是 Minecraft 里面的命令 而是 MiaoMenu 的命令 目前包含下列几个可用的命令 开发者可以自行扩展
- [close] 关闭菜单
- [message] 给玩家发送消息
- [console] 控制台执行命令
- [command] 玩家执行命令
- [op] 玩家以OP的权限执行命令
- [open] 打开另一个菜单
- [js] 执行JS脚本 这个指令可以完成上面所有的操作 功能强大 但是比较复杂 需要有一定的编程能力
- [connect] 连接到另一个服务器 (BungeeCord支持)
MiaoMenu 配置块
条件检查
这里先讲一下最常用的配置块(条件检查块)
- #点击执行要求
- requirement: '"%player_name%" == "Mr_jtb"'
- #检测通过执行命令
- commands:
- - '[close]'
- - '[message] &a你是插件作者!'
- - |
- [js]
- player.setHealth(20);
- player.setFoodLevel(20);
- actionbar.broadcast("&c热烈欢迎! &eMiaoMenu &6作者: &bMr_jtb")
- #检测失败执行命令
- deny_commands:
- - '[close]'
- - '[message] &c你不是插件作者 即将被弹射上天!'
- - |
- [js]
- player.setHealth(10);
- player.setVelocity(player.getVelocity().setY(10));
- 每一个配置块都包含三个字段
- requirement % 条件检查
- commands % 通过检查执行的 MiaoMenu命令 列表
- deny_commands % 未通过检查执行的 MiaoMenu命令 列表
- 大部分操作都支持这个检查块
- 打开菜单 open
- 点击按钮 click
- 等等... 我会把支持的地方都指向这个链接的
点击
- #窗口操作定义
- window:
- #点击窗口左边空白处执行
- left:
- <<: *条件检查块
- #点击窗口左边空白处执行
- right:
- <<: *条件检查块
- 这里的点击包含了所有的点击
- click 包含下列所有操作
- left 左键
- right 右键
- middle 中键
- shift_left 按住 Shift 然后左键
- shift_right 按住 Shift 然后右键
- 具体处理逻辑如下 默认按钮处理器
- 每个点击块下方 有且只有条件检查块
物品
- icon:
- #物品类型或者ID(格式 类型:子类型) 注意: 如果存在变量 必须用动态类型
- type: WOOL:13
- #动态类型(如果定义 则 type 无效 若解析失败则使用 type 或默认 STONE)
- dynamic_type: '%mjs_server_type%'
- #物品数量
- amount: 2
- #动态数量(如果定义 则 amount 无效 若解析失败则使用 amount 或默认 1)
- dynamic_amount: '%server_online%'
- #显示名称
- display_name: '&6在线人数: &b%server_online%'
- #物品Lore
- lore:
- - '&6累计玩家: &a%server_unique_joins%'
- - '&6运行时间: &a%server_uptime%'
- - '&6使用内存: &a%server_ram_used%MB'
- - '&6最大内存: &a%server_ram_max%MB'
- #物品附魔(名称自行百度) 格式 附魔名称:等级
- ench:
- - 'DURABILITY:1'
- #物品flag 仅限Spigot1.8+
- #HIDE_ENCHANTS=>设置是否显示 附魔
- #HIDE_ATTRIBUTES=>设置是否显示 属性 例如伤害
- #HIDE_UNBREAKABLE=>设置是否显示 无法破坏
- #HIDE_DESTROYS=>设置是否显示 破坏或修复
- #HIDE_PLACED_ON=>设置是否显示 放置或建造
- #HIDE_POTION_EFFECTS=>设置是否显示 药水状态
- flag:
- - 'HIDE_ATTRIBUTES'
- - 'HIDE_ENCHANTS'
- 物品块 用于显示给玩家看 每一个按钮都会包含一个物品块
- 物品块配置如下
- type 物品类型
- dynamic_type % 动态物品类型
- 用于覆盖 type 会进行动态解析
- 必须返回有效的 物品枚举
- 如果无效 则默认使用 STONE
- amount 物品数量
- dynamic_amount % 动态物品数量
- 用于覆盖 amount 会进行动态解析
- 必须返回数字
- 如果无效 则默认使用 1
- display_name % 物品显示名称
- lore % 物品的展示LORE
- 支持 \n 换行
- 支持 \n 换行
- ench 附魔配置
- 格式为 附魔名称:等级 具体请查询 Minecraft 官方文档
- 格式为 附魔名称:等级 具体请查询 Minecraft 官方文档
- flag 附加属性 可选值如下
- HIDE_ENCHANTS =>设置是否显示 附魔
- HIDE_ATTRIBUTES =>设置是否显示 属性 例如伤害
- HIDE_UNBREAKABLE =>设置是否显示 无法破坏
- HIDE_DESTROYS =>设置是否显示 破坏或修复
- HIDE_PLACED_ON =>设置是否显示 放置或建造
- HIDE_POTION_EFFECTS =>设置是否显示 药水状态
按扭
- #按钮名称(插件内部使用 必须唯一)
- btn1:
- #处理器 不填则默认为菜单中配置的button_handler
- handler: 'file:button.js'
- #物品位置(0开始)
- slot: 0
- #优先级
- priority: 1
- #显示条件
- view_requirement: 'player.hasPermission("MiaoMenu.default")'
- #按钮
- icon:
- <<: *物品块
- #左键点击
- left_click:
- <<: *条件检查块
- right_click:
- <<: *条件检查块
- 菜单上的每一个格子都是一个按钮
- 按钮配置如下
- 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]