- 版权类型
- 原创
- 插件中文名称
- Adventure Kotlin 支持库
- 插件英文名称
- adventure-kt
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Folia
- Purpur
- PufferFish
- SpongeVanilla
- Leaves
- 其他核心
- 语言支持
- 其他
- 前置组件
- adventure: https://github.com/KyoriPowered/adventure
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
adventure-kt
基于 Kotlin DSL 的 Kyori Adventure 辅助库。
adventure-kt 隶属于 星社 Project 社群项目。
介绍
Adventure 是一个适用于 Minecraft Java 版的用户界面库,你可能已经使用过了它提供的 MiniMessage,一套简洁的树状语法来描述 Minecraft 在 1.16.5 新增的 文本组件。
Adventure 库本身也用于直接在代码里构造文本组件,并向玩家发送带有文本组件的 Title、Actionbar、书本。
就像这样(示例来自 此处):
这提供了一套不依赖 Minecraft 内部代码的、平台无关的 API 以构造文本组件。
Paper、Sponge、Fabric 等平台都提供了对于 Adventure 的原生支持。
例如,在 Paper API 中,我们可以直接调用 Player 对象中提供的方法来将上面的 textComponent 发送给一个玩家:
这样构造、发送文本组件的方式,比直接使用格式符号更加规整且强大。
更“甜”的方式
Adventure 是很好用,但它使用 builder-style 编写的 API 在 Kotlin 的世界中显得有些格格不入了。
如果你是一名 Android 开发者,应该用过 Compose。它描述组件的方式就像是 Kotlin 原本的语法一样。
这是一种 DSL(Domain Specific Language, 领域特定语言)。因为 Kotlin 允许你将参数末尾的 Lambda 参数放到括号的外面。如果只有这么一个参数的话,还可以省略括号。
所以,我们也可以这么干。
发送普通消息:
创建 Title:
(论坛的编辑器似乎不支持 Kotlin 代码,所以没有高亮)
对比上面 Java 风格的代码,显然要更规整易读,写起来也更方便些。
adventure-kt 本身只是 Adventure 的一套简单包装,并且已经在星社的 核心代码库 中使用很久了,目前没有未发现的问题。
不过我们目前只完成了对 Adventure 核心部分的包装,对于更进阶部分(如文本组件中的替换)的辅助还需要在后续的开发中逐步添加。
在你的项目中使用
首先,添加 Maven 仓库。
此处提供 Gradle Kotlin DSL 的示例,似乎没有什么人用 Groovy DSL 或者 Maven 来管理 Kotlin 项目。
然后是添加依赖:
结语
其实本文大部分内容都是在介绍 Adventure 库本身,因为可能还有很多人并不了解这个库,所以顺带将它介绍给更多人。
如果你觉得 adventure-kt 让你的开发更方便的话,欢迎来我们的 GitHub 仓库 给一个 Star。
我们不开设交流群,如遇到使用上的问题,或是功能建议,请在 Issues 页面反馈。
也可以看看 PlutoProject 这个组织下的其他仓库,后续我们会开发更多有意思的项目。
基于 Kotlin DSL 的 Kyori Adventure 辅助库。
adventure-kt 隶属于 星社 Project 社群项目。
介绍
Adventure 是一个适用于 Minecraft Java 版的用户界面库,你可能已经使用过了它提供的 MiniMessage,一套简洁的树状语法来描述 Minecraft 在 1.16.5 新增的 文本组件。
Adventure 库本身也用于直接在代码里构造文本组件,并向玩家发送带有文本组件的 Title、Actionbar、书本。
就像这样(示例来自 此处):
Java:
// Creates a line of text saying "You're a Bunny! Press <key> to jump!", with some colouring and styling.
final TextComponent textComponent = Component.text("You're a ")
.color(TextColor.color(0x443344))
.append(Component.text("Bunny", NamedTextColor.LIGHT_PURPLE))
.append(Component.text("! Press "))
.append(
Component.keybind("key.jump")
.color(NamedTextColor.LIGHT_PURPLE)
.decoration(TextDecoration.BOLD, true)
)
.append(Component.text(" to jump!"));
// now you can send `textComponent` to something, such as a client
这提供了一套不依赖 Minecraft 内部代码的、平台无关的 API 以构造文本组件。
Paper、Sponge、Fabric 等平台都提供了对于 Adventure 的原生支持。
例如,在 Paper API 中,我们可以直接调用 Player 对象中提供的方法来将上面的 textComponent 发送给一个玩家:
Java:
// 假设这里有一个名为“Player_A”的玩家
// 通过 UUID 来获取 Player 对象才是建议的做法,因此在用于生产的代码中请不要这么做
Player player = Bukkit.getPlayer("Player_A");
// Paper API 中的 Player 已经继承了 Adventure 的 Audience,因此可以直接使用
player.sendMessage(textComponent);
这样构造、发送文本组件的方式,比直接使用格式符号更加规整且强大。
更“甜”的方式
Adventure 是很好用,但它使用 builder-style 编写的 API 在 Kotlin 的世界中显得有些格格不入了。
如果你是一名 Android 开发者,应该用过 Compose。它描述组件的方式就像是 Kotlin 原本的语法一样。
这是一种 DSL(Domain Specific Language, 领域特定语言)。因为 Kotlin 允许你将参数末尾的 Lambda 参数放到括号的外面。如果只有这么一个参数的话,还可以省略括号。
所以,我们也可以这么干。
发送普通消息:
代码:
component {
text("这是一段普通的文本。")
text("这是一段红色的文本。") with red()
text("这是一段使用自定义颜色的文本。") with color(249, 226, 145) // 支持 RGB 颜色
newline()
text("这是一段格式化的文本。") with bold() without italic()
}
// 你也可以直接用这种格式发送消息
player.send {
text("这是一段普通的文本。")
}
创建 Title:
代码:
title {
mainTitle {
text("这是一个主标题。")
}
subTitle {
text("这是一个副标题。")
}
// 支持传入 Kotlin Duration 和 Java Duration
times {
fadeIn(1.seconds)
stay(1.seconds)
fadeOut(1.seconds)
}
}
(论坛的编辑器似乎不支持 Kotlin 代码,所以没有高亮)
对比上面 Java 风格的代码,显然要更规整易读,写起来也更方便些。
adventure-kt 本身只是 Adventure 的一套简单包装,并且已经在星社的 核心代码库 中使用很久了,目前没有未发现的问题。
不过我们目前只完成了对 Adventure 核心部分的包装,对于更进阶部分(如文本组件中的替换)的辅助还需要在后续的开发中逐步添加。
在你的项目中使用
首先,添加 Maven 仓库。
此处提供 Gradle Kotlin DSL 的示例,似乎没有什么人用 Groovy DSL 或者 Maven 来管理 Kotlin 项目。
代码:
repositories {
maven(uri("https://maven.nostal.ink/repository/maven-public/"))
}
然后是添加依赖:
代码:
dependencies {
// 用 shadowJar 将 adventure-kt 打包到你的插件中
api("ink.pmc.advkt:core:1.0.0-SNAPSHOT")
}
tasks.shadowJar {
// relocate 一下是推荐的做法,防止冲突
relocate("ink.pmc.advkt", "com.example.libs.advkt")
}
结语
其实本文大部分内容都是在介绍 Adventure 库本身,因为可能还有很多人并不了解这个库,所以顺带将它介绍给更多人。
如果你觉得 adventure-kt 让你的开发更方便的话,欢迎来我们的 GitHub 仓库 给一个 Star。
我们不开设交流群,如遇到使用上的问题,或是功能建议,请在 Issues 页面反馈。
也可以看看 PlutoProject 这个组织下的其他仓库,后续我们会开发更多有意思的项目。