Skip to content

彩色文字生成 ​

生成器把普通文本转成 Minecraft 的 § 格式代码文本,粘到聊天、告示牌、title 命令里直接生效。

§ 格式码本身 ​

颜色码 §0–§9§a§b§c§d§e§f,共 16 色(黑、深蓝、深绿、深青、深红、深紫、金、灰、深灰、蓝、绿、青、红、粉、黄、白)。每个颜色码会重置此前的所有样式码。

样式码:

码含义
§k混淆(字符乱跳)
§l粗体
§m删除线
§n下划线
§o斜体

样式码是叠加的:§l§n 是"粗体带下划线"。我们生成时按固定顺序拼接 k → l → m → n → o,不按用户勾选的顺序——这样同一份配置生成的结果永远一致。

十六进制颜色(1.16+)写作 §x§r§r§g§g§b§b,注意每一位十六进制字符都单独带一个 §:

csharp
// 写成 §x§FF§55§FF 游戏不认,这是实测确认的语法要求
sb.Append(Section).Append('x');
foreach (var c in digits) sb.Append(Section).Append(c);

#FF5555 的正确写法是 §x§F§F§5§5§5§5。

两种输出模式 ​

逐字符精确渐变——每个字符算一次插值颜色,各自带一段 §x 前缀。颜色最顺滑,代价是文本长度暴涨(每个字符多 14 个字符)。

分段渐变——每 N 个字符取一个色,落到 16 原版色里最近的一个。短,兼容旧版本,也受得住告示牌的字数上限。

真正的逐字符渐变,举个具体的例子。输入 AB,从 #FF5555 到 #5555FF:

§x§F§F§5§5§5§5A§x§5§5§5§5§F§FB

彩虹渐变是同一套逻辑,只是色相按 360 * i / 长度 沿色环均分。

标记语法 ​

编辑器用 Markdown 的手感,但只保留颜色这一种格式:

{#RRGGBB 内容}   内联片段着色(3 位缩写也认,如 {#f55 红字})
{#RRGGBB}        从这往后着色,直到下一个标记或 {/}
{/}              复位为默认样式
{#red 红字}      也认原版 16 色的英文名

解析产出"片段列表"(文本 + 颜色),同一份列表既拿去生成 § 代码,也拿去在界面上渲染实时预览——预览和输出共用一套解析,不会出现"预览好看、生成不对"。

没有颜色的片段按界面上的默认样式渲染(默认渐变 #55FFFF → #FF55FF,或者默认单色)。

认不出来的花括号不当错误

用户还在打字的时候,{#xxx 是个半截的标记。解析器遇到认不出的花括号就原样当普通文本,预览里显示原文,而不是弹一个错误把人打断。只有当颜色 token 合法、但后面没有闭合 } 时,才按"开启色"处理——而且如果这段里有换行,也按开启色处理,因为换行通常意味着用户想开一个跨行的着色。

没有 §§ 转义

代码里不存在"两个 § 输出一个字面 §"的支持。想在文本里显示字面 § 字符,做不到。同理,§x 十六进制语法只有 1.16+ 认,老版本要退回 16 色分段模式。

字数统计用的是 McText.Strip——它把 §x 的六组 §+位 整段吃掉,普通色码吃两个字符,剩下的是真正显示的字数。

基于 MIT 许可证(有修改)开源