结冰的离季
本帖最后由 结冰的离季 于 2023-3-26 19:27 编辑

SakuraBind
插件介绍
SakuraBind源自自用的绑定插件,功能有限,经过一系列功能定制之后我决定完善其功能并发布出来。

本插件会尽量涵盖所有有用的功能,并提供丰富的配置尽可能满足您的所有需求。

本插件的最终目标是实现玩家的库存分离但不影响正常使用

特点


要求


依赖信息

插件截图

插件安装
将插件放入服务端根目录 plugins 文件夹中,重启服务器或使用热重载插件加载即可,第一次加载插件将会联网下载依赖,所以第一次加载请勿热加载否则会卡住主线程。

插件配置
插件的配置文件夹为  SakuraBind ,目录里的 config.yml 为插件核心配置、global-setting.yml 为全局的绑定设置

settings.yml 里可以添加自定义规则,用于匹配某类物品应用不同的绑定设置

lang.yml 里是所有插件消息,可以自行更改,支持 papi 和颜色字符 & ,1.17及以上支持16进制颜色如 #66ccff

database.yml 为数据库相关设置

data 文件夹为本地缓存,储存方块物品的绑定信息,删除之后已放置的方块物品将丢失绑定信息

每个配置文件都支持 自动重载 修改完毕只需要 保存 插件就会自动重载配置。

每个配置文件里都有 详细的注释,这里就不再重复说明

global-setting.yml 配置内容如下



绑定设置的读取按照优先级从高到低分别为  权限 、匹配设置 、全局设置

如玩家具有 权限设置的格式为 sakurabind.settings.{键名}.true|false

如禁止玩家放置方块物品的权限为 sakurabind.settings.block-deny.place.true

对应的全局设置为

  1. block-deny:
  2.   place: true
复制代码


在 settings.yml 声明的匹配设置会覆盖全局设置,未声明的设置将继承全局设置

匹配设置的作用是将某些特殊物品区分开来,自定义程度更高,

比如你可以这样设置 所有剑都自动绑定

settings.yml



-------
插件命令
根命令全称 sakurabind,别名为 sbind, sb, sab, bind

  1. <> 为必选参数 []为可选参数或条件可选,支持tab补全
  2. /sakurabind bind <type> <player> [setting] [-noLore]  绑定某玩家 手上的物品、前面的方块、前面的实体
  3. /sakurabind bindTo <type> <player> [setting] [-noLore]  绑定 手上的物品、前方的方块、前方的实体 给 某玩家
  4. /sakurabind unBind <type> <player>  解绑定某玩家手上的物品、前面的方块、前面的实体
  5. /sakurabind bindAll <player> [-noLore]  绑定某玩家背包里的所有物品
  6. /sakurabind unBindAll <player>  解绑定某玩家背包的物品
  7. /sakurabind getLost  获取暂存箱物品
  8. /sakurabind autoBind  给手上的物品添加自动绑定的NBT
  9. /sakurabind debug  切换debug模式
  10. /sakurabind select <player> [bind]  为玩家开启/关闭目标选择模式
  11. /sakurabind reload  重载配置
  12. /sakurabind test match [count]  匹配手上的物品 [count] 次并输出信息
  13. /sakurabind test tryMatch <setting>  尝试以某个配置匹配手上的物品, 输出信息
复制代码


在任何命令后面加上 -silent 可以隐藏消息

插件变量
插件有的变量暂时只有一个 %sakurabind_has_lost% 判断玩家暂存箱是否有物品,为数据库查询操作,请勿高频使用

插件权限
命令
权限格式为 sakurabind.节点名称 如 /sakurabind bind 命令的权限为 sakurabind.sakurabind.bind

玩家默认拥有 /sakurabind getLost 的权限,其他均为OP权限

sakurabind.sakurabind.*所有命令的权限

其他
绑定权限sakurabind.bypass.all,与OP一致不受绑定限制,但没有命令的权限

绑定全局设置权限 sakurabind.settings.{键名}.true|false 不支持 键名@ 的形式

绑定设置权限 sakurabind.setting.{设置名}.{键名}.true|false 设置名为 settings.yml 匹配键,覆盖全局权限 不支持键名@的形式

如禁止玩家放置方块物品的权限为 sakurabind.settings.block-deny.place.true

绑定设置权限sakurabind.bypass.{玩家uuid}拥有此权限将享受与该uuid物主相同的权限,即可以多人共用一个绑定物品
API
您可以将本插件作为本地依赖来开发,插件注册的事件
https://github.com/SakuraTown/SakuraBind/tree/master/plugin/src/main/java/top/iseason/bukkit/sakurabind/event


其他常用的API在 SakuraBindAPI 类中,源代码有注释



已知问题

下载
正式版Github: https://github.com/SakuraTown/SakuraBind/releases
正式版蓝奏: https://iseason.lanzouf.com/b00qhdv2f 密码:69zm
最新构建版: https://github.com/SakuraTown/SakuraBind/actions
如果依赖无法下载导致插件无法加载请添加离线依赖插件https://iseason.lanzouf.com/ivk8f0lzba9c


其他
插件默认关闭 方块、实体功能, 如需要请在config.yml中打开
开源地址: https://github.com/SakuraTown/SakuraBind






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

源代码使用GPLV3协议,您可以免费使用本插件,但不能二次分发售卖以获利















polang
看着好牛啊......支持!

奥力給
本帖最后由 奥力給 于 2022-12-19 09:23 编辑

好强的插件...
提两个小建议,可以使插件更好用:
①希望可以支持绑定后物品无限耐久
(可以用原版的无法破坏nbt,优化性能)②希望可以把那个绑定箱设置优先级为末影箱
③插件有个报错, 版本1.8.8paper mysql 并且anvil选项已关闭
④使用后有个报错,你没判定是否为低版本,因为低版本只有一个手(bushi),没有getItemInMainHand

⑤期望可以对低版本更加友好

期待楼主可以改进一下





结冰的离季
奥力給 发表于 2022-12-19 08:12
好强的插件...
提两个小建议,可以使插件更好用:
①希望可以支持绑定后物品无限耐久

第一个适用性太低,不会考虑,但是可以通过制作附属实现,
第一个报错是铁砧的监听器,我没做版本判断,他不会注册,无伤大雅,就一个事件
低版本太多特性了,我已经尽量支持了,手的问题我马上修

结冰的离季
本帖最后由 结冰的离季 于 2022-12-19 11:19 编辑
奥力給 发表于 2022-12-19 08:12
好强的插件...
提两个小建议,可以使插件更好用:
①希望可以支持绑定后物品无限耐久

bug已修复,末影箱会考虑加个开关,下个版本添加,  无限耐久的你可以自己写,监听绑定事件修改物品就行

丶米饭
看着介绍挺好,保持一段时间关注

结冰的离季
插件在发布前就已经经过大量测试与更新,目前已趋于稳定与完整,目前已用于百人规模的mod服中使用。
以后只会修复bug和部分内容更新,如有什么建议可以多多提出完善插件

CubeCraft_
Paper1.19.2 测试了一下
把绑定的物品扔到岩浆或者仙人掌都会直接消失 并且不会返回
扔给其他玩家被捡起会返回

因为服务器装了清理插件 扔到地上的物品被清理之后会统一集中在垃圾桶里
如果绑定的物品被清理到垃圾桶之后 被其他玩家捡到之后 除了无法交互之外 不会直接返还给主人
而是需要扔到地上捡一次之后就会返还给主人

苏子峰
本帖最后由 苏子峰 于 2022-12-20 00:53 编辑

不错的插件,功能很完善

结冰的离季
CubeCraft_ 发表于 2022-12-20 00:29
Paper1.19.2 测试了一下
把绑定的物品扔到岩浆或者仙人掌都会直接消失 并且不会返回
扔给其他玩家被捡起会 ...

问题已修复(2.0.2),送还物品只发生在 玩家捡起时、扫描器扫描时(config.yml中配置),上个版本失效是由于扫描器未能在插件启动时开启

CubeCraft_
本帖最后由 CubeCraft_ 于 2022-12-20 23:19 编辑

当绑定遗失的物品数量比背包槽位多的时候 被其他玩家捡到之后
把背包填满之后 剩下的会直接消失
消失之后的物品还可以找回来
就是把背包全部填满之后 再扔一个绑定物品让其他玩家捡
捡到之后就会发送至邮箱 然后领取之后之前消失的就会回来

结冰的离季
CubeCraft_ 发表于 2022-12-20 23:16
当绑定遗失的物品数量比背包槽位多的时候 被其他玩家捡到之后
把背包填满之后 剩下的会直接消失
消失之后的 ...

这是插件的邮件缓存机制导致的,为了避免同一时刻大量的丢失物品导致sql频繁,所以丢失物品会先放入内存队列中缓存,等到该玩家的最后一次的丢失物品5秒之后才会最终将丢失物品一次存入数据库。如果您确定玩家无操作5秒之后仍未收到提示,我会着手调查

名副其实
未来可否考虑输入命令的时候加一个确认GUI?

结冰的离季
名副其实 发表于 2022-12-23 14:32
未来可否考虑输入命令的时候加一个确认GUI?

请描述具体点,默认的命令是op才能输入的,所以我觉得确认操作不是很必要,毕竟没有高危操作

名副其实
结冰的离季 发表于 2022-12-23 15:36
请描述具体点,默认的命令是op才能输入的,所以我觉得确认操作不是很必要,毕竟没有高危操作 ...

主要是我想要玩家有这样一个GUI会很不错。
如果可以的话还是加吧。毕竟有时候误操作会很难受。

结冰的离季
本帖最后由 结冰的离季 于 2022-12-23 15:54 编辑
名副其实 发表于 2022-12-23 15:40
主要是我想要玩家有这样一个GUI会很不错。
如果可以的话还是加吧。毕竟有时候误操作会很难受。 ...

如果开放玩家使用可以考虑使用菜单插件实现,命令都是围绕绑定进行的,误操作完全可以解绑,且误操作的概率较低,如果加上确认操作反而会影响正常的使用体验,故而不会考虑。
但如果是将绑定分为2步,第一步是选择绑定的对象,第二步是确认绑定,分别为2个命令,这样的模式我觉得可以,之后会添加。

Yless
貌似没有办法实现
匹配到的lore 直接替换为item.lore的内容?
期待一手更新qwq

结冰的离季
Yless 发表于 2022-12-31 21:29
貌似没有办法实现
匹配到的lore 直接替换为item.lore的内容?
期待一手更新qwq ...

下个版本加上

随随缘
这个插件这么强为什么回复这么少 太奇怪了

暗灭123
好插件.................

结冰的离季
随随缘 发表于 2023-1-17 02:28
这个插件这么强为什么回复这么少 太奇怪了

新发布且同类插件已经占有大部分市场,需要时间沉淀

Minecraft1.6.
作者你好,经过测试该插件和Ecoenchants插件不太兼容,目前知道的问题是导致Ecoenchants的gui打不开。
希望能修复一下
测试版本 Paper1.19.2

结冰的离季
Minecraft1.6. 发表于 2023-2-8 18:54
作者你好,经过测试该插件和Ecoenchants插件不太兼容,目前知道的问题是导致Ecoenchants的gui打不开。
希望 ...

Ecoenchants 的 前置 eco 与大多数kotlin语言的插件都不兼容 ,具体表现为 java.Lang.LinkageError 报错,请将eco jar文件中的 kotlin 和kotlinx文件夹删掉就正常了

Minecraft1.6.
结冰的离季 发表于 2023-2-8 19:13
Ecoenchants 的 前置 eco 与大多数kotlin语言的插件都不兼容 ,具体表现为 java.Lang.LinkageError 报错 ...

好的 但是删掉后不会影响附魔插件功能吗

结冰的离季
Minecraft1.6. 发表于 2023-2-8 19:49
好的 但是删掉后不会影响附魔插件功能吗

kotlin是一个依赖,taboolib系列 包括我的插件都会加载kotlin,eco内存在重复的kotlin依赖导致报错,删掉还有其他kotlin依赖可用

Minecraft1.6.
结冰的离季 发表于 2023-2-8 19:55
kotlin是一个依赖,taboolib系列 包括我的插件都会加载kotlin,eco内存在重复的kotlin依赖导致报错,删掉 ...

好的谢谢

百万大大
可以做到物品到了玩家手中自动绑定嘛

Eater_233
我重新生成了一下配置文件,然后就报错了,指令除了reload其它都用不了,有没有什么解决办法?

[11:16:58] [Server thread/WARN]: java.lang.reflect.InvocationTargetException
[11:16:58] [Server thread/WARN]:         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[11:16:58] [Server thread/WARN]:         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[11:16:58] [Server thread/WARN]:         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[11:16:58] [Server thread/WARN]:         at SakuraBind-2.0.8.jar//top.iseason.bukkit.sakurabind.libs.core.BukkitTemplate.invokeBootStrapMethod(BukkitTemplate.java:172)
[11:16:58] [Server thread/WARN]:         at SakuraBind-2.0.8.jar//top.iseason.bukkit.sakurabind.libs.core.BukkitTemplate.onEnable(BukkitTemplate.java:189)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:542)
[11:16:58] [Server thread/WARN]:         at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugin(CraftServer.java:565)
[11:16:58] [Server thread/WARN]:         at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugins(CraftServer.java:479)
[11:16:58] [Server thread/WARN]:         at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:636)
[11:16:58] [Server thread/WARN]:         at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:422)
[11:16:58] [Server thread/WARN]:         at net.minecraft.server.dedicated.DedicatedServer.e(DedicatedServer.java:306)
[11:16:58] [Server thread/WARN]:         at net.minecraft.server.MinecraftServer.v(MinecraftServer.java:1100)
[11:16:58] [Server thread/WARN]:         at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:305)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.Thread.run(Thread.java:833)
[11:16:58] [Server thread/WARN]: Caused by: java.lang.NoClassDefFoundError: kotlin/jvm/internal/ReflectionFactory
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.defineClass1(Native Method)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
[11:16:58] [Server thread/WARN]:         at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
[11:16:58] [Server thread/WARN]:         at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
[11:16:58] [Server thread/WARN]:         at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
[11:16:58] [Server thread/WARN]:         at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
[11:16:58] [Server thread/WARN]:         at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
[11:16:58] [Server thread/WARN]:         at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:227)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:129)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:124)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
[11:16:58] [Server thread/WARN]:         at SakuraBind-2.0.8.jar//top.iseason.bukkit.sakurabind.libs.core.loader.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:40)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.Class.forName0(Native Method)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.Class.forName(Class.java:375)
[11:16:58] [Server thread/WARN]:         at kotlin.jvm.internal.Reflection.<clinit>(Reflection.java:26)
[11:16:58] [Server thread/WARN]:         at top.iseason.bukkit.sakurabind.dto.BindLogs.<clinit>(BindLogs.kt:32)
[11:16:58] [Server thread/WARN]:         at top.iseason.bukkit.sakurabind.SakuraBind.initConfig(SakuraBind.kt:70)
[11:16:58] [Server thread/WARN]:         at top.iseason.bukkit.sakurabind.SakuraBind.onEnable(SakuraBind.kt:49)
[11:16:58] [Server thread/WARN]:         at top.iseason.bukkit.sakurabind.libs.core.PluginBootStrap.onEnable(PluginBootStrap.java:37)
[11:16:58] [Server thread/WARN]:         ... 17 more
[11:16:58] [Server thread/WARN]: Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.ReflectionFactory
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:177)
[11:16:58] [Server thread/WARN]:         at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:124)
[11:16:58] [Server thread/WARN]:         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
[11:16:58] [Server thread/WARN]:         ... 39 more

结冰的离季
Eater_233 发表于 2023-2-15 12:19
我重新生成了一下配置文件,然后就报错了,指令除了reload其它都用不了,有没有什么解决办法?

[11:16:58] ...

是否重启,如果重启未能解决请看我签名加qq提供详细信息

烟火x1
本帖最后由 烟火x1 于 2023-2-20 11:41 编辑

有没有可以设置单个物品的绑定方法(捡拾,使用,装备,丢弃等),用于实现获得某物品不直接绑定而是在(捡拾,使用,装备,丢弃等)指定一个或者多个情况下触发绑定的指令。
对了,我发现了一件事,
就是自动绑定触发后sakura_auto_bind 还是会残留在NBT里,
因为我在搞NPCmod的交易嘛,需要物品文字与NBT相同才可以交易嘛
能否增加个可选设置绑定但不指定主人,来达到物品文字与NBT相同,但有绑定效果
如果能结合最上面那句话可以设置单个物品(或指定NBT)的绑定方式就更好了


(当然如果作者觉得不好实现,我会尝试装两个绑定插件来配合实现描述功能。

结冰的离季
本帖最后由 结冰的离季 于 2023-2-20 12:46 编辑

回复错了,删除数据

结冰的离季
本帖最后由 结冰的离季 于 2023-2-20 12:49 编辑
烟火x1 发表于 2023-2-20 11:00
有没有可以设置单个物品的绑定方法(捡拾,使用,装备,丢弃等),用于实现获得某物品不直接绑定而是在(捡拾 ...

单个物品的绑定目前可以通过指定唯一nbt来实现
使用命令 /sakurabind autoBind xxxxxx 来给物品设置一个特殊的nbt
在 settings.yml 中这样设置
  1. matchers:
  2.   单个物品绑定:
  3.     match:
  4.       nbt:
  5.         xxxxxx: .*
  6.     settings:
  7.       auto-bind:
  8.         enable: true
  9.         onClick: true
  10.         onPickup: true
复制代码

不自动绑定你可以在config.yml中将扫描器关闭,至于使用时、装备时绑定的功能待添加
将会识别拥有这个特殊nbt的物品并在玩家获得它的时候自动绑定

绑定的控制都是基于有主人的情况下,故而没有物主与插件逻辑不符,但你可以将物主设置为op,给玩家使用权限





烟火x1
结冰的离季 发表于 2023-2-20 12:46
单个物品的绑定目前可以通过指定唯一nbt来实现
使用命令 /sakurabind autoBind xxxxxx 来给物品设置一个特 ...

懂了,知道这个插件主要目的是保护绑定物品不丢失了,所以一切基于已绑定的物主
那我也以这个方向的功能开放给玩家保护物品

结冰的离季
烟火x1 发表于 2023-2-21 17:07
懂了,知道这个插件主要目的是保护绑定物品不丢失了,所以一切基于已绑定的物主
那我也以这个方向的功能 ...

丢失是一方面,主要目的是让物品不流通,且不会影响玩家正常使用,只要你有符合这个目的的需求我都能加
不绑定就无法识别物主,所以绑定是必须的

烟火x1
结冰的离季 发表于 2023-2-20 12:46
单个物品的绑定目前可以通过指定唯一nbt来实现
使用命令 /sakurabind autoBind xxxxxx 来给物品设置一个特 ...


我在 settings.yml 中尝试这样设置,单个NBT绑定但是我输入dang单独的无法生效还是默认的global-setting


Eater_233
使用过的最好的绑定插件,如果加个绑定/解绑GUI将会是完美

结冰的离季
Eater_233 发表于 2023-2-25 19:06
使用过的最好的绑定插件,如果加个绑定/解绑GUI将会是完美

gui功能因人而异,不好做,之后可能会考虑写个kether模块兼容trmenu等菜单插件,让用户自己定制功能或者是写成附属插件

结冰的离季
烟火x1 发表于 2023-2-21 22:25
我在 settings.yml 中尝试这样设置,单个NBT绑定但是我输入dang单独的无法生效还是默认的global-setting ...

你加我qq吧,看我签名,这样时效性高一点

qq2873404500
挺有用的,不会被原版的一些特性,而丢失

友谊_
支持作者!999

Yless
链接mysql的时候 有时候会报错请问下是啥问题qwq


结冰的离季
Yless 发表于 2023-3-6 01:23
链接mysql的时候 有时候会报错请问下是啥问题qwq

params: '?useSSL=false'

Yless

貌似不是ssl的问题
有时候启动的时候 还是会出现这个报错

结冰的离季
Yless 发表于 2023-3-6 22:48
貌似不是ssl的问题
有时候启动的时候 还是会出现这个报错

使用自定义Url,如果不行请l加我qq咨询

wudichenhui
插件能否实现物品在他人背包输入命令后找回

结冰的离季
wudichenhui 发表于 2023-3-25 10:30
插件能否实现物品在他人背包输入命令后找回

可以自动找回,不需要输入命令,如果你有必要用命令也可以加

wudichenhui
本帖最后由 wudichenhui 于 2023-3-26 16:09 编辑
结冰的离季 发表于 2023-3-25 11:31
可以自动找回,不需要输入命令,如果你有必要用命令也可以加

该怎么添加命令找回,我想让玩家可以自己控制他们的物品,比如说他们把东西借给好友后可以自由收回

结冰的离季
本帖最后由 结冰的离季 于 2023-3-26 19:03 编辑
wudichenhui 发表于 2023-3-26 16:08
该怎么添加命令找回,我想让玩家可以自己控制他们的物品,比如说他们把东西借给好友后可以自由收回 ...

具有 sakurabind.bypass.{玩家Auuid} 权限的玩家B可以使用 玩家A的物品
利用权限你可以做到类似信任的机制,通常您需要使用 权限插件+菜单的方式来实现,
当不再信用该玩家时取消该权限即可

找回物品是个复杂的过程,您的好友可能并不在线,或者物品被放在容器里,一个命令无法完美解决,但是基于权限控制的可以,取消信任的权限,只要玩家上线一接触到物品就能够立马找回
不过只找回背包里的物品也是可以添加命令的,如果你急需这个功能你可以加我qq1347811744 获取测试版, 否则请等待正式版,预计是 2.1.5