# 贴图

贴图是本篇教程中对于所有使用原版 **font** 替换以达到显示图片效果的统称。像在服务器中显示下面这种图标的，均是贴图的定义范围内。

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FKeQXpvDEA0qyO6kmDllB%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-05-27%20212643.png?alt=media\&token=e8b77fa6-96d3-4f1d-922f-00f77f99530d)

贴图的作用很大，你可以在服务器的各个角落使用图片代替文字以达到更美观、更有沉浸感的效果。

### 新建一个贴图包（v.3.3.0 版本以前）

第一步：首先这是我们的第一个 **ItemsAdder** 配置，我们需要在 **items\_packs** 和 **resource\_pack/assets** 文件夹下各创建一个名称随意但必须由小写英文、数字和下划线组成的文件夹。

第二步：在 **items\_packs/你新建的文件夹/** 文件夹内新建一个名称随意的 **.yml** 后缀的文件，并使用文本软件打开。这是这个包里的一个配置文件，你可以在一个包（也就是这里的文件夹内）创建无限多的配置文件，它们同属于这个包内。

第三步：在 **resource\_pack/assets** 文件夹内新建与第一步一样名称的文件夹，并在此文件夹内再新建 **textures** 文件夹。

第四步：以此为模板复制到另外的文件夹内，以后你再新建新的贴图包时，只需要改动上面三步已经新建好的文件即可，不必再浪费时间建立文件和文件夹。

### 新建一个贴图包（v.3.3.0 版本以后）

第一步：首先这是我们的第一个 **ItemsAdder** 配置，我们需要在 **contents** 文件夹创建一个新的文件夹，文件夹名称随意但必须由小写英文、数字和下划线组成。

第二步：在 **你新建的文件夹** 下新建两个文件夹（这个文件夹就是包），名字分别为 **configs** 和 **resourcepack**。

第三步：在 **contents/你新建的文件夹（即包名）/configs** 文件夹内新建一个名称随意的 **.yml** 后缀的文件，并使用文本软件打开。这是这个包里的一个配置文件，你可以在一个包的物品配置文件夹（也就是这里的文件夹内）创建无限多的配置文件，它们同属于这个包内。

第四步：在 **contents/你新建的文件夹（即包名）/resourcepack** 文件夹内新建一个文件夹，它的名称就是 **namespace** 的名称，在本教程中，这里的文件夹名称应该和你的包名一致，也就是你第一次创建的文件夹的名称，并在此文件夹内再新建 **textures** 文件夹。

第五步：以此为模板复制到另外的文件夹内，以后你再新建新的贴图包时，只需要改动上面四步已经新建好的文件即可，不必再浪费时间建立文件和文件夹。

### 新建第一个贴图

v.3.3.0 版本以前：使用文本软件打开 **items\_pack/你新建的文件夹/你新建的文件.yml** 文件，将下面的模板内容复制进去：

v.3.3.0 版本以后：使用文本软件打开 **contents/你新建的文件夹（即包名）/configs/你新建的文件.yml** 文件，将下面的模板内容复制进去：

```
info:
  namespace: "你新建的文件夹"
font_images:
  smile: # <----- 这个贴图的id
    path: "smile.png" # <----- 这个贴图的路径
    symbol: "鄿" # <----- 这个贴图替换的字符
    scale_ratio: 9 # <----- 这个贴图的大小
    y_position: 8 # <----- 这个贴图的上下偏移
```

另请注意，贴图id不能出现大写字母，只能是小写字母、数字、下划线组成。

我们以新建一个 `id` 为 `smile` 的贴图为例，在上面的配置中，我们需要做以下操作：

#### `path` 的配置

路径的配置非常关键，出错贴图就显示不出。我们在上文新建文件夹时，特别说明在 `resource_pack/assets/你新建的文件夹` （v.3.3.0 版本以后为 `包名/resourcepack/你新建的文件夹（和包名一致）`）内再新建名称为 `textures` 的文件夹，这时你应该把贴图放置在这个 `textures` 文件夹内，在配置中，无需填写这个 **textures** 的目录。

这么做的原因是，`resource_pack/assets` （v.3.3.0 版本以后为 `包名/resourcepack`）内本质上是原版的资源包，需要遵循原版的资源包结构。英文单词 **texture** 的意思是纹理（也就是很多人理解的材质）的意思，所以，所有的贴图等都需要放置在这个文件夹内才会被读取，其他文件夹是不会读取的。**ItemsAdder** 在读取这个 **smile** 的贴图路径时，如果没有特别再标注其他的 **namespace**，只会从该 **namespace** 下的 **textures** 文件夹开始读取，所以千万不要在前面加上 **textures** 目录。

另请注意，`path` 选项中不能出现大写字母，只能是小写字母、数字、下划线组成。

#### **`symbol` 的配置**

这个选项的可选的，但笔者是非常推荐的。如果你不配置该选项，**ItemsAdder** 将会随机为你分配一个字符作为替换。如果资源包内的 **font** json配置被各种原因丢失数据、替换等，会再次打乱重新分配，如果你直接使用字符在各个地方显示该图片，将会导致你不得不重新配置一遍，这是非常麻烦的，所以直接固定死是非常稳妥的方式。

这里的 `symbol` 不建议随意设置自己喜欢的字符，因为玩家可能会误打误撞发现或者拆解你的资源包发现替换的字符，然后在服务器里使用替换的字符在聊天框刷屏等等。最为稳妥的办法是使用 **Unicode** 字符。**Unicode** 字符一般不会被使用，它一般以 **\u** 开始，后续跟着四个字母或者数字。例如 `\uE026` 是一个正确的 **Unicode** 字符。

例如：

```
  space1:
    path: 'font/space_nosplit.png'
    symbol: "\uE041"
    y_position: -32768
    scale_ratio: -7
```

在游戏中，我们需要将 Unicode 字符变为中文字符以使得其显示，我们可以通过 [这个网址](https://c.runoob.com/front-end/3602/) 进行转换。在左边输入 Unicode 字符后点击上方的 **UNICODE转中文** 按钮获取游戏内实际使用的替换字符。

{% hint style="info" %}
由于本篇教程编写时间较早，全篇查找此错误用法费时费力，故只在此说明，后续不再提及。
{% endhint %}

#### `scale_ratio 和 y_position` 的配置

这点是非常麻烦的所在，由于你制作的贴图的替换字符，而字符显示（也就是贴图显示）的位置很可能和你的理想位置不同，包括地方大小不匹配或者上下不匹配，所以你必须修改这里来匹配。

`scaleratio` 是按比例缩放大小，以原图大小为标准。`y_position` 是上下调整大小，以像素点为单位。

如果你是用于聊天框内（也就是一行文字大小），那么上面所给的示例就是非常标准的两个数据。

我们需要不断调试、修改这两个数据，找到贴图能够在正确位置显示的最佳合适值。

#### 另外的可选选项配置

另有 **permission** 和 **show\_in\_gui** 选项可使用，它们分布是玩家使用该贴图需要的权限节点和是否在 `/ia` 中显示该贴图。

由于在 **首次使用** 一章中，我们并没有主动给予玩家在任何位置使用表情（也就是这些贴图）的权限，所以这里不填写，玩家也无法正常使用。

另外的 **/ia** GUI中，由于这里并没有设置另外一个概念——类别，所以玩家也不会在 **/ia** GUI中看到这个。

上面两个选项是可有可无，建议直接省略，除非特有需要，后文不再提及。

包括这两个选项的物品配置如下：

```
smile:
  permission: smile
  show_in_gui: true
  path: "smile.png"
  symbol: "鄿"
  scale_ratio: 9
  y_position: 8
```

#### 使用贴图

当你完成上文的操作后，在使用 `/iareload` 和 `/iazip` 后，你只需使用 `symbol` 选项内的字符即可显示该贴图，以该配置为例子，即为 `鄿`。

### 贴图的限制

* 贴图必须是 **256 x 256** 分辨率及以下。
* `y_position` 的值必须小于 `scale_ratio`。
