# 总体配置结构了解

在阅读完 **首次使用** 一章后，恭喜你来到了第二章。在本章你将基础地掌握 **ItemsAdder** 的一些基础知识。

### ItemsAdder 插件内的大概框架

在此之前，我们需要了解 **ItemsAdder** 文件夹内的大概框架。请注意，是大概。各个文件的具体作用，将在后文陆续揭秘，此时的你不宜了解太多。

我们会发现该文件夹下有以下部分组成：

* **contents** 文件夹。这是贯彻整个教程的文件夹，也是整个插件的核心所在。这里保存着所有 **ItemsAdder** 你所添加的内容的配置。
* **lang** 文件夹。是英文单词 **language**（语言）的缩写，现在不用我说，你也知道这是干什么的吧。
* **storage** 文件夹。这是保存 **ItemsAdder** 一些缓存记录的数据的地方，在教程没有特别标注的地方，请不要动这里。轻则物品的 **CustomModelData** 值全部被打乱，重则你的资源包就因此报废了，你要花上一整天时间去修补到底哪里不小心出现问题了。（此时的你可能看不懂到底是什么，总之记得这里很危险，不要乱动，就对了）
* **output** 文件夹。你第一次使用时可能看不到这个文件夹，它的作用笔者将在后文揭秘。
* **config.yml** 文件。是英文单词 **configuration**（配置）的缩写，同样不用我说了。
* **ia\_gui.yml** 文件。配置 **/ia** 指令后打开的各种 **UI** 的文件。

以上 **6** 个文件，在你基础的配置完 **ItemsAdder** 以后，基本只会看 **contents** 文件夹内的内容了，所以整个插件并不难，需要的是前期你的耐心。

### contents 文件夹

那么，很显然，**contents** 文件夹是我们关注的重心，所以我们还需要对它进行研究分析，请再次打开它，我们可以发现里面包括一个名字为 `_iainternal` 的文件夹，这是 **ItemsAdder** 为你提供的基础包。

从这我们似乎不能发现什么，你可以 [点击这里](https://github.com/ItemsAdder/DefaultPack/releases) 下载 **ItemsAdder** 为你提供的示例配置。

打开示例配置，我们不难发现，`contents` 文件夹内包含的是其他若干文件夹，这些文件夹对应一个新的概念：**包**，你可以做物品包、盔甲包，这些文件夹名称就是包的名称。

### 包文件夹内的组成

打开任意一个包所对应的文件夹，我们发现它由如下 **2** 个文件夹组成：

* **configs** 文件夹：这个包的物品配置文件所在的文件夹，一个包可以由若干物品配置文件，物品配置文件不止止是物品，还有其他内容，只是为了方便理解叫做物品配置文件，你可以在下一节快速了解一下它。
* **resourcepack** 文件夹：这个包的资源包所在的文件夹。**ItemsAdder** 最终发给玩家的资源包是所有包的子资源包打包后自动生成的，这时 **output** 文件夹作用就体现出来了：它的作用就是存放这些包的子资源包最终打包生成的总资源包。

### resourcepack 文件夹

我们先不着急 **configs** 文件夹包括的物品配置文件的学习，因为下面我们重点学习的就是这个，在此之前，我们先来把目光投放到 **resourcepack** 文件夹身上。我们需要了解一个新的概念，我们称为 **namespace**，中文意思为命名空间。

我们随意打开一个网上下载的资源包，发现一进入压缩包预览页面，映入眼帘的往往是一个 **minecraft** 文件夹，这就是 **Minecraft** 原版自身给自己的命名空间，游戏自身会在这个命名空间内找到自己所要的纹理、模型、音效等等。

而我们自己也可以创建一个新的命名空间，把自己想要增加的纹理、模型、音效等等放入进去，更好的管理它们，在需要修改、删除它们时能快速定位到其所在目录。

在上文我们已经介绍了包的概念，在示例配置中，各个包下的 **resourcepack** 文件夹正是子资源包，而打开这个文件夹映入眼帘的正是 **namespace**！

### 包和 namespace 的关系

首先是包的作用。例如，你可以把一些武器放在一起，再把另外的盔甲放在一起，这时，包的作用就是分类了。**ItemsAdder** 并不限制你的包到底是怎么区分的，但很显然在这里，笔者推荐你使用“物品分类”进行配置。

这些由你想设置的包的名称和各包下 **resourcepack** 文件夹下的 **namespace** 不必一模一样，而且一个包也可以有多个 **namespace**，但在本教程为了培养良好习惯，全部默认只能一样且一一对应。**namespace** 用于内部管理，而玩家无法看到，所以你不必填写中文，也不能使用中文，只能是 **小写英文、数字和下划线** 组成。

在使用插件各个指令，或者配置 **ItemsAdder** 内物品，乃至与 **ItemsAdder** 挂钩（兼容）的插件时，我们在填写 **ItemsAdder** 物品的名称时，非常建议你写 `namespace:id` 的格式，例如 `weapon:starter_sword`。**namespace** 即是文件夹的名称，**id** 即是物品的ID。

关于各包 **resourcepack** 文件夹的各命名空间下的具体结构，将在后文中陆续介绍。
