本帖最后由 狡诈师 于 2021-2-8 21:46 编辑 

[ ! ] 阅读本文需要具备
- Kotlin / Java 编程语言
- 熟悉Bukkit开发
- 搭起TabooLib为基础的项目
[ ! ] 相关链接
- [前置][开源][PCD]TabooLib —— 老坏黑的祖传病毒 [1.8-1.16]
- 从Kotlin到Java,从TabooLib到Bukkit —— ①TabooLib的插件主类代码结构
- TabooLib Doc
[ ! ] 本文采用
- 编程语言:Kotlin
- 内置依赖:TabooLib
基于TabooLib轻松写Minecraft Bukkit命令系统,TabooLib提供的一些命令判断、命令帮助能够减少命令的繁琐开发,节省开发时间,而且支持Tab命令补全更重要的是不需要在 plugin.yml 写什么命令了(想当年老是忘记在这里写,亦或者写错)
创建一个类 Command (命名没有强制规范,其它命名可以,当然要注意编程规范)看一下 TabooLib Doc 的 BaseCommand 类:https://tabooproject.org/doc/io/ ... ackage-summary.html
类 BaseMainCommand 主命令接口,这是我们需要的,于是implements它
这是 Kotlin 写法
复制代码
回到 TabooLib Doc 的 BaseCommand 类
在下面于是看到 注释类型 BaseCommand ,点击看看,于是有这些东西

比如这样写
复制代码
创建一个类 IntoCommand
在 TabooLib Doc 有关于子命令接口的类 BaseSubCommand ,要做什么懂了吧
复制代码
TabooLib Doc 中 对子命令注解的类,即 SubCommand
看到可以做到这些命令判断,节省开发时间

回到所写的 Command 类写一个变量
复制代码变量名为 info 的话,命令输入于是这样:/iPlugin info(当然忽略大小写的)我们声明这个变量类型为 BaseSubCommand
赋值 IntoCommand() (忘了这是什么来着的请重阅本文)
如果希望权限是 iPlugin.cmd.info
那么可以这样
复制代码
如果希望控制命令执行者类型那么我们看一下 TabooLib Doc 的 CommandType

所以,别傻傻的在子命令写执行者类型判断(初碰TabooLib的我曾跳过的坑)
复制代码于是这个命令要求 执行者类型 为玩家
那么其它我就不一一列出了
提示:这里不需要像Bukkit那样写 return false / return true ,为什么?那请带着疑问继续阅读吧
现在我们为子命令 IntoCommand 覆写 onCommand
复制代码
可能有人问 onCommand 在哪
在 BaseMainCommand / BaseSubCommand

 我猜有人说:哥们,不是高级应用篇吗?怎么就这么基础东西?
我猜有人说:哥们,不是高级应用篇吗?怎么就这么基础东西?
可能有初学者认为:不就是这样吗:@SubCommand(description = TLocale.asString("COMMAND_DESCRIPTION.INFO"))
那么恭喜你获得报错一枚
那有办法吗?
办法是有的——覆写 description 方法
复制代码
注释:
TLocale.asString("COMMAND_DESCRIPTION.INFO")获取语言文本中
复制代码
于是重写了 description 方法,还挺轻松的
和上面一样,覆写 arguments 方法复制代码值得一提,类 Argument 参数分别是(参数名,是否必填)
EDIT :) 我好像忘记漏教什么,忘了忘了,就这样吧,本文完
来自群组: Server CT
[ ! ] 阅读本文需要具备
- Kotlin / Java 编程语言
- 熟悉Bukkit开发
- 搭起TabooLib为基础的项目
[ ! ] 相关链接
- [前置][开源][PCD]TabooLib —— 老坏黑的祖传病毒 [1.8-1.16]
- 从Kotlin到Java,从TabooLib到Bukkit —— ①TabooLib的插件主类代码结构
- TabooLib Doc
[ ! ] 本文采用
- 编程语言:Kotlin
- 内置依赖:TabooLib
- 这是什么样的教程?
 
基于TabooLib轻松写Minecraft Bukkit命令系统,TabooLib提供的一些命令判断、命令帮助能够减少命令的繁琐开发,节省开发时间,而且支持Tab命令补全更重要的是不需要在 plugin.yml 写什么命令了(想当年老是忘记在这里写,亦或者写错)
- 创建主命令
 
创建一个类 Command (命名没有强制规范,其它命名可以,当然要注意编程规范)看一下 TabooLib Doc 的 BaseCommand 类:https://tabooproject.org/doc/io/ ... ackage-summary.html
类 BaseMainCommand 主命令接口,这是我们需要的,于是implements它
这是 Kotlin 写法
- class Command : BaseMainCommand() {
 
- }
- 为主命令写注解
 
回到 TabooLib Doc 的 BaseCommand 类
在下面于是看到 注释类型 BaseCommand ,点击看看,于是有这些东西
比如这样写
- @BaseCommand(name = "iPlugin", permission = "iPlugin.view")
 
- class Command : BaseMainCommand() {
 
- }
 
- 创建子命令
 
创建一个类 IntoCommand
在 TabooLib Doc 有关于子命令接口的类 BaseSubCommand ,要做什么懂了吧
- class IntoCommand : BaseSubCommand() {
 
- }
- 为子命令写注解
 
TabooLib Doc 中 对子命令注解的类,即 SubCommand
看到可以做到这些命令判断,节省开发时间
回到所写的 Command 类写一个变量
- val into : BaseSubCommand = IntoCommand()
赋值 IntoCommand() (忘了这是什么来着的请重阅本文)
如果希望权限是 iPlugin.cmd.info
那么可以这样
- @SubCommand(permission = "iPlugin.cmd.info")
 
- val into : BaseSubCommand = IntoCommand()
如果希望控制命令执行者类型那么我们看一下 TabooLib Doc 的 CommandType
所以,别傻傻的在子命令写执行者类型判断
- @SubCommand(permission = "iPlugin.cmd.info", type = CommandType.PLAYER)
 
- val into : BaseSubCommand = IntoCommand()
那么其它我就不一一列出了
- 子命令的执行
 
提示:这里不需要像Bukkit那样写 return false / return true ,为什么?那请带着疑问继续阅读吧
现在我们为子命令 IntoCommand 覆写 onCommand
- override fun onCommand(sender: CommandSender, command: Command, label : String, args: Array<out String>) {
 
-             // 做你想做的
 
-             return
 
- }
可能有人问 onCommand 在哪
在 BaseMainCommand / BaseSubCommand
所以没那么难,甚至轻松多了完
| 高级应用:命令联动语言文本-命令描述 | 
可能有初学者认为:不就是这样吗:@SubCommand(description = TLocale.asString("COMMAND_DESCRIPTION.INFO"))
那么恭喜你获得报错一枚
那有办法吗?
办法是有的——覆写 description 方法
-     override fun getDescription(): String {
 
-         return TLocale.asString("COMMAND_DESCRIPTION.INFO")
 
- }
注释:
TLocale.asString("COMMAND_DESCRIPTION.INFO")获取语言文本中
- COMMAND_DESCRIPTION
 
-   INFO:
 
-     - "这是第一行"
 
- - "&f支持颜色的"
于是重写了 description 方法,还挺轻松的
| 高级应用:命令联动语言文本-命令参数 | 
和上面一样,覆写 arguments 方法
- override fun getArguments() = arrayOf(
 
-         Argument(TLocale.asString("COMMAND_DESCRIPTION.VAR.INFO"), true)
 
- )
EDIT :) 我好像忘记漏教什么,忘了忘了,就这样吧,本文完
来自群组: Server CT
教程不错 加油