彩色字体

By MCSugar_cane    2017/11/25

在1.8出现之前,我们可以在游戏中愉快的打出彩色字体,也就是MC中的彩色符号"§"。不过,在1.8出来之后,惊奇的发现,竟然无法打出符号"§"了!不过,我们可以从告示牌json转换后获取到这个万国码,详细方法如下。原理适用于1.8以上全版本。

我的世界中打出颜色字体



代码:

首先执行这个代码以获取一个告示牌:

  1. /give @p minecraft:sign 1 0 {BlockEntityTag:{Text1:"{\"text\":\"右键戳我=w=\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\\\"say \\u00a72\\u00a7lwww.Ganxiaozhe.com!\\\"}\"}}"}}

然后将其放在地上,并右键,该告示牌处就会出现一个命令方块,点开一看,就会发现彩色字体俨然在里面了~

我们将这个指令拆开来看,告示牌里的clickEvent无非就是触发放置一个具有{Command:""}数据值的命令方块。受数据值影响,被放置的命令方块中包含了指令say \u00a72\u00a7lwww.Ganxiaozhe.com!(此处\\u00a7已经被转义为了§)。若将这个指令直接执行,可以看到其显示的是\\u00a72\\u00a7lwww.Ganxiaozhe.com!而不是有色颜色字体(其\\u00a7未被转义)。

之所以同样的指令会出现两种截然不同的效果,其实就是万国码"\\u00a7"没被转换啦。它可不会就这样乖乖地变为我们想要的符号,要将它转义,就得要使它在json的管辖范围中。例如/tellraw @a ["\u00a72\u00a7lGanxiaozhe"],执行后发现其输出为有色字体,说明"\u00a7"成功被转换为§啦。利用这个特性,我们只需要在tellraw加上点击事件"clickEvent",其中代码为放置一个有Command:""的命令方块,则就能借助json的转换来打出颜色代码啦。

如果你不知道颜色对于的转义码,下面这张颜色对照表没准能帮到你

我的世界颜色对照表

该颜色代码适用于所有指令,不限于say,tellraw,title,give的display,summon的customName...


就好比创建一个彩色的记分板显示名,创建后将其显示在名称下方,就可以看见其效果了(该显示下不能看到自己的)。

  1. /give @p minecraft:sign 1 0 {BlockEntityTag:{Text1:"{\"text\":\"右键戳我=w=\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\\\"scoreboard objectives add playerHp health \\u00a7e生命值\\u00a7c❤\\\"}\"}}"}}
  2. /scoreboard objectives setdisplay belowName playerHp

注意:

按照上述结构,执行下方指令应可得到一把金色加粗名字的木剑

  1. /give @p minecraft:sign 1 0 {BlockEntityTag:{Text1:"{\"text\":\"右键戳我=w=\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\\\"give @p wooden_sword 1 0 {display:{Name:"\u00a76\u00a7l轻剑"}}\\\"}\"}}"}}

可将它激活,却出现了这样的反馈信息数据标签分析失败:Unexpected token '\' at: \u00a76\u00a7l轻剑"}}\\\"}\"}}"。我们分析一下告示牌执行命令的内容,无非就是是放置一个有Command数据标签的命令方块。而其格式为Command:"",是通过引号来划分哪些是属于数据标签Command的监管范围。这样一来,很明显在上面指令中Name后面的引号将Command数据标签结束了。变为了/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:"give @p wooden_sword 1 0 {display:{Name:",\u00a76\u00a7l轻剑"}}。同样的,上面Command:数据标签后面加"\\\"的原因是为了区分value和Command的结束位置。我们也给Name加上斜杠来区分它与Command的结束位置,指令如下

  1. /give @p minecraft:sign 1 0 {BlockEntityTag:{Text1:"{\"text\":\"右键戳我=w=\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\\\"give @p wooden_sword 1 0 {display:{Name:\\\\\\\"\\u00a76\\u00a7l轻剑\\\\\\\"}}\\\"}\"}}"}}

也许会你疑惑为什么Name:位置加了那么多斜杠,其实斜杠转义是有规律的:2^n-1(n>1),如下

在第一层""引号中,不需要加斜杠转义

在第二层""引号中,需要加3个斜杠——2^2-1=3

在第三层""引号中,需要加8个斜杠——2^3-1=7

在第四层""引号中,需要加8个斜杠——2^4-1=15

以此类推......



辅助工具:

1.8[CBL]在指令中添加颜色代码: 甘小蔗极速下载

1.9颜色黑科技: 甘小蔗极速下载



欢迎加群交流划水:481528679