20.2 组件(Component)的使用


组件在(Component)1.18.2及以上版本的KubeJS中被大量使用。其可用于返回实体、物品的名称,亦或是设置悬浮提示,为玩家发送消息等等。

一、基础使用

你可以使用ComponentWrapper 来新建组件,它可以在任何地方以ComponentText形式被调用,以下为其方法:

方法名返回值描述

of(Object o)

MutableComponent

该方法会返回一个基于你输入对象的组件。输入可以是字符串、数字等基础数据类型,也可以是snbt/nbt等其他类型。

clickEventOf(Object o)

ClickEvent

基于输入的内容返回ClickEvent,详见下方示例。

prettyPrintNbt(Tag tag)

Component

返回一个高亮的nbt,详见下方示例。

join(MutableComponent 分隔符, Iterable<? extends Component> 待遍历内容)

MutableComponent

返回遍历 待遍历内容 的结果并把它们拼接在一起,并使用 分隔符 将其隔开。

string(String 文本)

MutableComponent

基于输入的字符串返回未格式化的TextComponent。

translate(String 本地化键名)

MutableComponent

基于输入的本地化键名返回未格式化的TextComponent。

translate(String 本地化键名, Object... 文本)

MutableComponent

基于输入的本地化键名和输入的对象返回未格式化的TextComponent,后者中的"%s"被本地化键名对应的译名替代。

keybind(String 键名)

MutableComponent

基于输入的键名返回客户端对应热键的KeybindComponent。

(Object 文本)

MutableComponent

基于输入的颜色和文本返回对应的组件,可用颜色详见本章末尾(不含尖括号)。

以下是示例:

onEvent('player.chat', event => {
  // 为玩家发送消息
  event.player.tell(Component.string('测试消息'))
  // 该消息现在为黑色
  event.player.tell(Component.black('黑色测试消息'))
  // 发送对应键名item.minecraft.diamond的文本
  event.player.tell(Component.translate('item.minecraft.diamond').blue())
  // 发送玩家潜行绑定的热键名称
  event.player.tell(Component.keybind('key.sneak'))
  // 发送高亮后的主手物品的nbt
  event.player.tell(Component.prettyPrintNbt(event.player.mainHandItem.nbt))
})

效果展示

// img0

二、可变组件(MutableComponent)

以下为MutableComponent支持的方法,其中包含ComponentKJS向原版Component注入的拓展。除相关原版方法外,你还可以调用以下由ComponentKJS添加的方法。

方法名返回值信息

iterator()

Iterator

返回当前组件中包含的子Component。

self()

MutableComponent

返回当前组件。

toJson()

JsonElement

返回当前组件的Json形式。

()

MutableComponent

设置当前组件的颜色,支持的颜色见下。

color(Color c)

MutableComponent

设置当前组件的颜色(颜色为Rhino格式)。

noColor()

MutableComponent

清除当前组件的颜色

bold(@Nullable Boolean 是否使用) italic(@Nullable Boolean 是否使用) underlined(@Nullable Boolean 是否使用) strikethrough(@Nullable Boolean 是否使用) obfuscated(@Nullable Boolean 是否使用)

MutableComponent

将组件设定为给定格式(依次为加粗,斜体,下划线,删除线,拼合),不填时默认值为true

insertion(@Nullable String 自动填充文字)

MutableComponent

当玩家点击该组件时在聊天框自动填充给定的文本(不自动发送)

font(@Nullable ResourceLocation 字体资源)

MutableComponent

设置的字体。关于字体的更多信息详见Minecraft Wiki - 资源包 - 字体

click(@Nullable ClickEvent 点击事件)

MutableComponent

设置文本点击事件

hover(@Nullable Component s)

MutableComponent

把当前组件的鼠标悬浮提示文本设置为输入的。

setStyle(Style 样式)

MutableComponent

将当前的样式设置为输入的样式(net.minecraft.network.chat.Style) 并返回自身。(不推荐使用)

append(String 添加字符)

MutableComponent

在当前的组件末尾拼接输入字符串对应的TextComponent并返回自身

append(Component component)

MutableComponent

在当前组件的末尾拼接输入的组件并返回自身

withStyle(Style style)

MutableComponent

将输入的样式与组件的已有样式合并,冲突的属性将被设置为输入样式。

getStyle()

Style

返回当前组件的样式

getContents()

MutableComponent

返回当前组件的内容。其中TextComponent会返回Text,SelectorComponents会返回其对应的目标选择器,其余类型的组件会返回一个空的字符串。

getSiblings()

List

返回一个包含所有“使用append()添加到当前组件”的组件的列表。

plainCopy()

BaseComponent

只复制当前组件的基本内容,不包含样式等。

copy()

MutableComponent

完全复制当前组件,保留样式

getString()

String

返回组件文本对应的字符串。非文字类型的组件会返回一个空的字符串。

待补:相关示例。

附:

Component中可用的颜色:

  • black

  • darkBlue

  • darkGreen

  • darkAqua

  • darkRed

  • darkPurple

  • gold

  • gray

  • darkGray

  • blue

  • green

  • aqua

  • red

  • lightPurple

  • yellow

  • white