# 📖 基本字体知识

## 试着用不同的字体发送文本

Minecraft的聊天组件包含许多装饰符，其中之一是字体。大多数字符存储在 `minecraft:default` 字体中。细字体字符存储在 `minecraft:uniform` 字体中，附魔台字符存储在 `minecraft:alt` 字体中。

你可以通过运行简单的命令发送带有字体的文本。很容易发现，不同字体中相同的文本具有不同的形状。

```TXT
/tellraw @p {"text":"Hello!","font":"minecraft:default"}
```

<div align="left"><img src="https://content.gitbook.com/content/s87C1OsSEHzpv1XHzgIN/blobs/ICWyWlnWgMPRmMGpeg7x/image.png" alt="" width="261"></div>

```TXT
/tellraw @p {"text":"Hello","font":"minecraft:uniform"}
```

<div align="left"><img src="https://content.gitbook.com/content/s87C1OsSEHzpv1XHzgIN/blobs/1ml9Z9ydUpQ2WYJXt7xC/image.png" alt="" width="269"></div>

```TXT
/tellraw @p {"text":"Hello","font":"minecraft:alt"}
```

<div align="left"><img src="https://content.gitbook.com/content/s87C1OsSEHzpv1XHzgIN/blobs/jbhmDD0APqEBFlwNcNKu/image.png" alt="" width="245"></div>

## **Minecraft wiki对“Bitmap provider”的解释**

> **Bitmap provider**
>
> `bitmap` 提供者定义简单的位图字形 - 来自纹理的字形。它引用单个PNG文件，适用于其中的字符列表，可选的高度和上升值。
>
> 纹理可以是任何尺寸，字形可以是任何颜色。白色字形可以在游戏中着任何其他颜色。其他颜色在重新着色时保留该色调。黑色字形始终显示为黑色。根据包含任何alpha值大于0的最右列像素自动确定字形的宽度。字形本身不能大于512×512像素。`chars` 字段是一个字符串列表。该列表中每个字符串条目中的字符映射到引用文件中的相应位置。根据列表中字符串的数量以及该列表中最长字符串的长度，纹理被均匀地划分。
>
> `height` 字段是生成字形的比例。该比例通常应与字形的单个高度匹配，或者是其幂。虽然允许在此推荐范围之外的高度，并且是有效的，但在游戏中渲染时，位于提供程序中声明的字形出现扭曲。`height` 字段是可选的。如果未定义，则默认为8，而不管底层纹理分辨率如何。
>
> `ascent` 字段是应用于字形的垂直偏移量。在排版学中，ascent 是基线到大写字母的高度（字形顶部）的距离。字形中的基线是下降部分开始的线。例如，在小写字母 y 中，y 的底部延伸到基线之外。在Vanilla中，当高度为8时，上升值大多为7，因为下降部分为1。

**在 CustomNameplates 中，你可以简单地理解为**

```yaml
image: bell # 图像文件
height: 10  # 图像的尺寸
ascent: 4   # 字符的Y位置（不得高于height）
```

## 与 minecraft:default 相比，使用其他字体的好处是什么？

我们可以很容易地看到，ItemsAdder 和 Oraxen 都使用该字体来注册自定义图像。问题是，“minecraft:default”字体是默认字体，因此玩家如果找到原始字符，就可以发送图像。因此，这些插件将尽力阻止玩家发送这些字符。如果你不将图像注册到 minecraft:default 字体中，你就不必担心玩家发送你的自定义图像。

## 如何在其他插件中使用 CustomNameplates 占位符

并非市场上所有的插件都支持自定义字体。如果你看到一个支持 "MiniMessage" 和 "PlaceholderAPI" 的插件，那么它有90%的机会支持它。有些插件开发者会将 MiniMessage 转换为旧版格式，并让 Spigot 处理旧版颜色代码，这真是遗憾。
