Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 1935|回复: 11

[插件开发教程] [未知之域]聊天组件API中文翻译——来发送一条更酷炫的消息吧!

[复制链接]
耗子 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10120
钻石
性别
保密
注册时间
2012-2-18
查看详细资料
发表于 2018-8-6 01:19:13 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 耗子 于 2018-8-6 01:32 编辑

聊天组件 API


使用 BungeeCord 聊天 API 构建消息
Chat API Javadoc

目录

  • 基础
  • 颜色与格式
  • 事件
  • 客户端翻译
  • Component Builder(组件建造者)
  • 常见的问题
  • 动作
    • ClickEvent(点击事件)动作
    • HoverEvent(悬浮事件)动作


基础

最简单的组件是 TextComponent(文本组件),在 BungeeCord 的使用方法如下:

  1. player.sendMessage( new TextComponent( "Hello world" ) );
复制代码

或者你想在 Spigot 中使用:

  1. player.spigot().sendMessage( new TextComponent( "Hello world" ) );
复制代码

这是一个简单的消息,没有格式和颜色。

颜色与格式

每个组件都支持如下功能:

  • 颜色(Color)
  • 粗体(Bold)
  • 斜体(Italic)
  • 下划线(Underline)
  • 删除线(Strikethrough)
  • 乱码(Obfuscate)
  • 事件(Events)(在下文中会详细介绍)

举个例子:

  1. TextComponent message = new TextComponent( "Hello world" );
  2. message.setColor( ChatColor.RED );
  3. message.setBold( true );
  4. player.sendMessage( message );
复制代码

这将显示 "Hello World"(红色,加粗). 任何格式和事件也应用于子组件,除非子组件覆盖设置。例如:

  1. TextComponent message = new TextComponent( "Hello " );
  2. message.setColor( ChatColor.RED );
  3. message.setBold( true );
  4. TextComponent world = new TextComponent( "world" );
  5. world.setColor( ChatColor.BLUE );
  6. message.addExtra( world );
  7. message.addExtra( "!" );
  8. player.sendMessage( message );
复制代码

将会显示 "Hello world!"(全文为粗体,"Hello"和"!"为红色,"world"为蓝色)

事件

事件允许当文本被操作(点击或鼠标悬浮)时执行动作。目前 Minecraft 仅支持两个事件,分别是 HoverEvent(鼠标悬浮事件)和 ClickEvent(点击事件)。两个事件都有一个动作(当事件发生之后执行什么)和一个数值(这个动作的参数)。例如,如果一个点击事件的动作是 OPEN_URL(打开URL),那么它的值必须是一个有效的URL,例如"http://spigotmc.org"。

  1. TextComponent message = new TextComponent( "Click me" );
  2. message.setClickEvent( new ClickEvent( ClickEvent.Action.OPEN_URL, "http://spigotmc.org" ) );
  3. message.setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Goto the Spigot website!").create() ) );
  4. player.spigot().sendMessage( message );
复制代码

客户端翻译

TranslatableComponent(可翻译组件)可以用来发送翻译键(key)让客户端翻译,这意味着你只能使用 Minecraft 提供的文本(这里查看),除非使用一个资源包来添加更多文本。一些支持参数的翻译的参数可以是TranslatableComponent(或者只是 TextComponent)。

  1. TranslatableComponent giveMessage = new TranslatableComponent( "commands.give.success" );
  2. TranslatableComponent item = new TranslatableComponent( "item.swordDiamond.name" );
  3. item.setColor( ChatColor.GOLD );
  4. giveMessage.addWith( item );
  5. giveMessage.addWith( "32" );
  6. TextComponent username = new TextComponent( "Thinkofdeath" );
  7. username.setColor( ChatColor.AQUA );
  8. giveMessage.addWith( username );
  9. player.sendMessage( giveMessage );
复制代码

以上的代码在客户端使用的语言为en_US(美式英语)时将会显示"Given Diamond Sword  32 to Thinkofdeath", 但如果客户端使用的语言为zh_CN(简体中文)时将会显示"成功将 钻石剑  32 给予 Thinkofdeath"。

组件建造者(Component Builder)

简单的消息可以使用 ComponentBuilder(组件建造者)节省很多工作。ComponentBuilder 是一个链式结构的对象,允许快速创建消息。例如:

  1. player.sendMessage( new ComponentBuilder( "Hello " ).color( ChatColor.RED ).bold( true ).append( "world" ).color( ChatColor.BLUE ).append( "!" ).color( ChatColor.RED ).create() );
复制代码

这将显示 "Hello world!"

常见的问题

直接创建 BaseComponent 实例是没用的 (例如 player.sendMessage( new BaseComponent(){} );)。 应使用 TextComponent 或 TranslatableComponent。
使用旧版的颜色代码 (例如 player.sendMessage( new TextComponent( ChatColor.RED + ":-(" ) );) 将会不能很好的显示甚至导致客户端异常。使用 TextComponent.fromLegacyText() 方法将旧格式转换为新格式


动作

所有的 ClickEvent(点击事件) 和 HoverEvent(悬浮事件)的动作如下所示:

点击事件动作

当用户点击消息时,这些动作将会执行:

  1. Action.OPEN_URL //在用户的浏览器打开指定URL

  2. Action.OPEN_FILE //在用户的电脑打开指定文件

  3. Action.RUN_COMMAND //让用户运行指令

  4. Action.SUGGEST_COMMAND //在用户的输入框设置文字

  5. Action.CHANGE_PAGE //改变书本的页码
复制代码

悬浮事件动作

当用户鼠标指针悬浮在消息上时,这些动作将会执行:
  1. Action.SHOW_TEXT //显示一个文本

  2. Action.SHOW_ACHIEVEMENT //显示一个成就及其介绍

  3. Action.SHOW_ITEM //显示一个物品的名字和其他信息

  4. Action.SHOW_ENTITY //显示一个实体的名字,ID和其他信息 。
复制代码

教程Github链接:这里
教程原文链接:这里

发现很多人并不了解这个API,特此重发到MCBBS上。

欢迎各位支持作者,以编写和翻译更多优秀教程。




来自群组: Unknown Domain

评分

参与人数 7人气 +14 金粒 +45 贡献 +2 收起 理由
hmf55 + 2 MCBBS有你更精彩~
gengda + 2 MCBBS有你更精彩~
gooding300 + 3 + 25 + 2 优秀奖励
chenmoand + 1 神乎其技,不服不行!
2014009436 + 1 MCBBS有你更精彩~
1582952890 + 3 + 20 MCBBS有你更精彩~
Alorw + 2 MCBBS有你更精彩~

查看全部评分

肥猫欧嘎桑 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
181
钻石
性别
保密
注册时间
2018-7-5
查看详细资料
发表于 2018-8-6 03:58:27 | 显示全部楼层
滋磁一下
回复

使用道具 举报

残雪、 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2208
钻石
性别
保密
注册时间
2016-10-19
查看详细资料
发表于 2018-8-17 11:10:27 | 显示全部楼层
非常棒的一篇教程,收藏了
回复

使用道具 举报

Clusters_stars 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
920
钻石
性别
保密
注册时间
2017-7-25
查看详细资料
发表于 2018-8-17 17:45:48 | 显示全部楼层
请问可以使用§吗= =和
message.replace("§","&");
回复

使用道具 举报

耗子 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10120
钻石
性别
保密
注册时间
2012-2-18
查看详细资料
 楼主| 发表于 2018-8-17 17:55:17 | 显示全部楼层
Clusters_stars 发表于 2018-8-17 17:45
请问可以使用§吗= =和
message.replace("§","&");

在该教程里,不建议使用颜色代码。建议使用
  1. ChatColor
复制代码
回复

使用道具 举报

Clusters_stars 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
920
钻石
性别
保密
注册时间
2017-7-25
查看详细资料
发表于 2018-8-17 17:59:45 | 显示全部楼层
耗子 发表于 2018-8-17 17:55
在该教程里,不建议使用颜色代码。建议使用

个人感觉这样可以自定义emmmm
回复

使用道具 举报

Clusters_stars 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
920
钻石
性别
保密
注册时间
2017-7-25
查看详细资料
发表于 2018-8-17 18:00:02 | 显示全部楼层
耗子 发表于 2018-8-17 17:55
在该教程里,不建议使用颜色代码。建议使用

谢谢了 = =
回复

使用道具 举报

chenmoand 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1225
钻石
性别
保密
注册时间
2016-6-25
查看详细资料
发表于 2018-8-21 17:16:43 | 显示全部楼层
大佬我问一下player.spigot().sendMessage( message );
输出一行,可player.spigot().sendMessage( message + m2);
无法,怎么让json消息能+起来
回复

使用道具 举报

耗子 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10120
钻石
性别
保密
注册时间
2012-2-18
查看详细资料
 楼主| 发表于 2018-8-21 17:36:25 | 显示全部楼层
chenmoand 发表于 2018-8-21 17:16
大佬我问一下player.spigot().sendMessage( message );
输出一行,可player.spigot().sendMessage( message  ...

不能+哦,只能使用append

评分

参与人数 2人气 +1 金粒 +2 收起 理由
gooding300 + 2 dalao
chenmoand + 1 神乎其技,不服不行!

查看全部评分

回复

使用道具 举报

chenmoand 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1225
钻石
性别
保密
注册时间
2016-6-25
查看详细资料
发表于 2018-8-21 19:00:11 | 显示全部楼层
耗子 发表于 2018-8-21 17:36
不能+哦,只能使用append

谢谢了 大佬
回复

使用道具 举报

gooding300 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10563
钻石
性别
保密
注册时间
2012-4-13
查看详细资料
发表于 2018-8-21 20:11:33 | 显示全部楼层
或许可以去申请个高亮?
http://www.mcbbs.net/thread-540567-1-1.html

评分

参与人数 1金粒 +1 收起 理由
754503921 + 1 这不已经优秀了】

查看全部评分

回复

使用道具 举报

guo1060924736 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
347
钻石
性别
保密
注册时间
2017-8-4
查看详细资料
发表于 3 天前 | 显示全部楼层
如何展示物品呢,用到悬浮事件的Action.SHOW_ITEM类型时,后面new ComponentBuilder()只能加string。如何加入物品的信息?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-8-21 08:59 , Processed in 0.044168 second(s), Total 21, Slave 19 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表