> This is part 1 of 7 of the full documentation (pages 1–100 of 634).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.superiormc.cn/llms-full.txt/1
> Page index: https://docs.superiormc.cn/llms.txt

# 欢迎

我的世界高版本服主教程合集 - 我的世界开服教程 - 我的世界服务器 - 我的世界服务器 - 我的世界怎么开服 - 我的世界开服攻略

## 加入我们

QQ交流群：

* 高版本服主交流群：833821060
* Geyser互通服主交流群：1050991989

## 最近更新

免费的高质量高版本服务端要不要？

* 高版本RPG服务端（完全免费）：<https://docs.superiormc.cn/fu-wu-duan/mian-fei-fu-wu-duan-gao-ban-ben-rpg>
* 高版本IA服务端（完全免费）：<https://docs.superiormc.cn/fu-wu-duan/mian-fei-fu-wu-duan-gao-ban-ben-ia-duan>

## 如何开始阅读一篇教程？

电脑版用户在屏幕的左上角有蓝色一行字，鼠标触碰这行字即可切换教程。

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FpcY1oBBGZ8esMlX9QEf9%2Fimage.png?alt=media&amp;token=75610084-8351-4616-8134-224915954800" alt=""><figcaption></figcaption></figure>

手机用户则在屏幕正上方也有类似蓝色一行字，点击一下即可切换教程。

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FPhlBY9mGzpHfqkWhFYNW%2Fimage.png?alt=media&amp;token=9fab0da1-93da-46c4-a0ca-141e63994325" alt=""><figcaption></figcaption></figure>

## 计划新增的教程

* BetterGUI Wiki

## 赞助我们

编写教程耗费了我大量的时间，同时此前 MCBBS 关闭导致鄙人绿宝石直接无了，约等于一分钱没赚，因此，如果您认为这些教程对您有所帮助，可以赞助：

{% embed url="<https://afdian.net/a/superior>" %}


# 插件推荐：终极商店

## 推荐：更多插件推荐

MCBBS 关了不知道哪些插件好用？不如看看下面的这些插件吧！

{% embed url="<https://docs.qq.com/doc/DSnFacGxjbGZMSmVu>" %}

## UltimateShop 终极商店 ￥68，有免费版

简单描述：解决高版本很多服主在使用商店插件的痛点、基于 NBT 匹配物品价格、支持动态价格，甚至支持PAPI和数学公式、内置交易又好用的菜单系统，如果你的服务器的菜单不复杂，只是点击后执行指令，这个插件完全可以做一样事情。购买后可以提供一套月卡菜单，完全基于UltimateShop的菜单系统。同时商店有基岩版菜单无缝衔接功能。

常见的商店功能：动态价格、季节价格、每日商店、物品限购限卖、一键出售、选择数量菜单、折扣等等，都有，别人没有的，我们也有。国外ShopGUI+卖20刀，这个插件5折的价格，功能程度是ShopGUI+的10倍不止。也可以尝试免费版，免费版能够满足80%服主使用需求。

免费版下载地址：

{% embed url="<https://www.spigotmc.org/resources/ultimateshop-menu-dynamic-price-limits-apply-settings-sell-all-and-more-1-17-1-20.110601/>" %}

## 付费加QQ：1686965528

## 无需担心您的自定义物品发生变化

* UltimateShop 使用 NBT 而不是整个物品进行判断，我们目前支持 MMOItems、eco、ItemsAdder、NeigeItems、Oraxen、MythicMobs 等物品插件的直接兼容支持。即使物品被玩家添加了附魔、被铁砧重命名过、被其他宝石插件等添加了新的 Lore，UltimateShop 仍可以自动检测到对应物品并允许玩家出售。
* 您无需使用指令给予玩家物品，UltimateShop 内置的物品语句也完美兼容以上插件的物品，您只需要 2 行配置即可轻松搞定某个插件的某个物品的购买与回收功能。
* 来自这些插件的物品还不够完美，您需要增加别的内容？UltimateShop 支持您在这些插件物品的基础上再修改，例如更改名称、替换 Lore 等。

## 菜单

* UltimateShop 内置自定义菜单系统，物品 slot 仿 TrMenu 配置，更加直观。
* 可通过商店功能自定义每个商店商品的排布方式，并为其添加自定义按钮。
* 菜单内（包括商店内）可增加自定义按钮，按钮触发的动作、条件可自定义。
* 我们提供了一个使用 UltimateShop 菜单功能制作的月卡，其英文版可在原帖链接加入 Discord 群里查看，中文汉化版可在购买付费版后获得。

## 商品限制、冷却

* UltimateShop 支持您为商品设置全服、个人的商品购买、回收限制（共 4 个属性）和全服、个人的商品购买、回收冷却（共 4 个属性），累计 8 个属性，这往往是其他付费商店插件才会提供的功能！
* 限制、冷却支持 2 种重置模式，包括每日定时重置、一定时间后重置。也支持不再重置，同时对于限制也提供指令配合其他插件实现其他模式的重置。
* 商品的个人限制支持通过插件提供的条件语句设置各个玩家不同的限制值，您可以设置成 VIP 玩家拥有更多的限制。个人和全服限制值的配置选项也支持使用数学符号和 PlaceholderAPI 中的变量符实现动态限制。您可以通过动态限制功能实现真实库存功能（即玩家购买一个此商品前提是有前提玩家出售了此商品，实现商店无法无中生有，保持服务器经济平衡），详见 Wiki。
* 不同于商品限制，商品冷却是玩家购买或者回收一次商品后必须等待一段时间才能再次购买或者回收。一次代表某一次购买或者回收，不代表玩家此次只能购买或者回收一个商品。

## 超级自定义的价格与商品

* UltimateShop 的价格与商品均支持物品或者货币。支持的物品插件在上面介绍已提及，同时支持 10+ 经济插件。
* 无论是价格还是商品，都可以设置多个，并为它们设置适用条件，而不是传统商店插件的一件商品下只能有一个物品或者货币，以及一个对应的价格。
* 配合多价格和条件系统，您可以为一年四季的同一件商品设置不同的价格，详见 Wiki。
* 配合价格支持数学符号和 PlaceholderAPI，您可以设置满足条件的玩家获得商品的折扣，详见 Wiki。\*免费版需配合其他插件实现，付费版可直接适用插件内置的折扣变量符。
* 配合多商品（以及多价格）和条件系统，您可以设置每日商店，每天商店都会出售随机的物品。\*免费版需配合其他插件实现，付费版可直接适用插件内置的随机变量符。
* 价格与商品的数量支持数学符号和 PlaceholderAPI，您可以以此设置某件商品为动态市场化价格。这个商品买的人越多，那么它就越贵，卖的人越多，它就越便宜，详见 Wiki。
* 得益于商品无需拘泥于物品，您可以设置金币兑换点券，并设置每日购买限制，增加服务器活力等操作，无需使用其他的插件。

## 物品语句和经济语句

* UltimateShop 支持在价格与商品；菜单、商品的显示物品等位置设置物品语句和经济语句。
* 得益于 XItemStack 库的支持，您可以在商店内出售非常详细的原版物品，例如指定样式的披风、刷出指定生物的刷怪笼等。同时，我们也修改了 XItemStack 的一些代码，使其可以支持部分 Mod 物品，支持其他插件注册到服务器的附魔，支持自定义可疑的沙子中埋藏的物品等等多的内容。详见 Wiki。
* UltimateShop 的第三方插件语句让您仅需 2 行即可直接获取来自其他插件的物品，无需其他配置。
* 经济语句支持原版经验值和经验等级、10+ 第三方经济插件。

## 动作和条件

* UltimateShop 支持设置商品购买或者回收、按钮点击触发后、打开菜单后的动作和条件。
* 动作如执行指令、生成生物、播放音效、传送玩家，都有！
* 条件如 PlaceholderAPI 比较、世界、生物群系、权限节点，都有！

## 其他商店插件都有的功能，或者它们也没有的功能

* 增量购买菜单：可在此菜单选择你想要购买或者回收的数量，并可购买或者回收。支持确认按钮分开购买和回收，避免玩家误触。支持直接显示玩家消耗的价格。限制将会自动循环计算玩家购买或者回收后的情况，无需动态限制导致玩家通过此功能绕过限制。
* 一键回收菜单：直接在打开的菜单中拖拽物品，关闭菜单即快速回收，无需重复点击按钮。回收自动遍历全服商店，满足回收情况的物品将会自动回收。
* 插件附魔：可在物品语句中新增插件附魔，目前仅支持 AdvancedEnchantments 插件。其他许多附魔插件，都是现代化附魔插件，它们的附魔注册到服务器中，因此直接像原版附魔那样添加即可。\*仅付费版。
* 回收棒：使用回收棒点击容器即可快速回收其中包含的物品。\*仅付费版。
* 基岩版菜单：使用 Floodgate 后插件可自动检测基岩版玩家，并自动将 Java 版箱子 UI 转换为 基岩版 的 FormUI，基岩版玩家再也不怕左右键无法区分。同时也支持基岩版 FormUI 的按钮设置自定义图标。\*仅付费版。

**其他付费版功能未作介绍：BungeeCord 同步、GUI 编辑器（此编辑器尚未完成）。一些付费版功能，如折扣、随机变量符制作的每日商店等已在上文介绍。**

**因篇幅所限，其他若干功能未做介绍。**

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FrPhOCngnj2phBYdgPy24%2Fimage.png?alt=media&amp;token=58a63c01-0923-4ab7-ae82-1936f9e94551" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F8uWe8diT6VswKTEbPAUf%2Fimage.png?alt=media&amp;token=1257da53-bdc2-4199-8ae0-5c845521fec5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FOOskeZagJrW0U9FzMppH%2Fimage.png?alt=media&amp;token=524fb60d-d369-41de-a3ae-915f04ff095e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FTaWdwfwymzo0jmmnLfFW%2Fimage.png?alt=media&amp;token=6424cc3a-cb83-4160-b2fb-4ac7ee5558f3" alt=""><figcaption><p>自1.10.0版本起统计</p></figcaption></figure>


# 插件推荐：自定义考古

## 市面上唯一的自定义考古插件：￥80

简单介绍：目前市面上唯一的真正意义上的自定义考古插件，不用我们这个插件，你只能再通过使用 Mod 做到类似的效果。自定义新的考古方块、工具，工具支持自定义发掘时间、奖励完全自定义，甚至支持MM怪物、执行指令等，使用1.19.4+全新的展示实体，而不是IA远古音符盒，无方块类型上限，基于发包，不会出现方块莫名其妙无法破坏、一直都在等传统自定义方块可能出的问题，就算出现了，重进服务器也能解决。

同时提供比IA自定义程度还高的考古方块生成系统，支持自定义高度、生物群系、结构（需1.20.4核心），支持设置类似原版矿石的高斯算法。

**购买后还送你一套配置+材质，等于插件+配置+材质80拿下，这个价格在MCModels怕是只能买到材质包。**

## 付费加QQ：1686965528

## 弥补你的服务器玩法拓展不足的问题

* CustomArcheology 作为一个拓展性玩法插件，可以弥补你的服务器玩法不够深入、不够留存玩家的问题。你可以通过 CustomArcheology 大大提高 1.20 版本新增的考古玩法的拓展性，甚至能够以假乱真，让玩家认为你的服务器装了某个新的 Mod！
* CustomArcheology 在提供这些拓展玩法同时，也满足了用户想要的自定义性，插件提供的所有功能几乎都可自定义。

## 自定义考古方块

* 你可以在 CustomArcheology 添加无数多的自定义考古方块，每个考古方块都可设置不一样的参数。
* 可自定义考古方块的名称。
* 可自定义考古方块的战利品。
* 可自定义考古方块可被哪些考古工具发掘。
* 可自定义考古方块的动画材质。
* 可自定义考古方块发掘完毕后替换的原版方块。

## 自定义考古工具

* 你可以在 CustomArcheology 添加无数多的自定义考古工具，每个考古工具都可设置不一样的参数。
* 可自定义考古工具对指定考古方块的发掘速度和单独的新的战利品表。
* 可自定义考古工具的显示名称和Lore。
* 可自定义考古工具的合成配方。

## 自定义战利品表

* 你可以设置无数多的战利品表，可以为每个自定义考古方块设置单独的战利品表。
* 基于自带的动作系统，支持设置指令、怪物（如 MythicMobs）、传送等不一样的战利品。
* 战利品支持设置第三方插件物品，例如 eco 全家桶、MMOItems、MythicMobs、NeigeItem 等。
* 玩家发掘考古方块时显示的战利品和实际获得的战利品可不一样，防止玩家提前发现战利品不好而取消发掘。

## 自定义生成规则

* 你可以为每个自定义考古方块设置生成规则。
* 已加载的区块仍可生成自定义考古方块，但是已生成过考古方块的区块将不再重复生成。
* 可设置自定义考古方块生成的世界。
* 可设置自定义考古方块生成的生物群系。
* 可设置自定义考古方块生成的高度。
* 可设置自定义考古方块只在指定结构（如远古城）。
* 可设置按照高斯算法生成考古方块，仿照原版矿物分布模式。
* 可设置自定义考古方块在每个群系或者结构的生成次数。

## 资源包

* 插件可自动生成资源包，并合并到 ItemsAdder 或者 Oraxen 插件中。

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FPX3jpwrMR6CL7L4pq4sE%2Fimage.png?alt=media&amp;token=6e1630b7-8311-47f5-8b09-fe99aeb59931" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FK9Ly7FGLnjsGd9noSAov%2Fimage.png?alt=media&amp;token=55fddcce-10c1-456f-baf9-602079ba458e" alt=""><figcaption></figcaption></figure>


# 插件推荐：附魔槽位

## 全能附魔槽位，史诗级自定义 ￥55

简单介绍：限制一个物品能够拥有的附魔上限，附魔槽位。功能多，自定义程度史诗级的大。

## 付费加QQ：1686965528

## 基于改包的附魔槽位

* EnchantmentSlots 是一个基于改包的物品附魔槽位插件，不同于其他同类型插件，EnchantmentSlots 永远不会实际更改您的物品 Lore，这意味着如果您不想使用这个功能了，将插件直接删除即可，EnchantmentSlots 仿佛从未来到您的服务器。如果条件允许，您也可以设置 EnchantmentSlots 甚至不会给物品加上附魔槽位 NBT，添加 NBT 作用是记录物品的附魔槽位数量，而无需每次通过插件配置计算得出，节省服务器性能。
* 得益于基于改包，附魔的改变等都是实时的，不会是同类型非改包插件的延迟甚至不能识别附魔的改变。
* 不仅仅如此，EnchantmentSlots 可以很好的与其他非基于改包的物品插件很好兼容，这些物品插件不会检测到 EnchantmentSlots 添加的物品信息，因此这些物品能够正常被您的物品插件所识别，不存在兼容性问题。
* 最新版本支持了第三方附魔插件的附魔排序。

## 自定义默认附魔槽位

* EnchantmentSlots 允许您为每个物品、每个玩家设置不同的默认附魔槽位。每个物品支持第三方插件的物品，甚至 MMOItems 的物品品质，每个玩家以条件语句识别，例如不同权限节点的玩家拥有不同的默认附魔槽位。
* 支持识别到第三方插件的附魔，如 EcoEnchants、ExcellentEnchantments、MythicEnchants 等。请注意，AdvancedEnchantments 不是真正意义上的附魔插件，因此 EnchantmentSlots 无法支持它。

## 自定义附魔槽位 Lore 显示

* EnchantmentSlots 允许您在 EnchantmentSlots 以及其他物品插件中使用 EnchantmentSlots 提供的“物品变量符”，可以显示物品的附魔、附魔等级、附魔槽位数量、当前附魔数量等。其他物品插件中使用，只需要将我们的变量符写在对应物品插件的 Lore 中。
* 显示第三方插件附魔时，会自动同步原插件附魔品质颜色。
* EnchantmentSlots 支持您设置模糊匹配，含有指定名称、Lore的物品不显示附魔槽位 Lore，指定物品类型（支持第三方插件物品）不显示附魔槽位Lore，带有 Lore 的物品不显示附魔槽位 Lore 等。
* 附魔槽位 Lore 怎么显示、在哪显示、显示什么，通通都可自定义。

## 物品附魔槽位检测

* EnchantmentSlots 支持原版附魔、铁砧、EnchantGui（附魔 GUI 插件）和玩家与物品交互后检测物品附魔槽位，其中原版附魔、铁砧、EnchantGui 如果检测附魔超出，将会取消此次附魔。与物品交互如果检测到附魔超出，将会自动移除超出附魔。有物品实际发生变化时（当物品添加附魔时，就会触发，因此实现完美闭环），也会自动检测物品附魔槽位。总而言之，玩家想卡 bug 超限制？通通不可能，即使成功卡出，也会被插件自动删除。

## 扩槽器

* EnchantmentSlots 支持使用扩槽器扩充物品附魔槽位。扩槽器支持设置增加的槽位数量、成功几率、适用的物品、成功和失败动作。
* 支持设置玩家通过扩槽器最多获得的附魔槽位上限，也支持设置每个玩家、每个物品的最大扩槽数量。

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FvpKlbOC0j0s59u871z8q%2Fimage.png?alt=media&amp;token=ce467224-22de-4a14-885f-aca27bb5577a" alt=""><figcaption><p>这个附魔等级是支持使用罗马数字的</p></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fw3c3OOSkj9cgJUq0b5CD%2Fimage.png?alt=media&amp;token=ae0e2a7f-3640-4ff1-8792-af31eb943a52" alt=""><figcaption></figcaption></figure>


# 插件推荐：翻牌抽奖、转盘抽奖

## 适合中国宝宝的抽奖插件&#x20;

## 翻牌版￥80 转盘版 ￥55 付费加QQ：1686965528

一句话介绍：让玩家眼前一亮的抽奖插件，功能丰富，自定义程度超级史诗级的高，传统抽奖箱插件基本可以吊锤。

**购买送全套IA配置+UI材质+插件，这个价格在 MCModels 只能买到 UI！等于卖UI送插件！**

## 中国人自己的抽奖魔法

* FlipCard 不同于市面上其他的抽奖插件，那些抽奖插件大都都是模仿国外 CSGO 等游戏的开箱，而 FlipCard 仿照的是国内的抽卡抽奖，更符合中国玩家游戏体验。
* 流畅的翻牌动画，甚至支持完全自定义动画，奖励、价格自定义程度非常高！
* 自定义奖励稀有度，并根据奖励的稀有度设置对应的卡牌边框。
* 支持设置翻牌时限，让玩家必须在紧张的时间内快速选择性价比最高的奖励。
* 资源包加持，让你的抽奖体验与众不同！支持自定义翻牌 UI 材质、卡牌材质、动画效果。
* 与知名地牢插件 MythicDungeons 直接挂钩，可在该插件的地牢构建 UI 中找到 FlipCard 注册的新动作，全球仅此一家！（如果有也是后来的）

## 超级自定义的价格体系

* FlipCard 不同于市面上其他抽奖插件，我们的价格支持动态体系。
* 你可以设置玩家在一次翻牌奖励中，卡牌的价格随着翻牌次数增加而上涨。第一次翻牌不要钱，第二次要5000金币，第三次要50点券。
* 你可以设置玩家需要消耗物品来翻牌，包括玩家获得物品作为奖励，支持市面上绝大多数的物品插件，例如 ItemsAdder、Oraxen、MythicMobs、NeigeItems、MMOItems、eco全家桶等。就算不支持，你也可以使用插件内置的物品保存指令一键保存物品，并使用。
* 使用与 UltimateShop 完全相同的价格判断体系，无需担心物品的名称、附魔、Lore发生变化插件就不认的问题，只要物品 ID 正确，我们就能找到它！
* 你还可以在价格中设置 PAPI 和数学符号，设置自己的期望价格公式，真正实现肉鸽游戏的精髓，配合地牢插件，玩法上升一大台阶！
* 可以为同一次翻牌设置多个价格，如果玩家不满足前面的价格，可以使用后面的价格。例如你的翻牌需要5个魔法石，玩家没有这个魔法石怎么办，可以直接使用第二个价格：点券，吸金满满同时也不让0氪玩家感觉一无所得。
* 你觉得还不是不行？我们还提供条件系统，可以让满足条件的玩家使用更多的价格，你完全可以设置 VIP 玩家享受 8 折优惠。

## 超级自定义的奖励体系

* FlipCard 除了价格做的非常完美，奖励也很漂亮。
* 支持以动作作为奖励，奖励不拘泥于给予玩家物品，还可以生成怪物、执行指令、传送玩家等。
* 奖励是物品的话，则物品数量支持随机，让玩家每次翻牌都有不一样的惊喜。
* 支持自定义奖励权重，自动计算概率。
* 奖励的权重支持动态计算，支持使用 PAPI 和数学符号，设置自己想要的奖励期望公式。
* 免费的奖励支持在玩家关闭翻牌 UI 后自动领取，避免玩家错过重要的福利奖励。
* 即使玩家不小心关闭了翻牌 UI，也可以在规定时间内重新打开。
* 奖励同样也支持条件系统，可以让满足条件的玩家使用不一样的奖励权重，你完全可以设置 VIP 玩家更容易抽到稀有奖励。

## 翻牌版效果图

<figure><img src="https://proxy.spigotmc.org/b7cd6bb26f9dd526d62238b2fb0097e47f67bb5c?url=https%3A%2F%2Fi.imgur.com%2Ff5Ho0zC.gif" alt=""><figcaption></figcaption></figure>

<figure><img src="https://proxy.spigotmc.org/995acf464dc2e90c29e31df3823c23c7c3a722d6?url=https%3A%2F%2Fi.imgur.com%2FfAAd3Ml.gif" alt=""><figcaption></figcaption></figure>

<figure><img src="https://proxy.spigotmc.org/7143c74744ab111c446fa28fc5dc865f6e52efc3?url=https%3A%2F%2Fi.imgur.com%2FOF18Mgb.gif" alt=""><figcaption></figcaption></figure>

## 转盘版效果图

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fv1xLADCzwu05nmn3wzvQ%2Fimage.png?alt=media&amp;token=94371ad5-9dd6-4f59-8f17-f2084b7a4b86" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FV1VuKmz8xQQRTjbLFuGC%2Fimage.png?alt=media&amp;token=321fae14-b763-4f32-a884-55109d5f0650" alt=""><figcaption></figcaption></figure>


# 免费插件：自动修改物品

## 有付费版，￥40

* 付费版提供额外的规则，并且随着插件更新不断新增新的规则，免费版不再更新新的规则。
* 无论免费版还是付费版，你都可以根据插件教程自定义新的规则，需要编程水平。
* 付费版支持幻化物品，可以拖拽幻化物品到想要修改的物品上一键完成物品修改，并且支持取消幻化。可以此制作物品皮肤等功能。
* 免费版下载：

{% embed url="<https://www.spigotmc.org/resources/mythicchanger-match-and-modify-all-your-items-without-trouble-1-13-1-20.98523/>" %}

## 自动的修改玩家的物品

* MythicChanger 是一个服务端与客户端通信数据包级别的物品修改插件，其在玩家与服务器通信过程中自动检测数据包内的物品，如果满足插件设置的匹配条件，将会自动根据规则修改物品。
* MythicChanger 允许您在没有任何编程基础上自带 15+ 修改规则和 5+ 物品匹配规则，如果您会编程的话，还可通过编写新的插件无限拓展这些规则。

## 真实修改和虚假修改

* MythicChanger 包含 2 种物品修改模式，分别是真实修改和虚假修改。
* 真实修改将会将玩家的物品无论从客户端层面还是服务端层面，都进行了修改，这个修改将无法撤回，也是实际生效的。
* 虚假修改仅从客户端层面修改，只有客户端误以为物品发生了修改，实际上物品在服务端层面并未修改，并仍发挥先前物品的功能，这个修改可以撤回，也不会实际保存到存档中。
* 例如，您通过 MythicChanger 为所有的钻石剑新增了锋利附魔，那么在真实修改中，这个附魔会实际显示在玩家的客户端中，并且附魔也会发挥作用，而如果是虚假修改，则物品只是看起来有了附魔，实际上服务端不认为其有锋利附魔，自然也不会有锋利附魔的效果。

## 在物品中使用 PlaceholderAPI - 仅付费版

* MythicChanger 无意中为您的服务器新增了这一功能，您可以在物品中使用 PlaceholderAPI 变量符，以显示您想要的内容。

## 物品幻化 - 仅付费版

* 制作只属于你的幻化物品。幻化物品可拖拽到其他物品上，按照规则修改对应物品。可制作物品皮肤、名称修改器、快速去除附魔等。

## MythicChanger 的战略应用

* 物品皮肤 - 通过 CustomModelData，您可以为某个带有指定 Lore 的物品设置单独的虚假修改，以修改其外观。
* 物品品质 - 通过修改 Lore，您可以为指定规则物品新增一行物品品质 Lore，例如普通、稀有，而无需一个个的为这些物品添加。
* 移除非法附魔 - 前期服务器运营没把握好而想去除某种变态附魔或者超高附魔等级？您可以通过真实修改的去除附魔达到这些效果。
* 自动添加 Tooltip 贴图 - 一行行的新增 Tooltip 贴图字符太麻烦，甚至加了宝石等插件，新增的 Lore 又没有这些贴图字符，使用我们的为每一行 Lore 添加字符实现自动添加贴图字符。
* 物品替换 - 想要把原版的物品替换成 MMOItems 的物品？您可以通过替换物品规则实现。


# 免费插件：称号（有BUFF）

## 完全免费

下载地址：

{% embed url="<https://www.spigotmc.org/resources/mythicprefixes-a-tag-plugin-that-has-buff-and-actions-system-1-13-1-20.100994/>" %}

## 专为高版本服主定制的称号插件

* MythicPrefixes 是一个直面高版本服主需要一个轻量化而又有称号 BUFF 功能称号插件痛点而单独制作的全新称号插件。作者团队受到国外轻量化插件思想影响而制作此插件，在提供称号功能前提下恰到好处，不会让插件功能变得臃肿。
* 请注意：不同于众所周知的某称号插件，MythicPrefixes 不是为小白制作的。如果您需要称号商城，抱歉，没有，您需要通过商店插件或者菜单插件自行制作。如果您需要称号仓库，抱歉，没有，MythicPrefixes 全程使用权限节点等条件语句管控玩家的称号权限情况，自身不存储任何有关玩家是否拥有某个称号的信息，这意味着您需要有一定的权限组插件使用知识储备。如果您需要称号卡，抱歉，没有，您需要通过自定义物品插件自行制作。

## 称号 BUFF 与动作

* MythicPrefixes 支持两种高版本常见的插件的 BUFF：libreforge 与 MythicLib。libreforge 是 eco 全家桶所使用到的前置插件，通过其中的 effects 功能，您可以自行制作各种各样的动作效果，例如挖矿 3x3x3。MythicLib 是 MMO 全家桶所使用的前置插件，可以自行增加属性。
* MythicPrefixes 支持设置玩家穿戴、取消穿戴称号后执行动作，以及称号生效时循环执行称号。可以通过此制作粒子效果、自动扣钱等动作。

## 多称号

* MythicPrefixes 支持玩家同时使用多个称号而不仅仅一个。

## 自定义称号 PAPI

* MythicPrefixes 支持创建自定义称号 PAPI，各个称号 PAPI 的属性可自定义，例如显示的称号上限、不显示的称号名单、PAPI 显示的格式等。
* 配合多称号，您可以设置聊天和计分板显示的称号不一样功能。

## 其他称号插件都有的功能

* 自定义 HEX 和渐变色。
* 自定义称号 GUI。
* 自定义动作和条件。

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FQa5txk3NwobaZyfzK5Lj%2Fimage.png?alt=media&amp;token=a03018d1-6be6-4a76-b339-c9b7c911e6d9" alt=""><figcaption></figcaption></figure>

视频地址：

<https://www.bilibili.com/video/BV1nV411X7JD?t=11.0>


# 免费服务端：高版本RPG

我的世界RPG服务端 - 我的世界RPG服务器 - 我的世界高版本RPG - 我的世界MythicMobs - 我的世界PVE服务器 - 我的世界RPG

## 推荐：我的世界联机 QQ 频道！

安慕希开黑搭子，在线服务器尽在此处！点击链接即可加入。

{% embed url="<https://pd.qq.com/s/4ld3x7r9s>" %}

* 此推荐内容与本站无关。

## 不会使用？

* 我们提供免费的有关 MagicTravel 的教程可供查看：<https://setup.superiormc.cn/v/magictravel>

## 基岩版支持

* 与 Superior™一样，MagicTravel 本身不提供基岩版支持，因为这是一个 Java 版服务端。但您可以自行搭建 Geyser 来允许基岩版加入。但我们的售后服务不会就基岩版玩家出现的BUG而为您服务，因为这通常是因为 Geyser 本身导致的。
* 本服务端提供的配套资源包仅为拓展，基岩版玩家我们特别制作了适配，在没有资源包情况下几乎 不受影响。

## 服务端介绍

* 包含 4 个定制插件：新人保护免死、永久夜视药水、聊天输入指令变量、菜单绑定物品。
* 独家内核汉化最新版本 MMOItems，小白也可以快速上手新的 RPG 物品创建！
* 配套资源包显示，让服务器更加有逼感。
* 可以 PvP 的战斗区域。
* 无限再生的资源。煤矿、铁矿、农作物，通通的来！
* 经典 RPG 的 职业、技能、属性点 等基础内容。
* 生命、法力、耐力、防御 等大量玩家属性！
* 沉浸式的剧情阅读、慢速模式的剧情输出和可点击的 NPC 互动问答。
* 多个剧情路线和丰富的 NPC 对话。还有支线任务！
* 逐渐解锁式的地区探索方案。
* 丰富多彩的 RPG 物品，超过 10 种的种类。同时每个物品也都有自己的特点和属性，不仅仅单纯的修改数值！
* 武器、装备的 升级、镶嵌、强化。
* 聊天框物品展示。
* 大量的可充值内容。
* 3 个抽奖箱。
* 提供 10+ 4D模型宠物。
* 提供 10+ 物品皮肤。
* 提供 5 种饰品和 专门的饰品栏 UI。
* 超多 副本地图。每个副本地图的怪物都根据地图本身风格设定，难度平衡化，均配有剧情、BOSS等。
* 精心打磨：每个怪物都有自己的 强点和弱点，小怪也有自己的技能，而不是很多同类型服务端的改个血量和攻击。
* 墓园，玩家死亡更加有挑战性了！
* 隐藏在副本地图内的 合成站、锻造台、强化站、商人、剧情 等，而不是普遍的菜单。让玩家在游玩中更有冒险元素。
* 物理形式的流通货币和村民页面的交易，更让玩家有 RPG 风味的体验游戏。
* 超多时装饰品。
* 拍卖行。
* 超大容量的 仓库 为玩家提供储存服务。
* 大量细节内容需要您去探索！

## 图片

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FnvfeyOd4qC2zmyb0FCoB%2Fimage.png?alt=media&amp;token=b9f954ad-e762-4186-9573-003678f2dbc7" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FXGGYyBQYlhVnFPX4hs3F%2Fimage.png?alt=media&amp;token=cef64dd9-01df-407a-82f0-1305316d2c39" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FU3HidPAWP39lN3IwEPak%2Fimage.png?alt=media&amp;token=24353448-9334-4525-9c11-295fe45bd595" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FCPVreFn8HDraVXOXvVH7%2Fimage.png?alt=media&amp;token=7495fc2e-8db6-4c6e-a287-0503c8079358" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FZbyDfpEzm3z1eoDxHIxq%2Fimage.png?alt=media&amp;token=fefce860-5bf0-4680-90f7-b439dc6ee1d0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FkvyIwOJlnL9sIqehkQ9f%2Fimage.png?alt=media&amp;token=01cd7eb6-763a-4042-aeb6-2fa347f248be" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F8IhKNPH8VdJD8cGVr0QR%2Fimage.png?alt=media&amp;token=9f1d5dab-303c-4a52-8b71-7e7a064d13b0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FHdaZBHHjAcSwkry1F58b%2Fimage.png?alt=media&amp;token=464b84b5-823e-4926-833d-21279298f066" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FzsUx3kuUIGrOBW97vcCM%2Fimage.png?alt=media&amp;token=9047c927-0f42-4775-bc48-b166a0ebabd8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FtXT24bnO0PrKpYLug0GO%2Fimage.png?alt=media&amp;token=4fd7dffa-08d5-4240-b084-df4e69c5d94b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FOCw0I4POjzShL5JBJrkr%2Fimage.png?alt=media&amp;token=b553d204-ba8b-4fdc-8139-4084d40fda12" alt=""><figcaption></figcaption></figure>

## 激动人心的下载时刻

链接：

<https://pan.baidu.com/s/1F\\_plphRcWg\\_XzMvNVvAU0g&#x20>;

提取码：ulos

## 配套资源包

* 加入本站 QQ 交流群获取（833821060）

## 推荐：我的世界联机 QQ 频道！

安慕希开黑搭子，在线服务器尽在此处！点击链接即可加入。

{% embed url="<https://pd.qq.com/s/4ld3x7r9s>" %}

* 此推荐内容与本站无关。


# 免费服务端：高版本IA端

ItemsAdder服务端 - IA服务端 - 我的世界IA端 - 我的世界IA服务端 - 我的世界IA怎么用 - 我的世界ItemsAdder教程 - ItemsAdder端 - 高版本IA端

## 推荐：Huakemon - 1.12.2| 女仆 | 原创剧情 | 第九世代全特性技能 | 太晶坑玩法！！

一个多元化的宝可梦服务器 完全原创的服务剧情玩法\~\
极致的服务器优化 时刻保证玩家游戏体验\
且本服最大程度还原了宝可梦太晶玩法，*无需道具，无需学习技能，即可完美实现钛晶玩法*\
并且，我们完善了第九世代全部的专属技能和特性，例如需要复合金属才能进化的铝钢桥龙\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FEpChFEPVy3m9mBqyIbnC%2Fimage.png?alt=media\&token=eeeb4b3f-31f8-43e3-8807-2e93366c36a5)\
例如太乐巴戈斯出场就变身的太晶变形，再比如我们原创的宝可梦音箱蟀侠等多种玩法\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F1GagvCaRrAKxcpgQhazS%2Fimage.png?alt=media\&token=0b9730bf-9738-448a-8904-169e039f8d76)\
花语—–碧蓝之心\
在普通的精灵世界里抓捕精灵,在女仆世界里驯化女仆\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FpVmdFe1euxk58HF1oiYW%2Fimage.png?alt=media\&token=81164c90-880d-4675-a27b-39195d60302d)\
在原创RPG副本世界里层层攻略，在试炼之地展现风采！！！\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FSpaCOdJCtBmw8o8baHfP%2Fimage.png?alt=media\&token=1bd9dd16-6535-4004-b0a6-f25be1b7f845)\
道馆，竞技，排位，狩猎，极巨坑，太晶坑，躲猫猫\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FRDvozNMOQIcoQ6Z468IT%2Fimage.png?alt=media\&token=dc2051bc-dd34-4c00-8177-f703c618925d)\
福利丰厚,只要在线就可以领取点券，全服免费飞行\
还有精美称号，原创ui等你来发现\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FDrhWUiAcxS7HXqW1doxd%2Fimage.png?alt=media\&token=c1a8358e-28cd-4fb5-8337-996075ecdae7)\
通过填写邀请码还可以领取丰厚奖励 | 进服就送各种福利\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FXhzrjLBURUPX93M24vJO%2Fimage.png?alt=media\&token=e11cf76c-3099-43d1-913d-0f56a9597ee1)\
还有着成熟的导航系统以及丰富的新手引导\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fei1XcptHwJVLQ7TdHhL3%2Fimage.png?alt=media\&token=c446b9dc-2671-4907-b409-ed80b92610eb)\
精美的原创时装界面！！！！\
![](https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FlFktJTcyErRJS8f99LGV%2Fimage.png?alt=media\&token=e1c9acf6-bfcd-4b2f-b6ba-9deafd17538f)\
来到花可梦游戏,绝不会有任何枯燥！！！\
服务器禁用非常合理，王冠 薄荷 牧场 胶囊 均无禁用！！！\
神奥——时空跃动\
在简单的生存上扩充剧情的玩法\
无论是对战玩家还是风景玩家都可以有很好的体验\
原创的 还是层层递进的挑战\
并且我们还原了神奥地区的剧情 在此子服 都可以享受到

### Huakemon群组服务器基本信息&#x20;

* 管理团队强大的技术支持，解决bug问题迅速，根据需求魔改插件等。
* 打造优质服务器，更新平缓，不频繁重启服务器，关注玩家的游戏体验及建议进行优化&#x20;
* 我们拥有自己的机器 i9 14700k的顶级配置 保证您游玩流畅 且绝不跑路 拒绝快餐！&#x20;
* 不断寻找新玩法新插件，让您时刻对本服务器保持兴趣！ 不忘初心，为了一颗MC梦，为了能让更多的玩家体会到MC本质的游戏乐趣&#x20;
* 花可梦截至今日以及稳定运营两年时间，绝不跑路，绝不快餐&#x20;
* 服务器QQ群：483767831 我们期待你的加入
* 此推荐内容与本站无关。

## 作者说：&#x20;

籽岷曾在 2020年初 介绍了国外的《起源领域》服务器，自此这种样式的生存服开始火的不可收拾。但其要求的美工、技术等能力要求极高，没有一个团队，可以说很难做出这种服务端。而制作这种服务端是我很早就有的构思与梦想。最早在 Superior™ Classic(经典版本) 我就有这个想法，但可惜当时技术能力不足，无法驾驭，最终在后面的更新中删除了 ItemsAdder 并彻底放弃了这个构思。但我依然没有放弃，在 2019年12月，我开始着手制作 MagicTravel™，并借此开始学习 Java 版的 CustomModelData 和相关内容，花费我大量心血，最终掌握一定知识。

Superior™ Adventure 是在 2022年3月中旬 开始着手制作的服务端，我几乎每天都投入在其中，并试图给各位带来这种新型生存服务端的魅力。 ​ 为什么选择 Superior™ Adventure：

## 不会使用？

* 我们提供免费的有关 Superior Adventure 的教程可供查看：

<https://setup.superiormc.cn/v/superior-adventure>

## 服务端介绍

* 火的不可收拾。国内的此类型服务端随随便便都有几十人在线！
* 强大的技术支撑，助你完成开”高级服“的梦想。
* 稳定的售后与更新服务。我们发布的服务端共有数百次更新，售后几乎无差评。
* 超高性价比！您大可以去 MCModels 等平台看看，随随便便一个Boss怪物模型就赶上整个服务端价格了。
* 在保证稳定情况下尽可能跟随最新 MC 版本，这是其他很多服务端无法做到的。
* 核心插件均支持 MySQL 和 Bungee 群组，群组化服务器让你百人不卡！
* 用最少的插件做出最多的功能，服务端在包括核心、原版核心等大文件情况下仅 350 MB，是 Superior™ Classic(经典版本) 的一半。
* 独创 Superior Update 更新服务，一分钟解决以往一天要干的事情！
* 免费的 DLC。（当前：空岛生存、超百小游戏） ​ 基岩版支持： Superior™ Adventure 不建议您支持基岩版玩家加入，因为 Superior™ Adventure 包含大量需要资源包配合才能显示的内容，但是不使用资源包也不会影响总体玩法。
* 所有贴图替换的字符不是"乱码"，而是日文，这代表基岩版玩家视觉方面不会因无法看到贴图而受到太大困扰。
* 所有菜单内的贴图在基岩版因没有资源包而被显示为结构空位。
* 大部分拥有自定义材质的物品会被替换为它本来的样子，大部分为纸。
* 大部分用于自定义材质的方块会被替换为它本来的样子，大部分为唱片机。
* 大部分家具会被替换为它本来的样子，大部分为盔甲架。 如果您对此介意并重点关注基岩版玩家，我们建议您使用类似 Pojav 的第三方手机 Java 版启动器或者购买 Superior™ Classic(经典版本)。 ​ 简单的介绍：
* Superior™ Adventure 不同于 Superior 系列其他服务端，作者在选用插件时精心打磨，并可保证此服务端完全支持 BungeeCord 群组服务器，支持一世界一服，让您实现百人服的梦想。
* 包含 1 个定制插件：自定义变量符。
* HEX 色调显示。
* 美化 HUD 显示。
* 独家内核汉化最新版本 MMOItems，让你快速上手 RPG 物品创建，不需要查阅资料。
* 我们在 Superior™ Adventure 中新增大量贴图，大量细节方面的处理。这也是这种服务端吸引玩家的重要因素。甚至 NPC 的前缀、金币显示、玩家属性、工具属性、附魔属性等位置都有贴图！这甚至是你在一些大型服务器都看不见的特色！
* 新手教程让梦想更快了解服务器基础玩法。
* NPC 深入对话，在玩家和 NPC 对话过程中逐渐讲解玩法，并且选择自己所要的功能，而不是以往服务器的 Shift+F 键进入菜单的单独无趣快捷键。
* 大量美化 UI，不使用美观感较差的传统箱子 UI。包括商店、随机传送、职业等均使用这套UI，并不断更新其他UI！
* 全服统一风格的原版资源包，大大减少服务端各处割裂感。对原版部分物品、方块等进行材质优化。
* 使用插件、数据包等重置各个世界地形生成，包括主世界、下界和末地在内新增 100+ 各种遗迹、村庄、地牢等。
* 在原版基础上新增许多玩家想要的东西！例如更多颜色的木板... 还有铜装备和工具套... 等等！
* 使用 ItemsAdder 为你带来大量新内容！
* 新增 200+ 新的附魔。
* 新增 100+ 遗迹等。
* 200+ 家具和装饰品等，供玩家装饰自己的小家！
* 新增 大量新的矿石 和其孪生物品！
* 新增 100+ 科技物品、方块等，玩转科技感！
* 新增 20+ 新的功能物品，例如刷怪笼、超级漏斗、死亡末影珍珠灯。
* 天使之箱。
* 新增 60+ 新的生物！
* 新增 60+ 新的鱼。（包括熟的）
* 新增 20+ 新的树。
* 新增 20+ 新的种植物。
* 新增 70+ 新的美食。
* 新增 5 个可以帮你打斗的宠物，它们可有自己的技能！
* 新增 20+ 时装。
* 新增大量 RPG 物品。
* 职业系统搭配技能系统解锁、职业报酬跟随职业等级解锁、可用物品随着技能等级提升而解锁（还原俗称您不配Mod）！
* 职业等级和职业任务，提供经典的 5 个职业。
* 15+ 玩家技能和 60+ 玩家能力，提供子菜单供玩家插件技能等级排行榜、熟练度来源等。
* 包含几乎所有原版物品的商店。
* 可视化工作台合成动画和合成 3D 模型贴图。
* 70+ 环境粒子特效！
* 3D掉血特效，还原 Mod！
* 血红之夜，精英怪物... 增加怪物的生成！
* 地牢副本：骷髅峡谷！
* 还有大量玩法并未在这里展示。

## 图片

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FNJenL9ODMuo96jR9L0tU%2Fimage.png?alt=media&amp;token=6880ea45-ec59-48d6-84a0-50292179a3b0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FrGkGwiyCktyXXbuxwqUT%2Fimage.png?alt=media&amp;token=9e63edd0-7e9c-4836-ab88-dd2b6c4071eb" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FkTr2Qzy6OAj4Mv1Y4lio%2Fimage.png?alt=media&amp;token=800148aa-0c51-4619-8b1a-d5d7956e2f9d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FWbGTzjforP8i92NArWcg%2Fimage.png?alt=media&amp;token=51cd06fd-4f00-4fca-adb8-bb1a646a78fc" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FXM8YAxbModgI9BaaQPN0%2Fimage.png?alt=media&amp;token=3cdfde10-5c4c-48a3-8bc9-a5353355d186" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FVKhGrAotdHUssjfm9Qf7%2Fimage.png?alt=media&amp;token=db3f2916-ba97-4697-a71d-a5cec13f5d3a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FBvPh4xqgGIBkCC8YMUDx%2Fimage.png?alt=media&amp;token=223c64d1-1863-4d2d-ae17-90cc40c9b0fc" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FMqB2X24VRbPg48KXMBi7%2Fimage.png?alt=media&amp;token=0a80e8d7-5242-4f4d-bb15-b8dd10bc8509" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FwRwfMHDd0qrYnll7JCFQ%2Fimage.png?alt=media&amp;token=5e85a3bc-9afe-4ebe-a48a-860372d4554d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FkDmGZkTEx1Ek9jNI93sW%2Fimage.png?alt=media&amp;token=c1a53d1b-76e2-4468-9712-05218dbbd576" alt=""><figcaption></figcaption></figure>

## 激动人心的下载时刻

链接：

<https://pan.baidu.com/s/1aZYZDbnkxoMo6A2XhqxDxg&#x20>;

提取码：8888


# 免费服务端：高版本生存端

我的世界生存端 - 我的世界生存服 - 我的世界高版本生存服务端 - 我的世界服务端 - 高版本生存

## 推荐：13700k独立机全网低价出租，有意向联系QQ1851390862

* 此推荐内容与本站无关。

## 基岩版支持

* 与 Superior v3 一样，v4 版本本身不提供基岩版支持，因为这是一个 Java 版服务端。但您可以自行搭建 Geyser 来允许基岩版加入。但我们的售后服务不会就基岩版玩家出现的BUG而为您服务，因为这通常是因为 Geyser 本身导致的。例如：我们添加的自定义合成对基岩版玩家来说是没用的，因为他们无法合成我们新增的物品。

## 不会使用？

* 我们提供免费的有关 Superior Adventure 的教程可供查看：

<https://setup.superiormc.cn/v/superior-v4>

## 服务端介绍

* 包含 4 个定制插件：聊天输入指令变量、精英怪物装备无法祛魔、1.17以下版本0格保护、菜单绑定物品。
* 进服直接领取 超大地皮一个，地皮世界死亡完全不掉落，正常生成生物等，不再需要玩家圈地！
* 精心打造的 HEX 颜色色调。
* 右键玩家进入其个人页面。
* 在纯净服体验到 小地图 Mod的功能！
* 15+ 玩家属性、60+ 生存技能。
* 打击动画和砍伐树木动画。（树木是有重力的哦！）
* 点券商城，快速回本！
* 进行 大量修改 的UI商店和职业系统。
* 玩家可开店、互相交易。
* 精心制作的 菜单，服务器 99% 功能都在菜单解决！
* 沉浸感十足的 一年四季和温度系统。（不会太大干预玩家游戏，只是环境发生变化啦！）
* 对 世界生成 进行大量修改，增加 几十种 新的遗迹、更大的地牢、独立的 泰拉维度、256 格高的地狱，每一处的修改都旨在给你带来惊喜。
* 魔改 大量 机制，双门 一起开关、不死图腾 无需副手... 我们将很多玩家想要的，都统统加入到了游戏！
* 增加 大量 功能，箱子整理、自动卸载、自动切换工具、自动补种农作物... 您无需安装任何辅助Mod即可享受辅助Mod的功能！
* 平衡化、大量修改后的 精英怪物和战利品 生成，每位玩家遇到的精英怪物和它生成的战利品都不一样...
* 新增 200+ 自定义附魔和与其有关的 20+ 新的附魔物品。
* 新增 10+ 精英怪物副本，近一百种 新的精英怪物等你来战！并且还在不断更新中，在生存玩到 RPG 刷刷刷的乐趣！
* 帮助玩家打怪的 宠物系统。
* 200+ 经典任务和随机生成千万种任务可能的任务卷轴！
* 精妙绝伦的 BOSS 挑战！
* 随处可见的随机宝箱！
* 加倍器、重铸、游戏等大量拓展玩法！
* 增加例如 电梯、自动堆肥桶、刷怪笼、幸运方块（奖励特别多！） 等几十个物品的合成。
* 万物皆可升级，熔炉、漏斗、刷怪笼 均可升级。
* 死亡墓碑 和 死亡惩罚。
* 包含 14 个赌bo游戏的游戏机。
* 银行与银行账户升级。
* 5 个玩家等级：黄金会员、钻石会员、绿宝石会员、下界合金会员、水晶会员，解锁新的玩家等级可获得 大量新的特权，让你不氪金就可以获得氪金部分特权！
* 7 个抽奖箱。上百个不同的抽奖箱奖励！
* 颜色大战 小游戏！
* 不要呆在黑暗，18+ 恐惧效果来临！
* 还有大量玩法并没有在这里展示！

## 图片展示

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FtLhAN1SJSvtfMLFfRALY%2Fimage.png?alt=media&amp;token=c7257022-ddac-4722-81b6-4bc4d70cd969" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fb602U7IUDVo6xPbJS0DM%2Fimage.png?alt=media&amp;token=b5c232d8-dc13-4cc7-9511-4e08e1682e37" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FP7XwREqbxIDhwwMl5C0R%2Fimage.png?alt=media&amp;token=b47abb1f-7eba-427a-b544-3e6c33924534" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FpYyY4xsaSVvRBrzzJYlB%2Fimage.png?alt=media&amp;token=d126470b-f5f2-4a30-84e0-f5dd664f6038" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FlZe1F4SapozArsIzKtph%2Fimage.png?alt=media&amp;token=717f3284-31a1-4068-b22d-9faa0bb673a3" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FBnZdDSFOFrHh4OHzd5qe%2Fimage.png?alt=media&amp;token=0e58314f-dded-48c8-9122-0ba80c3a5ce5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FlFAwGlCU3ULaoYVQWbsx%2Fimage.png?alt=media&amp;token=69122217-f907-4ac8-962f-718f1d97fa02" alt=""><figcaption></figcaption></figure>

## 推荐：13700k独立机全网低价出租，有意向联系QQ1851390862

* 此推荐内容与本站无关。

## 激动人心的下载时刻

链接：

<https://pan.baidu.com/s/1\\_9MVOHXdBlpw217wxoLvKA&#x20>;

提取码：8888


# 免费服务端：各种小游戏

## 推荐：低价13900k服务器 VPS/面板服出租 QQ1977906158

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fo9s88UURm7hACDwA6hp0%2F16fd0af2c00892c0c840713cde04a4af.png?alt=media&amp;token=e94446a5-b79a-4d2b-b263-44e9b414de4a" alt=""><figcaption></figcaption></figure>

* 此推荐内容与本站无关。

## 起床战争

* 简单大气的 Hypixel 化起床战争。
* 5 个游戏分组模式：4v4、3v3v3v3、4v4v4v4、单人、双人。每个模式各分配 2 个房间。你可以自行额外制作新的房间！
* 2 个游戏拓展模式：无虚空模式、枪械模式。
* 店员NPC 用于收藏品、标签设置和会员购买。另有 签到NPC 和 任务NPC。
* 几十种收藏品和几百种神秘箱奖励。
* 大量拓展玩法，例如任务、排行榜。
* 经过平衡化修改的起床战争等级、聊天格式、游玩奖励等。
* 还有大量内容尚未提及，请下载体验！

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FMZLgHgcIy0fUAG4SOIxT%2Fimage.png?alt=media&amp;token=e73536bb-4ec6-46b7-b2c5-36b293b81ac1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F3mwjAkASHjXUD1HdRdaA%2Fimage.png?alt=media&amp;token=4442eb21-57b3-42ee-bcba-3a7a257080e4" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F1hoQzCnKWOVoQdDBj6pQ%2Fimage.png?alt=media&amp;token=5a5c4e23-ec15-4bf7-89e7-79387fc0de00" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FXsmPYdRfIqTLnpZEBzfm%2Fimage.png?alt=media&amp;token=c5ca5597-5038-44ec-8cbb-83acad0d3e82" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2F6mDFPWZjv9xDZze2SslW%2Fimage.png?alt=media&amp;token=4a9c4b8f-c314-4e89-9678-9450b94578fb" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FI9AuLwkXS87moirTQPLw%2Fimage.png?alt=media&amp;token=c4ffc0c4-9857-46bc-b92c-bbc579ae6c32" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fu6ciYFkELm4IhnQ9aC60%2Fimage.png?alt=media&amp;token=8eee831a-2523-4ee7-bb29-11f40cf8e728" alt=""><figcaption></figcaption></figure>

1.1 版本：&#x20;

链接：<https://pan.baidu.com/s/1sIK4i0vnu9Jrxwc3aoOUFA> 提取码：6666

1.2 版本：&#x20;

链接：<https://pan.baidu.com/s/1QSOwey6SMcwQ71FL-od5cw> 提取码：8888

## 推荐：低价13900k服务器 VPS/面板服出租 QQ1977906158

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fo9s88UURm7hACDwA6hp0%2F16fd0af2c00892c0c840713cde04a4af.png?alt=media&amp;token=e94446a5-b79a-4d2b-b263-44e9b414de4a" alt=""><figcaption></figcaption></figure>

* 此推荐内容与本站无关。

## 小游戏派对

* 最大程度的还原 Cubecraft 的 Minerware 小游戏。
* 10 个地图随机选择。&#x20;
* 100+ 小游戏库随机选择。&#x20;
* 最新原创汉化。
* 付费插件：<https://www.spigotmc.org/resources/%E2%9A%A1-minerware-1-8-1-16-5-1-18-1-18-2-%E2%9A%A1.82540/。（自行购买并放置到服务端内）>
* 提取码：8888

{% embed url="<https://pan.baidu.com/s/1PkVO-EA1R4L4hmSYNKinKQ?_at_=1715248085478>" %}

## 推荐：低价13900k服务器 VPS/面板服出租 QQ1977906158

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fo9s88UURm7hACDwA6hp0%2F16fd0af2c00892c0c840713cde04a4af.png?alt=media&amp;token=e94446a5-b79a-4d2b-b263-44e9b414de4a" alt=""><figcaption></figcaption></figure>

* 此推荐内容与本站无关。

## 僵尸末日

* 修复了穷途末路地图中办公室场景不会正常刷怪的 bug。
* 新增了坏血之宫地图。
* 汉化了各个怪物的名称。
* 优化调整了游戏内金钱花费，与 Hypixel 基本保持同步。
* 其他若干优化调整。 僵尸末日服务端本身稀缺，在此基础上，ZombiesNet 还给您带来以下特性：
* 最大程度的还原 Hypixel 僵尸末日小游戏。
* 2 个地图随机选择：穷途末路、坏血之宫。
* 每个地图各 50 波怪物，前 30 波尽量还原 Hypixel 原版，后 20 波为后续怪物挑战。
* 测试僵尸。
* 付费插件：<https://www.spigotmc.org/resources/zombies-minigame-1-8-1-18.46148/。（自行购买并放置到服务端内）>
* 本服务端适合 BC 使用，一进入服务器即开始游戏。
* 仅支持 1.18 服务端核心。
* 提取码：6666

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2FHoPUy25MRV1DwevCy1D1%2Fimage.png?alt=media&amp;token=cbdb9f8b-f4cd-4e1b-b77a-4a7c774a7525" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1640368288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCjAJt3uQN5rzKgJXtpl3%2Fuploads%2Fo41TvRL3kNVFh75Tvau6%2Fimage.png?alt=media&amp;token=45296ecd-60f3-4985-9271-c35b5037482a" alt=""><figcaption></figcaption></figure>

{% embed url="<https://pan.baidu.com/share/init?surl=wkSYSwzaHApRpenGJ9Fgqg>" %}


# 免费服务端：粘液空岛端

{% embed url="<https://pan.baidu.com/share/init?surl=axBkAocoMXtIQ-uwhU9XPg>" %}

提取码：6666


# 欢迎

阿哦，欢迎你来到这儿。

这是一份给 **刚来人** 准备的高版本开服领路指南。

整篇教程分为两个部分：插件选择和经验传授，通篇不提如何开服这个早已被写烂的问题，所以，让我们开始吧！


# 0.0 - 总前言

## “我”是谁？

我是一个由“从 **2021** 年开始接触 **Java** 版开服，两年多来颇有一些心得”的一位笔者所写，他总看到一些刚来者对这片领域充满好奇同时不知所措，因此在这儿写了我，希望能起到为你领航的作用。

## “我”从哪来？

**MCBBS** 中，开服教程是不少的，但是经过笔者和多位认识服主交流，他们迫切需要一份“我已经知道怎么开服了，我不需要这些，我想要知道开完服以后我该干什么”的教程，而笔者翻遍整个版块，也未能找到一篇令我满意的教程回复给他，所以我就来了。

## “我”要到哪里去？

我一篇 **主观性非常强** 的教程。我会带你从 **插件选择、经验传授** 两个方面出发，第一方面：插件选择，我只会告诉写我的人自己的想法，而他的想法不是其他人的想法。他非常推荐你一款插件，而不行，你的想法非常有可能是“这是一个什么乐Se”，所以，请做好你随时看不下去的准备。第二方面：运营思路，开启一个 **Minecraft** 服务器早已不是什么难事，这是好事，但也是坏事。想一想，你在各个地方找到的高版本服务器，是不是都是大同小异，没有创新。并且，站内虽然有详细的开服指南，但经验方面的指南却少之又少，大部分的服务器还在处于稳定 **0-10** 人的状态。因此，编写此篇指南的第二部分：经验传授。那这一方面是否都是教我如何宣传我的服务器?不。单一的靠宣传，你的服务器无法走的长远。早已有人依靠 bilibili 上用“各种营销手段"为自己的服务器吸引流量，但是几个月以后再回头看，却发现评论区都已经无人问津，服务器早已关门大吉。想要让自己的服务器做大做长久，你应当把服务器本身内容性做的强大起来，这样就算不做宣传，玩家之间口口相传，人也自然多了。我玩过很多 **Minecraft** 服务器，我发现玩家有聚众心理，一个服做的再简单，有大量的玩家都会在那里，其他玩家也会跟着来。但是，内容做不到位，玩家慢慢流失，而内容做到位，玩家流失速度会明显减少，而且还会不断有新玩家入驻。这一方面只是我的见解，而不是教程。


# 0.1 - 服务端的选择

Java 版上的服务端五花八门，有关几个服务端核心的介绍也很多过时了，为避免有人混淆，搞不清楚，在本文发布之前特补充此节。

## 服务端核心（核心服务端）

服务端核心（核心服务端）是开服的必要。

### Spigot

最为基本的服务端核心。可通过 BuildToos 自行构建，考虑到 MCBBS 已有构建教程，同时也没有多少人在用，在此不再赘述。

### Paper

Spigot 的下游服务端，添加了一些插件 API 的同时也对服务端进行了优化，可自行从官方网站下载构建。

### Purpur

Paper 的下游服务端，通 Paper 干的事情，可自行从官方网站下载构建。如果你什么也不懂，无脑推荐这个。

### 其他的 Paper 上游服务端

不受国外一些开发者的认可，一般来说用了插件出现问题它们也不予以支持，同时很多都是核心开发者一时兴起，没多少时间就不再维护了。

### Folia

Paper 团队所作的新的服务端核心的分支，主要是服务器多线程，需要插件对其进行适配，大部分 Spigot 系的插件都不能直接运行，目前插件较少，适合生电。

### 其他 Mod 服务端

如 **其他的 Paper 上游服务端** 所述，同时本文也不讲 Mod 服务端，所以略果。

## 群组代理

多个服务端（也就是你的多个服务器）可以通过群组代理进行互通，融为一体。

### BungeeCord

最为基本的群组代理，可从官方网站下载。需要注意的是虽然群组代理本身支持跨版本进服，但是代理后实际进入服务器必须也支持玩家客户端版本，否则照样没用。

### Waterfall

Paper 团队做的 BungeeCord 下游群组代理，可从官方网站下载。。

### Velocity

Paper 团队做的新的群组代理，性能更好，插件也更少，可从官方网站下载。


# 0.2 - 服务端目录下的文件

**cache 文件夹\***：包含官方服务端的文件，是服务端核心启动的根本。

**data-storage 文件夹\***：包含粘液科技等插件的数据。

**libraries/libs 文件夹\***：包含部分插件的运行库。

**logs 文件夹**：包含服务端的日志文件。

**plugins 文件夹**：包含服务端插件。

**其他各个文件夹**：是服务端内的各个世界。

**其他文件**：是服务端核心的配置文件等。

一般情况下：

* 我们在遇到报错，需要反馈 **bug** 时，可以将 **logs** 文件夹下的 `latest.yml` 文件发给插件开发者。
* `plugins` 文件夹是我们安装插件的地方，将插件的 jar 文件复制到其中即可。


# 1.0 - 序

虽然我在标题上只写了 **序** 这一个字，但是这一节可能会非常打击你，因为这一节真正的标题应该是：**你真的做好开服的准备了吗**？

让我们开始吧。

这一节由多个快速问答组成。口语化的询问你一些问题，并给出我的理解。

## 问题：你真的准备好经费了吗？

我在与许多新来的服主交流时，我会发现他们会很爽快的花费几百元人民币一个月价格租赁一个高配置的 VPS。但是，当我向他们推荐一个付费插件时，他们却犹豫不决。

这与国人一个习惯非常有关系，大家都喜欢对自己能感觉到、有实质性的东西付费，而对虚拟的东西，不喜欢付费，认为免费是理所当然的。这也是为什么国内游戏厂商和国外游戏厂商在游戏付费策略上有很大不同的原因。

很多服主在来的时候，根本不会考虑这些额外的花费，以为租用 VPS 的费用就可以了。实则不然，你应该充分的为自己的预算作准备。一个全部都使用免费插件的服务器，可以。但是，玩法质量上很大概率不如付费插件来的硬。在我制作的大部分服务端中，甚至有一半都选用的是付费插件。

除了付费插件， 你还要考虑到的是：

* 你的各种地图是否要付费购买，或者定制。
* 如果你对新的 ItemsAdder 这种风格的服务器感兴趣，你还需要购买大量的模型、贴图，或者自己做，或者定制。
* 你是否还要请别人来帮你解决一些技术上的难题。
* 你是否还需要服务器的官网、Wiki等。
* 你是否还需要购买一个域名，因为很多 VPS 租赁商不是全部端口开放的。
* 等等。

## 问题：你真的准备好技术了吗？

准备好技术的关键指标是：实习。

实习? 没错，你是否自己在自己电脑上搭建一个服务器练手过，或者在别的服务器玩的很好，服主也信任你，也开始教你一些东西，或者有大牛来带你，或者等等。如果没有，请不要盲目开服。

### 技术达标第一点：不犯低级错误

我见过最夸张的例子是，他把插件支持的版本当作客户端版本理解。他安装了一款插件，插件标注不支持 1.18.x，他还是将其安装到自己的 1.18.x 服务器，然后使用 1.16.5 客户端进入服务器，询问我为什么这个插件在 1.16.5 客户端下还是不可以使用。

### 技术达标第二点：有一定的熟练度

什么? 你说你肯定不会出现这种低级错误。那么第二个指标，熟练度呢? 你是否有足够的水平去掌握服务器一些常用的插件?

* 你编写一个能够打开服务器商店、传送、个人信息、小游戏四个子菜单的主菜单要花费多长时间，能否一次性写完？
* 面对有几十种任务种类的任务插件，你能否从破坏方块、获取方块、合成方块等中找到最适合自己的? 这里给一个例子，我玩过一个很火也被很多服主崇拜的国内某个服务器，却发现他的新手任务要求挖掘10个铁矿石，但在我挖掘第1个铁矿石后，再将其放置，在挖掘，一直挖掘10次，任务直接完成，任务难度减少 90%，你能找出这个问题的所在吗？
* 上面的只是小 case，有几万字、几十万字的大型插件的 Wiki，你有耐心看完吗? 比如 MythicMobs 的 Wiki。
* 等等。

### 技术达标第三点：判断问题根源

就以上面任务方面给的例子为例，在与我交流的各个服主中，他们去直接下载配置好的服务端，然后遇到这种问题，40% 的服主甚至连这是任务插件配置导致的问题都无法分析出来，他们还在问我是不是任务插件和哪个插件冲突啦、是不是我的服务器卡了等等。

## 问题：你真的准备好英语了吗？

开服所接触的网站、软件等大部分都是英语，你有认真学习英语吗？以插件介绍为例，如果你认真学习过了，应该可以不使用浏览器的自动翻阅而能大概了解一个插件的介绍页面所给出的内容。

**过于依赖 MCBBS 的搬运显然不可取**！你需要有自己探索英语网站的水平，自己找到合适的插件，而不是局限于别人已搬运过的插件，好比井底之蛙这个故事中，能自己跳出井看看真实的外界而不是仅仅局限于别人所讲的外界（当然，我没有讽刺不会英语的人是井底之蛙这个意思）。

下面是一段 **PlayerPoints** 插件语言文件的英语原文内容：

```
no-permission: '&cYou don''t have permission for that!'
no-console: '&cOnly players may execute this command.'
invalid-amount: '&cAmount must be a positive whole number.'
unknown-player: '&cPlayer could not be found: &b%player%'
unknown-command: '&cUnknown command: &b%input%'
votifier-voted: '&eThanks for voting on %service%! &b%amount% &ehas been added to your balance.'
leaderboard-empty-entry: This could be you!
```

**看懂英语插件介绍没有那么难**！上面的英文所出现的所有单词，我可以向你保证，**90%** 以上你在高考大纲中一定能找到它们的身影！


# 1.1 - 插件的选择：从经济插件开始

什么，上来就提及插件的选择是不是太快了？是的，所以，我想告诉你一个服务器框架，而任何服务器的框架离不开插件的选择，这是这个框架组成的重要因素。首先，我来告诉你这个框架的第一个名词：**经济**。

## 解释：经济

在本教程中，像 **金币、点券** 这样的货币组成的一系列玩法和机制，我们都叫它经济。

## 插件选择：Vault

大部分服务器和经济插件所使用的经济 **API** 插件。听着有些绕口，说明白点，就是：是个服，它只要用经济插件，基本上离不开这个插件。

我们需要再提及一个新的名词：**API 插件**。

### 解释：**API 插件**

**API** 插件就是很多人喜欢叫的“前置插件”，**API** 插件的功能就是一个超市，其他插件在这个超市中各取所需，完成对应的工作。

**纯 API 插件** 本身往往对服主来说是不提供任何功能的，也就是说它只是超市本体，如果你想要在这个超市买到想要东西，你还需要一个拥有实际功能的插件帮助你，充当打工人的身份。

说明白点，就是：光一个 **Vault** 插件还不行，你还需要一个与其挂钩的经济插件。

我们再提及一个新的名词：**挂钩**。

### 解释：**挂钩**

挂钩在英文原注一般为 **hook**。挂钩正如其名，两个插件中间有一个钩子，使其能够互相交流，融为一体。

在这里，说明白点，我们需要一个与 **Vault** 互相交流、融为一体的经济插件，因为并不是所有经济插件和 **Vault** 挂钩的。

它们很难找吗？不，让我推荐一些吧：

* 首先，诸如 **CMI、EssentialX** 这样的基础插件往往自带经济功能，并且也是和 **Vault** 挂钩的。
* 如果你目前不知道上面所说的基础插件到底是什么，那么前期你还可以用独立的经济插件。国内大家用的比较多的是 ：<https://github.com/YiC200333/XConomy>
* 如果你打算你的服务器不止金币和点券这些传统货币，还要有其他的货币，可以试试这个多货币插件，其中一种货币可以与 Vault 挂钩：<https://github.com/SoKnight/PEconomy>

### 小技巧：GitHub 的介绍和在其上下载插件

我们首先向你介绍整个教程为你带来的第一个网站：**GitHub**。

**GitHub** 是世界上最大的代码共享网站之一，服务端插件正是由代码组成的，因此服务端插件们出现在 **GitHub** 网站是不足为奇的一件事情。

我们以向您推荐的第二个经济插件为例，介绍 **GitHub** 网站对您来说，应该如何使用：

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F6PWwg0S3fX8jlRQNXykw%2FQQ%E5%9B%BE%E7%89%8720230125131351.png?alt=media&amp;token=cd0b170a-4977-48d4-a39a-c9cf7759b087" alt=""><figcaption></figcaption></figure>

图标1：Issues，这往往是你向插件作者反馈插件存在的问题时的地方。

图标2：Releases，这往往是插件作者发布插件版本号的地方。

图标3：Actions，一些作者可能会在 **GitHub** 假设自动构建，这样的话作者每次做出更改，你都可以在这里下载最新的测试版本，不过需要登录 **GitHub** 账号。不过这个示例中，我们打开以后是如下图的页面，这代表作者并没有这么做。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FrSqBrbK7vdUnDDCXAVlJ%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-25%20131715.png?alt=media&amp;token=3960aafd-9798-43f3-8a29-f637a349f383" alt=""><figcaption></figcaption></figure>

我们稍微偏题一下，在这个项目中，作者提供了自动构建的功能，那么我们就可以下载作者最新做出的修改后的版本，快速体验新功能（bug）了。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FLKBNPu4vRJDb35Z20gZM%2FQQ%E5%9B%BE%E7%89%8720230125131843.png?alt=media&amp;token=330bb3cc-927e-429c-a17e-df1d26a6c1b4" alt=""><figcaption></figcaption></figure>

回到正题，我们再来介绍一下如何下载插件：

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2Fl55duHnYTUqcis8qYyVL%2FQQ%E5%9B%BE%E7%89%8720230125132117.png?alt=media&amp;token=cf9a1bb9-f99f-4ccd-87c2-34deafcb3c80" alt=""><figcaption></figcaption></figure>

打开上面所说的图标2的页面，然后找到最新的版本后，点击如图箭头所指的文件即可。文件名称带有 **-source、-javadoc** 等的，是插件开发者们使用的，服主们无需理会即可。

而回到我推荐的第一个插件，由于其是多平台插件，所以可以根据后面的插件平台选择，我们是 **Bukkit** 系服务端使用者，选择 **Bukkit** 末尾的文件即可。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FaJlgZ2puKIYP6uoMkA1g%2FQQ%E5%9B%BE%E7%89%8720230125132334.png?alt=media&amp;token=414e8493-8952-4042-99f5-3bb960b02c4c" alt=""><figcaption></figcaption></figure>

### 明白一些：使用 Vault 这个 API 插件的意义

说了这么多，你可能还是不明白，**Vault** 这个 **API** 插件真的有必要装吗？

我们先假设你的服务器货币只能在系统商店使用，玩家可以通过回收物品赚得金币，购买物品消耗金币。要实现这个功能，我们往往需要一个经济插件和一个商店插件。

但是，问题便出现了：市面上的商店插件不止一个，经济插件也不止一个，作为商店插件的开发者，我到底要和哪个经济插件挂钩，我的插件才能有更多的人使用便是一个很大的问题。

如果你学过一点经济方面的知识，此时就明白了：**Vault API** 的功能就是充当现实生活中的货币的作用，商店插件和经济插件由原来的“物物交换”转变为了“货币交换”。

你的服务器货币不止商店一个用途，要想很多功能都用到货币，**API** 插件的功能就不可少了。

## 插件选择：PlayerPoints

上文提了这么多，我们来介绍第二种经济插件：独立类型的经济插件。这种经济插件就是各干各家，不理会 **Vault API**。最具代表就是 **PlayerPoints**，很多服务器的点券插件都是靠它了。

我们还是假设你在商店插件要用到它，那么商店插件到底支不支持它呢。这就需要根据商店插件的介绍来判断了，作者需要在插件介绍页面明确指出该插件支持 **PlayerPoints**，否则该商店插件就不能和 **PlayerPoints** 挂钩，就不能使用点券购买商店里面的物品了。

### 小技巧：Edge 浏览器查找功能

使用键盘，同时按下 **Fn + F3** 两个按键，浏览器右上角将会弹出一个搜索框，在一个商店插件的介绍页面搜索 **PlayerPoints**，我们就可以在 **1** 秒钟之内知道这个商店插件到底支不支持 **PlayerPoints** 了。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FONBDdYWXycGwzVqmLdpz%2FQQ%E5%9B%BE%E7%89%8720230125133241.png?alt=media&amp;token=d7ff6d29-b87a-4da1-94a2-c39724262cde" alt=""><figcaption></figcaption></figure>

很明显，通过该小技巧查找某个商店插件的介绍页面，发现其支持 **PlayerPoints**。

### 小技巧：SpigotMC 的介绍和在其上下载插件

上文已经介绍了 **GitHub**，这是一个代码共享网站，而代码项目可谓千千万万种类型，在这成千上亿的项目中找到一个 **Bukkit** 系服务端插件还真的是不容易，所以我们需要了解一下第二个网站：**SpigotMC**。

**PlayerPoints** 项目的 **GitHub** 地址是：<https://github.com/Rosewood-Development/PlayerPoints>

打开以后，当你下载插件，发现图标2区域竟然是空的！这如何解决呢？

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FcsWbVGlNqPSLM9uyLwL2%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-25%20133553.png?alt=media&amp;token=6f6126be-6148-4df3-9786-77c7de3a8219" alt=""><figcaption></figcaption></figure>

解决的办法就是 **SpigotMC**，**SpigotMC** 是 **Spigot** 服务端的官方网站，配有一个资源中心，你可以在其中下载各种 **Spigot** 的服务端插件，其中就有 **PlayerPoints** 的身影。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FwuNcpgXQne3peXoKXOEo%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-25%20133928.png?alt=media&amp;token=18d83a95-aa4d-4e96-a704-8863a5e70606" alt=""><figcaption></figcaption></figure>

**PlayerPoints** 项目在 SpigotMC 上的地址是：<https://www.spigotmc.org/resources/playerpoints.80745/>

我们可以点击箭头所示按钮下载插件，这里又要介绍新的单词：download（下载）、now（现在），组合起来可以翻译为“立即下载”。

## 本节小结

现在，你的服务器应该有如下 3 个插件了：

* Vault
* 任意一个与 **Vault** 挂钩的插件
* PlayerPoints

现在，你应该知道如何从下面 2 个网站下载插件了：

* GitHub
* SpigotMC

## 小技巧：在 SpigotMC 上搜索插件

**GamePoints** 是一个与 **PlayerPoints** 类似的插件，其也是独立类型的经济插件。如果你想要你的服务器有 **2** 个点券货币，不妨再加上它，不过在此之前，我们先要找到它！

你或许注意到了 **SpigotMC** 右上角有一个搜索框，尝试搜索以后，我可以告诉你，它们都不是 **GamePoints** 插件地址。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FTXD2qlcEOtVFZuI2GKLt%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-25%20134352.png?alt=media&amp;token=4c404204-a424-45be-a6b0-d2ff7d5146ea" alt=""><figcaption></figcaption></figure>

解决办法就是搜索引擎，你可以使用必应搜索，在搜索框中输入“插件名称 site:spigotmc.org”，例如 **GamePoints** 就是“GamePoints site:spigotmc.org”，效果如图，第一个就是正确结果。（其实 MCBBS 也是同理）

{% hint style="info" %}
笔者注：由于本文写的前后时间较长，在文章发布的时候，GamePoints已经迭代升级为了CoinsEngine，你可以根据此教程的示例为模板，自己搜一下这个新版插件吧。
{% endhint %}

## 经验：Vault 基础的经济和 PlayerPoints 的简易使用教程

* /money give 玩家名称 数量 —— 给予玩家金币，不支持离线玩家
* /money set 玩家名称 数量 —— 将玩家金币设置到一定值，支持离线玩家

以上两个指令的 `money` 是根据你所选的经济插件而决定的，一般来说就是 `money`。

* /points give —— 同理，点券
* /points set —— 同理，点券


# 1.2 - 运营的思路：从经济方面开始

我们首先将经济笼统的将抽象替换为实际，称之为服务器的货币。说简单点，就是现在我把服务器货币这个东西，当作这里指的“经济”了。

我们把服务器货币分为 **2** 类：第一类为交易货币，第二类为活动货币。我们假设服务器的交易货币为金币，使用 **Vault** 和任意一个与 Vault 挂钩的经济插件实现，活动货币为点券，使用 **PlayerPoints** 插件实现。

* 交易货币：玩家可以自由获得、消耗的货币类型。
* 活动货币：玩家仅可以在某种活动下才能获得，却可以自由消耗的货币。（某种活动，也可以是氪金，也可以是完成各种推广任务等等...）

在本节，我们只讨论交易货币类型，因为活动货币的管理，实在是太容易了。所以在下文部分，经济这个词，可以用金币替换了。

## 经验：时刻监控经济排行榜第一的玩家

经济排行榜第一的玩家是你的服务器经济状况重要参考指标，如果你的服务器经济体系做的成功，他的值应该是稳步发展的。

* 他每天都在线，值是一直不变的，那么你的服务器的经济体系做的就太完美了。（这也是几乎不可能的）
* 他每天都在线，值是直线上升的，那么你的服务器的经济体系做的就合格了。
* 他每天都在线，值是指数级上升的，那么你的服务器的经济体系做的就太经典了。

**即使是后期的玩家，你也应该保证他的金币是一直花花花的，而不是攒起来**。

那么如何做到呢？

* 制作后期的物品，并且制作成本高昂。
* 从小做起，包括死亡复活、传送等方面都可以收取一点小费。
* 不定期的举办限定活动，让玩家花费一定代价获得限定物品。
* 等等...


# 1.3 - 插件的选择：常见 API 插件

## 复习回顾：什么是 API 插件？

**API** 插件的功能就是一个超市，其他插件在这个超市中各取所需，完成对应的工作。

**纯 API 插件** 本身往往对服主来说是不提供任何功能的，也就是说它只是超市本体，如果你想要在这个超市买到想要东西，你还需要一个拥有实际功能的插件帮助你，充当打工人的身份。

## 解释：前置插件

**API** 插件是前置插件的一种类型，也是最常见的类型，但是有的插件不提供 **API**，或者不止止是仅有纯 **API** 功能，插件作者又想用插件里面的某个功能，这种情况下可能会出现某个商店菜单需要菜单插件才能正常使用，而很显然菜单插件对服主来说并不是没有任何功能的插件，所以这时我们称菜单插件是商店插件的前置。

## 插件选择：Vault

不好意思，略了。

## 插件选择：ProtocolLib

该插件在 SpigotMC 的地址是：<https://www.spigotmc.org/resources/protocollib.1997/>

如果你是 **1.19** 版本的服主，应该留意一下下作者在插件介绍留下的话：

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F50VXly6nf1H7ppQkjP5w%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-25%20135307.png?alt=media&amp;token=1393f952-d1ae-4147-a810-360fb08bbd71" alt=""><figcaption></figcaption></figure>

里面出现的 “use”、“for”、“Minecraft” 和版本号我想你应该知道是什么意思，组起来就是如果你是对应版本号的服主，点击对应链接下载对应的版本的插件。

这个插件是很多插件都会用到的前置插件，别问，先装就对了。

## 插件选择：PlaceholderAPI

该插件在 SpigotMC 的地址是：<https://www.spigotmc.org/resources/placeholderapi.6245/>

这个插件我可以稍稍提一下，变量符，通过它可以实现多个插件之间交互数据，例如在计分板插件上显示玩家经济插件中的还有多少钱。

## 本节小结

现在，你的服务器应该有如下 5 个插件了：

* Vault
* 任意一个与 **Vault** 挂钩的插件
* PlayerPoints
* ProtocolLib
* PlaceholderAPI


# 1.4 - 软件的选择：常用软件

搭建服务器本身是一个依赖于计算机的行为，这一行为必定离不开若干辅助软件的帮助，我总是能看到一些服主误以为开服就是开服，什么软件也不使用，点一个启动脚本就可以完事的。

以下这些软件无论是你的本机还是线上的 VPS等， 都应该有安装。

## 文本编辑软件

Yaml 严格的缩进、换行等要求，在 Windows 自带的记事本软件下处理各个插件的配置文件是非常困难的，更别提 json 等“令人头疼”的文本格式。因此一个合适的文本编辑软件是非常重要的。

推荐软件：

* Notepad --（轻量，推荐5星）
* Visual Studio

## 压缩和解压缩软件

在服务器使用过程中必定离不开压缩文件，我在 MCBBS 发布了一些压缩文件的附件，而有的服主连压缩和解压缩软件都不安装，问我为何无法解压，我的回答是：你的心态太浮躁了。

推荐软件：

* Bandzip（功能丰富，推荐5星）
* Winrar

## 数据库及数据库软件

无论你的服务器是否是群组服，在有条件情况下我都建议你使用 **MySQL** 等数据库储存你的数据，而不是很多插件默认的本地数据储存方法。而已安装的数据库的服主来说，可视化的数据库管理软件也是非常重要的。

推荐软件：

* DataGrip（JetBrains 出品，推荐5星）
* Navicat

## 远程管理软件

VPS 等远程管理也是服主必须注重的部分。一般情况下服务商会自动给你配置好远程桌面，而一些家里云的服主可以会面对这种需要选择远程管理软件的情况。

推荐软件：

* Windows 系统自带的远程桌面软件（其在安卓、iOS等平台也均有客户端）
* Linux 系统使用 ssh、FTP 协议，阿里云、腾讯云也会有自己的网页连接工具


# 1.5 - 综合起来看：从服务器的菜单开始

在经济方面我们将插件的选择和运营的思路分开来讲，而这里开始我们尝试综合起来来看：从菜单开始这一新的节奏。

## 解释：菜单

随便一个游戏最重要的便是菜单了，在我们的服务器中菜单也是重要环节之一。

在服务器中我们经常使用游戏中的箱子 UI 做为服务器菜单依赖载体，因为箱子 UI 面积大，可自定义程度更高，限制更少。

在服务器的菜单里，我们可以制作传送、常用功能、服务器玩法介绍等信息，这取决于作为服主的你是如何思考菜单存在的意义。

### 小技巧：在其他游戏中思考某个功能存在的意义

一般一个畅销的电子游戏肯定会经过多位资深的游戏策划进行反复调整游戏里数值、功能和机制等，我们有时只要多去游玩这些备受好评的游戏，探索出它们备受好评的原因。

我们以菜单为例，下图是制作出马\*欧、塞\*达等众多全球游戏玩家耳熟能详的大IP的任天\*游戏公司发行的《异度神\*2》游戏中的菜单页面，看看我们能学习到什么。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F4JrztBQtU6txH5CLpzPO%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20123723.png?alt=media&amp;token=ebc34ae5-0830-465e-a19c-21e3b3655c51" alt=""><figcaption></figcaption></figure>

我们可以发现其由 8 个按钮组成：而每个按钮代表一个功能，这些功能通过名称不难发现一个共同点：它们都是经常使用的。

* **角色**：在这款游戏中，我们可以扮演多位角色，玩家可以选择其一进行控制。这在目前的大多数服务器中并不多见，因为难度较大，如果你是一个新的 RPG 服主，想要突破创新，这就是一个很好的切入点。
* **传送**：传送在服务器中当然是很好实现，也是必备的。我在很多服务器中发现它们的传送菜单里是主城、主世界、下界世界和末地世界，或者再加其他的如副本世界等。而在这款游戏中，传送点的解锁前提是玩家已经到达过这一区域，而在服务器中这一机制也可以很好的被借鉴。在很多速通挑战中，玩家到下界也是需要一定程度准备的，而在你的服务器中，点击一个按钮即可到达，这代价是否太低了？毕竟，你的服务器可不是速通服务器。

{% hint style="info" %}
Minecraft 的速通一般是击败末影龙，而到达下界维度的目的是和猪灵交易，快速获得末影珍珠和击杀烈焰人获得烈焰棒，从而合成末影珍珠。
{% endhint %}

* **任务日志**：在这款游戏中，这里只会显示玩家完成过哪些任务，而不是在这里接取任务。在 RPG 服务器中，配合传送菜单的使用，可以实现让玩家到指定地方 NPC 接取任务，而不是一个菜单搞定的事情。
* **异刃管理**：并不多讲，我们可以通过宠物玩法来替代。
* **佣兵团**：并不多讲，这也是很好的创新点。在这款游戏中，我们可以派遣异刃完成“佣兵团”任务获得奖励。同时佣兵团也有等级，可以提高“异刃”上限和接取的任务，同时 NPC 出售的物品价格也有时受此影响而降低。
* **道具列表**：玩家的背包。
* **系统**：游戏的设置。
* **Ex Pass**：DLC。

除了经常需要使用，菜单也需要简洁干练，需要做到玩家首次熟悉菜单后，可以在不到 **3** 秒钟时间内快速找到自己想要的功能的按钮。合适的菜单按钮名称和描述就显得至关重要。在服务器中，我们无法实现在箱子 **UI** 中直接显示按钮的作用的文本，玩家必须将鼠标移动到物品上才会显示其名称和描述。这时我们可以通过玩家头颅代替图标功能，让玩家能够提前知道按钮的作用。

### 小技巧：获取自定义头颅

我们打开 <https://minecraft-heads.com/> 这个网站，其主菜单有两个按钮至关重要：

* **Player heads**：正版玩家的头颅。
* **Custom heads**：自定义头颅。

我们选择第二个自定义头颅。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F6jqMYMJeShVeya0eM4cE%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20161053.png?alt=media&amp;token=f36f78c8-6d4e-4c68-a5fe-ac8f3c541fa3" alt=""><figcaption></figcaption></figure>

点击我们喜欢的头颅，然后翻到最底部，找到 Other 部分。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FNHMlTNYXXAAm4y0RmdZm%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20161135.png?alt=media&amp;token=62114e96-8a5a-4812-8358-ff59a3de807a" alt=""><figcaption></figcaption></figure>

找到 Value，点击后面的 Copy 按钮复制。各个菜单如何加入头颅将在后文说明。

## 插件选择：TrMenu

{% hint style="info" %}
笔者注：由于本文写的前后时间较长，本文发布的时候，TrMenu已经不再维护，故而看到此的服主应当慎重选择此插件。
{% endhint %}

**TrMenu** 是国人开发的一个菜单插件，其通过发包实现，功能丰富，可自定义程度高，最贴近实际使用的来说：

* PlaceholderAPI 等变量符可以实时刷新，不需要点击刷新或者通过不断通过刷新菜单等方式实现刷新。
* 支持 Kether 语法，在条件判断等方面几乎就是自己写插件的自定义程度。
* 使用简洁，排版分布通过 yaml 内直接可视，不需要计算第几行第几列这种无聊的问题。

**TrMenu** 项目的 **GitHub** 地址是：

{% embed url="<https://github.com/TrPlugins/TrMenu>" %}

**TrMenu** 的有关教程：

* 官方Wiki：<https://trmenu.insinuate.io/>
* 他人教程：<https://www.mcbbs.net/thread-1375154-1-1.html>

## 插件选择：DeluxeMenus

**DeluxeMenus** 是一个老牌的菜单插件，处于较为尴尬的地位，是该有的都有了，但是想要做点不一样的就非常捉急了。

**DeluxeMenus** 在 **SpigotMC** 的地址是：

{% embed url="<https://www.spigotmc.org/resources/deluxemenus.11734/>" %}

**DeluxeMenus** 有关教程：

* 中文Wiki：<https://deluxemenu.wiki.complexstudio.net/>

## 插件选择：BetterGUI

**BetterGUI** 是本文临近发布时在此额外补充的一个菜单插件，笔者尚未实际上手，它的诞生也有一定年头，并且功能也更为丰富，值得一试。

**BetterGUI** 在 **SpigotMC** 的地址是：

{% embed url="<https://www.spigotmc.org/resources/bettergui.75620/>" %}

官方Wiki（英文）：<https://bettergui-mc.github.io/Docs>


# 1.6 - 寻找资源：从主城地图开始

在前文我们已经提及了插件寻找的两个网站：

* **GitHub** 是一个大型源码网站，上面不止 **Spigot** 插件，在上面找 **Spigot** 插件有些费劲。
* 而很显然 **SpigotMC** 就更专业了。

下面则再介绍其他的资源网站：

* **Modrinth**：<https://modrinth.com/plugins>

一个比较专业的 Minecraft 资源网站，其插件选项卡含有多种服务端的插件，可在此找到 Folia、Paper。Veocity 专用的插件。

* **Hanger：**<https://hangar.papermc.io/>

Paper 官方的资源站，更加专业。

插件方面其他网站都是补充，一般直接在 SpigotMC 找。

* **Polymart**：<https://polymart.org/resources>
* **BuiltByBit**：<https://builtbybit.com/>

这两个网站是商业化网站，以付费的资源为主，也不止是插件，包括服务端、地图、网站、Discord 机器人、贴图、模型等与开服有关资源都有。Polymart 里不乏一些有创意但没有在 SpigotMC 发布的付费插件。

* **MCModels**：<https://mcmodels.net/>
* **EliteCreature**：<https://elitecreatures.com/>

这两个网站也是商业化网站，不过以贴图、模型为主，也有地图。

* **PlanetMinecraft**：<https://www.planetminecraft.com/>

国外的大型 Minecraft 资源分析站点。

由于上面介绍的商业化网站本身为了顾客服务，使用起来也是相当简洁方便，本人不再赘述，以下介绍 PlanetMinecraft，从他入手，获取一个主城地图。

## 小技巧：PlanetMinecraft 网站的使用

第一步：在网站的主菜单中找到 Minecraft 按钮，点击 Maps 按钮。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FgoM5bx9VQtT5uso4NmLG%2Fimage.png?alt=media\&token=c395ddb8-18a9-4927-a268-115a70cf2235)

第二步：找到搜索框，试着搜索关键词：`spawn、lobby`。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FcKobydBfUPYmepaRx9BO%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20164347.png?alt=media&amp;token=6c3ec3e1-ffa8-4725-8380-cfd8b6157aec" alt=""><figcaption></figcaption></figure>

第三步：找到自己喜欢的地图，值得注意的是，带有这种符号的地图才是提供下载的地图，否则它们只是建筑师的预告或者风景欣赏。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FH4FEGejRRFb2xRSmEyul%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20164523.png?alt=media&amp;token=dc32ed5e-540a-4624-8011-fca75c705a3a" alt=""><figcaption></figcaption></figure>

而这种批量生产的地图即使提供下载地址符号也基本上都是付费的，引导到上文的商业化网站中，也需要分辨一下。

第五步：下载地图。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FDXt4kUAI54JLfDLWTspU%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-03-10%20164941.png?alt=media&amp;token=13cbdcb1-b5ae-49a5-86ab-1c3cb702c2c5" alt=""><figcaption></figcaption></figure>

这种地图是 schematic 格式，我们将在下一节介绍如何使用这种格式的”地图”。


# 1.7 - 插件的选择：保护插件与创世神

## 解释：创世神

在游戏中，如果我们要造一个火柴盒，那么这是十分简单的。那么要造一个“万里长城”呢？这时问题就会出现了——我们似乎没有那么多精力去搭建数目如此之多的方块，创世神的左右就此展现。

在服务器中，新来的我们很少接触建筑，但是当需要同时处理大量方块有关的事务时，创世神的作用不可或缺，我们也可以将其看作为前置插件。

## 插件选择：你喜欢稳定的还是求快的？

前面的菜单插件你已经选完了吧？除了插件本身功能区别，其底层上的区别也需要仔细斟酌。

常见的创世神有如下2种：

* 最为简单的 **WorldEdit** 插件：稳定，仅主线程。
* 更快的 **FastAsyncWorldEdit** 插件：更快，异步处理，但可能存在一些奇奇怪怪的问题。

实际上，在高版本开服中，很多情况下我们不得不选择 **FastAsyncWorldEdit** 插件。

**FastAsyncWorldEdit** 在 SpigotMC 上的地址是：

{% embed url="<https://www.spigotmc.org/resources/fastasyncworldedit.13932/>" %}

### 小技巧：第 N 个插件网站——Bukkit

**WorldEdit** 主要在 **Bukkit** 网站上更新，这是一个比 **Spigot** 还古老的服务端核心，并且现已淡出人们视野，元老级别的插件都可以在这里找到。

**WorldEdit** 在 Bukkit 上的地址是：

{% embed url="<https://dev.bukkit.org/projects/worldedit>" %}

## 小技巧：常见以创世神作为前置插件的插件

* 世界与区域保护的神器，也是很多开发者都会主动与其挂钩的插件：WorldGuard（<https://dev.bukkit.org/projects/worldguard>
* 地皮插件：PlotSquared（<https://www.spigotmc.org/resources/plotsquared-v6.77506/>）。
* 自定义遗迹生成，还可设置遗迹内生成怪物和战利品的插件：BetterStructures（<https://www.spigotmc.org/resources/plotsquared-v6.77506/>
* 等等等等...

以上 **3** 个插件是给你一种什么样插件才会用到创世神作为前置插件的感觉，除 **WorldGuard** 外其余可选。

## 小技巧：读取 schematic 格式的地图

安装创世神插件的前提下，将这种格式的文件放置到 `plugins/WorldEdit（或者FastAsyncWorldEdit，取决于你装了哪个创世神插件）/schematics` 文件夹，如果你打开了创世神插件的文件夹，发现并没有 `schematics` 文件夹，那么你可以手动创建一个。

完成后，在服务器内输入指令 `//schem load <文件名称>`，指令就是两个斜线，不要少了哦。

然后，再输入指令 `//paste`，就会在脚下生成，等待一段时间后即可完成导入。


# 1.8 - 本章作业：权限组和多世界插件

## 回顾

现在，你的服务器应该有至少如下 8 个插件了：

* Vault
* 任意一个与 **Vault** 挂钩的插件
* PlayerPoints / 其他经济插件
* ProtocolLib
* PlaceholderAPI
* 任意一个菜单插件
* FastAsyncWorldEdit
* WorldGuard

另外你的服务器还有一个你心仪的主城了。

## 解释：权限节点与权限组

在服务器中，权限节点可以控制玩家能否做某个事务，例如玩家能否在主城破坏方块，通过对应世界保护插件所提供的权限节点，给予玩家对应权限，玩家就可以这么做了，反之，如果玩家没有，那么玩家就不可以这么做。

有的权限节点是默认就会给予玩家的，而服主也可以给予玩家该权限节点的负节点来使得玩家明明有这个权限节点却不能做这个事务，具体将会在后文涉及。

如果权限节点一个个单独分给玩家，就过于麻烦了，我们可以提供权限组的方式给予同一批玩家相同的权限节点，例如 **VIP** 玩家可以飞行等等。

就 **VIP** 玩家可以飞行这个示例来说，飞行是事务，这些事务都需要服主自己去寻找能够实现的插件（将在后文涉及），**VIP** 是权限组，拥有 **VIP** 这个权限组的玩家就是 **VIP** 玩家。

## 解释：多世界

在服务器中，可以有多个世界，但是一个世界只能对应一个维度，通过传送门传送的就是另外一个世界。多世界插件可以帮助我们加载、卸载、传送到某个指定的世界等，是每个服务器都必不可少的插件。

## 任务：寻找插件

寻找上述的两种插件。

## 小技巧：在搜索引擎上输入“中文关键字 + spigot”

以 **Bing** 为例，搜索结果如下图所示：

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FwBCSVdjb98d46jLtmOlm%2Fimage.png?alt=media\&token=981f1a91-d4d7-499f-b75d-296ad74803fb)

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FpaIX4bGDn5TDgrtbRKkS%2Fimage.png?alt=media\&token=609fc7b7-8d47-4432-8ff4-8de075b052f2)

我们用到的就是这两个插件，其他的可以忽视了。


# 2.1 - 打好基础：YAML格式的学习

插件配置文件一般是 **Yaml** 或者 **Json** 格式，本节就上手难度低，且大部分插件都使用的 **Yaml** 格式的插件配置的基础介绍给大家。

## 大技巧：Yaml 语法格式

**Yaml** 的基本语法格式是 `键: 值`（也就是 `key: value`），例如 `raytrace-distance: 80`。需要注意以下几点：

* 大小写敏感。（由于是插件自动生成的，你也几乎不用考虑点这一点）
* 键与值用 `:` 分开，请注意不是单独的一个 **英文冒号**，而不是一个英文冒号加一个空格。
* 当值中有 `:、&` 等特殊符号时，应该将值的前后用 `'值'` 或者 `"值"` 符号将其囊括，例如 `curse-color: '&c'`。
* 当值中有 `'` 符号时，使用 `''` 代替它，例如 `cannot-afford-type: '&cYou can''t afford to do this! &fCost: &a%cost% %type%'`。（我们可以看到 `can't` 在这里写为 `can''t`）

上面的基本语法格式为普通类型，很多插件中还常用 **List** 类型，它的语法格式为：

```
键:
- 值1
- 值2
- 值3
```

或者

```
键:
  - 值1
  - 值2
  - 值3
```

需要注意的是：

* 第二种表述方法，在其前面仅加了 **2** 个空格。

例如：

```
targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
```

### 缩进

无论你是普通类型还是 **List** 类型，你都需要注意一点，就是值也有可能是其他的选项，也就是子选项的缩进。

缩进的一般语法格式为：

```
键1:
  键2: 值1
  键3: 值2
  键4: 
    - 值3
    - 值4
    - 值5
```

键2、键3、键4都在本教程理解为键1的子选项，需要和键1保持 **2** 个空格的距离。

例如：

```
general-config:
  targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
  grindstoneable: true
  disabled-in-worlds: []
```

当遇到自己辛辛苦苦编写配置后插件不加载，确定是自己配置的问题以后，就可以检查你的 **Yaml** 语法格式是否正确。

我们可以前往 [这个网站](https://verytoolz.com/yaml-validator.html)，在左边复制好自己的 **Yaml** 文本后点击中间的 **Yaml 验证** 即可，当右边出现 **Valid YAML** 时即代表你的语法格式无误，如下图：

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2Fh4UyImadsBbhdTxdId4r%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084733.png?alt=media&amp;token=c04bfd28-2897-495d-bfb5-12ba84b11ecf" alt=""><figcaption></figcaption></figure>

遇到下面这种情况即为有语法错误，并且会将行数告诉你（即 **line 41**，代表第 41 行错误），在这里是因为第 **2** 行缺失另外一个 `'` 符号，导致计算机一直读取到最后也没读到下一个 `'` 符号，所以即在此报错，因此你还需要根据报错的内容来判断是什么问题。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FuyO3AlkN24hByUaoXkQm%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084856.png?alt=media&amp;token=1e6603bd-32f7-4cca-a233-ddd53c85f1c6" alt=""><figcaption></figcaption></figure>

### 空值

有时插件生成的配置我们根本不想用，但是它自己生成了，删除了又怕插件出问题，这时可以使用空值判断一下我们能否删除它。

在上面所给的示例配置中，出现了大量 `键: []` 的这种情况，这种情况即代表这个配置实际上是可以删除的，删除即使用默认值，一般是空值。在下面的学习之旅中，我们会大量使用空值。


# 2.2 - 自学才是王道：读插件文档

## 经验：任何一个东西，从“会学习”做起

“会学习”从何谈起？首先从插件文档看起。会看插件文档一开始费时费力，但是时间久了，会让你倍感受益，并且节省未来百分之80以上的时间。在你遇到某个插件不会用、或者其中某个功能想要调整时，就请自己阅读插件文档，而不是一味的询问他人，把问题抛出去。

请记住，无论在哪个领域，学会消化自己提出的问题的人一定比那些不经常消化自己提出的问题的人更加优秀。在生活中，百分之90以上的问题都是你自己解决的，例如：

* 我明天有早会，那么我明天该几点起床呢？
* 今天的公交车没赶上，还有没有其他的交通方式呢？
* 地铁上，手机提示我有新版本固件更新，但听别人说更新了会更卡，那么我要不要再更新？

## 经验：如何找到插件文档？

### 谢绝二手来源，自行寻找插件。

在前文我已经重点介绍了如何自己找插件，你以为这是“没事找事”，我问别人不就可以了？这是一种“不会学习”的表现，其劣势之一就此显现——你不知道该插件的官方链接，也无从联系插件作者，无法得知插件一手信息。

### 在第一手（由插件作者发布的页面）中找到插件文档页面。

国内不再多说，重点说国外的情况。

文档的英文单词是 **Documentation**，简称 Doc。有时会把 **Wiki** 作为文档。在第一手页面找到这个词，点就对了。

以 ViaVersion，找到插件文档的位置如下：

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FYD6ulSWlR6TxbXyG7ihZ%2Fimage.png?alt=media\&token=81024bf1-28a3-473e-a862-ecf454c5997b)

如果看不懂可以机翻，也可以自己在 MCBBS 等网站找翻译，最好是如 0.0 所述，自己会英语。

重点关键词：

* Command：插件指令。
* Permission：插件权限节点。
* Configuration：插件配置。
* Usage：插件用法。
* Hook：插件挂钩。


# 2.3 - 高效率：制作配置模板

插件的配置在我看来分为两种：

* 第一种：纯插件配置，例如插件用什么语言、插件是否检测更新、插件某个功能是否开启、插件某个设定的调整，基本上一次修改，一劳永逸。特别是 EssentialX、CMI 这种综合性的插件，更需要调整，后文将会特别提及。
* 第二种：插件提供的功能的配置，例如自定义合成插件的配方配置、抽奖箱插件的抽奖箱奖励配置、商店插件的商店配置等等，需要后期不定时维护，并且每个配置都需要在插件文档中找到并背的滚瓜烂熟。

第二种可以考虑使用本节的经验——制作配置模板。

## 经验：制作配置模板

配置模板主打一个通用，我们可以一边阅读插件文档一边上手制作自己第一个对这个插件的配置，这个配置不需要带入实际使用。

例如，一个菜单插件，我们可以阅读其插件文档，制作出如下几个需求的按钮：

* 普通菜单按钮，右键点击执行命令或者打开下一级菜单。
* 商店菜单按钮，玩家必须满足一定条件才能使用这个按钮，使用完以后执行指令。
* 多按钮按条件显示，一个位置有多个按钮占用，同时只会有一个按钮满足条件显示，一般用于显示玩家VIP等级等等。

在制作完上述模板以后，你会发现再写其他的菜单配置，速度快的飞起，只需要复制模板的内容，复制粘贴和删改内容即可。

MCBBS 也要服务端整合包版块，如果实在不懂，也可以参考一下一些优秀服务端是怎么做出一些插件配置的，将它们插件配置复制过来作为自己的配置模板。


# 2.4 - 想不到：核心也能配置

## 经验：常见问题的解决

* 关闭正版验证：`server.properties` 文件下的 `online-mode` 选项改为 false。
*

## 经验：Purpur.yml 大有用处

这里只提一嘴，许多小功能都可以通过核心配置实现修改。要求 **Purpur** 及以其为基础的服务端核心。

在 MCBBS 联机教程版块已经有若干关于 `purpur.yml` 文件的教程了，这里我不做多谈，只是想说，用好这个文件可以节省你很多事情。

* 禁止村民交易。
* 禁止 BUG 价的村民。
* 禁止末影人传送。
* 末影人进 2 格。
* 末影箱多大按照权限节点决定。
* 使用哭泣黑曜石建造下界传送门。
* 附魔超过等级限制。
* 关闭龙蛋传送。

等等...


# 2.5 - 本章作业：综合基础插件

上文提及了一个让玩家可以飞行的 `/fly` 指令，这个指令在原版并不存在，这时一个综合基础插件就非常重要了。

## 插件选择：CMI

经典老牌付费的综合基础插件。但配置文件非常混乱，插件文档也是杂乱无章，属于是吃老本的状态了。

{% embed url="<https://www.spigotmc.org/resources/cmi-298-commands-insane-kits-portals-essentials-economy-mysql-sqlite-much-more.3742/>" %}

## 插件选择：Essential X

经典老牌免费的综合基础插件，优点很多，缺点是安装麻烦（有若干附属），默认配置文件一般不适用国内环境，需要详细调整。

{% embed url="<https://www.spigotmc.org/resources/essentialsx.9089/>" %}

## 插件选择：SunLight

真正意义上的模块化基础插件，功能可能比前面两者少一些，但是配置文件干净漂亮，易于上手，新手推荐使用。

{% embed url="<https://www.spigotmc.org/resources/sunlight-best-essentials-cmi-alternative.67733/>" %}

## 任务

尝试通过 **LuckPerms** 给普通玩家对应插件的飞行的权限节点，以让所有玩家能够飞行，同时调整玩家不能在 **world** 世界飞行。

答案将会在下一章揭晓。


# 3.1 - 实战：权限组的安排

## 经验：LuckPerms 的简易使用教程

### /lp editor —— 打开权限组网页编辑器

使用该指令后插件会发给你一个链接，你可以在网页内可视化管理你的权限组和权限节点，非常方便。

### /lp user 玩家名称 parent add 组英文ID —— 给予玩家一个权限组

这个指令代表给玩家新的一个权限组，旧的权限组同时也在。同样是上面这个指令，将 add 改为 set 则代表将这个玩家设置到新的权限组，玩家旧的权限组不复存在。

由于本端设置了 parentGroup 功能，并且很好发挥了 weight 规则：weight 越高，也就是上面那个表越往下的组，它一定会携带上面所有权限组的权限，因此本端 add 和 set 给予玩家权限组没有什么区别，但是在其他制作不严谨的服务端或者专门利用这个特性制作一些规则的服务端，如果你权限组指令没打对，会出大问题。

### /lp user 玩家名称 parent addtemp 组英文ID 时间数 —— **给予一个玩家临时的权限组**

时间数如何表示？1d = 1天，30d = 30天，1mo = 1月，1h = 1小时... 还不懂建议看一下脑科。如果你一不小心给错了玩家权限组，怎么撤回？千万不能说直接把玩家权限组删了，否则玩家权限组没了啥也干不了。用上面的 set 指令，引导玩家到他原来的组里面。

### /lp group 组英文ID permission set 权限节点 true —— **给一个组添加一个权限节点**

将 **true** 替换为 **false**，则代表这个权限组一定没有这个权限，尽管插件设置了所有玩家默认都有这个权限节点的权限，如果这里是 **false**，也会被强制替换为 没有权限。

## 经验：修改 LuckPerms 的数据储存方式

由于 `/lp editor` 指令在国内容易无法连接，因此建议修改数据库模式更改为 `yaml`，方便修改各个组的权限节点。

修改各个组的权限节点有如下几种方式：

* 通过 `/lp editor` 指令在网页在线编辑，优点是直观，缺点是容易连接不上，对于老手来说效率也不高。
* 如果使用 `yaml` 方式储存，那么直接按照 **2.1** 节所教教程，编辑各个组的权限节点，可以几秒内通过复制插件文档一次性就添加几百个权限节点，方便简单，缺点是对于大型服务器来说，这种储存方式可能造成一些性能问题。**如果你是新来的，不用想这么多，而且 LuckPerms 也支持数据转换，无脑选它！**
* 通过上面教你的指令一个个打，效率低，指令长不好记。**LuckPerms** 默认使用 **h2** 储存方式，如果你连接不上网页在线编辑，那就悲催了，你只能通过这些指令一个个敲，所以我推荐你用 **yaml**，**yaml** 大家伙电脑都有记事本可以改，而 h2 的数据库文件需要下载额外的软件。

如何修改？如果你想给自己一个挑战，到此为止，自己去看插件文档。如果找不到，可以看我给的教程：

在 **LuckPerms** 的 `config.yml` 文件中找到 `storage-method` 选项，将其改为 `yaml`。

## 经验：使用 Notepad++ 搜索结果

**LuckPerms** 的配置文件长的要死，就算我给了你这个选项你也很容易找不到，这时候前文叫你安装的文本处理软件就用上用场了，我们可以点击软件上方工具栏的“搜索”选项卡，然后点击“查找”，再在文本框输入查找内容即可。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FJy669vgmsFasGX6ldNDp%2Fimage.png?alt=media\&token=88741775-6895-477b-9c3a-c97f361087c4)

## 经验：组的创建与使用

你想让你的服务器玩家分为哪些组？我把我的想法写给你：

| default  | 普通玩家   | 进服         | 10   |   |   |
| -------- | ------ | ---------- | ---- | - | - |
| gold     | 黄金玩家   | 等级菜单花费金币升级 | 20   |   |   |
| diamond  | 钻石玩家   | 等级菜单花费金币升级 | 30   |   |   |
| emerged  | 绿宝石玩家  | 等级菜单花费金币升级 | 40   |   |   |
| nether   | 下界合金玩家 | 等级菜单花费金币升级 | 50   |   |   |
| amethyst | 水晶玩家   | 等级菜单花费金币升级 | 60   |   |   |
| vip      | VIP    | 等级菜单花费点券购买 | 100  |   |   |
| svip     | SVIP   | 等级菜单花费点券购买 | 200  |   |   |
| owner    | 服主     | 手动给予       | 1000 |   |   |

这里出现了组中文Prefix，其实官方Wiki将其称为 **Prefix**，我们可以理解为其游戏名称前面将会出现的内容。还有一个 **Suffixes**，是在游戏名称后面出现的内容，这两个不会平白无故的显示的，所以放心的在这里添加吧，尽管你不知道具体干什么的。

如何给组添加权限节点我们之前已经说了，那么如何创建组呢？如果前文你已经将数据库改为了 `yaml`，那么很简单，找到 `plugins\LuckPerms\yaml-storage\groups` 目录，创建一个新的文件，名为“组英文id.yml”，例如“vip.yml”。

将下面这段复制进去：

```
name: vip
permissions:
- weight.100
prefixes:
- '&#B0C4DE[&#e9b308VIP玩家&#B0C4DE]':
    priority: 100
suffixes:
- '&#FAEBD7':
    priority: 100
```

`prefixes` 和 `suffixes` 想必你已经知道干什么了，底下的 priority 则是优先值，直接填写和上表权重一样的值即可。

`permissions` 就是这个组有什么权限节点，`name` 就是组的名称。

其他指令和网页编辑的，请自行参考插件文档。

如何添加权重呢？这个参考示例也给了你答案：给予 `weight.值` 的权限节点即可。

在接下来的教程中，**Prefix** 只在计分板显示、聊天显示等位置都会用到。

每个权限组都有一个 **权重** 值，越往下的权限组，其值越高。权重值越高，代表当你同时拥有2个及以上权限组时，在计分板显示等位置时，将会优先显示权重值高的权限组的 **Prefix**。不设置该值的后果就是，当玩家拥有 2 个及以上权限组后，计分板等位置会显示玩家所有的组，例如 **\[普通玩家]\[VIP]**。

最后温馨提示，2.5 节的作业的答案一半这里已经给了哦，后文不再提及这一半了。

## 经验：实战使用

### 会员等级

玩家可以通过 **等级菜单** 提升他们的会员等级。可以不仅需要玩家攒到一定数额的金币，还需要达到一定的任务条件，以增加玩家的粘度。玩家只有解锁上一级的会员等级，才能尝试解锁下一级的会员等级，需要循序渐进，不能跳过。并且，随着会员等级的提升，其需要达到的条件和需要消耗的金币数额也在不断提高，以增加后期升级的挑战性。

如果你想创建自己的会员等级，只需要通过 **LuckPerms** 创建新的权限组即可。你可以通过指令 `/lp creategroup 组名称` 即可创建。组名称是使用 LuckPerms 指令时用到的变量，并不是玩家实际看到的名称，并且只能设置为小写英文、数字组合。这时，参考上文，给这个权限组赋予权限节点，或者通过网页编辑器编辑，即可实现创建新的会员等级。通过参考 **菜单**，编辑等级菜单以给新的会员等级赋予升级页面。我们的会员等级条件是通过 `plugins/CMI/rankup.yml` 文件实现的，这里不再叙述。

### 特权等级

玩家只能通过 **点券购买** 获得特权等级。对特权等级定义是：一切基于最高级的玩家等级之上。这也是方便玩家快速过渡前期的捷径之一。特权等级拥有的权限高于会员等级的最高级别，因此请勿随意给没有充值的玩家特权等级。


# 3.2 - 实战：世界的安排

## 经验：Multiverse-Core 的简易使用教程

### /mv import 世界名称 维度类型 —— 加载一个世界

将你需要导入到服务器的世界，解压并放置在服务端的根目录&#x4E0B;**（也就是和 启动.bat 所在的同一个地方）**。世界名称即是文件夹名称，请不要使用 **中文、空格和其他奇奇怪怪符号**，全英文和数字，否则会导致很多意想不到的问题！

维度类型有 3 种：**normal（主世界）、nether（下界）和 end（末地）。**

### /mv tp 世界名称 —— 传送到一个世界

这个传送指令是给服主用的，如果想给玩家设置定点传送，那么请使用 **/setwarp 传送点名称** 指令，这样玩家就可以使用 **/warp 传送点名称** 指令传送到那里。

### /mv create 世界名称 维度类型 -g 生成器名称 —— 创建一个世界

-g后面（包括 -g）的可以删除，这样就直接使用原版生成器。

## 经验：生成器的选择

### 原版为最佳

原版生成器即是最佳的生成器，其是 Mojang 公司整个团队浓缩的精华，其他生成器制作者无论是人员数量、经验水准等都不及 Mojang，尽管地形可能更好看了，但是生成时的性能消耗、矿物、宝箱等资源平衡数、技术性的一些内容等都有可能没有考量到，在你没有对你喜欢的某个生成器做好足够的功课之前，请记住——原版对你来说，就是最佳。

### 数据包

数据包基于原版，各个数据包之间的兼容性是非常强的，同时各个服务端核心一般来说也能很好的支持这些地形生成方面的数据包。数据包有一个缺陷：跨版本兼容性差。

我们可以在 1.6 节介绍的 PlanetMinecraft 网站找到合适的数据包，数据包的英文名称是 datapack。

### 插件

插件是独立于原版生成器的，其通过自己的生成规则改造世界，对服务器性能来说要求更高，但可自定义读也往往更大，对于一般服主来说，你很有可能也看不懂插件作者提供给你的可选参数，因而大家也往往是直接安装即用，如果是这样，不如参考一下数据包，但是如果要生成以 ItemsAdder 等插件的方块为基础的生物群系，插件生成器也是不错的选择。

一些我推荐的插件生成器如下：

* Terra（免费）：<https://www.spigotmc.org/resources/terra.85151/>
* Iris（付费）：<https://www.spigotmc.org/resources/iris-dimension-engine.84586/>

使用插件作为生成器时，上面所给的指令的 `-g 生成器名称` 就要填写完整了，数据包则不用，因为其更改的原版生成器。生成器名称请自行到对应插件的插件文档查看。

## 经验：如何安装数据包

将下载到的 **zip** 文件复制到 `world（一进服那个世界的名称）/datapacks` 文件夹下。

如果安装以后出现服务器无法启动，则代表该数据包不支持你的服务器版本。

## 经验：创建这几个世界吧！

* /mv create overworld normal
* /mv create nether nether
* /mv create end end


# 3.3 - 实战：NPC

## 插件选择：Citizens

经典老牌的 NPC 插件，功能丰富。

{% embed url="<https://github.com/CitizensDev/Citizens2>" %}

点击其中的 **Developmental builds** 后所给链接即可下载。

## 插件选择：ZNPCs

小巧免费的 NPC 插件。

{% embed url="<https://www.spigotmc.org/resources/znpcs.80940/>" %}

## 经验：如何使用 Citizens 2 创建 NPC

请先站在你需要创建 **NPC** 的大概的地方，然后使用指令 `/npc create NPC名称`。其中 **NPC** 名称是会显示在 **NPC** 头顶上方的，如果你要显示的内容 **超过一行**，请先填写 **&7，后面使用浮空字代替**。这时，一个 **NPC** 应该在你所在的位置生成了。

我们再使用以下指令对 NPC 进行进一步操作：

* /npc skin 正版玩家名称 —— 将 NPC 的皮肤设置成某位正版玩家的样子。
* /npc look —— NPC 将会看离它最近的玩家。
* /npc command add -p 指令 —— 给 NPC 绑定一个左键以玩家身份执行的指令

然后，使用指令 `/citizens save` 来保存当前的修改。这时打开 `plugins/Citizens/saves.yml` 文件，找到你刚刚创建的 NPC 的配置：

```
  '6':
    metadata:
      cached-skin-uuid-name: trades
      cached-skin-uuid: bc2d2519-c5e4-48f3-99c5-bfe9d396e73e
    name: §7
    uuid: f69095aa-6356-4974-9d0b-ed2a85d69bd4
    traits:
      skintrait:
        fetchDefaultSkin: true
        signature: uE/P8Xdcixfdns663hwABVwaBc3AOvL3LsuOCGJ0I7QSAm+OdfcnF3Cv2KQM1mwCAorHtOpmWGnd3LA7SfXEhYJdVuCuMZwMWTW/mexDRVD0qxAvj5NsHrKLX+hB80nWHshl0n6dMKyF0BzKqmyX0jLhYoYjXRDn4PxbcC4e0X11oHSo8EEanUTTk9Tu0VXAilEApibp+U3VvxnKnx1zm3aH97pxvS1gB0eYskUcv3fPwJ9aM4i5cjjxaXAg0jslm9sTDQzU+ZztjbNad7969TheUxCf5rDm/t3sjnasywEkcj3su7M+CpdwtDHHRBI47Nq6N8qAbR30cSz7RVRbmdnglyUssxYlFdVtNJ9GLAI5dBTBajbs7CM0gUcD4p6ya2upg9lmWnLBm0fLrkWNHeeSK0IzSPJRTyzO1LssKEFDso3l0IVhJrUxBIl14HaXgo9TuzI/weKo3HRv0t8DFnoReq0ugeAQ34frACEtpOATpsz7fpQf0cm/krpHh2ajF+CLamClU0j/9nH9UvKYkFicfYiYEPVoQfZ33KZHwefbtjt6B3g8c9QlkySTBHd0wNw9/TuylG9YPryr9gq29RxOSyxtELvwYXIi82qNjmZfqMgRu9iLLtZEdFN+pSJqPGBIjrEMEwYEayTrYs5DyzknqdEwvMbddgOPTBjIjps=
        skinName: trades
        textureRaw: ewogICJ0aW1lc3RhbXAiIDogMTYyODI0NDkwMzM2MSwKICAicHJvZmlsZUlkIiA6ICJiYzJkMjUxOWM1ZTQ0OGYzOTljNWJmZTlkMzk2ZTczZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJUcmFkZXMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWJlZGI5NDJjMTU2ZDc0Mzc5MWE1NWY5ZDJjODg3MDBkZWZiOWY5YzEyYzQ0MGM3YjNiODc3ZDhmZGZiNWU3YyIKICAgIH0KICB9Cn0=
        updateSkins: false
      lookclose:
        range: '5.0'
        disablewhilenavigating: true
        enabled: true
        enableRandomLook: false
        randomLookDelay: 60
        realisticlooking: false
        randomPitchRange:
          '0': -10.0
          '1': 0.0
        randomYawRange:
          '0': 0.0
          '1': 360.0
      spawned: true
      location:
        bodyYaw: -85.93808
        world: world
        x: '-50.5'
        y: '38.0'
        z: '-253.5'
        yaw: '-47.4141'
        pitch: '0.0'
      type: PLAYER
      commandtrait:
        cost: -1.0
        executionMode: LINEAR
        experienceCost: -1.0
        hideErrorMessages: false
        commands:
          '0':
            command: trademenu
            hand: RIGHT
            player: true
            op: false
            cooldown: 0
            globalcooldown: 0
            n: -1
            delay: 0
      owner:
        uuid: ceb29779-392b-30ee-a212-6ad059f9046b
      sneak:
        sneaking: false
    traitnames: lookclose,skintrait,scoreboardtrait,type,spawned,inventory,equipment,owner,sneak,commandtrait,mounttrait,location
    navigator:
      speedmodifier: '1.0'
      avoidwater: false
      usedefaultstuckaction: true
```

找到 **location** 配置位置，将里面的 **x，y，z** 三个值小数点后面数字全部删除，改成 **5**，这样 **NPC** 就站在方块的正中央，更加美观了。（需要使用 `/citizens reload` 指令重新加载配置，该指令需要你执行两次）

你可以通过如下指令编辑 NPC。

* /npc sel —— 选中一个 NPC，你必须先对准一个 NPC 看然后使用该指令，才能继续使用 Citizens 的其他指令，否则插件不知道你要对哪个 NPC 进行编辑。
* /npc id —— 查看一个 NPC 的id，如果你忘记一个 NPC 的id，可以通过该指令查看。
* /npc movehere —— 将一个 NPC 搬到你所在的位置。
* /npc remove —— 删除一个 NPC。


# 3.4 - 实战：浮空字

## 插件选择：DecentHolograms

没得选，现在就这个。

{% embed url="<https://www.spigotmc.org/resources/decentholograms-1-8-1-20-1-papi-support-no-dependencies.96927/>" %}

## 经验：如何使用这个插件创建浮空字

在需要创建浮空字的地方输入指令 `/dh create 浮空字id`，然后会在 `plugins\DecentHolograms\holograms` 生成对应的浮空字配置文件。

location 为浮空字位置，试着为 NPC 头顶上方创建一个浮空字吧！

```
location: world:-13.500:73.800:-52.500
enabled: true
display-range: 48
update-range: 48
update-interval: 20
facing: 0.0
down-origin: false
pages:
- lines:
  - content: '&f'
    height: 0.3
  - content: '&#ff3300&l常惠然'
    height: 0.3
  - content: '&#B0C4DE农作物玩法 NPC'
    height: 0.3
  actions: {}
```


# 3.5 - 实战：传送

## 经验：世界传送的方法

我将你将玩家传送到生存世界的方法归纳为：

* 定点传送：玩家每次传送到这个世界都是固定的点。
* 随机传送：顾名思义了。随机取个位置。

两者可以优缺点，定点传送很明显较于随机传送性能消耗低，但是出生点很容易形成2b2t风，玩家想要找到合适生存点并不容易。我的看法是可以进服免费赠送玩家若干次随机传送，随机传送后强制设家（通过前文提及的综合基础插件实现），然后玩家便可定点传送。

定点传送可以通过前文提及的综合基础插件使用 `/setwarp 传送点每次` 指令创建传送点，玩家使用 `/warp 传送点每次` 传送，注意需要的权限节点。

## 插件选择：BetterRTP

随机传送的老牌插件，建议选，可自定义度高，我喜欢用，可以搞每个权限组随机传送价格、距离不一样，其他同类型插件搞不定。

{% embed url="<https://www.spigotmc.org/resources/betterrtp-random-wild-teleport.36081/>" %}

## 经验：BetterRTP 的简易使用教程

### /rtp world 世界名称 指令

通过该指令进行随机传送是最优化解决方案，但您还需要给予玩家 `betterrtp.world.世界名称`权限。如果您需要付费随机传送，请打开 **plugins/BetterRTP/economy.yml** 文件，新增新的世界：

```
CustomWorlds:
  Enabled: true
  Prices:
  - nether: 50
  - terra: 300
  - 新的世界名称: 价格
```


# 3.6 - 最后：拓展玩法的插件

前文已经把服务器会用的基础插件介绍差不多了，其他的大多都是拓展玩法了，拓展玩法是需要自己日积月累，根据经验决定，在此简单写一些。

## 经验：不要让插件“大战”一场

写给看得懂的人看：

**MMOItems** 和 **EcoEnchants** 都有对玩家血量进行修改的操作，如果你的 **MMOItems** 的物品决定给玩家增加 **10** 血，**EcoEnchants** 决定增加 **20** 血，请问玩家到底增加多少血？

**MMOItems** 和 **MMOCore** 有共同前置 **MythicLib**，其作者为了这种兼容性，会把操作统一放到这些前置插件上去，因而我想说的是：对于这种拓展玩法的插件，请选择同一个作者系列下的插件，否则容易出现你认为是 **bug** 而作者测不出来的尴尬情况。

## 经验：俗套的拓展玩法系统

基本上每个服务器都这样搞，我也就写写了：

* 钓鱼。
* 附魔。
* 宝石。
* RPG 物品（MMOItems）。
* 职业。
* 类似于 mcMMO 的技能。
* 称号。
* 公会。
* MythicMobs 的副本。

针对以上列表，我写一下推荐的插件。

### 钓鱼

* CustomFishing

功能性很强，但是里面的迷你游戏普通奖励就大可不必了，本来钓鱼原版就是看时机的，如果钓个普通的鱼还要在玩这个，谁还钓鱼呢？

{% embed url="<https://polymart.org/resource/customfishing.2723>" %}

* EvenMoreFish

中规中矩的免费钓鱼插件。

{% embed url="<https://www.spigotmc.org/resources/evenmorefish-%E2%96%AA-extensive-fishing-plugin-%E2%96%AA.91310/>" %}

### 附魔

* EcoEnchants

真正意义上的高版本附魔，和其他插件兼容性强，可自定义度非常高。但可惜 bug 多。

{% embed url="<https://www.spigotmc.org/resources/50-off-%E2%8F%B3-ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/>" %}

* ExcellentEnchants

免费附魔，不可自定义，但是正如其插件介绍所说“Vanilla-like”，这里我想说一下，麻烦诸位参考一下原版的附魔，很多人做歪了。

* 弓一次性可以射出3只箭，这是附魔。
* 弓的箭有追踪效果，这也是附魔。
* 弓的箭进入水照样原轨道，这也是附魔。
* 手持弓以后玩家移动速度++，这是什么附魔？移动速度和弓有关系吗？
* 手持剑有夜视效果，你说带个帽子有夜视效果是附魔，剑和夜视有什么关系吗？

{% embed url="<https://www.spigotmc.org/resources/excellentenchants-vanilla-like-enchantments.61693/>" %}

* AdvancedEnchantments

不建议，但推荐，所谓几百个附魔光一开始锄的自动补种附魔有十几个，一个农作物的自动补种就一个附魔，凑数呢？另外也不是真正意义上的注册到服务器里的附魔。但对于新手来说值得一用。

{% embed url="<https://www.spigotmc.org/resources/1-13-1-20-1-%E2%AD%95-advancedenchantments-%E2%AD%90-450-custom-enchants-%E2%AD%90create-custom-enchantments-%E2%9C%85-25-sale.43058/>" %}

### RPG 物品

* MMOItems

经典老牌，使用方便。

{% embed url="<https://www.spigotmc.org/resources/mmoitems-premium.39267/>" %}

* EcoItems

自定义度高。上面那个能做的不能做的，它都可以。

{% embed url="<https://www.spigotmc.org/resources/ecoitems-%E2%AD%95-create-custom-items-%E2%9C%85-weapons-armors-tools-charms-%E2%9C%A8-item-levels-cosmetics.94601/>" %}

### 职业

* Jobs，就这个

{% embed url="<https://www.spigotmc.org/resources/jobs-reborn.4216/>" %}

### 技能

* AureliumSkills

免费，技能实用，默认配置需要做一些平衡性修改。

{% embed url="<https://www.spigotmc.org/resources/aurelium-skills-advanced-skills-stats-abilities-and-more.81069/>" %}

* EcoSkills

还是那句话，自定义度高，可以自己做技能。

{% embed url="<https://www.spigotmc.org/resources/50-off-%E2%8F%B3-ecoskills-%E2%AD%95-addictive-mmorpg-skills-%E2%9C%85-create-custom-skills-stats-effects-%E2%9C%A8-plug-play.95541/>" %}

* mcMMO

除了老牌，没什么特色，还贵。有的玩家喜欢这个，可以考虑。

{% embed url="<https://www.spigotmc.org/resources/official-mcmmo-original-author-returns.64348/>" %}

### 怪物

* MythicMobs
* EliteMobs
* LevelledMobs

三个插件功能不同，各有千秋，就麻烦自己根据前面所学，自行寻找资料，自行比较了。


# 3.7 - 最后：运营需求的插件

在完成上文提及的基础插件、拓展玩法插件后，最后就是运营需求插件。这也是我将一个服务器用到的插件归纳的三类。

## 经验：常用的运营需求插件

### 登录（正版服无需考虑）

* AuthMe

经典老牌，功能丰富。

{% embed url="<https://ci.codemc.io/job/AuthMe/job/AuthMeReloaded/>" %}

* NexAuth

小巧轻盈，使用方便，新手无脑推荐这个。

{% embed url="<https://www.spigotmc.org/resources/nexauth-simple-light-and-modern-authorization.88015/>" %}

* LibreLogin

功能异常强大，群组服使用，如果开群组服，无脑推荐这个。

{% embed url="<https://github.com/kyngs/LibreLogin>" %}

### MOTD

* MiniMOTD

支持 MiniMessage 格式的 MOTD 插件。

{% embed url="<https://www.spigotmc.org/resources/minimotd-server-list-motd-plugin-with-rgb-gradients.81254/>" %}

## 封禁

如果是单服，原版的封禁，或者综合基础插件的封禁已经够用，但是群组服值得再用）

* AdvancedBan

免费好用的封禁插件。

{% embed url="<https://www.spigotmc.org/resources/advancedban.8695/>" %}

## 跨版本

跨版本只适合你的服务器玩法缺少在多版本上都可以流畅体验时使用，ItemsAdder 等服务器不适合使用。

* ViaVersion（这是低版本服支持高版本客户端使用）
* ViaBackwards（这是高版本服支持低版本客户端使用，需要使用 ViaVersion 作为前置插件）
* ViaRewinds（这是高版本服支持特别低的版本客户端使用，需要以上两者作为前置插件）

以上三个插件在群组服中，如果不使用 ViaVersion 提供的 API，可以直接装在支持的群组端中（如BungeeCord），无需每个子服都安装。一般使用其API的是反作弊插件，因为不同客户端版本判断玩家是否作弊策略一般也不同。

## 反作弊

萝卜青菜，各有所爱。常见的有：

* Vulcan
* Matrix
* Spartan

## 计分板/TAB/自定义PAPI/各种消息处理

无脑推荐 TAB。


# 4.1 - 开源插件的构建

在前面很多地方我们已经介绍了 **GitHub** 网站，而插件作者把自己的插件开源但在 **SpigotMC** 等平台提供付费下载。对于只想研究该插件、没有充足资金的服主来说，学会自己构建它们也可以省下一笔支出，但需要注意的是，这么做以后作者是不会给你提供服务支持的，遇到问题、提交建议等一般都需要自己解决，除非作者声明了付费用户和自行构建用户不区别对待。

## IntelliJ IDEA 的下载与安装

点击 [此链接](https://www.jetbrains.com/idea/download/download-thanks.html?platform=windows\&code=IIC) 下载，安装与常规软件并无差异，在此不再赘述，实在不会的请自己查询。

## 从 GitHub 上克隆项目

打开软件后，点击“从VCS获取”，在打开的页面中输入 GitHub 的地址即可。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FxGCXbpHQGXg03LA6JZXG%2Fimage.png?alt=media\&token=1a1d8928-c7c7-4b00-a278-d202b6c3cbbe)

## 进入项目

进入项目后，IntelliJ IDEA 会自动开始构建项目，如果并没有，点击图片所示的图标即可。构建项目中的主要过程就是下载依赖。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FWFUJ1DWEdVunjScQZnCq%2FInked%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-04-08%20183921.jpg?alt=media&amp;token=235735c4-0634-4050-b47d-e7e91db96189" alt=""><figcaption></figcaption></figure>

如果这个过程中出现下载依赖方面出现问题，可以着手以下两个方法：

* 使用镜像节点。
* 使用代理。以 Clash 为例，你需要在常规选项卡开启 TUN 模式。

## 打包 jar

一般开源项目会自带构建、打包插件成 **jar** 文件的 **gradle** 或者 **maven** 文件。使用 **maven** 作为构建、打包工具的项目源代码会含有 **pom.xml** 文件，而 **gradle** 则是很好就可以辨别出来。

知道插件使用的构建、打包工具后就可以开始着手打包了：

* 在上图所指图标右侧有一个 **添加配置** 按钮，请点击它。
* 在打开的新页面中点击 **添加新的运行配置** 按钮。
* 在再次打开的新界面中找到对应的构建、打包工具，例如这里是 **gradle**。
* 在再次打开的新页面中的运行字段框中输入打包指令。**gradle** 输入 **clean build**，**maven** 输入 **clean package**。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FTWIOOdAHWmGlYp4rpwm9%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-04-08%20185042.png?alt=media&amp;token=5cda798d-2496-4b69-8758-5960a6cf6130" alt=""><figcaption></figcaption></figure>

* 打包完成。

<figure><img src="https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F0w62rEOPvZDt0ewH5os6%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-04-08%20185206.png?alt=media&amp;token=80955d55-1bd9-4d9e-b0b2-c683342dc7d4" alt=""><figcaption></figcaption></figure>

## 添加本地库

本地库可以在 **Maven** 或者 **Gradle** 的构建文件添加。

{% hint style="info" %}
**请注意，如果添加的 jar 文件下又需要添加其他 jar 文件作为依赖，那么添加本地库需要将这些所有用到的 jar 文件全部打包。**

**例如，在下面这个例子中使用了 GamePoints 插件作为依赖打包，而 GamePoints 又用了其前置插件 NexEngine 作为依赖，因而我将两个插件都写进了这个构建文件中。**
{% endhint %}

对于 **Maven**，打开项目下的 `pom.xml` 文件，找到如下格式的内容：

```
    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.19.1-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>su.nightexpress.gamepoints</groupId>
            <artifactId>GamePoints</artifactId>
            <version>1.3.5</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/GamePoints-1.3.5.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>su.nexmedia</groupId>
            <artifactId>NexEngine</artifactId>
            <version>2.2.8</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/NexEngine.jar</systemPath>
        </dependency>
    </dependencies>
```

然后将对应的 **jar** 文件放置到项目文件夹下的 **libs** 文件夹即可。

**Gradle** 就比较简单了，找到 `build.gradle`，在：

```
dependencies {
  ...（一系列内容）
}
```

中添加：

```
compileOnly fileTree(dir:'libs',includes:['*.jar'])
```


# 4.2 - 看报错

## 无用报错

在执行某个插件指令后出现一个类似下图的报错，即为无用报错，这里指的是这个插件在开服前就根本没有成功加载，导致插件指令没有成功注册的报错而已，此时你应该提供开服时此插件的报错。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FHnGlm4p2U7zMIUM7l8HH%2Fimage.png?alt=media\&token=4520de17-43e5-4b9b-a095-677024dd0f0c)

## YAML 报错

在 2.1 节我已经介绍过了怎么解决。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FRl5CLh1LBNicH6zlhP9z%2Fimage.png?alt=media\&token=05bc3e2b-1d06-412b-8f6e-7267d2034304)

## 空指针

报错第一行带有 NullPointerException，这一般是插件没有考虑到特殊情况导致的报错，或者是插件某个依赖没有打包好，又或者前置插件版本过低了等等，建议联系开发者是最佳解决渠道。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2F078NdIeU9cMQaRT3SYeW%2Fimage.png?alt=media\&token=191b72f3-6b18-4f8c-b77f-fcf835793b6c)

## 缺少前置插件

缺少的插件名字在第一行已经用 `[ ]` 符号标注，例如这里是 **NexEngine**。

![](https://400373137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFlP4xP4pRQ4Bt9AMcMkX%2Fuploads%2FV94zX5LAUjWInL2Nvz3j%2Fimage.png?alt=media\&token=f68c4657-6ca9-422e-9c06-14c6b9df93e7)

## 某个插件的红色提示消息

这不是报错，很多人认为是报错。

## 带有 Spawn entity 的黄色提示消息

这不是报错，很多人认为是报错。可以在 `spigot.yml` 中关闭，我只指路。

## 出现在插件提示 Checking update 等字样后的报错

只是国内特殊情况导致插件无法处理更新请求的报错，无视或者在插件配置文件关闭插件检查更新选项。


# 欢迎

**ItemsAdder** 是一个利用原版 **Minecraft** 特性带来类 **Mod** 化游戏体验的插件，它内容庞大、使用较复杂，为了让广大服主能更顺利、更快速的入手该插件，笔者特根据自己的使用经验来编写使用指导。

较之 **Wiki**，使用指导以更为“平静”的方法教导该插件的基础用法，并循序渐进，而不是一股脑的将某某分类下所有的功能用法全部灌输给读者，更适合新手浏览，也同样适合有多次使用经验的服主快速查阅一些关键、常用功能的用法。

首次阅读时，需要读者循序渐进、一章一章阅读。

## 高版本服主交流群：

833821060，公益交流群。


# 插件安装

**ItemsAdder** 需要以下前置插件：

* ProtolcolLib：[点击下载](https://www.spigotmc.org/resources/protocollib.1997/)。
* LoneLib：[点击下载](https://www.spigotmc.org/resources/lonelibs.75974/)。
* LightAPI：可选。用于物品发光。[点击下载](https://github.com/BeYkeRYkt/LightAPI/releases)。**经过本人和多位服主的测试，此插件会造成严重的服务器资源占用，没有特别需要请不要安装！**
* Lib's Disguises：可选。用于旧的自定义生物功能。[点击下载](https://www.spigotmc.org/resources/libs-disguises-free.81/)。付费版较之免费版只是多了玩家可以自己伪装的功能，没有必要的情况下直接使用免费版即可。

在确保安装了 **ProtolcolLib、LoneLib** 两款插件后即可将 **ItemsAdder** 拖入 **plugins** 文件夹并开启服务器，开始使用插件。


# 资源包分发

**ItemsAdder** 本身提供了多种资源包分发方式，但在本教程笔者只介绍以下两种：

* 本地对外分发。
* 直链分发。

由于 **Dropbox、Onedrive** 等在国内要么无法访问要么速度不稳定，因此不是理想的资源包分发选择方式。

**两个方法各有优缺点：**

* 本地对外分发需要服务器本地有额外 **1** 个端口用于资源包分发。如果你购买的是面板服，那么通常这是受限的，而直链分发并不需要这一点。
* 本地对外分发本身会占用一些服务器带宽等资源，而直链分发不会占用。
* 每次服务器资源包更新，直链分发需要服主手动上传新的资源包，并修改新的直链地址。

在你的玩家数量没有太多，又有足够的服务器资源时，笔者仍推荐本地对外分发，特别是前期你的服务器玩家根本没有那么多，而此时服务器需要大量内容更新而资源包更新又因此十分频繁，这会让你省去很多事情。

无论你选择哪一个资源包分发方式，首次启动后都要求你修改 **config.yml** 内的内容。

### 本地对外分发

```
resource-pack:
  hosting:
    no-host:
      enabled: false
    auto-external-host:
      enabled: false
    self-host:
      enabled: true # <----- 如果你选择本地资源包分发，请将这里设置为 true。
      server-ip: '127.0.0.1' # <----- 请将这里设置为你的服务器的外网IP。
      pack-port: 8163 # <----- 请将这里设置为资源包分发的端口。
    external-host:
      enabled: false
      url: ''
```

按上示例进行修改，请注意：

* `pack-port` 指示的端口值，在非局域网条件下必须仍能访问到，也就是外网端口。很多 **VPS** 租赁商不是开放全端口，你往往需要手动修改这里的值。

修改完以后输入 `/iareload、/iazip` 指令后即可。

### 直链分发

什么？你跟我说不是有 `auto-external-host`（自动直链分发）吗？很抱歉，在国外，速度稳不稳定无法保证。

在你每次输入 `/iazip` 后（或者首次启动插件），**ItemsAdder** 都会在 `resource_pack` 文件夹下生成 `pack.zip` 的文件，请将它上传到你的对象存储（或者支持直链的网盘等等），并获取到直链地址，填入到 `external-host` 下的 `url` 选项中，并将 `enabled` 改为 true。

请注意：

* 百度网盘、阿里网盘等获取到的分享地址不是直链地址，尽管你是通过右键普通下载获得到的地址。


# 移除默认内容 (v.3.2.0+不再需要)

**ItemsAdder** 的潜力是巨大的，而如果你拘泥于它自带的默认内容，那就是太委屈它了。笔者非常建议各位使用者自己去配置各种物品，而不是依赖它的默认物品。

**笔者为什么这么说？**

当你选用 **ItemsAdder** 时，这代表者你的核心玩法也大概以它为中心了。**ItemsAdder** 给服务器带来的新内容的确是炫酷的，非常吸引玩家，但是，它并没有为你的物品提供额外的属性。如果你还在使用默认内容，所有购买过 **ItemsAdder** 的服主都可以接触到这一套内容，大家都使用该内容，吸引度自然大幅度降低，要我说，还不如装个 **Slimefun** 来得实在。同时，最为关键的一点，自己做的东西自己才有数。

此内容操作较多，故分开介绍。

### 修改 config.yml 的内容

打开 config.yml，找到如下内容：

```
  extract-default-items: false # <----- 改为 false
  extract-default-resources: false # <----- 改为 false
```

### 删除默认内容的配置和资源包

删除以下目录的文件夹。

`plugins\ItemsAdder\data\items_packs\twitteremojis`\
`plugins\ItemsAdder\data\resource_pack\assets\twitteremojis`

`plugins\ItemsAdder\data\items_packs\magiccraft`\
`plugins\ItemsAdder\data\resource_pack\assets\magiccraft`

`plugins\ItemsAdder\data\items_packs\mcemojis`\
`plugins\ItemsAdder\data\resource_pack\assets\mcemojis`

`plugins\ItemsAdder\data\items_packs\itemsadder`\
`plugins\ItemsAdder\data\resource_pack\assets\itemsadder`

`plugins\ItemsAdder\data\items_packs\example`\
`plugins\ItemsAdder\data\resource_pack\assets\example`

请注意：

* **不要删除其他的文件夹，不然默认的配置下会出事。**

### 删除旧的数据文件

输入 `/iacleancache items` 指令，然后删除以下目录的文件夹。

`plugins\ItemsAdder\storage\cache\tmp\` `plugins\ItemsAdder\data\resource_pack\assets\minecraft\models\item\` `plugins\ItemsAdder\data\resource_pack\assets\minecraft\blockstates\`

最后输入 `/iazip` 指令。


# 给予玩家默认权限

这里权限的全称是权限节点，玩家必须拥有一个权限节点才能做该权限节点所对应的事件。在使用 **ItemsAdder** 前，你需要给予玩家一些必要的权限，这样玩家才能做一些非常基础的事情。

全部的权限节点列表可以在文末的附录中查看，这里只写出在首次使用时推荐给予玩家的权限。

### `ia.user.ia`

玩家使用 `/ia`  指令所需要的权限。这个指令可以用来查看 **ItemsAdder** 内的物品和它们的相关信息（例如合成配方、生成位置等），是非常有用的指令。显示哪些物品、玩家能看到多少是可以通过单独的权限节点（在后文说明）及单独的配置文件控制的，所以不必担心玩家看到它不该看到的东西。如果你想自己写一个这种功能的菜单等，那么你可以不给予玩家这个权限，但这不是推荐的，因为你可能会忘记更新你的菜单，且工程量巨大，维护难度高。

### `ia.user.iatexture`

玩家使用 `/iatexture` 指令所需要的权限。这个指令可以使得在进入服务器后由于种种原因导致没有从服务器下载资源包（也就是根本没出现 **Mojang** 加载动画）的玩家再次尝试从服务器下载资源包并加载资源包。

原版客户端一般不可能出现这种问题，遇到这种问题极大可能是你的 **Mod客户端内的** 各种着色器、光影与你的服务器资源包冲突，需要自行排查。

为了方便玩家不需要再次进服以重新下载资源包，给予这个权限还是比较推荐的。

有关表情、动作等的玩家权限和单独的物品等权限，将在后文与之相关的内容单独介绍，因为在你没有掌握这些知识之前，笔者不推荐你将这些内容开放给玩家使用。


# 关闭死亡地图

**ItemsAdder** 默认配置下拥有一个在玩家死亡后给予其记录死亡地点的地图的功能，如果你并不需要这个功能，或者想使用其他插件的这个功能，就可以关闭它。

在 **config.yml** 中找到如下内容：

```
items:
  fix-show-attack-and-damage-as-lore: false
  give_death_location_maps: false # <----- 将其改为 false
  hide-custom-durability-lore: true
```


# 将语言设置为简体中文

**ItemsAdder** 自带简体中文的翻译，我们可以直接使用它。

在 **config.yml** 中找到如下内容：

```
config_files:
  lang: en # <----- 改成 zh_cn
  dictionaries-lang: en # <----- 改成 zh_cn
```


# 解决踢出问题

**在加载资源包时你是否总是因“Flying is not enabled on this server”被踢出服务器？**

不止在这种情况，我们在很多情况下都会遇到各种各样因各种问题导致自己被服务器踢出，并收到一条英文提示。此时，最好的解决办法之一就是理解这条提示，这里翻译过来是“飞行在这个服务器是不允许的”。

导致这种情况的原因是在加载资源包时，ItemsAdder 为了保护玩家在此时不受其他情况影响，玩家保持不动，服务器误判为玩家在飞行。鉴于服务端自带的该检测非常鸡肋，所以我们可以关闭这个检测。

在你的服务器的根目录（也就是服务端核心所在的那个目录），打开 `server.properties` 文件，找到里面的 `allow-flight` 选项，将其改为 `true`。

###


# 客户端调整

在进入你的带有 **ItemsAdder** 服务器之前，你的游戏客户端应该进行以下调整：

### 将服务器的“服务器资源包”选项改为启用

点击服务器，点击下方编辑按钮，将此选项打开。

![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEEk6v0nDpw2XjbFaSuym%2Fuploads%2FaG1lK99VUdoNZ2R1jE3g%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-23%20190455.png?alt=media\&token=963a4362-1c99-4908-994a-b0b309be0ce9)

### 将客户端的“强制使用 Unicode 字体“关闭

进入主菜单，点击选项，再点击语言，关闭此选项即可。

![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEEk6v0nDpw2XjbFaSuym%2Fuploads%2FhpnCZYtxl0QUGnF9DGdo%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-23%20190643.png?alt=media\&token=fc2e23b5-8dcd-4c31-8257-d8faafdbb090)


# 总体配置结构了解

在阅读完 **首次使用** 一章后，恭喜你来到了第二章。在本章你将基础地掌握 **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** 文件夹的各命名空间下的具体结构，将在后文中陆续介绍。


# 总体配置结构了解 (v.3.3.0 版本以前)

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

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

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

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

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

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

### data 文件夹内的大概结构

那么，很显然，**data** 文件夹是我们关注的重心，所以我们还需要对它进行研究分析，请再次打开它，我们可以发现里面包括：

* **items\_packs** 文件夹。这里放置的是 **ItemsAdder** 物品（和其他各种内容）配置的地方。
* **resource\_pack** 文件夹。这里放置的是 **ItemsAdder** 的资源包，你的物品贴图、方块纹理等都应该存放在这里。

### namespace 概念理解

别着急打开 **items\_packs** 文件夹，再次之前，我们需要了解一个新的概念，我们称为 **namespace**。

从英文单词 **items packs** 中分析，**item** 的意思为物品，**pack** 的意思为包，翻译过来就是物品包。所以，这时我们仅从文件夹的名称就可得知，**ItemsAdder** 的各个物品（或者其他各个内容）都是以包的形式，也就是集合形式分开的。

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

这些由你想设置的包的名称即 **namespace**，它用于插件内部管理，而玩家无法看到，所以你不必填写中文，也不能使用中文，只能是 **小写英文、数字和下划线** 组成。

我们打开 **items\_packs** 文件夹，你会发现诸如 **mcguis** 这样的文件夹，它们正是各个包的名称，和它们下面的配置。

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

打开 **resource\_pack/assets** 文件夹下也有一些与包名称相一致的文件夹，这里的文件夹名称不一定必须与 **items\_pack** 内一一对应，只要你的物品配置内所写的文件路径填写正确。但为了资源包的管理方便，还是建议一一对应。在本篇教程所给的示例中，将统一是一一对应的格式。

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


# 物品配置结构了解

### 物品配置的位置

v.3.3.0 版本以前：已在前文介绍了 `namespace` 的概念，因此找到对应 `namespace` 的物品配置不是难事，只需打开 `ItemsAdder/data/item_packs/namespace 的名称` 文件夹即可。

v.3.3.0 版本以后：打开 `ItemsAdder/contents/各个包的名称/configs` 文件夹即可。

### 物品配置的构成

此处作为参照手册使用，如果您是第一次阅读的新手，可以跳过此处，直接阅读下一节的教程。

#### categories

见 [分类](/itemsadder-doc/wu-pin/fen-lei) 一节。

#### info

```
info:
  namespace: weapon
```

填写这个物品配置对应的 `namespace` 名称的地方，不可缺失，不可写错。

#### items

```
items:
  copper_axe:
    display_name: 铜斧
    lore:
    - '&7通过合成获得.'
    - ''
    - '&7以合成原版该类型物品合成为模板'
    - '&7将铁锭替换为铜锭即可.'
    mmoitem:
      type: TOOL
      id: COPPER_AXE
    custom_id: 10000
    nbt: '{AureliumSkills: {Requirements: {Item: {Foraging: 10}}}}'
    durability:
      max_custom_durability: 880
    resource:
      material: STONE_AXE
      generate: true
      textures:
      - tools/copper_axe.png
```

填写物品配置的位置。

#### armors\_rendering

```
armors_rendering:
  copper_set_armor:
    color: '#d60000'
    layer_1: armors/copper_layer_1
    layer_2: armors/copper_layer_2
    use_color: false
```

填写盔甲模型的位置。

#### **recipes**

```
recipes:
  crafting_table:
    deadmau5_hat:
      permission: myitems.deadmau5_hat
      enabled: true
      pattern:
      - BXB
      - XBX
      - XXX
      ingredients:
        B: LIGHT_BLUE_WOOL
      result:
        item: myitems:deadmau5_hat
        amount: 1
```

填写配方的位置。

#### **trees\_populators**

```
trees_populators:
  my_tree:
    worlds:
    - world
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    - PODZOL
    chance: 40.0
    max_height: 100
    min_height: 50
    amount: 3
    iterations: 2
    tree_type: TREE
    leaves: myitems:my_leaves
    log: myitems:my_log
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - MOUNTAINS
```

填写树木生成器的位置。

#### **surface\_decorators**

```
surface_decorators:
  rose:
    block: rose
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - RIVER
    - MOUNTAINS
    - MOUNTAIN_EDGE
    - BIRCH_FOREST
    - BIRCH_FOREST_HILLS
    - TALL_BIRCH_FOREST
    - TALL_BIRCH_HILLS
    worlds:
      - world
    chance: 10
    max_height: 255 
    min_height: 0
    amount: 1
```

填写地面地物生成器的位置。

#### **cave\_decorators**

```
cave_decorators:
  small_rocks:
    block: small_rocks
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    - STONE
    - COBBLESTONE
    - MOSSY_COBBLESTONE
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - RIVER
    - MOUNTAINS
    - MOUNTAIN_EDGE
    - BIRCH_FOREST
    - BIRCH_FOREST_HILLS
    - TALL_BIRCH_FOREST
    - TALL_BIRCH_HILLS
    worlds:
      - world
    chance: 100
    max_height: 255 
    min_height: 0
    amount: 4
    position: SURFACE
```

填写洞穴地物生成器的位置。

#### **loot**

```
loots:
  blocks:
    ruby_ore:
      type: itemsadder:ruby_ore
      items:
        ruby:
          item: itemsadder:ruby
          min_amount: 1
          max_amount: 2
          chance: 100
    nether_quartz_ore:
      type: NETHER_QUARTZ_ORE
      drop_only_first: true
      items:
        crystal:
          item: itemsadder:crystal
          min_amount: 1
          max_amount: 2
          chance: 10
        knowledge_fragment:
          item: itemsadder:knowledge_fragment
          min_amount: 1
          max_amount: 2
          chance: 15
```

填写掉落物配置的位置。

#### behaviours

```
behaviours:
  furniture:
    entity: armor_stand
    small: true
    solid: true
    fixed_rotation: true
    hitbox:
      length: 1
      width: 2
      height: 1
      width_offset: 0.5
    placeable_on:
      walls: false
      ceiling: false
      floor: true
  furniture_sit:
    sit_height: 0.5
```

填写行为属性的位置。

#### hud

本教程不涉及，为自定义 **HUD**。


# 资源包结构了解

一个资源包由任意命名空间组成，原版自身使用了 **minecraft** 命名空间，即一打开资源包出现的 **minecraft** 文件夹。

各命名空间下常用的文件夹是：

* models 文件夹：存放模型文件的地方。
* textures 文件夹：存放纹理文件（即材质图片）的地方。
* sounds 文件夹：存放音效文件的地方。
* lang 文件夹：存放语言文件的地方。


# 资源包合并

资源包合并是我们在使用 **ItemsAdder** 时经常遇到的问题。以插件挂钩为例，如果我们想要和其他也需要使用资源包的插件同时使用，那么就必须学会资源包合并。

## v.3.3.0 版本以前

{% hint style="info" %}
如果你只是单纯的想把某个模型包放入服务器内，那么笔者建议你手动的将其拆分并一个一个写到 **ItemsAdder** 的配置中，而不是粗暴合并的使用它。
{% endhint %}

第一步：打开 **ItemsAdder/resource\_pack** 文件夹，将其备份一份。

第二步：将需要合并的资源包合并到 **ItemsAdder/resource\_pack** 文件夹，如果没有文件重复的提示，则代表资源包已经直接合并成功了，不需要做其他操作。

第三步：如果存在文件重复的提示，请千万不要点击替换。我们需要一步一步分析需要替换的文件的情况：

* pack.png、pack.mcmeta：请跳过。
* minecraft/models/item/某个原版物品id.json：请忽略，并记住这个文件的名称。

下面针对上文第二种情况开始详细教程：

第一步：打开这个文件。如果这个文件全部集中在一行，或者你根本难以看懂的，请 [点击](https://json-online.com/check/) 这里将其进行json标准格式化。

![像这样的情况，很明显就需要进行标准格式化。](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FEPav2HgFQp2fq4KfaBkF%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20192305.png?alt=media\&token=6f98bc5c-20b4-4905-a2a1-f5918fa9af4e)

第二步：点击 **JSON 校验**。我们将获得标准格式化后的json，将其复制到原本的文件中，这时的json文件看着就清爽多了。

![这是经过标准格式化后的json文件。](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FMBbj2erwi8ogDNB26hmo%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20192537.png?alt=media\&token=ab59b0b3-4d58-4583-bd66-c42f7385ffd7)

第三步：找到如下内容：

```
  "overrides": [ # <----- 找到这个
    {
      "predicate": {
        "custom_model_data": 10000
      },
      "model": "itemsadder:auto_generated/tomato"
    },
```

找到所标注的这行，我们发现 **overrides** 下面的都是按规律排布的，都是按下文内容这样规律的。

```
    {
      "predicate": {
        "custom_model_data": 10000
      },
      "model": "itemsadder:auto_generated/tomato"
    },
```

两个json文件都能找到这样的内容，将其中一个的 **override** 下所有遵循这样规律的内容全部复制到另外一个文件中，注意不要将最后的中括号复制进去，下图即为一个示例：

![只需要复制图中所画区域即可。](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FdGKv5pl3L4QSbEj80hG8%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20193020.png?alt=media\&token=3b780db8-208e-40a9-8f41-8c313a0d5a49)

第四步：复制后，在所复制内容的最后一个 `}` 符号后再输入 `,` 符号，下图即为一个示例：

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2F7NJEHuTi6EcIhhW0dXXW%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20193310.png?alt=media\&token=4a079b5d-1d84-4477-9337-fe338d5f16eb)

第五步：检查所有 **override** 下的内容的 **custom\_mode\_data** 是否有重叠，如果有，需要单独修改，同时注意资源包所对应的插件内的配置也要修改。

至此，我们的合并资源包之旅就结束了。

## v.3.3.0 版本以后

**v.3.3.0** 以后版本合并资源包就非常轻松了，你只需要创建新的包，然后将需要合并的资源包的 **assets** 文件夹放入这个包的 **resourcepack** 文件夹内即可。这也是插件作者做出重大改动的原因所在——方便合并资源包。


# 材质异常

自 **1.19** 版本起，凡是贴图配置出现问题的，整个游戏的贴图都会无法显示，而不仅限于出现问题的贴图。自 **1.19.3** 版本起，凡是模型配置出现问题（`model_path` 选项）的，整个游戏的自定义模型（即本教程所述的家具）都会无法显示，而不仅限于出现问题的模型（家具）。**Mojang** 更加严格的资源包显示使得我们不得不重视起 **ItemsAdder** 配置严谨性，故在最近的更新中补充此节。

在此之前，我们可以通过出现问题的贴图或者模型快速定位问题根源，而现在是整个游戏的贴图或者模型都出现异常，我们无法判断问题根源。

下面介绍一种判断问题根源的方法，可以通过如下步骤解决这个问题：

* 打开 **Minecraft** 官方启动器。
* 点击 **设置** 按钮，并启用 **当《Minecraft：Java版》启动器时输出日志** 选项。

<figure><img src="https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2Fq7nXOz26IG4NwNdmy3kY%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-26%20203520.png?alt=media&amp;token=daf5fd6b-57bb-4ad0-8f8b-61f35c011372" alt=""><figcaption></figcaption></figure>

* 进入游戏，同时会出现一个日志显示框。
* 我们重点关注进入游戏后的日志报错（特别是橙色的！），分析问题所在，笔者某个资源包出现问题，无法加载，经过日志排查发现是因为物品名称不小心输入法输入时首个字母自动大写了。

<figure><img src="https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FQFgQ0zTYR6ApULBTwXeI%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202023-01-26%20204037.png?alt=media&amp;token=f3f02e1a-51bb-48b7-a8de-2f17bba7cec6" alt=""><figcaption></figcaption></figure>

* 官方 **Wiki** 还介绍了另外一种经常出现的问题，那就是模型文件错误或者你的物品配置中的 `model_path` 填写错误。这种情况下就会出现如下图所示的报错。

<figure><img src="https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2Fi5f0AdAsc975UoA1cPAB%2Fimage.png?alt=media&amp;token=a93650e3-ab99-451d-aa35-dcc41c51487c" alt=""><figcaption></figcaption></figure>

## 特别注意

* 如果你使用的是第三方启动器，可以直接打开 **.minecraft** 文件夹，找到 `launcher_log.txt` 文件，不过不会实时更新，定位难，缺点很大。
* 在发现是物品配置错误的问题，例如上文笔者介绍的物品名称有大写字母时，你还需要修改 **ItemsAdder** 自动生成的模型文件等。**ItemsAdder** 不会自动更新它们的！它们通常位于 `各个包的文件夹/resourcepack/namespace名称/models/auto_generated` 文件夹，如果你不会修改，可以直接删除所有这种名称的文件夹。
* 如果一直不能解决问题，可以尝试检查 **storage** 文件夹内储存的数据，还是以上文笔者遇到情况为例，这里的 `real_blocks_note_ids_cache.yml` 会记录物品名称和对应的 **CustomModelData**，有可能这里的物品名称还是没有更新，需要手动更新。实在不行可以删除 **storage** 文件夹，不过这会导致以前玩家放置的方块、家具，以及贴图等都会被打乱，不到万不得已不要这么做！


# 贴图

贴图是本篇教程中对于所有使用原版 **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`。


# 菜单

菜单是对于贴图的重要应用之一，所有的菜单插件都支持使用贴图替换背景。像下面这样的，就是使用贴图实现的自定义菜单背景。

该功能所有插件都支持，只要它能自定义箱子UI的标题，所以不存在只能 **TrMenu** 这样做的限制。（我不知道为什么那么多人会这么觉得）

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2F8ih6yNaZfh4txLBvfeIM%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-05-27%20220222.png?alt=media\&token=41d311e9-8ffb-4a34-bf39-76f8469cb906)

## 自定义背景贴图

### 新建一个自定义背景的菜单

同样新建一个贴图，贴图的大小是随意的，只要分辨率在 **256 x 256** 以内即可。如果你的贴图大小超过了这个值，那么只能通过分割的形式进行显示，届时调整贴图位置的工作复杂量指数倍上升。

### 在菜单内显示该贴图

每个箱子 **UI** 都有一个标题，我们通过在标题处写上菜单背景贴图所替换的字符即可将其显示。所以，本质上玩家在打开带有贴图的菜单时，他面对的仍是箱子 **UI**，只是我们将标题的贴图放大，以至于它覆盖掉了下面的箱子 **UI** 内的所有地方（包括格子），以达到自定义菜单的效果。

一般来说，如果你是显示正常大箱子（6行格子）大小的 **UI** 的话，呈现正方形的长宽比即可。如果长是 **175** 像素点，那么每行（箱子格）大约是 **20** 像素点（包括格子外围的装饰）。

总而言之，贴图的分辨率大小在这里没有固定的标准，由于每个人的习惯、风格和像素画需要的像素点不同，往往分辨率大小也不是固定的。作为新手的你可以使用其他人做好的菜单贴图进行练手（例如 `ItemsAdder/resource_pack/assets/mcguis/textures` 内插件自带的一些菜单贴图模板，v.3.2.0 版本后为 `ItemsAdder/contents/_iainternal/resourcepack/assets_iainternal/textures/gui` 文件夹），反复调整 `scale_ratio` 和 `y_position` 的值，直到自己满意的位置（**不上下偏差**，物品能正常在所画的格子中间显示）为止，这样你就可以自己制作一个菜单模板，以后再做第二个菜单背景贴图时，上手快很多。

### :offset\_数值: 的使用

在调整完 `scale_ratio` 和 `y_position` 的值后，我们发现左右仍存在偏差，这时我们可以通过这个字符串来调整左右显示位置。我们只需要在菜单 **UI** 的标题的贴图所替换的那个字符前添加 `:offset_数值:` 即可，例如 `:offset_-8:`，直到找到自己满意的位置为止。

一般来说，由于字符本身与箱子 **UI** 的边缘本身也存在间距，因此尽管你在绘制贴图时是从最左边贴边开始绘制，在实际显示时仍会先右偏移，偏移的像素点往往是 **8** 个像素点，所以在字符前加上 `:offset_-8:` 即可。

### \&f 的使用

添加的贴图往往是莫名其妙的变成黑色调的，这是因为箱子 UI 标题自动添加的黑色颜色代码导致的，我们只需要再在上文的 `:offset_数值:` 前添加 `&f` 即可。

### 小结

在箱子 **UI** 的标题通过 `&f:offset_数字:替换的字符` 格式显示菜单的背景贴图。

### 按钮效果

例图按钮同样也是通过贴图显示的，也同样在箱子UI的标题中用贴图替换的字符显示，并使用 `&f:offset_数字:替换的字符` 格式，你需要来回调整贴图的位置才能达到满意的效果。

有时，固定使用字符也不是我们需要的效果，就以最开始给的例图来看，我们想要这个按钮在解锁和未解锁时是不同的贴图，这时我们需要自定义一个 **Placeholder**，这种功能在 **TAB** 插件中存在且功能丰富，并且笔者也为该插件翻译了 **Wiki**，感兴趣可以自行查看。

## 菜单内的物品

### 新建空白贴图的物品

首先我们需要了解，用物品来显示菜单内的按钮是不现实、也是非常复杂的，大多数都是直接使用贴图显示。以最上面给的图片为例，我们想要做到玩家碰到背景贴图所绘制的按钮那里后有一个物品 **Tip** 告诉玩家这个按钮具体作用，但我们不想让玩家真正的看到这个物品，这时，我们需要新建空白贴图的物品。

我们可以使用 **ItemsAdder** 的自定义物品（后文提及）制作空白贴图的物品，并在菜单中使用该物品，但在本篇教程中，笔者考虑到部分插件可能并不支持 **CustomModelData** 或者其他情况，只能使用原版自带的物品，因此介绍一个更加简便的方法。

我们通过替换原版资源包下的 **结构空位** 物品的材质，来实现空白贴图的物品。该物品在单机使用较多，服务器下几乎用不到，玩家也无法获取该物品，所以使用它是再合适不过的。

第一步：打开 `ItemsAdder/resource_pack/assets/minecraft/item` 文件夹（如果没有对应的文件夹，依次新建即可）。

v.3.3.0 版本以后为打开 `ItemsAdder/contents/_iainternal/resourcepack/assets/minecraft/item`。

第二步：绘制一个 **16x16** 分辨率的空白贴图，就像这样。

![空白图](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2F2wHi5KJC91nRkBsGyIee%2Fstructure_void.png?alt=media\&token=1f7cec4e-3120-45b3-944a-27b7d81ba68c)

第三步：将这个图片放置到第一步的文件夹，取名为 **structure\_void.png** 文件。

第四步：菜单中的物品 **ID** 填写为 **structure\_void** 即可。

### 新建 ItemsAdder 的物品

我们假设你已了解 **ItemsAdder** 的自定义物品功能，如果你尚未掌握，请跳过这里，在掌握后返回这里继续阅读。

第一步：使用 `/iacustommodeldata 物品id` 获取到该物品的 **CustomModelData** 值。

第二步：在菜单插件内配置对应物品的 **CustomModelData**。主流菜单插件均支持：包括 **DeluxeMenu、TrMenu**，请仔细阅读它们的 Wiki。


# 顶部显示

顶部显示也是使用贴图实现的，同时修改 **Boss** 血量条的材质。像下面这样的就是本教程所说的顶部显示。

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FiJfuJZR8FOtBrUg3Q48K%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-05-28%20155946.png?alt=media\&token=f11c19e6-ec1a-45d8-a3f1-43ffb2ca5484)

### BOSS 血量条材质的修改

第一步：找到 **.minecraft** 文件夹（即启动器目录）。

{% hint style="info" %}
如果你不知道在哪里，笔者在此介绍一个傻瓜式的方法。

首先打开你的原版客户端，点击单人游戏，再点击任意一个世界（若没有则自行创建），选中该世界后点击编辑世界按钮，最后在编辑世界页面中点击打开世界文件夹按钮。

这时会弹出该世界所在的目录，你只需再退回到 **.minecraft** 目录即可。
{% endhint %}

第二步：在 **.minecraft** 文件夹里打开 **versions** 文件夹，并在该文件夹中再打开你的服务器所使用的版本号的文件夹，例如 **1.18.2**。（如果你不是原版客户端，则根据文件夹命名自行判定）

第三步：以 **1.18.2** 版本为例，打开 **1.18.2** 文件夹后，里面还会有一个 **1.18.2.jar**。请右键它，点击打开方式，并选择你电脑上已有的压缩包软件。

第四步：在压缩包内依次打开 `assets/minecraft/textures/gui/bar.png`，这便是原版 **Boss** 血量条材质所在的地方了，将该图片解压出来，并使用图片编辑软件进行编辑。

**1.20.4** 版本修改了Boss条图片的位置和修改方式，各个颜色Boss条独立存在于 `assets/minecraft/textures/gui/spirtes/boss_bar` 文件夹。

<figure><img src="https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FXJaGx4t2pQSDHOQ3fZYB%2Fimage.png?alt=media&amp;token=99018fb5-02da-4d6d-8b3a-1f034d91f3d0" alt=""><figcaption></figcaption></figure>

![按照教程所述操作后，你看到的情况应该跟我一样](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FpSdoGv5FYiIR2DRXTpyl%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-05-30%20141029.png?alt=media\&token=ba2d9b87-8656-4390-a139-e3f47222dabb)

第五步：在图片编辑软件中对该材质进行操作。

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FgqswgZnnvVUrCESODbzj%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-05-30%20141538.png?alt=media\&token=ea4c6484-3d9d-49ee-b24f-e86f728fceb2)

我们对该图片进行分析：我们将其分为上下两部分，上面是各个不同颜色 **BOSS** 血量条分布是满值和空值时的材质，下面则是不同 **Style** 下添加到 **BOSS** 血量条上的材质。

自 **1.20.4** 版本起，各个颜色Boss条独立存在，打开第五步所示的 `boss_bar` 文件夹后，文件命名规则是：颜色（例如blue）\_类型（有progress代表Boss条满血量时候材质，background代表无血量时候材质），我们需要将一个颜色的两个文件全部绘制成透明。

第六步：根据分析，选择一个颜色和一个 **Style** 的材质，将其抹去，使其变成完全透明。

第七步：将该图片放置在 `ItemsAdder/recousrce_pack` 对应的文件夹下，如果不存在（这是当然），依次新建文件夹即可。

v.3.3.0 版本以后为：`ItemsAdder/contents/_iainternal/resourcepack`。

第八步：在 BOSS 血量条插件中，使用你抹去的颜色和 **Style**，并发送给玩家，此时就可以实现文中所给示例的样子了。贴图方面请参考前文中 **贴图** 一节。

以 **TAB** 插件为例的一个配置文件：

```
bossbar:
  enabled: true
  toggle-command: /bossbar
  remember-toggle-choice: false
  hidden-by-default: false
  disable-in-worlds:
  - disabledworld
  bars:
    overworld:
      style: PROGRESS # <- 填写你抹去的 Style 名称
      color: WHITE # <- 填写你抹去的颜色名称
      progress: '100' # <- 填写为 100
      text: '这是 BOSS 血量条的文本'
      display-condition: '%world%=world'
```

### 顶部显示的限制

* 只能居中。
* 容易与其他 **BOSS** 血量条信息冲突。


# Esc 菜单

**Esc** 菜单也是使用贴图实现，我们替换 **Esc** 菜单内的文本为贴图，并不断调整位置以实现像下图这样的效果：

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FS377sKkXEjStTzsX7WHS%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-04%20194020.png?alt=media\&token=aa649626-01e1-4e89-b4f0-d9ec0364d828)

第一步：我们同样需要替换原版资源包内的语言文件来实现 **Esc** 文本的替换。参考顶部显示一节的教程，找到原版资源包内的 **assets/minecraft/lang/zh\_cn.json**。

第二步：在 **ItemsAdder** 插件内的 **resource\_pack/assets/minecraft/lang** 内创建同样名称的文件。文件夹不存在的，自行创建即可。

v.3.3.0 版本以后为：`ItemsAdder/contents/_iainternal/resourcepack/minecraft/lang`。

第三步：在第一步找到的文件中找到 **Esc** 菜单内出现的文本，并将其复制到第二步创建的新文件夹中，并在第一行前面和最后一行后面各新起一行，用大括号括起，最后一个文本的最后不能再有括号，例如下面就是一个示例：

```
{ # <----- 前后各有括号
  "menu.disconnet": "离开游戏按钮文本",
  "menu.game": "Esc顶部的文本",
  "menu.returnToGame": "返回游戏按钮文本" # <----- 最后一个文本的最后不能再有括号
} # <----- 前后各有括号
```

第四步：绘制自己的 **Esc** 菜单想要的图案，一般分辨率 **256 x 256**，并按照贴图一节的教程自行配置好该贴图的配置，特别是替换的字符。

第五步：将替换的字符输入到 `menu.disconnet` 文本中，也就是离开游戏按钮文本。这样配合 **256 x 256** 分辨率，贴图正好覆盖到整个 **Esc** 菜单。

第六步：如果你还想在 **Esc** 菜单显示你的服务器 **Logo** 在最顶部，你可以同样绘制贴图，并将替换的字符输入到 `menu.game` 文本中，也就是**Esc**顶部的文本。


# /ia 菜单材质

在上文中我们介绍了普通菜单的替换，本节介绍 **/ia** 菜单的材质替换。

![这是一个更换了材质的 /ia 页面](https://www.minebbs.com/attachments/2022-05-29-182635-png.29646/)

第一步：与普通菜单一样，绘制贴图并配置到 **ItemsAdder** 中。

第二步：打开 `ia_gui.yml` 文件。

```
settings:
  cut_titles_with_length_grether_than: 25
  categories_view:
    font_image:
      name: mcguis:blank_menu
      x_position_pixels: -16 # <----- 修改左右偏移的位置，此时我们不再使用 :offset_数字: 了
    title_position_pixels: 0
    title_color: '&0'
    icons:
      search:
        item: mcicons:icon_search
  category_view:
    font_image:
      name: mcguis:blank_menu # <----- 修改新的 /ia 页面的贴图的名称
      x_position_pixels: -16 # <----- 修改左右偏移的位置，此时我们不再使用 :offset_数字: 了
    title_position_pixels: 0
    title_color: '&0'
    icons:
      back:
        item: mcicons:icon_cancel
      previous_page:
        item: mcicons:icon_back_orange
      next_page:
        item: mcicons:icon_next_orange
  crafting_preview:
    craft_font_image:
      name: mcguis:crafting # <----- 修改新的合成配方页面的贴图的名称
      x_position_pixels: -16 # <----- 修改左右偏移的位置，此时我们不再使用 :offset_数字: 了
    cook_font_image:
      name: mcguis:cooking # <----- 修改新的熔炉配方页面的贴图的名称
      x_position_pixels: -16 # <----- 修改左右偏移的位置，此时我们不再使用 :offset_数字: 了
    anvil_repair_font_image: 
      name: mcguis:anvil_repair # <----- 修改新的铁砧配方页面的贴图的名称
      x_position_pixels: -16 # <----- 修改左右偏移的位置，此时我们不再使用 :offset_数字: 了
    title_position_pixels: 17
    title_color: '&0'
    icons:
      previous_recipe:
        item: mcicons:icon_left_blue
      next_recipe:
        item: mcicons:icon_right_blue
      get_item:
        item: mcicons:icon_arrow_chest
      loot_blocks:
        item: DIAMOND_PICKAXE
      worlds_populators:
        item: CHEST
      surface_populators:
        item: GRASS
      trees_populators:
        item: OAK_SAPLING
      seed_result:
        item: WHEAT_SEEDS
      loot_mobs:
        item: CREEPER_HEAD
      loot_fishing:
        item: FISHING_ROD
      vehicle_fuel:
        item: COAL
    no_recipe_font_image:
      name: mcguis:crafting
      x_position_pixels: -16
categories:
  all:
    enabled: true
    permission: tet
    icon: itemsadder:ruby_block
    name: display-category-all
    show_all_items: true
    hide_items:
    - mcicons:icon_left_grey
    - mcicons:icon_left_blue
    - mcicons:icon_right_grey
    - mcicons:icon_right_blue
    - mcicons:icon_up_grey
    - mcicons:icon_up_blue
    - mcicons:icon_next_white
    - mcicons:icon_next_orange
    - mcicons:icon_back_white
    - mcicons:icon_back_orange
    - mcicons:icon_cancel
    - mcicons:icon_confirm
    - mcicons:icon_lock
    - mcicons:icon_unlock
    - mcicons:icon_web
    - itemsadder:light_blue_coupon
    - itemsadder:turquoise_coupon
    - itemsadder:purple_coupon
    - itemsadder:green_coupon
    - itemsadder:red_coupon
    - itemsadder:black_coupon
    - itemsadder:white_coupon
    - itemsadder:golden_coupon
    - itemsadder:blue_ring
    - itemsadder:light_blue_ring
    - itemsadder:turquoise_ring
    - itemsadder:purple_ring
    - itemsadder:green_ring
    - itemsadder:red_ring
    - itemsadder:black_ring
    - itemsadder:white_ring
    - itemsadder:golden_ring
    - itemsadder:marriage_ring

```

我们可以看到很多 `mcicons:xxx` 这样的文本，这就是我们前文所说的 `namespace:id` 格式。我们将新做好的贴图按照上面所给的提示进行更换，并修改下面的 `x_position` 选项。

在教程的前文中，笔者在要求读者删除自带配置中，保留的若干文件夹中，包括了 **mcicons**（也就是这个包），你可以在 `resource_pack/assets/mcions` 中依次查看这些贴图的作用，并更换自己喜欢的，直到最后你甚至可以删除这个包。


# 表情

在支持 PlaceholderAPI 的聊天插件中，玩家使用 `:img_贴图名称:`  即可使用表情，请注意玩家需要 `ia.user.image.*` 权限。


# 渐变效果

在很多服务器的时装（饰品）试衣间进入和离开时都会有一个黑色屏幕渐变效果，大概就像这样：

![](https://images.polymart.org/proxy/?url=https%3A%2F%2Fimages.weserv.nl%2F%3Furl%3Dhttps%3A%2F%2Fmedia.giphy.com%2Fmedia%2FyKmuuF8MSvhzcI6XSV%2Fgiphy.gif%26n%3D-1)

其实这个原理就是通过贴图实现的，我们创建一个全是黑色的贴图，然后将它的大小调的很大，足够覆盖玩家整个屏幕，并使用 **Title** 输出即可。


# 物品基础

在本节开始，笔者将向各位介绍一个新的概念——物品。区别于贴图，物品是可以由玩家放置到物品栏中的，而贴图只能用于显示，不能存放在物品栏中；再区别于下文即将提到的方块，物品不能被放置，只能一直存于玩家物品栏，类似于原版的 **纸** 等的存在。

物品的贴图分辨率只能是 **2** 的指数乘积，最小为 **16x16**，最大为 **256x256**。每个贴图都有最适合自己的分辨率，请不要自己尝试使用图片编辑软件强制将 **32x32** 分辨率的贴图缩放到 **16x16** 分辨率，分之亦然，这会彻底改变这个贴图的显示效果，因此，制作自己的 **ItemsAdder** 配置最好的方法就是所有贴图均由自己绘制，这会让你的服务器显得风格统一，没有零散的感觉。

### 新建一个物品包

与贴图几乎一样，在此不再赘述。

### 新建第一个物品

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

v.3.3.0 版本以后：使用文本软件打开 **contents/你新建的文件夹（即包名）/configs/你新建的文件.yml** 文件。

```
info:
  namespace: "你新建的文件夹"
items:
  myitem:
    resource:
      material: DIAMOND_SWORD
      generate: true
      textures:
      - item/example_item.png
```

{% hint style="info" %}
再次重申！namespace 不是必须和包名一样，一个包也可以有多个 namespace，但是，一一对应是一个良好的习惯！
{% endhint %}

不同于贴图，物品的配置头选项为 **items**，而不是贴图的 **font\_images**，这也代表 **ItemsAdder** 本身区分贴图和物品的，所以请不要将这两个概念混淆。

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

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

#### `resource` 的配置

`materiel` 是这个物品的材料。

我们首先需要了解一个知识，物品的实现是通过原版的 **CustomModelData** 的，翻译过来即自定义模型数值，这意味着一个物品可以拥有多个材质，同时根据这个数值来决定到底你手上的这个物品显示的是哪一个材质。

因此，在实现自定义物品时，我们必须指定这个自定义物品是以哪一个原版物品为模板新建的。但是这也不能随意选择，因为往往这些原版物品都有不同的属性，例如牛排可以吃、骨粉可以催熟，弓可以拉展等，我们需要避免玩家在使用自定义物品做我们本不希望他做的事情。大多数情况下我们使用纸，也就是 `paper`，作为这里的值。

`generate` 是 **ItemsAdder** 是否为这个物品自动生成 **model** json。正常情况下如果我们不希望这个自定义物品与原版的模型有差异，那么我们只需将其填写为 **true**。在后文我们将陆续介绍需要改为 **false** 并手动填写模型文件路径的各种情况。

`textures` 为物品材质，其本质与贴图的 `path` 一致，在此不再赘述。但请注意正如本文开头所述，物品材质单独分辨率必须是大于 **16** 的 **2** 的指数乘积的数量。

#### 获得物品

在你完成上面的操作后，在使用 `/iareload` 和 `/iazip` 后我们可以使用 `/iaget namespace:物品id` 获得该物品，例如 `/iaget xxx:myitems`。

我们将在后文陆续介绍有关物品的高级用法和 `/ia` 菜单的分类显示物品。


# 物品属性

**ItemsAdder** 的物品不仅可以自定义它的材质，还有大量属性可以使用。如果你只是简单的生存服，那么它提供的各种属性完全够用，不需要再使用其他的自定义物品插件。并且 **IA** 内置的这一套属性系统非常强大，下面一起来了解一下吧。

### 是否启用

```
enabled: true
```

### 显示名称

```
display_name: "Test"
```

不同于物品id，物品的显示名称是玩家能够看到的物品名称。

### 权限

```
permission: myitem
```

这里填写的权限并不是完整的权限节点，而是 **ItemsAdder** 特定权限节点后续的填充内容。

以这里的 **myitem** 为例，玩家必须：

* 拥有 `ia.user.craft.myitem` 权限才能合成该物品。
* 拥有 `ia.user.ia.myitem` 权限才能在 /ia 菜单内看到该物品。
* `myitem` 就是 `permission` 选项填写的内容。

### Lore

```
lore:
- '&7这是一件 ItemsAdder 物品'
- '&7你可以像这样换行'
```

### 附魔

```
enchants:
  - ARROW_FIRE:1
  - anger_artifact:1
  - my_custom_plugin:custom_enchant:6
```

这里的附魔指的是注册到服务器里的所有附魔，包括原版的附魔。你可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E9%99%84%E9%AD%94) 内找到这些附魔的英文id。

格式为：命名空间:附魔id:附魔等级。

如果我们使用的附魔id没有冲突，那么命名空间就可以省略，就像第一个例子那样。

我们也可以使用第三方插件的附魔，但前提是它必须是将附魔注册到服务器里，像 **EcoEnchants、ExcellentEnchants** 都是注册到服务器里的附魔插件，而 **AdvancedEnchants** 则是自己创建了新的附魔判断，无法在这里使用。

![像这样，我们就获得了锋利附魔的id](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FNO7DQ1lGLZV9Xbil1Ahl%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20183215.png?alt=media\&token=8cc08130-f441-476e-a78b-0fee154c0f9e)

### 属性

```
attribute_modifiers:
  mainhand:
    attackDamage: 19
    attackSpeed: 1.1
    maxHealth: 1.1
    movementSpeed: -1
    armor: 1.1
    armorToughness: 1.1
    attackKnockback: 1.1
    luck: 1.1
  offhand:
    attackDamage: 19
    attackSpeed: 1.1
    maxHealth: 1.1
    movementSpeed: 1.1
    armor: 1.1
    armorToughness: 1.1
    attackKnockback: 1.1
    luck: 1.1
```

这里的属性是原版自带属性系统，而其他插件提供的属性是否是基于原版的属性机制则需要根据它们的 **Wiki** 介绍来判断。如果多个插件同时修改玩家的属性，那么将会产生冲突问题。

你可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E5%B1%9E%E6%80%A7) 内找到这些属性的英文id。有关盔甲和盔甲韧性的具体内容和区别，你可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E7%9B%94%E7%94%B2%E6%9C%BA%E5%88%B6?so=search) 内找到答案。

以 **AureliumSkills** 为例，我们可以在 **Wiki** 看到它的血量是根据玩家原版血量（Health）属性为基础以一套公式修改的，因此该插件不会导致冲突问题。如果 **Wiki** 没有特别标注，那么大部分插件（如MMO全家桶）的与这里一样名称的属性都是基于原版修改，会产生冲突。

配置中，`mainhand` 表示该物品在主手时，底下为其配置，即在主手时的属性。`offhand` 表示该物品在副手时。

### 耐久

```
durability:
  max_custom_durability: 200
  custom_durability: 32
  disappear_when_broken: false
  unbreakable: false
  usages: 5
```

当设置 **durability** 属性后，其下的配置都不是必填配置，但你必须至少有一个配置，例如：

```
durability:
  max_custom_durability: 200
```

下面介绍各个配置的作用：

* `max_custom_durability` 指的是该物品最多可以达到的耐久值，即因各种因素（如耐久附魔）导致该物品耐久值增长的最大值。
* `custom_durability` 指的是该物品在默认获得后拥有的耐久值，如果没有设置，则和 `max_custom_durability` 一致。
* `disappear_when_broken` 指的是该物品在没有耐久后是否消失。
* `unbreakable` 指的是该物品是否无限耐久。
* 耐久只有在各种工具、盔甲等才存在，而其他的自定义物品在使用事件时，将会使用 `usages`，即最大使用次数，具体作用将在后文提及。

### 标签隐藏

```
item_flags:
  - HIDE_ATTRIBUTES
  - HIDE_DESTROYS
  - HIDE_ENCHANTS
  - HIDE_PLACED_ON
  - HIDE_POTION_EFFECTS
  - HIDE_UNBREAKABLE
```

我们在获得盔甲时，会看到 **+2盔甲** 这样的东西，还有被附魔的物品会显示附魔，与之对应的相关内容，我们称为物品标签。在 **ItemsAdder** 中，因为隐藏原本物品的需要，这个属性也是经常需要使用的。

我们可以填写以下值：

* HIDE\_ATTRIBUTES：隐藏物品的属性信息（如+1攻击）。
* HIDE\_DESTROYS：隐藏物品可以破坏的方块信息（在服务器中我们几乎不会用到这个，所以可以忽视）。
* HIDE\_DYE：隐藏物品的染色（如染色后的皮革盔甲）。
* HIDE\_ENCHANTS：隐藏物品的附魔信息。
* HIDE\_PLACED\_ON：隐藏方块可以放置到什么上面信息（同样在服务器中几乎用不到）。
* HIDE\_POTION\_EFFECTS：隐藏药水信息（如1:00生命回复2）。
* HIDE\_UNBREAKABLE：隐藏不可破坏（无限耐久）信息。

### 禁止附魔

```
    blocked_enchants:
      - DAMAGE_UNDEAD
      - DAMAGE_ALL
      - DAMAGE_ARTHROPODS
      - KNOCKBACK
      - DURABILITY
      - SWEEPING_EDGE
```

禁止哪些魔咒可以附魔在该物品上。如果需要禁止所有魔咒，则填写 `ALL`。格式请见上文的 **附魔**。

### 掉落

```
    drop:
      glow:
        enabled: true
        color: DARK_RED
      show_name: true
```

其中，`glow` 为是否发光和发光的颜色，`show_name` 为该物品掉落物形式是否显示它的名称。

### 事件

请见 **事件** 章。如果你是首次阅读，忽视这里，继续阅读下一节。


# 分类

制作了这么多的物品，我们打开 `/ia` 却发现什么也没有，是不是出问题了呢？其实不是，我们需要将这些物品添加到分类中。

分类不同于 **namespace**，尽管我非常建议你一个分类一个 **namespace**，但是实际上一个分类可以包含多个 **namespace** 下的物品。

打开任意一个物品配置，添加如下内容：

<pre><code><strong>categories:
</strong>  icons:
    enabled: false
    skip_if_already: false
    icon: mcicons:icon_web
    name: display-category-icons
    permission: ia.menu.icons
    items:
      - mcicons:icon_left_grey
      - mcicons:icon_left_blue
      - mcicons:icon_right_grey
      - mcicons:icon_right_blue
      - mcicons:icon_up_grey
      - mcicons:icon_up_blue
      - mcicons:icon_next_white
      - mcicons:icon_next_orange
      - mcicons:icon_back_white
      - mcicons:icon_back_orange
      - mcicons:icon_cancel
      - mcicons:icon_confirm
      - mcicons:icon_lock
      - mcicons:icon_unlock
      - mcicons:icon_web
      - mcicons:icon_ender_chest
      - mcicons:icon_refresh
      - mcicons:icon_time_day
      - mcicons:icon_time_midnight
      - mcicons:icon_time_night
      - mcicons:icon_time_noon
      - mcicons:icon_time_sunrise
      - mcicons:icon_time_sunset
      - mcicons:icon_toggle_off
      - mcicons:icon_toggle_on
      - mcicons:icon_arrow_chest
      - mcicons:icon_plus
      - mcicons:icon_color_picker
      - mcicons:icon_comment
      - mcicons:icon_search
  buildersbasics:
    enabled: true
    skip_if_already: false
    icon: "buildersbasics:abyssal_lantern"
    name: '建筑'
    items:
      - "buildersbasics:abyssal_lantern"
      - "buildersbasics:abyssal_lantern_top"
      - "buildersbasics:acacia_boards"
      - "buildersbasics:andesite_bricks"
      - "buildersbasics:andesite_pillar"
      - "buildersbasics:andesite_pillar_top"
      - "buildersbasics:birch_boards"
      - "buildersbasics:black_purpur_block"
      - "buildersbasics:black_terracotta_bricks"
      - "buildersbasics:blue_purpur_block"
      - "buildersbasics:blue_terracotta_bricks"
      - "buildersbasics:brown_purpur_block"
      - "buildersbasics:brown_terracotta_bricks"
      - "buildersbasics:chiseled_andesite"
      - "buildersbasics:chiseled_dark_prismarine"
      - "buildersbasics:chiseled_dark_prismarine_top"
      - "buildersbasics:chiseled_diorite"
      - "buildersbasics:chiseled_granite"
      - "buildersbasics:chiseled_prismarine"
      - "buildersbasics:cobblestone_bricks"
      - "buildersbasics:cyan_purpur_block"
      - "buildersbasics:cyan_terracotta_bricks"
      - "buildersbasics:dark_oak_boards"
      - "buildersbasics:dark_prismarine_bricks"
      - "buildersbasics:dark_prismarine_pillar"
      - "buildersbasics:dark_prismarine_pillar_top"
      - "buildersbasics:dark_prismarine_tiles"
      - "buildersbasics:diorite_bricks"
      - "buildersbasics:diorite_pillar"
      - "buildersbasics:diorite_pillar_top"
      - "buildersbasics:driftwood_boards"
      - "buildersbasics:end_stone_pillar_eq"
      - "buildersbasics:end_stone_pillar_fi"
      - "buildersbasics:end_stone_pillar_in"
      - "buildersbasics:end_stone_pillar_ox"
      - "buildersbasics:end_stone_pillar_top"
      - "buildersbasics:end_stone_pillar_ve"
      - "buildersbasics:end_stone_tiles"
      - "buildersbasics:golden_trapdoor"
      - "buildersbasics:granite_bricks"
      - "buildersbasics:granite_pillar"
      - "buildersbasics:granite_pillar_top"
      - "buildersbasics:gray_purpur_block"
      - "buildersbasics:gray_terracotta_bricks"
      - "buildersbasics:green_purpur_block"
      - "buildersbasics:green_terracotta_bricks"
      - "buildersbasics:gtp_pillar_black"
      - "buildersbasics:gtp_pillar_black_top"
      - "buildersbasics:gtp_pillar_blue"
      - "buildersbasics:gtp_pillar_blue_top"
      - "buildersbasics:gtp_pillar_brown"
      - "buildersbasics:gtp_pillar_brown_top"
      - "buildersbasics:gtp_pillar_cyan"
      - "buildersbasics:gtp_pillar_cyan_top"
      - "buildersbasics:gtp_pillar_gray"
      - "buildersbasics:gtp_pillar_gray_top"
      - "buildersbasics:gtp_pillar_green"
      - "buildersbasics:gtp_pillar_green_top"
      - "buildersbasics:gtp_pillar_light_blue"
      - "buildersbasics:gtp_pillar_light_blue_top"
      - "buildersbasics:gtp_pillar_light_gray"
      - "buildersbasics:gtp_pillar_light_gray_top"
      - "buildersbasics:gtp_pillar_lime"
      - "buildersbasics:gtp_pillar_lime_top"
      - "buildersbasics:gtp_pillar_magenta"
      - "buildersbasics:gtp_pillar_magenta_top"
      - "buildersbasics:gtp_pillar_orange"
      - "buildersbasics:gtp_pillar_orange_top"
      - "buildersbasics:gtp_pillar_pink"
      - "buildersbasics:gtp_pillar_pink_top"
      - "buildersbasics:gtp_pillar_purple"
      - "buildersbasics:gtp_pillar_purple_top"
      - "buildersbasics:gtp_pillar_red"
      - "buildersbasics:gtp_pillar_red_top"
      - "buildersbasics:gtp_pillar_white"
      - "buildersbasics:gtp_pillar_white_top"
      - "buildersbasics:gtp_pillar_yellow"
      - "buildersbasics:gtp_pillar_yellow_top"
      - "buildersbasics:infernal_lantern"
      - "buildersbasics:jungle_boards"
      - "buildersbasics:light_blue_purpur_block"
      - "buildersbasics:light_blue_terracotta_bricks"
      - "buildersbasics:light_gray_purpur_block"
      - "buildersbasics:light_gray_terracotta_bricks"
      - "buildersbasics:lime_purpur_block"
      - "buildersbasics:lime_terracotta_bricks"
      - "buildersbasics:magenta_purpur_block"
      - "buildersbasics:magenta_terracotta_bricks"
      - "buildersbasics:mossy_cobblestone_bricks"
      - "buildersbasics:oak_boards"
      - "buildersbasics:orange_purpur_block"
      - "buildersbasics:orange_terracotta_bricks"
      - "buildersbasics:pink_purpur_block"
      - "buildersbasics:pink_terracotta_bricks"
      - "buildersbasics:polished_stone"
      - "buildersbasics:prismarine_pillar"
      - "buildersbasics:prismarine_pillar_top"
      - "buildersbasics:prismarine_tiles"
      - "buildersbasics:purple_purpur_block"
      - "buildersbasics:purple_terracotta_bricks"
      - "buildersbasics:red_purpur_block"
      - "buildersbasics:red_terracotta_bricks"
      - "buildersbasics:sandstone_pillar"
      - "buildersbasics:small_andesite_bricks"
      - "buildersbasics:small_diorite_bricks"
      - "buildersbasics:small_end_stone_bricks"
      - "buildersbasics:small_granite_bricks"
      - "buildersbasics:small_permafrost_bricks"
      - "buildersbasics:small_stone_bricks"
      - "buildersbasics:smooth_stone"
      - "buildersbasics:spruce_boards"
      - "buildersbasics:stone_pillar"
      - "buildersbasics:stone_pillar_top"
      - "buildersbasics:terracotta_bricks"
      - "buildersbasics:white_purpur_block"
      - "buildersbasics:white_terracotta_bricks"
      - "buildersbasics:wisteria_boards"
      - "buildersbasics:yellow_purpur_block"
      - "buildersbasics:yellow_terracotta_bricks"
</code></pre>

在所给示例中，有 `icons` 和 `buildersbasics` 两个分类id，分类下还有如下选项：

* enabled：是否启用该分类。
* icon：菜单内显示的物品，使用 `namespace:id` 格式。
* name：分类的名称。
* items：不用我多说了吧。


# 在其他插件使用 IA 物品

### 在其他插件插件使用 IA 物品材质

由于 **ItemsAdder** 的自定义物品本身就是基于原版的，因此不止可以在 **ItemsAdder** 本身使用所添加的自定义物品，其自定义的材质在其他插件中同样可以使用，下文即说明。

我们在前文已经了解过，自定义物品是通过 **CustomModelData** 实现的，我们只需要知道这个物品的 **CustomModelData** 值，再将其填写到其他插件的提供的物品的 **CustomModelData** 值选项内即可。

第一步：使用 `/iacustommodeldata 物品id` 获得对应 IA 物品的 `CustomModelData` 值及其对应 material。

第二步：将获得的值填写到其他插件的 **CustomModelData** 属性中，一般情况下插件不会直接给予这个选项，我们需要翻阅它的 Wiki 查看隐藏的属性，现如今几乎各个大型插件都有对此支持，如果没有支持，则我们无法在该插件使用 IA 物品显示。

这样一来，我们就可以在菜单等地方照样使用所添加的自定义物品的材质，但除非这些插件对 **ItemsAdder** 有挂钩，否则我们很难实现真正意义上使用 **IA** 物品，这种方法只能使用它的材质。

### 在其他插件使用 IA 物品

如果我们需要直接使用 **IA** 物品，即在其他插件获得的该物品能够被 **ItemsAdder** 识别并认可这是自己的物品，那么需要该插件与 **IA** 有挂钩，常见的挂钩将在下节说明。

针对没有与 **ItemsAdder** 直接挂钩但支持 **CustomModelData** 的插件，我们可以在物品显示时尽量在名称、Lore等方面与 **ItemsAdder** 的物品一致，在玩家获得该物品时则使用指令给予。例如商店售卖 **IA** 家具。


# 物品挂钩

一般情况下，第三方插件会主动会和 **ItemsAdder** 挂钩，所以你可以在它们的 **Wiki** 查看相关信息。但是，如果这个第三方插件使用的人数、规模等比 **ItemsAdder** 还大的话，**ItemsAdder** 则主动跟这个第三方插件挂钩以增加用户人数。~~（所以说，这是有阶级性的！）~~

下文则介绍一些常用的 **ItemsAdder** 主动挂钩的插件的挂钩用法：

### MMOItems

在上节我们已经介绍了物品属性，那么 **ItemsAdder** 与 **MMOItems** 挂钩正是通过物品属性进行的，我们需要对物品添加下面这个物品属性。

```
    mmoitem:
      type: SWORD
      id: TEST
```

`type` 为物品的类型，`id` 为物品的id。

例如：

```
info:
  namespace: mmoitems_example
items:
  test:
    display_name: ""
    mmoitem:
      type: SWORD
      id: TEST
    resource:
      material: DIAMOND_SWORD
      generate: true
      textures:
      - item/test.png
    durability:
      max_custom_durability: 1324
```

### MythicMobs

**ItemsAdder** 与 **MythicMobs** 的挂钩在于怪物中掉落物和装备的物品形式可以填写为：`namespace:id` 的格式。

例如：

掉落物：

```
  Drops:
    - my_items:special_sword 1-5 30%
```

装备：

```
  Equipment:
  - my_items:special_helmet HEAD
  - my_items:special_chestplate CHEST
  - my_items:special_leggings LEGS
  - my_items:special_boots FEET
  - my_items:special_sword HAND
  - my_items:special_shield OFFHAND
```


# 自定义物品模型

在 **物品基础** 一节中，我们制作了如下一个物品配置：

```
items:
  myitem:
    resource:
      material: DIAMOND_SWORD
      generate: true
      textures:
      - item/example_item.png
```

我们当时提到 `generate` 保留为 `true`，那么是否可以填写为 `false` 呢？答案是肯定的，本节我们就教导自定义物品模型。

### true 和 false 的区别

如果我们填写为 **true**，**ItemsAdder** 将自动生成原版的该物品的模型。原版的大多数物品是没有“模型”概念可言的，大多为我们俗称的 **2D** 物品。即使有模型的，也是你想不到的：

* 弓就有模型，它在玩家不同幅度拉弓时的贴图是不一样的。

要创建我们自己的自定义物品模型，实现 **3D** 物品，就需要我们自己制作一个模型文件了。

我们可以使用 **Blockbench** 软件制作自己的物品模型，具体的教程在很多地方都有不少，本篇教程主攻 **ItemsAdder**，故在此不再赘述，我们下面开始介绍你在拥有自定义模型文件后所做的事情。

![这是一个原版模型。](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2Fh3mqBv4qSmcVw9wVx8yK%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20194142.png?alt=media\&token=6c40c5b0-508b-45f6-854d-08ebb676df71)

![这是一个自定义物品模型。](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FXgkEhI5RFNXsSaS3Ldrr%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-06-03%20194213.png?alt=media\&token=e59845a8-d206-49ac-9641-64e49b522177)

### models 文件夹的了解

在前节中我们已经提到，我们往往将贴图放在 `resource_pack/assets/你命名的文件夹/textures` 内，而在配置中贴图的路径不需要指定到 **textures** 文件夹，直接填写 textures 文件夹内的目录即可，模型也是同理，我们只需要把 `textures` 替换为 `models` 即可。

models 文件夹内存放各个物品的模型，为 .json 格式。

### false 后的配置变化

在修改为 `false` 后，我们需要在将 `textures` 替换为 `model_path` 选项，并使用该选项指定自定义模型的路径，正如上文所述，你不需要指定到 **models** 文件夹，直接填写 **models** 文件夹内的目录即可，下面即为一个示例：

```
resource:
  material: PAPER
  generate: false
  model_path: children/cooking_cauldron_1_witch
```


# 盔甲

### 盔甲配置的组成

上文已经提及，使用物品的 **CustomModelData** 只能帮助我们切换物品的基本材质，因而盔甲在修改材质以后，也只能做到拿在手里的物品的材质变了，但一旦穿在身上即变为本来的物品，例如皮革盔甲。

幸运的是，原版在 **1.17** 版本后提供了自定义不同染色皮革的材质的功能，因此我们可以通过自定义染色皮革的材质来实现自定义盔甲的上身效果。

综上，一个盔甲配置由它本来拿在手中的物品的材质和盔甲上身的材质两个部分组成。

### 盔甲注册

我们首先需要在物品配置中注册一套盔甲，并规定它的材质。在一个物品配置中增加如下内容：

```
armors_rendering:
  copper_set_armor:
    color: '#d60000'
    layer_1: armors/copper_layer_1
    layer_2: armors/copper_layer_2
    use_color: false
```

其中，`copper_set_armor` 为 **盔甲的id**，盔甲的 **id** 没有限制，你也可以以同样的格式创建无数多的盔甲，下面为它的配置：

* color：指定盔甲的颜色，为 **RGB** 颜色代码，只有在 `use_color` 选项为 `true` 后才会生效，否则随机分配。
* layer1、layer\_2：盔甲的上身材质，在下面有具体说明。
* use\_color：上文已提及。

### 为物品增加盔甲属性

注册完盔甲以后，我们需要指定哪个物品才能作为盔甲在拿走物品手里时的材质。在配置中继续添加如下内容：

```
items:
  copper_helmet:
    display_name: 铜头盔
    nbt: '{AureliumSkills: {Requirements: {Armor: {Defense: 10}}}}'
    durability:
      max_custom_durability: 220
    mmoitem:
      type: ARMOR
      id: COPPER_HELMET
    resource:
      generate: true
      textures:
      - armors/copper_helmet.png
    specific_properties:
      armor:
        slot: head
        custom_armor: copper_set_armor
    attribute_modifiers:
      head:
        armor: 8
        armorToughness: 3
```

从前面的学习，我们已经很快的看出，`copper_helmet` 为物品id，下面为它的配置：

* display\_name、lore：在 **物品属性** 一节已介绍。
* nbt：设置物品 **NBT**，你只会在你用到时候知道如何填写这里，配置中所给的即为 **AureliumSkills** 插件提供的 **限制玩家使用等级** 的NBT，在其 Wiki 有详细介绍。
* durability：同样在 **物品属性** 一节已介绍。
* mmoitem：在 **物品挂钩** 一节已介绍。
* resource：在 **物品基础** 一节已介绍。
* specific\_properties：物品的特殊属性，盔甲将会使用到，在自定义方块时还会使用，下面将会详细讲解。
* attribute\_modifiers：在 物品属性 一节已介绍。在那里，我们介绍了 `mainhand` 和 `offhand`（主手和副手），这里盔甲将会单独有 `head、chest、legs、feet`（分布对应头盔、胸甲、护腿和靴子），记住需要准确无误。

### 盔甲特殊属性

```
    specific_properties:
      armor:
        slot: head
        custom_armor: copper_set_armor
```

盔甲特殊属性由以下组成：

* armor：代表以下部分均为盔甲的特殊属性，请不要修改。
* slot：盔甲上身的部位，有 `head、chest、legs、feet`（分布对应头盔、胸甲、护腿和靴子）。
* custom\_armor：填写注册的盔甲名称。

由于在使用 **MMOItems** 挂钩后，**ItemsAdder** 物品配置除 **resource** 外全部失效，因此本节所给的示例的赘余的，但这只是为了给你进行复习之作用。

### 盔甲的上身材质

盔甲的上身材质如下所示：

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2FFMai1XcnepeOEsG5wl3t%2Ftin_layer_1.png?alt=media\&token=63a246f2-78d5-43ff-a15d-ac1815bff7db)

![](https://4149593262-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfMGAfdqIe4KA9hVW04wr%2Fuploads%2F496gfXNp58yTvrAW7oZ4%2Ftin_layer_2.png?alt=media\&token=07966980-a72d-4d8f-9d40-952c889cd042)

它有两层材质，与皮肤类似，是 **3D** 的平面展开图，你可以使用 MCSkin 等软件绘制。


# 方块基础

方块基于物品，方块在 **ItemsAdder** 的物品配置上增加新的一条属性即可实现。在此之前，我们需要了解一下 **ItemsAdder** 自定义方块实现的原理。

在前文中我们已经了解了 **CustomModelData** 这个概念，我们可以通过原版实现一个物品多个材质，那么方块是否可以呢？答案是否定的，我们只能自定义方块在物品栏时显示的材质，却不能更换它摆放后显示的样子，但是我们可以替换原版方块中提供的大量形态材质以实现自定义方块，但很显然，这是有上限的，从这点来看，我们就可以分析出了在  **ItemsAdder** 中自定义方块也不是那么完美，如果你过于追求，笔者建议你考虑 **Mod** 服务端。

### 方块材质

在 **物品基础** 一节中，我们已经讲述了各个物品都有 `resource` 选项，方块归属于物品，它的该选项示例如下所示：

```
    resource:
      material: PAPER
      generate: true
      textures:
      - block/my_log/log_top.png
      - block/my_log/log.png
      - block/my_log/log.png
      - block/my_log/log.png
      - block/my_log/log_top.png
      - block/my_log/log.png
```

其中：

* material：这只是方块拿在手上后的材质，不是方块本身，所以我们只需要保持它原有 PAPER 物品即可，不需要必须是方块。
* generate：如果我们的方块是正常的正方体方块，那么 `generate` 我们需要保持为 `true`，如果不是，需要读取自己的模型文件，则为 `false` 。
* textures：与物品一致，但此处的 `textures` 下可以有 **6** 行，分布为方块的 **6** 个面。在 **6** 个面材质相同的情况下，也可以只有 **1** 行，那么方块的 **6** 个面将全部是相同的材质。

### 方块特殊属性

前文就盔甲时我们已经提及特殊属性，自定义方块在使用时同样有自定义属性：

```
specific_properties:
  block:
    placed_model:
      type: REAL_NOTE
      break_particles: BLOCK
      rotx: 0
      roty: 0
    cancel_drop: true 
    light_level: 12
    break_tools_blacklist:
    - WOODEN_PICKAXE
    - STONE_PICKAXE
    - IRON_PICKAXE
    break_tools_whitelist:
    - DIAMOND_PICKAXE
    - PICKAXE
    - pickaxe
    hardness: 2
    blast_resistance: 1
    no_explosion: false
    sound:
      break:
        name: BLOCK_WOOD_BREAK
        volume: 1
        pitch: 0.9
      place:
        name: BLOCK_WOOD_PLACE
        volume: 1
        pitch: 0.9
```

方块特殊属性由以下部分组成：

* block：代表以下部分为方块特殊属性，请勿修改。
* placed\_model：自定义方块的类型。下文详细说明。
* cancel\_drop：是否取消掉落，玩家在挖掘该自定义方块后不会获得该方块，默认为 `false`。
* light\_level：亮度等级。对于亮度等级的知识可见 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E4%BA%AE%E5%BA%A6)。默认为 `0`。
* break\_tools\_blacklist：禁止破坏该方块的物品id，你也可以填写 **ItemsAdder** 的 `namespace:id` 格式以指定对应物品。同时也支持模糊匹配，例如 `pickaxe` 代表所有 id 包含 `pickaxe` 的物品，也就是所有的镐子。这里的禁止是完全禁止，也就是说根本无法破坏。
* break\_tools\_whitelist：只可以破坏该方块的物品id，同上。
* hardness：方块的硬度。对于硬度的知识可见 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E6%8C%96%E6%8E%98#%E6%96%B9%E5%9D%97%E7%A1%AC%E5%BA%A6)。总的来说就是合适的工具下所挖掘的时间为 `硬度 x 1.5`。
* blast\_resistance：爆炸抗性。对于爆炸抗性的知识可见 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E7%88%86%E7%82%B8#%E7%88%86%E7%82%B8%E6%8A%97%E6%80%A7)。默认为 `硬度 x 3`。
* no\_explosion：爆炸无法使其破坏，如果设置，爆炸抗性属性也将失效。
* sound：物品破坏和放置时的音效。

### 方块类型

这个属性有这些值：

* `REAL_NOTE`
  * 使用真正的方块（唱片机），没有卡顿，没有实体。
  * 缺点:&#x20;
    * 不支持透明。
    * 最多只能制作 **750** 个方块。
* `REAL`
  * 使用真正的方块（蘑菇），没有卡顿。
  * 缺点:&#x20;
    * 最多 只能制作 **191** 个方块。
* `REAL_TRANSPARENT`
  * 使用真正的方块（紫菘植物），没有卡顿，也支持透明度！
  * 缺点:&#x20;
    * 最多只能制作**63** 个方块。
* `TILE`
  * 使用 **TILE** 方块（修改后的 **刷怪笼** 带有材质），你可以创建**无限多**的方块，不像真实方块那样有 **数量限制**。
  * 缺点:
    * 它不是100%的真实方块，它只是一个套上了材质的刷怪笼。
    * 材质/模型在较远距离看的话会消失，所以它将会直接显示刷怪笼。
    * 如果大量的方块出现在玩家的视野里的话，可能会导致客户端出现延迟。
* `FIRE`
  * 这是一个 **特殊方块**，它是 **火** 方块.
  * 缺点:&#x20;
    * 最多只能制作 **14** 种自定义火。


# 世界生成

在设置完一个方块后，我们可以让它随机的生成在世界中。

### 世界生成配置

在任意物品配置文件（是大的物品配置下，而不是单独的物品id下的配置，后续不再说明）中添加如下内容：

```
worlds_populators:
  custom_block:
    block: myitems:custom_block
    worlds:
    - world
    replaceable_blocks:
    - STONE
    - DIRT
    - ANDESITE
    - GRANITE
    - COBBLESTONE
    - GRAVEL
    biomes:
    - PLAINS
    chunk_chance: 70.0
    max_height: 45
    min_height: 25
    vein_blocks: 6
    chunk_veins: 1
  custom_block_2:
    block: myitems:custom_block_2
    worlds:
    - world
    replaceable_blocks:
    - DIRT
    chunk_chance: 100.0
    max_height: 64
    min_height: 40
    vein_blocks: 3
    chunk_veins: 1
```

所给的示例配置中包含 **2** 个生成规则。其中，`custom_block` 和 `custom_block_2` 为生成规则的id，其下为生成规则的配置，包括：

* block：该生成规则所指代的方块。
* worlds：该生成规则所生效的世界，可以添加无数多的世界。
* replaceable\_blocks：该生成规则所替换的方块，可以添加无数多的方块，只能为原版方块id。
* chunk\_chance：各个区块在生成时使用该生成规则的概率，`100` 即代表生成新的区块时必定使用 **1** 次该规则，也就是在合适情况下必定会至少有 **1** 个指代的方块被生成。除非该方块你将设置特别稀有，否则请保持 `100`。
* chunk\_veins：在区块使用该生成规则后，该区块将会随机生成的矿脉数量。
* vein\_blocks：在生成矿脉后，该矿脉拥有的指代方块的数量。
* 在上面配置中，1个区块必定有1个矿脉，1个矿脉有3个指代的方块，所以每个区块都会有3个这样的矿石。
* biomes：该生成规则所生效的生物群系，将该配置移除则代表所有生物群系都将会生成。
* min\_height：该生成规则的最低高度。
* max\_height：该生成规则的最高高度。


# 树木生成

首先我们需要参照 **方块基础** 一节所讲解的内容，创建树木的木头和叶子两个方块和它们的材质。

### 树木生成配置

在任意物品配置文件中添加如下内容：

```
trees_populators:
  my_tree:
    worlds:
    - world
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    - PODZOL
    chance: 40.0
    max_height: 100
    min_height: 50
    amount: 3
    iterations: 2
    tree_type: TREE
    leaves: myitems:my_leaves
    log: myitems:my_log
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - MOUNTAINS
```

所给的示例配置中，我们创建了id为 `my_tree` 的树木生成器，其下为其配置，包括：

* worlds：该生成规则所生效的世界，可以添加无数多的世界。
* bottom\_blocks：该树木在哪些方块上生成，可以添加无数多的方块。
* chance：各个区块在生成时使用该生成规则的概率，`100` 即代表生成新的区块时必定使用 **1** 次该规则，也就是在合适情况下必定会至少有 **1** 棵这样的树木生成。
* min\_height：该生成规则的最低高度。
* max\_height：该生成规则的最高高度。
* iterations：在 `chance` 选项下，生成规则在该区块被决定使用后，将会生成多少组的树木。
* amount：每组树木的数量，一组树木将会相邻生成。
* 在上面配置中，1个区块必定有1次生成，1次生成将会生成 **2** 组树，每组树实际生成 **3** 个树木，所以 **1** 个区块实际生成 **6** 棵树。
* tree\_type：树木类型。树木类型决定你设置的自定义树木的样式，例如丛林木较高，而橡木矮小，请试想你在玩单机MC时各个树木的样式，就是它们！
* levels：叶子的方块id。
* log：原木的方块id。
* biomes：该生成规则在哪些生物群系使用。

### 树木类型

* TREE：普通的树，类似最普通橡木。
* BIG\_TREE：高大的树，只是比 `TREE` 树干高了一些，你可以理解游戏中高大一些的橡木的样子。
* REDWOOD：云杉树，数根树根交叉后笔直向上。
* TALL\_REDWOOD：高大的云杉树。树顶的树叶较为稀少。
* BIRCH：白桦树。
* JUNGLE：丛林树。有 **4** 格宽。
* SMALL\_JUNGLE：小丛林树。仅 **1** 格宽。
* COCOA\_TREE：带有可可豆的树木。仅 **1** 格宽。
* JUNGLE\_BUSH：丛林灌木。较丛林木较矮小。
* RED\_MUSHROOML：红蘑菇。又小又宽。
* BROWN\_MUSHROOM：灰蘑菇。像伞状一样。
* SWAMP：沼泽树。将会有苔藓附在其上。
* ACACIA：金合欢树。
* DARK\_OAK：深色橡树。
* MEGA\_REDWOOD：巨型云杉树。有 **4** 格宽。
* TALL\_BIRCH：高大的白桦树。树顶的树叶较为稀少。
* CHORUS\_PLANT：紫菘植物样式。末地外岛遍地都是的就是它。
* CRIMSON\_FUNGUS：下界绯红树。
* WARPED\_FUNGUS：下界扭曲树。
* AZALEA：杜鹃花树。在繁茂洞穴上生成。

具体的图片和介绍可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E6%A0%91%E6%9C%A8) 上找到。

### 树苗

设置完树木以后，我们需要再设置这个树木的树木。找到任意一个物品，在其下添加如下行为属性即可：

```
    behaviours:
      sapling:
        tree_populator: orange_tree
```

例如：

```
items:
  orange_tree_sapling:
    display_name: 树苗
    permission: orange_tree_sapling
    resource:
      material: ORANGE_WOOL
      generate: true
      textures:
      - block/orange/sapling.png
    behaviours:
      sapling:
        tree_populator: orange_tree
```

### 树木的限制

* 不建议在末地使用。
* 当自定义的树木和原版树木混在一起时将会产生问题，这是MC本身原因导致的。
* 较大的树木在生成时将会产生性能问题，不建议设置过多的高大树木。


# 地物生成

### 地面地物

如下图所示的即为地面地物，它们在地面上生成：

![这是一个地物](https://1341925849-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M28TcKgSDvuFN510qye-887967055%2Fuploads%2F3PWqiVlDCzuT10MExbD8%2Fdesert_rose.png?alt=media\&token=b58005bd-d40f-418d-b89f-8cd5bc16e5f6)

在任意物品配置文件下添加如下内容：

```
surface_decorators:
  rose:
    block: rose
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - RIVER
    - MOUNTAINS
    - MOUNTAIN_EDGE
    - BIRCH_FOREST
    - BIRCH_FOREST_HILLS
    - TALL_BIRCH_FOREST
    - TALL_BIRCH_HILLS
    worlds:
      - world
    chance: 10
    max_height: 255 
    min_height: 0
    amount: 1
```

由于其中大部分选项前面两节都已介绍，这里只说明 `block` 选项即为地物的方块id。

如下图所示为洞穴 地物，它们的洞穴内生成：

![这是一个洞穴地物](https://1341925849-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M28TcKgSDvuFN510qye-887967055%2Fuploads%2FfU0KtDApSkCgkUYKcBgm%2Fimage.png?alt=media\&token=41526cbc-3e64-431c-be50-ea7a01c25f8a)

在任意物品配置文件中添加如下内容：

```
cave_decorators:
  small_rocks:
    block: small_rocks
    bottom_blocks:
    - DIRT
    - GRASS_BLOCK
    - STONE
    - COBBLESTONE
    - MOSSY_COBBLESTONE
    biomes:
    - PLAINS
    - SUNFLOWER_PLAINS
    - RIVER
    - MOUNTAINS
    - MOUNTAIN_EDGE
    - BIRCH_FOREST
    - BIRCH_FOREST_HILLS
    - TALL_BIRCH_FOREST
    - TALL_BIRCH_HILLS
    worlds:
      - world
    chance: 100
    max_height: 255 
    min_height: 0
    amount: 4
    position: SURFACE
```

这里只介绍 `position` 选项，它的作用是指定这个地物在洞穴天花板还是地上，如果是天花板，填写 `CEILING`，如果是地上，填写 `SURFACE`。


# 掉落物

**ItemsAdder** 内也内置了一套管理掉落物的系统，主要包括：

* 破坏方块后获得的掉落物
* 击杀生物后获得的掉落物
* 钓鱼获得的掉落物

### 破坏方块后获得的掉落物

在任意物品配置文件中添加如下内容：

```
loots:
  blocks:
    ruby_ore:
      type: itemsadder:ruby_ore
      items:
        ruby:
          item: itemsadder:ruby
          min_amount: 1
          max_amount: 2
          chance: 50
    nether_quartz_ore:
      type: NETHER_QUARTZ_ORE
      drop_only_first: true
      items:
        crystal:
          item: itemsadder:crystal
          min_amount: 1
          max_amount: 2
          chance: 10
        knowledge_fragment:
          item: itemsadder:knowledge_fragment
          min_amount: 1
          max_amount: 2
          chance: 15
```

其中，`blocks` 代表下面的配置是破坏方块后获得的掉落物，在该示例中，包含了 **2** 个破坏方块后获得的掉落物设置，一个id为 `ruby_ore`，另外一个id为 `nether_quartz_ore`：

* type：该设置作用的方块id，可以是原版方块id，也可以是 **IA** 的方块id。
* items：破坏 `type` 中所设置的方块后掉落的物品，可用设置无数多个，其下包括：`item` 为掉落的物品id，`min_amount`、`max_amount` 分布为掉落的最小数量和最多数量，`chance` 为掉落的几率。另有可选选项：`ignore_fortune` 为是否无视时运附魔的增益效果。
* drop\_only\_first：是否只从 `items` 中最多选择一个掉落物掉落。
* biomes：该配置生效的生物群系，格式参见前面的 **世界生成** 一节即可。
* nbt：见下文介绍。

### 其他两种掉落物

由于其他两种掉落物的配置选项与上文近乎一致，本教程不再赘述，只给出示例：

钓鱼获得的掉落物的示例，其中 `fishing` 即代表下面的配置为钓鱼获得的掉落物：

```
loots:
  fishing:
    loot_blue_parrotfish:
      biomes:
        - WARM_OCEAN
      items:
        item_1:
          item: itemsadder:blue_parrotfish
          min_amount: 1
          max_amount: 1
          chance: 5
    loot_green_sunfish:
      items:
        item_1:
          item: itemsadder:green_sunfish
          min_amount: 1
          max_amount: 1
          chance: 5
    loot_goldfish:
      items:
        item_1:
          item: itemsadder:goldfish
          min_amount: 1
          max_amount: 1
          chance: 5
```

击杀生物获得的掉落物的示例，其中 `mobs` 即代表下面的配置为击杀生物获得的掉落物：

```
loots:
  mobs:
    villager:
      type: VILLAGER
      nbt:
        profession:
          path: VillagerData.profession
          value: minecraft:farmer
          type: string
      items:
        item_1:
          item: itemsadder:straw_hat
          min_amount: 1
          max_amount: 1
          chance: 100
    ender_dragon:
      type: ENDER_DRAGON
      items:
        item_1:
          item: itemsadder:ender_dragon_wings
          min_amount: 1
          max_amount: 1
          chance: 100
    soul:
      type: HUSK
      metadata:
        ItemsAdderEntity:
          name: "ItemsAdderEntity"
          value: "custom:ninja_skeleton"
          type: "string"
      items:
        ruby:
          item: ruby
          min_amount: 1
          max_amount: 1
          chance: 100
```

### NBT

你可以设置只有带有某个 **NBT** 的方块或者生物才能在破坏或者击杀后获得你所设置的掉落物，关于生物的示例上文已经给出，下文给出方块的示例：

```
loots:
  blocks:
    change_me:
      enabled: true
      type: SPAWNER
      nbt:
        spawner_type:
          path: SpawnData.entity.id
          value: minecraft:zombie
          type: string
      items:
        change_me:
          item: ACACIA_BOAT
          min_amount: 1
          max_amount: 1
          chance: 100
          ignore_fortune: false
```


# 家具基础

方块本身由 **6** 个面堆叠而成，我们虽然可以部分巧妙的使用透明像素来实现非正方体方块，但对于像椅子、桌子这样需要大量方向的装饰品来说，还是太限制了，所以我们需要使用 **ItemsAdder** 家具功能。

虽然称之为家具，但实际上是在 **Minecraft** 中放置我们前文在 **物品** 一章已经提及的 **3D** 模型，只不过这次不是只在手上看，而是实实在在的放在地上了。

家具通过盔甲架或者物品展示框的方式显示，而不是方块的不同的唱片机、刷怪笼原版材质修改（这意味着有数量上的上限）。

### 家具材质

与方块近乎一样，但是这里要用的是模型：

```
    resource:
      material: PAPER
      generate: false
      model_path: lamp
```

其中：

* material：见 **方块基础** 一节。
* generate：见 **方块基础** 一节，此处请保持 `false`。
* model\_path：模型文件路径，其填写规则与贴图的 `path` 一致，请见 **贴图** 一节。

### 家具行为属性

不同于方块需要添加特殊属性，家具需要给这个物品添加一个行为属性。不止对于家具本身，行为属性还可以为物品带来其他丰富多彩的内容，例如饰品、售卖机、枪等，具体的内容请见下一节。

在你需要设置为家具的物品的配置下添加如下内容：

```
behaviours:
  furniture:
    entity: armor_stand
    small: true
    gravity: true
    fixed_rotation: false
    light_level: 7  
    solid: false
    opposite_direction: false #makes the model rotate 180 when placed
    hitbox:
      length: 2
      width: 2.3
      height: 1
      length_offset: 0.5
      width_offset: 0.5
      height_offset: 0.5
    placeable_on:
      walls: false
      ceiling: false
      floor: true

```

其中：

* entity：该家具的实体类型，家具可以通过盔甲架或者物品展示框显示，两者的区别将在下文指出。
* small：是否为小型盔甲架。
* solid：是否具有像方块那样的固态。如果是，那么玩家将可以“踩在”家具上，如果不是，那么玩家可以穿透家具。
* fixed\_rotation：是否固定朝向，如果不是，那么家具每次朝玩家所在的朝向设&#x7F6E;**（你可以理解为 Citizen 每次创建 NPC 后，NPC 都是朝着玩家创建时候方向看，很难做到两个 NPC 朝向一模一样）**。建议如果你是椅子等装饰品，请修改为 `true`，否则玩家放置每把椅子朝向不一致将会非常影响美观，如果是收音机这种小装饰品，可以修改为 `false`。

![这是一个没有固定朝向的家具](https://1341925849-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M28TcKgSDvuFN510qye-887967055%2Fuploads%2F5506uokIEO7CxQAj59ZT%2Fimage.png?alt=media\&token=6f9bef2c-6c2d-45d2-8155-ffa49bda3c54)

* hitbox：家具的 `hitbox`。每个 **Minecraft**  的实体都有 `hitbox`，玩家只有在命中这个实体的 `hitbox` 后才会使其受到伤害，在家具中即破坏它。你可以在客户端按住 **F3 + B** 键以查看各个实体的 `hitbox` 范围。其分别为长宽高和长宽高的偏移。
* placed\_on：可以放置的位置，分布为墙上、地上、天花板。

### 家具实体

家具可以由 **2** 种实体显示，我们可以将这个物品套在盔甲架的头上以将其显示，或者放在物品展示框上以将其显示。盔甲架和物品展示框实际上都会隐形，所以就实现了家具的效果。

#### 盔甲架

* 可以无限朝向，而不是物品展示框的 **8** 个朝向。
* 只能放在地上，不能是墙上和天花板。
* 可以实现椅子坐上去的效果。

它的标准配置是（未列出的选项代表该选项对于盔甲架无效，下同）：

```
behaviours:
  furniture:
    entity: armor_stand
    small: true
    solid: true
    fixed_rotation: true
    hitbox:
      length: 1
      width: 2
      height: 1
      width_offset: 0.5
    placeable_on:
      walls: false
      ceiling: false
      floor: true
  furniture_sit:
    sit_height: 0.5
```

`furniture_sit` 为另外一个行为属性，将在下节提及。

#### 物品展示框

* 只能 **8** 个朝向。
* 什么地方都可以放。
* 不能很好实现椅子坐上去的效果。

它的标准配置是：

```
behaviours:
  furniture:
    entity: item_frame
    light_level: 15
    solid: false
    hitbox:
      length: 1
      width: 1
      height: 1.5
    placeable_on:
      walls: true
      ceiling: true
      floor: true
```


# 行为属性

### 方块村民交易

```
block_trade_machine:
  title: "你的标题"
  permission: "mypermission.trade.example"
  gui_texture:
    left: customization_table_left
    right: customization_table_right
  trades_list:
    black_fishing_rod:
      ingredients:
        slot1:
          item: FISHING_ROD
          amount: 1
        slot2:
          item: BLACK_DYE
          amount: 1
      result:
        item: black_fishing_rod
        amount: 1
    red_fishing_rod:
      ingredients:
        slot1:
          item: FISHING_ROD
          amount: 1
        slot2:
          item: RED_DYE
          amount: 1
      result:
        item: red_fishing_rod
        amount: 1
```

执行交易操作后，将会打开一个村民交易页面，这也是很多大型服务器制作的的伪自定义合成 **UI** 的来源。

* title：村民交易页面的标题。
* permission：执行该操作需要的权限，为可选选项。
* gui\_textures：村民交易页面的背景贴图，分布为左右两边，贴图的标准分辨率大小应为 **137x164**，你可以在左右适当大于这个值，这样就可以在两边做出额外装饰，为可选选项。
* trades\_list：所给示例由 `black_fishing_rod` 和 `red_fishing_rod` 两个id的村民交易组成，你也可以按此格式添加无数多的村民交易。与前文 **熔炉配方** 一节一样，`ingredients` 为输入的物品，其中 `slot1` 和 `slot2` 分别为村民交易的第一个格子和第二个格子的物品，`result` 为输出的物品。

### 方块村民交易

与上文 **村民交易** 一样，只是点击某个家具后进入，适合的场景例如自动贩卖机等。

将最开头的 `block_trade_machine` 替换为 `furniture_trade_machine` 即可。

### 家具

见前一节。

### 坐在家具上

```
furniture_sit:
  sit_height: 0.9
  opposite_direction: true 
  sit_all_solid_blocks: false
```

其中：

* sit\_height：坐上的高度，如果你的家具就1格高，该值是合适的，一般情况下几格高再减去约0.1即可。
* opposite\_direction：坐下后玩家是否固定朝家具相反方向，默认是 `true`。
* sit\_all\_solid\_blocks：如果这个家具是多格组成的，是否每一格玩家都可以坐下。

### 枪

```
gun:
  projectile: itemsadder:clip
```

其中：

* projectile：枪的轨迹材质，例如弓此处就是箭射出后空中的材质。

### 饰品

```
hat: true
```

为 `true` 后，玩家可以将其穿在头上，可以做出饰品的效果。例如天使翅膀等。

### 死亡不掉落

```
keep_on_death: true
```

### 唱片

```
music_disc:
  song:
    name: "itemsadder:music_disc.cdk_sunday"
    description: "Cdk - Sunday"
```

分布为名字和描述，名字也可以指代你在 **ItemsAdder** 设置好的某个歌曲。

### 载具

```
vehicle:
  fixed_rotation: false
  small: true
  sit_height: 0
  step_height: 0.1
  hitbox:
    length: 2
    width: 1.7
    height: 1
  speed:
    drive: 1
    jump: 0.3
    fly: 0
  fuel:
    start: 150
    max: 300
    items:
      COAL: 1
      CHARCOAL: 1
      COAL_BLOCK: 9
      "itemsadder:banana": 1
  smoke:
    amount: 2
    offset:
      x: 0
      y: 0
      z: -0.8
```

大部分与家具一致，此处只介绍不同之处：

* speed：分别是正常、跳跃和飞行时速度，**0** 代表不可这么做。
* fuel：燃料。其中，`start` 为最开始的燃料，`max` 为最大燃料数，`items` 为可以作为燃料的物品和其提供的燃料值，可以是 `namespace:id` 格式。
* smoke：尾气粒子。


# 合成配方

合成即我们在工作台中的合成。在任意物品配置文件中添加如下内容：

```
recipes:
  crafting_table:
    deadmau5_hat:
      permission: myitems.deadmau5_hat
      enabled: true
      pattern:
      - BXB
      - XBX
      - XXX
      ingredients:
        B: LIGHT_BLUE_WOOL
      result:
        item: myitems:deadmau5_hat
        amount: 1
```

`crafting_table` 指的是下面的这些配方为合成配方，即工作台中的配方。

* permission：使用该配方需要的权限。可以不添加该选项。
* enabled：是否启用该配方。
* pattern：该合成配方的纹路，必须为 **3x3**（即所给示例的样式）。
* ingredients：解释合成配方的纹路，在所给示例中，我们解释了纹路中的 **B** 代表 `LIGHT_BLUE_WOOL`，即原版的深蓝色羊毛，你也可以使用 `namespace:id` 的格式来指代 **IA** 内的物品。
* result：配方的输出物品，其中 `item` 为物品id，`amount` 为物品数量。

配方的配置不需要和物品配置在一起，你可以分开以便于配置与管理。

### 2 x 2 合成配方

将 `pattern` 中的第一行全部为 **XXX**，且 `ingredients` 中未对 **X** 做出解释，即可创建一个 **2 x 2** 的合成配方。

![一个 2x2 的合成配方](https://1341925849-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M28TcKgSDvuFN510qye%2F-MSTgrBSWlCPnl2sB-As%2F-MSThYGI11wu0bA7tPYh%2Fimmagine.png?alt=media\&token=2a9e1c88-9cc3-4c08-b7f5-7c7c6b294119)

### 多合成配方

你可以为一个配方设置多个合成 **pattern**（即合成配方），只需要添加带 `pattern` 开头的选项即可，例如：

```
  pattern_2:
  - XXX
  - XRX
  - XSX
```

整体效果示例：

```
turquoise_sword:
  permission: itemsadder.turquoise_sword
  enabled: true
  pattern:
  - XRX
  - XRX
  - XSX
  pattern_2:
  - XXX
  - XRX
  - XSX
  ingredients:
    R: itemsadder:turquoise
    S: STICK
  result:
    item: itemsadder:turquoise_sword
    amount: 1
```

### 可选属性

每个合成配方还可以设置如下的可选属性：

```
      return_items:
        decrement_durability:
          knife:
            item: knife
            amount: 1
        play_sound:
          name: itemsadder:item.knife.use
          volume: 1
          pitch: 1
```

其中 `decrement_durability` 代表消耗合成配方中某个物品的耐久度，`play_sound` 代表播放音效。

这样做到的合成配方如图所示：

![一个消耗物品耐久的合成配方](https://1341925849-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M28TcKgSDvuFN510qye%2F-M3Mh3ZBfQxNpacgzAEG%2F-M3Mkbai517Vr7pjaV2P%2Fimage.png?alt=media\&token=92f0151d-2856-4699-93b2-c003555b1411)


# 熔炉配方

熔炉即我们在烟熏炉、高炉和熔炉中的配方，在物品配置文件中添加如下内容：

```
recipes:
  cooking:
    cooked_sausage:
      permission: itemsadder.cooked_sausage
      ingredient:
        item: itemsadder:sausage
      machines:
      - FURNACE
      - BLAST_FURNACE
      exp: 1
      cook_time: 200
      result:
        item: itemsadder:cooked_sausage
        amount: 1
```

`cooking` 指的是下面这些配方是熔炉配方：

* permission：在 **合成配方** 中已经说明。
* ingredients：输入的物品。在原版熔炉配方中，例如铁矿石。
* machines：该配方可用的熔炉类型，填写物品id。
* exp：玩家在熔炼后获得的经验值。作为参考，原版一般为 0.x，此处已经偏大。
* cook\_time：熔炼时长，为 **tick** 值，20 **tick** = 1 秒，此处代表 **10** 秒。
* result：在 **合成配方** 中已经说明。


# 铁砧配方

在物品配置文件中添加如下内容：

```
anvil_repair:
    emerald_sword:
        permission: itemsadder.emerald_sword
        ingredient: EMERALD
        item: itemsadder:emerald_sword
```

铁砧配方均为修复物品，此处 `ingredients` 代表修复消耗的物品，`item` 代表将要修复的物品。


# 事件基础

事件在 **ItemsAdder** 中类似脚本方块的存在，你可以轻松的设置大量你想做的事情。它也是物品的一个选项，在任意物品id的配置下添加如下内容：

```
    events:
      interact:
        right:
          execute_commands:
            cmd1:
              command: 'hi {player}'
              as_console: true
              delay: 0
            cmd2:
              command: 'me'
              as_console: true
              delay: 20
            cmd3:
              command: 'op {player}'
              as_console: true
              delay: 40
          play_sound_1:
            name: minecraft:block.note_block.banjo
            delay: 0
          play_sound_2:
            name: minecraft:block.note_block.banjo
            pitch: 1.2
            delay: 20
```

其中，`interact` 和下面的 `right` 为事件的触发方式，下面的 `execute_commands、play_sound_1、play_sound_2` 均为事件动作。


# 事件触发方式

每个事件有如下的触发方式：

* block\_break：破坏方块
* attack：攻击
* kill：击杀
* interact.entity：点击生物
* interact.left：物品左键点击
* interact.left\_shift：物品左键+Shift点击
* interact.right：物品右键点击
* interact.right\_shift：物品右键+Shift点击
* drop：丢弃
* pickup：捡起
* eat：吃下
* drink：喝下
* bow\_shot：射箭
* gun\_shot：枪发射
* gun\_no\_ammo：枪没有弹药
* gun\_reload：枪填装弹匣
* book\_write：写书
* book\_read：读书
* fishing\_start：抛竿
* fishing\_caught：抓鱼
* fishing\_failed：抓鱼失败
* fishing\_cancel：回竿
* fishing\_bite：鱼咬竿
* fishing\_in\_ground：在地面上钓鱼
* wear：穿戴
* unwear：取消穿戴
* held：手持
* unheld：取消手持
* item\_throw：物品抛掷
* item\_hit\_ground：手持物品点地
* item\_hit\_entity：手持物品点击生物
* placed\_block.interact：方块点击
* placed\_block.break：方块破坏
* placed\_armorstand.interact：盔甲架原理的家具点击
* placed\_armorstand.break：盔甲架原理的家具破坏
* placed\_itemframe.interact：物品展示框原理的家具点击
* placed\_itemframe.break：物品展示框原理的家具破坏
* bucket\_empty：倒桶
* bucket\_fill：填桶


# 事件动作

### 播放音效

```
play_sound:
  name: itemsadder:ambient.creepy
  volume: 1
  pitch: 1
```

### 停止播放音效

```
stop_sound:
  name: "itemsadder:music_disc.cdk_sunday"
```

### 执行命令

```
execute_commands:
  first_example:
    command: 'tellraw {player} {"text":"wow you did something!","color":"gold"}'
    as_console: true
  second:
    command: 'help'
    as_console: false
  third:
    command: 'give {player} diamond'
    as_console: true 
```

其中：

* command：具体执行的命令。
* as\_console：是否以控制台身份执行。

### 粒子效果

```
play_particle:
  name: "ENCHANTMENT_TABLE"
```

粒子效果的id可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E7%B2%92%E5%AD%90) 查看。

### 发射状粒子效果

```
shoot_particle:
  name: FLAME
  distance: 7
```

是否武器、枪，其中 `distance` 代表距离。

### 增加耐久值

```
increment_durability:
  amount: 10
```

### 减去耐久值

```
decrement_durability:
  amount: 10
```

### 增加使用次数

```
increment_usages:
  amount: 1
```

### 减去使用次数

```
decrement_amount:
  amount: 1
```

### 减去物品数量

```
decrement_amount:
  amount: 1
```

### 掉落经验值

```
drop_exp:
  chance: 50
  min_amount: 1
  max_amount: 3
```

其中：

* chance：触发几率。
* min\_amount、max\_amount：分布为最小值和最大值。

### 食物

```
feed:
  amount: 6
  saturation: 2
```

其中，`amount` 代表饱食度，`saturation` 代表饱和度。

### 给予物品

```
give_item:
  item: empty_cup
  amount: 1
```

### 掉落物品

```
drop_item:
  item: 2d_furniture
  chance: 99.9
  max_amount: 3
  min_amount: 1
```

### 播放不死图腾动画

```
play_totem_animation: animatedtitles:bruh
```

### 放置方块

```
set_block:
  block: rocks
  target: RELATIVE
  decrement_amount: true
```

其中：

* block：放置的方块。
* target：放置的对象。
* decrement\_amount：放置后是否减少本来的数量。

### 放置家具

```
place_furniture:
  furniture: furniture
  decrement_amount: true
```

### 给予自身药水

```
potion_effect:
  type: UNLUCK
  duration: 100
  amplifier: 0
```

其中：

* type：药水的类型。
* duration：药水的时长。
* amplifier：药水的等级。

### 移除自身药水

```
remove_potion_effect:
  type: GLOWING
```

### 给予对象药水

```
target_potion_effect:
  type: GLOWING
  duration: 70
  amplifier: 15
```

对象指的是攻击或者解除的实体等，其中：

* type：药水的类型。
* duration：药水的时长。
* amplifier：药水的等级。

### 移除对象药水

```
target_remove_potion_effect:
  type: GLOWING
```

### 增加玩家 IA 属性

```
increment_player_stat:
  name: "itemsadder:mana_bar"
  amount: 1
```

### 减少玩家 IA 属性

```
decrement_player_stat:
  name: "itemsadder:mana_bar"
  amount: 1
```

### 攻击实体

```
damage_entity:
  damage: 4
```

其中：

* damage：攻击的伤害值。

### 攻击附近实体

```
damage_entity_in_sight:
  damage: 4
  distance: 7
```

```
damage_near_entities:
  entity_groups:
   - HOSTILE
   - PLAYERS
   - PASSIVE
  damage: 4
  range: 7
```

其中：

* entity\_groups：实体类型，分布为主动（怪物）、玩家和被动（动物）。
* range、distance：距离。

### 爆炸

```
explosion:
  power: 2
  fire: true
  break_blocks: true
```

其中：

* power：爆炸威力。
* fire：是否着火。
* break\_blocks：是否破坏方块。

### 大范围破坏

```
multiple_break:
  keep_ores: true
  drop_all_blocks:
    enabled: true
    need_silk_touch: true
  size: 3
  depth: 3
```

其中：

* keep\_ores：是否保留矿石不破坏。
* drop\_all\_blocks：是否掉落所有方块和是否需要精准采集附魔。
* size：破坏的大小。
* depth：破坏的深度。


# 音效

第一步：参见 **总体配置结构了解** 一节，在任意一个 `resource_pack/assets/namespace` 下创建新的文件夹，名为 `sounds`。（在此之前我们创建过 `textures` 和 `models` 文件夹）

第二步：将你的 **.ogg** 格式的音乐放入其中。

第三步：在同样位置创建新的文件，名为 **sounds.json**。

在此文件中添加如下内容：

```
{
    "music_disc.音效1的名称":{
        "sounds":[
            "namespace名称:音效1的路径"
        ]
    },
    "music_disc.音效2的名称":{
        "sounds":[
            "namespace名称:音效2的路径"
        ]
    }
```

你可以按照此格式添加无数多的音效。


# Tooltip

Tooltip 是玩家鼠标浮在某个物品上时显示的内容，例如：

![](https://i.imgur.com/eA7iz50.gif)

有 **2** 种方式可以实现 Tooltip：

* 通过原版的着色器。
* 在 **Tooltip** 上人工通过物品名称或者 **Lore** 显示贴图。

很明显第一种有天然的优势，你无需一个个为物品加入，并且图形自动匹配 **Tooltip** 大小。在 **PlanetMinecraft** 网站搜索 **tooltip** 即可寻找一些示例。


# 参考资料

* ItemsAdder 官方Wiki。[点击查看](https://itemsadder.devs.beer/)。
* 籽岷介绍的《起源领域》服务器视频。[点击查看](https://www.bilibili.com/video/BV1Cv411W7er/)。


# 欢迎

欢迎来到 **EcoX** 系列插件的使用指导。

**Eco** 系列插件指的是由国外作者 **Auxilor** 所制作的一套插件，这一套插件几乎都使用了 **eco**（一个前置插件，起到“库”的作用） 中的 **The Effect System**（本教程言简意赅的称之为自定义技能系统，以方便萌新理解），可以让插件的自定义度指数倍提升，使用者可以用它把插件完成很多的花样，可以说是 **生存界的 MythicMobs 技能（skills）**&#x4E86;。

但遗憾的是，如此方便、快捷、自定义度极高的一套插件，国内使用的少之又少，喜欢 **mcMMO** 这种一键式部署的服主越来越多，这却不是一个好现象，笔者喜欢各位读者应该呈现的是一百个服主能开出一百个服的花样，使用自己的脑洞写出自己的服务器玩法内容，这也是本篇教程存在的意义。

**Eco** 系列插件主要包括以下插件，同时笔者也将介绍这个自定义技能系统是如何存在于其中的：

* EcoEnchants（附魔）：通过给物品附魔，附魔后的物品触发自定义技能。
* Talismans（护身符）：类似于饰品，拥有护身符的玩家触发对应自定义技能。
* EcoArmor（盔甲）：穿戴盔甲的玩家触发对应的自定义技能。
* EcoItems（物品）：说是自定义物品，其实作者本质上将工具、武器等功能均包括于此。手持对应物品的玩家触发对应的自定义技能。
* Reforges（重铸）：通过重铸菜单，给物品加上重铸词条，拥有词条的物品触发自定义技能。
* EcoSkills（技能）：与 mcMMO 一样类型的生存技能插件，玩家获得对应技能的经验值，不断升级后到达一定等级触发自定义技能。
* Boosters（加倍器）：给全服玩家触发自定义技能。
* EcoPets（宠物）：通过宠物给玩家触发自定义技能。

技能在生存情况下大部分理解为增益，之所以称为技能，是因为它可以和我们在 **RPG** 服务器中理解的自定义技能一样，可以设置触发条件、触发效果、筛选对象等。

不难看出，虽然该作者有众多插件，但是只要把本教程所述的自定义技能掌握得当，以上所有插件不用单独学习，全部熟练掌握！


# 简绍

欢迎继续阅读本教程。

在上一节中我们已经大概介绍了各个插件与自定义技能系统之间的关联，那么下面我们将介绍各个插件的一般配置格式，我们可以分布理解为：

* EcoEnchants（附魔）：默认自定义附魔配置。
* Talismans（护身符）：默认自定义护身符配置。
* EcoArmor（盔甲）：默认自定义盔甲配置。
* EcoItems（物品）：默认自定义物品配置。
* Reforges（重铸）：默认自定义重铸词条配置。
* EcoSkills（技能）：默认自定义技能配置。
* Boosters（加倍器）：默认自定义加倍器配置。
* EcoPets（宠物）：默认自定义宠物配置。


# Yaml 语法学习

**EcoX** 系列插件全部使用 **Yaml** 文件储存，学习 **Yaml** 语法是一个必须课，在此我们简单的介绍一下。

**Yaml** 的基本语法格式是 `键: 值`（也就是 `key: value`），例如 `raytrace-distance: 80`。需要注意以下几点：

* 大小写敏感。（由于是插件自动生成的，你也几乎不用考虑点这一点）
* 键与值用 `:` 分开，请注意不是单独的一个 **英文冒号**，而不是一个英文冒号加一个空格。
* 当值中有 `:、&` 等特殊符号时，应该将值的前后用 `'值'` 或者 `"值"` 符号将其囊括，例如 `curse-color: '&c'`。
* 当值中有 `'` 符号时，使用 `''` 代替它，例如 `cannot-afford-type: '&cYou can''t afford to do this! &fCost: &a%cost% %type%'`。（我们可以看到 `can't` 在这里写为 `can''t`）

上面的基本语法格式为普通类型，**EcoX** 中还常用 **List** 类型，它的语法格式为：

```
键:
- 值1
- 值2
- 值3
```

或者

```
键:
  - 值1
  - 值2
  - 值3
```

需要注意的是：

* 第二种表述方法，在其前面仅加了 **2** 个空格。这个空格数量不能多，也不能少，必须是 **2** 个。

例如：

```
targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
```

### 缩进

无论你是普通类型还是 **List** 类型，你都需要注意一点，就是值也有可能是其他的选项，也就是子选项的缩进。

缩进的一般语法格式为：

```
键1:
  键2: 值1
  键3: 值2
  键4: 
    - 值3
    - 值4
    - 值5
```

键2、键3、键4都在本教程理解为键1的子选项，需要和键1保持 **2** 个空格的距离。

例如：

```
general-config:
  targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
  grindstoneable: true
  disabled-in-worlds: []
```

当遇到自己辛辛苦苦编写配置后插件不加载，确定是自己配置的问题以后，就可以检查你的 **Yaml** 语法格式是否正确。

我们可以前往 [这个网站](https://verytoolz.com/yaml-validator.html)，在左边复制好自己的 **Yaml** 文本后点击中间的 **Yaml 验证** 即可，当右边出现 **Valid YAML** 时即代表你的语法格式无误，如下图：

![](https://1370664756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FObkS9GBaWEafgp7ydEEU%2Fuploads%2FU9G7lKrhxKPEhkXu5oph%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084733.png?alt=media\&token=d46e1b4b-fe32-4608-a181-e0c0c2371927)

遇到下面这种情况即为有语法错误，并且会将行数告诉你（即 **line 41**，代表第 41 行错误），在这里是因为第 **2** 行缺失另外一个 `'` 符号，导致计算机一直读取到最后也没读到下一个 `'` 符号，所以即在此报错，因此你还需要根据报错的内容来判断是什么问题。

![](https://1370664756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FObkS9GBaWEafgp7ydEEU%2Fuploads%2FoPtRahjmSdRxIBT0QvX3%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084856.png?alt=media\&token=d999c794-b9b5-4f0b-befd-836fe1e98ddf)

### 空值

有时插件生成的配置我们根本不想用，但是它自己生成了，删除了又怕插件出问题，这时可以使用空值判断一下我们能否删除它。

在上面所给的示例配置中，出现了大量 `键: []` 的这种情况，这种情况即代表这个配置实际上是可以删除的，删除即使用默认值，一般是空值。在下面的学习之旅中，我们会大量使用空值。


# 自定义附魔

**EcoEnchants** 在本教程编写之时对全部代码进行了重置，**8.x** 版本、**9.x** 版本作者已明确表示配置、插件逻辑均发生重大变化，导致笔者先前编写的 **8.x** 版本的教程在 **9.x** 已不再适用，故本节区分两个小节。

请使用 **9.x** 版本的读者仍先阅读 **8.x** 版本的介绍，这里有笔者的一些核心思路，在编写 **9.x** 版本教程时已无太多灵感，在这里可能就没有那么细了。


# 8.x 版本

自定义附魔配置可以在 `plugins/EcoEnchants/customenchants.yml` 中找到，它的一般配置如下：

```
enchants:
  - <第一个自定义附魔>
  - <第二个自定义附魔>
```

其中，`enchants` 为一个 **List** 类型的自定义附魔的键，所有自定义附魔的一半配置如下：

```
- id: escape
  type: normal
  name: "逃避"
  description: 在受到伤害后获得短时间的加速效果

  obtaining:
    table: true
    villager: true
    loot: true
    rarity: epic

  general-config:
    flags: [ ]
    targets:
      - boots
    grindstoneable: true
    disabled-in-worlds: [ ]
    requirements:
      list: [ ]
      not-met-lore: [ ]
    conflicts: [ ]

  levels:
    - effects:
        - id: potion_effect
          args:
            effect: speed
            level: 1
            duration: 30
            apply_to_player: true
          triggers:
            - take_damage
      conditions: [ ]
    - effects:
        - id: potion_effect
          args:
            effect: speed
            level: 2
            duration: 30
            apply_to_player: true
          triggers:
            - take_damage
      conditions: [ ]
```

我们可以看出它由以下部分组成：

* **id**：自定义附魔的 ID，只能由小写字母组成，如果有下划线在游戏中会被自动省略。
* **type**：附魔的类型，在正常情况下我们直接填写 **normal** 即可。

另有：**curse**（负面附魔，插件内的作用是无论该负面附魔是什么稀有度，其自定义颜色都将会是红色）、**special**（特殊附魔，插件内的作用是每个物品最多只能有一个特殊附魔）。

* **name**：附魔的名称，玩家能够看到的。
* **description**: 附魔的描述，玩家可以通过 **/enchantinfo** 指令查询到，也可以通过开启 `plugins/EcoEnchants/config.yml` 中的 `describe.enabled` 选项，将其修改为 `true` 即可。

{% hint style="info" %}
本教程将引用一种新的描述格式，以上文的 `describe.enabled` 为例，它在配置中实际显示如下：
{% endhint %}

```
  describe:
    before-lines: 5
    at-bottom: false
    only-on-books: false
    wrap: 30
    enabled: true # <----- enabled 为 describe 下的子选项
```

* **obtaining.table**
* **obtaining.villager**
* **obtaining.loot**

获得该附魔的方式，从上到下分别是：附魔台、村民、宝箱

{% hint style="info" %}
如果您的服务器还使用了其他自定义村民交易插件、自定义宝箱战利品插件等，我们建议您花费一些时间自行地为这些附魔加入到这些插件的配置中，并关闭这里的获得方法，以减少插件冲突的可能性，这会导致实质生成概率与所配置的理想状态严重不符，严重的还会进一步导致其他问题！

同时，笔者也非常建议你参照原版附魔的获得方式，而不是一股脑地所有方式都可以获得，你应该保留一些特别稀有的附魔，只能通过村民交易，并设置较低的概率，以增加游戏趣味性。
{% endhint %}

* **obtaining.rarity：**&#x83B7;得该附魔的稀有度。

请打开 `plugins/EcoEnchants/rarity.yml` 文件，该选项与该文件有直接关联。

打开后我们可以看到如下内容：

```
rarities:
  common:
    table-probability: 30
    minimum-level: 1
    villager-probability: 10.5
    loot-probability: 12
    custom-color:
      enabled: false
      color: "&7"
  uncommon:
    table-probability: 20
    minimum-level: 5
    villager-probability: 9
    loot-probability: 16
    custom-color:
      enabled: false
      color: "&a"
  rare:
    table-probability: 20
    minimum-level: 15
    villager-probability: 7.5
    loot-probability: 18
    custom-color:
      enabled: false
      color: "&9"
  epic:
    table-probability: 10
    minimum-level: 16
    villager-probability: 6
    loot-probability: 20
    custom-color:
      enabled: false
      color: "&5"
  legendary:
    table-probability: 8
    minimum-level: 20
    villager-probability: 4.5
    loot-probability: 15
    custom-color:
      enabled: false
      color: "&6"
  special:
    table-probability: 2
    minimum-level: 30
    villager-probability: 3
    loot-probability: 5
    custom-color:
      enabled: false
      color: "&d"
  veryspecial:
    table-probability: 1
    minimum-level: 30
    villager-probability: 1.5
    loot-probability: 2
    custom-color:
      enabled: false
      color: "&4"
  artifact:
    table-probability: 5
    minimum-level: 1
    villager-probability: 9
    loot-probability: 5
    custom-color:
      enabled: false
      color: "&8"

```

按照 **Yaml 语法学习** 一节的内容，我们可知 `common、 uncommon、rare、epic、legendary、special、veryspecial、artifact` 均为 `rarities` 下的子键（子选项），这也是我们需要在 `obtaining.raitiy` 中将会填写的内容，如所给示例即为 `epic`。

稀有度不仅可以显示在附魔上，它更重要功能是决定玩家能够获得这个附魔的概率。

各个稀有度下又有以下子选项：

* **table-probability：**&#x9644;魔台获得此稀有度附魔的概率。
* **minimum-level：**&#x9644;魔台获得此稀有度附魔的最低等级。
* **villager-probability：**&#x6751;民交易中含有此稀有度附魔的概率。
* **loot-probability：**&#x5B9D;箱中含有此稀有度附魔书的概率。
* **custom-color.enabled：**&#x662F;否开启稀有度附魔自定义颜色。
* **custom-color.color：**&#x81EA;定义颜色的代码。

我们继续挖掘一般自定义附魔配置：

* **general-config.targets：**&#x53EF;以拥有该附魔的物品，如何填写请见下一节。
* **general-config.flags：**&#x9644;魔的标签，值按 **List** 格式填写。

有如下几个标签可以设置：

* **hard-cap-ignore：**&#x65E0;视附魔上限。
* **no-cooldown-message：**&#x4E0D;显示附魔冷却提示。（仅限卷轴类型附魔）
* **no-use-message：**&#x4E0D;显示附魔使用提示。（仅限卷轴类型附魔）

继续一般自定义附魔配置：

* **general-config.grindstoneable：**&#x662F;否可以使用砂轮将该附魔祛除并获得经验值。
* **general-config.disabled-in-worlds：**&#x9644;魔禁用的世界，值按 **List** 格式填写。
* **general-config.requirements：**&#x9644;魔的使用条件，具体如下：

```
general-config:
  requirements:
    list:
      - 'placeholder-greater-than:%ecoskills_enchanting%:20'
    not-met-lore: 
      - ""
      - "&c你必须达到 &e附魔 XX"
      - "&c才能使用 &d狂怒&c 附魔" 
```

其中：

* **general-config.requirements.list：**&#x5177;体的条件列表，以 **List** 格式填写，其中各个值中又按照 `'条件类型:条件内容'` 填写。

{% hint style="info" %}
想一想，为什么前后要加 **'** 符号，如果你不知道，请再次阅读 **Yaml 语法格式** 一节。
{% endhint %}

* **general-config.requirements.not-met-lore：**&#x6761;件未满足时给附魔物品自动加的 **Lore**。

{% hint style="info" %}
如果你不需要这个选项，还记得我们在 **Yaml 语法学习** 所讲的吗，试试填写 **not-met-lore: \[]**，这样无论条件是否满足，附魔物品都不会被自动加上 **Lore**。
{% endhint %}

条件类型有如下几种：

* **has-permission：**&#x662F;否拥有条件内容的权限节点，条件内容填写权限节点即可。
* **placeholder-equals：**&#x53D8;量符（Placeholders）是否等于某个值，条件内容按照 `变量符:要求的值` 格式填写。例如 `%ecoskills_enchanting%:20` 即代表 `%ecoskills_enchanting%` 变量符的值必须为 **20** 时条件才会被满足。
* **placeholder-greater-than：**&#x5927;于等于，详见上。
* **placeholder-less-than：**&#x5C0F;于等于，详见上。

继续一般自定义附魔配置：

* **levels：**&#x5404;个等级的附魔的效果，以 **List** 格式填写。

我们再次阅读开头所给的示例：

```
  levels:
    - effects:
        - id: potion_effect
          args:
            effect: speed
            level: 1
            duration: 30
            apply_to_player: true
          triggers:
            - take_damage
      conditions: [ ]
    - effects:
        - id: potion_effect
          args:
            effect: speed
            level: 2
            duration: 30
            apply_to_player: true
          triggers:
            - take_damage
      conditions: [ ]
```

{% hint style="info" %}
想一想，为什么各个 **effect** 前会有一个 **-** 符号，如果你不知道，请再次阅读 **Yaml 语法学习** 一节。
{% endhint %}

以上铺垫了这么多，这里才是这个关卡最终 **Boss** 的存在，我们在 简绍  一节已经提及，所有 **EcoX** 都是围绕自定义技能（The Effect System）的，这里就是设置拥有该附魔的物品将会触发的技能了，我们这里暂时不揭露这个神秘的内容，阅读第二章，我们将会一一揭晓它神秘的面纱。


# 9.x 版本

自定义附魔配置可以在 `plugins/EcoEnchants/enchants` 文件夹中找到，每个附魔的配置是独立的，其文件名称就是附魔 **id**，其余大体仍相同。

```
display-name: "烈焰挖掘"
description: "&a%placeholder%% &8几率挖掘 3 x 3 范围的方块."
placeholder: "5 * %level%"
type: normal

targets:
  - pickaxe
conflicts:
  - drill
  - vein
rarity: legendary
max-level: 3

tradeable: true
discoverable: true
enchantable: true

effects:
  - effects:
      - id: create_explosion
        args:
          power: 0
          amount: 1
      - id: mine_radius
        args:
          radius: 1
          blacklisted_blocks: [ ]
          check_hardness: true
          disable_on_sneak: true
    args:
      chance: "5 * %level%"
      cooldown: 0.05
      send_cooldown_message: false
    triggers:
      - mine_block
conditions: [ ]
```

我们可以看出它由以下部分组成：

* **display-name**：附魔的显示名称。
* **description**: 附魔的描述，玩家可以通过 **/enchantinfo** 指令打开的菜单查询到，也可以通过开启 `plugins/EcoEnchants/config.yml` 中的 `display.descriptions.enabled` 选项，将其修改为 `true` 即可。

{% hint style="info" %}
本教程将引用一种新的描述格式，以上文的 `display.descriptions.enabled` 为例，它在配置中实际显示如下：
{% endhint %}

<figure><img src="https://1370664756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FObkS9GBaWEafgp7ydEEU%2Fuploads%2FRW9apRWeS2wgZ9aJdWbJ%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-09-01%20111715.png?alt=media&amp;token=8f7756be-9ccc-4b87-9b2a-805263317fea" alt=""><figcaption></figcaption></figure>

* **placeholder**：变量符公式，可以在上一个选项中使用 `%placeholder%` 显示变量符中的内容，具体请见 **数值语法学习**。

{% hint style="info" %}
effects 和这里的变量符公式不是互通的，因此如果你错误的设置这两个选项会导致附魔实际效果和现实的效果不一致。

这里所给的示例是几率类型的技能，这往往是小白的灾难区，因为你显示给玩家的是 50% 几率中的 50 数字，而实际技能配置（effects选项中），你设置的应该是 0.5 小数。
{% endhint %}

* **type**：附魔的类型。

请打开 `plugins/EcoEnchants/types.yml` 文件，该选项与该文件有直接关联。

打开后我们可以看到如下内容：

```
types:
  - id: normal
    format: "&7"
    limit: -1
    high-level-bias: 0
```

我们可以看出各个附魔类型由以下部分组成：

* **id**：附魔类型的 **id**。
* **format**：附魔类型的颜色代码。
* **limit**：一件物品拥有该附魔类型的附魔的上限，使用 **-1** 代表无限制。
* **high-level-bias**：该附魔类型高等级生成偏差。填写 **0-1** 之间数值。

继续：

* **rarity**：附魔的品质。

请打开 `plugins/EcoEnchants/rarity.yml` 文件，该选项与该文件有直接关联。

打开后我们可以看到如下内容：

```
rarities:
  - id: common
    display-name: "普通"
    table-chance: 30
    minimum-level: 1
    villager-chance: 10.5
    loot-chance: 12
```

稀有度不仅可以显示在附魔上，它更重要功能是决定玩家能够获得这个附魔的概率。

我们可以看出各个附魔品质由以下部分组成：

* **id：**&#x9644;魔品质的 **id**。
* **display-name**：附魔品质的显示名称。
* **table-chance**：附魔台中随机到获得该附魔的概率。
* **minimum-level：**&#x9644;魔台获得此稀有度附魔的最低等级。
* **villager-chance：**&#x6751;民交易中含有此稀有度附魔的概率。
* **loot-chance：**&#x5B9D;箱中含有此稀有度附魔书的概率。

继续：

* **max-level**：该附魔的最高等级。
* **tradeable**：该附魔是否会被村民交易随机到。
* **discoverable**：该附魔是否会被宝箱随机到。
* **enchantable**：该附魔是否会被附魔台随机到。
* **effects/conditions：**&#x54;he Effect System（自定义技能系统）的内容，将在后文介绍。


# 10.x 版本

COMING SOON...


# EcoX 物品语法学习

与其他插件不同，**EcoX** 系列插件有自己的一套表达物品的语法格式。

## 基础语法格式

### 原版物品

你只需要填写这个原版物品的 `material`（物品英语ID）即可。例如 `apple` 代表原版里的 **苹果**。

### EcoX 物品

我们需要表达 **EcoX** 系列插件内的某个物品时，可以使用 插件名称:物品id 的格式来表达它，例如 `ecoitems:superior_sword` 就表示 **EcoItems** 里，id为 `superior_sword` 的一个物品。

### 第三方插件物品

使用 `namespace:id` 的格式，以 **ItemsAdder** 为例，如 `itemsadder:test_sword`。本篇教程提及的插件几乎用不到，因为它们本身就是修改物品的插件，这往往是 **EcoCrate**（该作者的抽奖箱插件）会用到的语法格式。

### NBT 的原版物品

需要满足 `json` 格式。例如：`{id:"stone",Count:3,tag:{Name:"your name"}}`。

## 修饰符

位于基础语法格式的后面，用于补充物品的相关信息。我们可以将添加的信息称之为修饰符，各个修饰符之间用空格隔开，修饰符可以在上述所有基础语法格式后使用。有如下几种的修饰符：

### 附魔

格式为 `附魔id:附魔等级`，可以通过使用多个附魔修饰符来实现该物品同时多个附魔。

### 头颅材质

格式为 `texture:头颅 base64 码`，需要原版物品为 `player_head`。

{% hint style="info" %}
**如何获取头颅 base64 码？**

我推荐你前往 [Minecraft Player Head](https://minecraft-heads.com/custom-heads) 网站查找 **自定义头颅（Custom Head）**，你可以在这里找到它的 **meta**（注意是自定义头颅不是玩家头颅！）:

然后将它复制到你的头颅材质修饰符中。
{% endhint %}

![](https://3147728479-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzI4IWT4LcIuTsOKXzl4o%2Fuploads%2FN43A5sxgrC3XbTndMYG9%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-03-22%20123913.png?alt=media\&token=4dad6457-7ec6-44d5-b0a8-58ab4551c725)

### 重铸词条

使得该物品自带某个重铸词条，格式为 `reforge:重铸id`。

### 物品名称

使得该物品名称修改为你所设置的值，本篇教程提及的插件几乎用不到，因为它们普遍自带物品名称修改功能，这往往是 **EcoCrate**（该作者的抽奖箱插件）会用到的修饰符。

### 物品标签

包括：

* HIDE\_ATTRIBUTES：隐藏物品的属性信息（如+1攻击）。
* HIDE\_DESTROYS：隐藏物品可以破坏的方块信息（在服务器中我们几乎不会用到这个，所以可以忽视）。
* HIDE\_DYE：隐藏物品的染色（如染色后的皮革盔甲）。
* HIDE\_ENCHANTS：隐藏物品的附魔信息。
* HIDE\_PLACED\_ON：隐藏方块可以放置到什么上面信息（同样在服务器中几乎用不到）。
* HIDE\_POTION\_EFFECTS：隐藏药水信息（如1:00生命回复2）。
* HIDE\_UNBREAKABLE：隐藏不可破坏（无限耐久）信息。

以上物品标签在实际填写时建议小写以增加整体配置美观感。

### 不可破坏

格式为：`unbreakable`。顾名思义，添加该修饰符后物品无耐久消耗。

### CustomModelData

如果你不知道这是什么，建议别乱搞了。格式为：`custom-model-data:id`。

{% hint style="info" %}
你能说说下面这个物品语法的含义吗？

ecoitems:enlightened\_blade razor:4 unbreaking:3 criticals:2 fire\_aspect:2 reforge:mighty unbreakable hide\_attributes custom-model-data:2
{% endhint %}

## 何处会用到？

### 合成配方

在涉及物品的 **EcoX** 插件配置中，往往会有合成配方的选项，此时指代合成配方内的合成材料即需要使用此物品语法格式。

例如：

```
recipe:
    - ""
    - "ecoitems:toughened_string"
    - ""
    - ""
    - "netherite_chestplate"
    - ""
    - "ecoitems:arachnid_oculus"
    - ""
    - "ecoitems:arachnid_oculus"
```

其中，`ecoitems:toughened_string` 和 `ecoitems:arachnid_oculus` 很明显是 **EcoX** 物品，而 `netherite_chestplate` 为原版的下界合金胸甲物品。辨别它们的方法其实也很简单，只需要看看它们有没有 `:` 符号即可。

### 目标文件（target.yml）

部分不涉及物品内容的插件有该文件，用于指定某个附魔、重铸等只能在某个物品上使用。

以下是一个 `target.yml` 的示例：

```
pickaxe:
  slot: hands
  items: 
    - wooden_pickaxe
    - stone_pickaxe
    - iron_pickaxe
    - golden_pickaxe
    - diamond_pickaxe
    - netherite_pickaxe
    - ecoitems:rookie_pickaxe
```

其中，`pickaxe` 键为一个目标选择器的id，以此格式可以添加无数多的目标选择器。在此键下面还有如下子键（选项）：

* slot：指代这个目标选择器在物品于何处时处于成功验证的状态。可以填写 `hands`（在手上，包括主手和副手），`armor`（在身上，盔甲栏）。
* items：以 **List** 类型填写我们已经学习的 **EcoX** 物品语法格式以指代该附魔或者重铸等可以在哪些物品上使用。

**重要：在原版物品id格式前面添加 `*` 符号即可指代所有这种原版物品，无需再单独填写自定义物品。**

## 高级语法格式

以下高级语法格式只能在合成配方处使用。

### 指代数量

在物品语法格式的后面添加一个空格，再在空格后写上一个数字即可为其指代数量。例如 `string 64` 代表 **64** 个线。

### 保护性措施

一行合成材料可以包含多个合成材料，在它们中间用两个空格隔开，再在两个空格中间输入 `?` 符号即可为其添加保护性措施，这样如果前面的物品不存在，那么插件将会用后面的物品。这个语法格式实际上对于服主并没有什么用，只是为了方便开发者提供默认配置而已。例如 `ecoitems:arachnid_oculus ? nether_star 2` 代表如果 `ecoitems:arachnid_oculus` 不存在，那么将这个合成材料转变为后面的 **2** 个下界之星。

### 或

与 **保护性措施** 几乎一致，但是中间输入 `||` 符号隔开，这样只要满足多个合成材料中的其中一个，即可视为该合成材料是满足的。例如 `netherite_chestplate || diamond_chestplate` 代表下界合金胸甲和钻石胸甲都是可以用于该格的合成材料。

## 在 ShopGUIPlus 中售卖或者回收 EcoX 系列插件的物品

```
type: item
item:
  eco: "ecoitems:holy_flesh"
  quantity: 1
sellPrice: 7500
slot: 27
```


# 数值语法学习

**EcoX** 系列插件在数值选项时可以使用公式。

## 数值选项

在 **Yaml 语法学习** 一节中，我们已经介绍了大多数配置选项都是 `键: 值` 语法。当某个键的值只能是数字时，我们称之为数值选项。

大部分含有以下关键词字眼的选项都是数值选项：

* amount，例如 `amount: 1`。
* value，例如 `value: %level%`。

你也可以参考教程所给的示例配置，一般来说示例配置对应选项的值如果就是一个数字，那么往往就是数值选项。

## 公式

在数值选项中可以使用 `Placeholders` 的变量符，例如你可以制作根据玩家金币数量决定伤害的武器，同时涉及内部等级的（例如附魔等级、宠物等级、技能等级等），往往插件自带 `%level%` 变量符。

+：加号。例如 `1+2`。

-：减号。例如 `5-3`。

\*：乘号。

/：除号。

你可以使用 `( )` 符号来优先处理公式中的某个部分。例如在 `1 + 2 * 3` 中，根据常识很明显正确的计算步骤是先算乘法再算加法，但你可以使用 `(1 + 2) *3` 来实现先算加法，再算乘法。公式中不能使用中括号和大括号，你可以使用 `(( ))` 符号来实现中括号。


# 合成配方

合成配方的设置往往由 `craftable` 和 `recipe` 两个选项组成。第一个控制该物品是否可以合成，第二个则设置合成配方。

## 格式

下面为 `recipe` 选项的一个示例：

```
recipe:
    - ""
    - "ecoitems:toughened_string 8 ? string 64"
    - ""
    - ""
    - "netherite_chestplate || diamond_chestplate"
    - ""
    - "ecoitems:arachnid_oculus ? nether_star 2"
    - ""
    - "ecoitems:arachnid_oculus ? nether_star 2"
```

一共为 **9** 行的 List 类型，每一行指代 **3 x 3** 合成配方中的第 **X** 格，**X** 为其行数。留空值即为该格无物品。每行应该填写的物品语法格式，具体如何填写请查看前面一节。

## 可选选项

与 `recipe` 同级，我们可以通过下面这个选项控制该物品合成配方合成后所给的数量：

```
recipeGiveAmount: 4
```

与 `recipe` 同级，我们可以通过下面这个选项控制该物品合成配方所需要的权限：

```
recipe-permission: test.1
```


# 教程阅读说明

我们前文已经学习了 自定义附魔 的相关知识，接下来我将继续为你讲解 EcoX 系列其他插件关于 **The Effect System** 的相关知识，但由于插件是一个系列的，大部分内容都是一致的，为了减少阅读时间成本，本篇教程对于重复内容最多出现 **2** 次，第三次开始将不再赘述，只提示读者“前文有”。

如无特别说明，本教程的时长都是以原版的 **tick** 为单位，20 tick = 1 秒。

为区分原版和 **EcoSkills** 等插件带来的属性，本篇教程对原版的属性统称为原版属性，否则只称为属性或者自定义属性。


# 护身符


# 5.99.0 版本以前

自定义护身符配置可以在 `plugins/Talismans/talismans.yml` 中找到，它的一般配置如下：

```
talismans:
- <第一个护身符配置>
- <第二个护身符配置>
```

其中，`talismans` 为一个 **List** 类型的自定义护身符的键，所有自定义护身符的一般配置如下：

```
  - id: zombie_taliman
    name: "&f僵尸护身符"
    description:
      - "&f对僵尸造成额外&a 5% &f的伤害."
    item: zombie_head
    craftable: false
    recipe: []
    effects:
      - id: "damage_multiplier"
        args:
          multiplier: 1.05
        triggers:
          - melee_attack
          - bow_attack
          - trident_attack
        filters:
          entities: 
            - zombie
    conditions: []
```

{% hint style="info" %}
想一想，为什么这里的开头 **-** 符号前面有 **2** 个空格，而前文的自定义附魔却一个空格也没有，是哪个错了，还是它们都是正确的？如果你不知道，请重新阅读 **Yaml 语法学习** 一节。
{% endhint %}

我们可以看出它由以下部分组成：

* **id：**&#x62A4;身符的 **ID**，这里的 **ID** 并没有什么特别的要求，只是不能带有空格。因为自定义附魔的注册到MC原版的附魔里的，而这里没有，所以要求不多。
* **name：**&#x62A4;身符的名称，玩家能够看到的。
* **description：**&#x62A4;身符的介绍，玩家能够看到的。
* **item：**&#x62A4;身符的物品语法。
* **craftable：**&#x8BE5;护身符是否可以合成。
* **recipe：**&#x62A4;身符的合成配方。
* **effects/conditions：**&#x54;he Effect System（自定义技能系统）的内容，将在后文介绍。


# 5.99.0 以后的 5.x 版本

自定义护身符配置可以在 `plugins/Talismans/talismans` 文件夹中找到，它的文件名称即为 **护身符id**，其一般配置如下：

```
name: "&a弓箭手护身符 I"
description:
  - "&8使用弓箭造成额外 10% 的伤害"
item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDBmOGRmYTVlZmM3NTYzMGNlMGRmNDBhNDliOGY1OWJjMjIyMTRkZTk3ZTNmYjQ0YjNjNTZlOGE5YzhhNTZiNiJ9fX0="
craftable: true
recipe:
  - bow
  - crossbow
  - bow

  - crossbow
  - ecoitems:talisman_core_1 ? ender_eye
  - crossbow

  - bow
  - crossbow
  - bow
effects:
  - id: "damage_multiplier"
    args:
      multiplier: 1.1
    triggers:
      - bow_attack
conditions: []
```

我们可以看出它由以下部分组成：

* **name：**&#x62A4;身符的名称，玩家能够看到的。
* **description：**&#x62A4;身符的介绍，玩家能够看到的。
* **item：**&#x62A4;身符的物品语法。
* **craftable：**&#x8BE5;护身符是否可以合成。
* **recipe：**&#x62A4;身符的合成配方。
* **effects/conditions：**&#x54;he Effect System（自定义技能系统）的内容，将在后文介绍。


# 6.x 版本

COMING SOON


# 盔甲

## 盔甲

自定义盔甲配置可以在 `plugins/EcoArmor/sets` 文件夹中找到，它的文件名称即为 **盔甲id**，其一般配置如下：

```
conditions: []
effects:
  - id: bonus_health
    args:
      health: 10
  - id: damage_multiplier
    args:
      multiplier: 0.9
    triggers:
      - melee_attack
  - id: permanent_potion_effect
    args:
      effect: regeneration
      level: 1
advancedEffects:
  - id: bonus_health
    args:
      health: 20
  - id: hunger_multiplier
    args:
      multiplier: 0.5
  - id: permanent_potion_effect
    args:
      effect: regeneration
      level: 1
sounds:
  equip:
    enabled: false
    sound: ""
    volume: 1
    pitch: 1
  advancedEquip:
    enabled: false
    sound: ""
    volume: 1
    pitch: 1
  unequip:
    enabled: false
    sound: ""
    volume: 1
    pitch: 1
advancedLore:
  - ''
  - "<gradient:f12711>&lADVANCED BONUS</gradient:f5af19>"
  - "&8» &dGet 20 more hearts"
  - "&8» &dReduce hunger loss by 50%"
  - "&8&oRequires full set to be worn"
shard:
  item: prismarine_shard unbreaking:1 hide_enchants
  name: "<GRADIENT:f12711>Advancement Shard:</GRADIENT:f5af19> &5Angelic"
  lore:
    - "&8Drop this onto &5Angelic Armor"
    - "&8to make it <GRADIENT:f12711>Advanced</GRADIENT:f5af19>."
  craftable: false
  recipe:
    - prismarine_shard
    - ecoarmor:set_angelic_helmet
    - prismarine_shard
    - ecoarmor:set_angelic_chestplate
    - nether_star
    - ecoarmor:set_angelic_leggings
    - prismarine_shard
    - ecoarmor:set_angelic_boots
    - prismarine_shard
helmet:
  item: leather_helmet color:#bd15a9 hide_dye
  name: "&5Angelic Helmet"
  advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Helmet"
  effectiveDurability: 768
  effects: []
  advancedEffects: []
  conditions: []
  lore:
    - "&5&lANGELIC SET BONUS"
    - "&8» &dGain 10 more hearts"
    - "&8» &dPermanent regeneration"
    - "&8» &dDeal 10% less melee damage"
    - "&8&oRequires full set to be worn"
    - ''
    - "&fTier: %tier%"
    - "&8&oUpgrade with an Upgrade Crystal"
  craftable: true
  defaultTier: default
  recipe:
    - netherite_block
    - ecoitems:enchanted_ender_eye ? netherite_ingot
    - diamond_block
    - air
    - golden_helmet
    - air
    - gold_block
    - ecoitems:armor_core ? enchanted_book mending:1
    - gold_block
chestplate:
  item: leather_chestplate color:#bd15a9 hide_dye
  name: "&5Angelic Chestplate"
  advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Chestplate"
  effectiveDurability: 1024
  effects: []
  advancedEffects: []
  conditions: []
  lore:
    - "&5&lANGELIC SET BONUS"
    - "&8» &dGain 10 more hearts"
    - "&8» &dPermanent regeneration"
    - "&8» &dDeal 10% less melee damage"
    - "&8&oRequires full set to be worn"
    - ''
    - "&fTier: %tier%"
    - "&8&oUpgrade with an Upgrade Crystal"
  craftable: true
  defaultTier: default
  recipe:
    - netherite_block
    - ecoitems:enchanted_ender_eye ? netherite_ingot
    - diamond_block
    - air
    - golden_chestplate
    - air
    - gold_block
    - ecoitems:armor_core ? enchanted_book mending:1
    - gold_block
elytra:
  item: elytra
  name: "&5Angelic Elytra"
  advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Elytra"
  effectiveDurability: 1024
  effects: []
  advancedEffects: []
  conditions: []
  lore:
    - "&5&lANGELIC SET BONUS"
    - "&8» &dGain 10 more hearts"
    - "&8» &dPermanent regeneration"
    - "&8» &dDeal 10% less melee damage"
    - "&8&oRequires full set to be worn"
    - ''
    - "&fTier: %tier%"
    - "&8&oUpgrade with an Upgrade Crystal"
  craftable: true
  defaultTier: default
  recipe:
    - netherite_block
    - ecoitems:enchanted_ender_eye ? netherite_ingot
    - diamond_block
    - air
    - elytra
    - air
    - gold_block
    - ecoitems:armor_core ? enchanted_book mending:1
    - gold_block
leggings:
  item: leather_leggings color:#bd15a9 hide_dye
  name: "&5Angelic Leggings"
  advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Leggings"
  effectiveDurability: 1024
  effects: []
  advancedEffects: []
  conditions: []
  lore:
    - "&5&lANGELIC SET BONUS"
    - "&8» &dGain 10 more hearts"
    - "&8» &dPermanent regeneration"
    - "&8» &dDeal 10% less melee damage"
    - "&8&oRequires full set to be worn"
    - ''
    - "&fTier: %tier%"
    - "&8&oUpgrade with an Upgrade Crystal"
  craftable: true
  defaultTier: default
  recipe:
    - netherite_block
    - ecoitems:enchanted_ender_eye ? netherite_ingot
    - diamond_block
    - air
    - golden_leggings
    - air
    - gold_block
    - ecoitems:armor_core ? enchanted_book mending:1
    - gold_block
boots:
  item: leather_boots color:#bd15a9 hide_dye
  name: "&5Angelic Boots"
  advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Boots"
  effectiveDurability: 1024
  effects: []
  advancedEffects: []
  conditions: []
  lore:
    - "&5&lANGELIC SET BONUS"
    - "&8» &dGain 10 more hearts"
    - "&8» &dPermanent regeneration"
    - "&8» &dDeal 10% less melee damage"
    - "&8&oRequires full set to be worn"
    - ''
    - "&fTier: %tier%"
    - "&8&oUpgrade with an Upgrade Crystal"
  craftable: true
  defaultTier: default
  recipe:
    - netherite_block
    - ecoitems:enchanted_ender_eye ? netherite_ingot
    - diamond_block
    - air
    - golden_boots
    - air
    - gold_block
    - ecoitems:armor_core ? enchanted_book mending:1
    - gold_block
```

我们可以看出它由以下部分组成：

* **id：**&#x76D4;甲的 **id**。
* **conditions/effects：**&#x54;he Effect System（自定义技能系统）的内容，将在后文介绍。这里的选项只会在玩家穿戴 **全套盔甲** 后才会被激活。
* **advancedEffects：**&#x540C;上。这个选项只会在玩家穿戴全套 **升级后的盔甲** 才会被激活。
* **advancedLore：**&#x5347;级后的盔甲的 **Lore** 末尾补充的 **Lore** 的内容。往往填写升级效果即可。
* **helmet/chestplate/elytra/leggings/boots：**&#x5206;别为 **头盔、胸甲、鞘翅、护腿、靴子** 的内容，不能删减。

**头盔、胸甲、鞘翅、护腿、靴子** 的键下又由以下子键组成：

* **item：**&#x76D4;甲的物品语法。
* **name：**&#x76D4;甲的物品名称，玩家能够看到的。
* **advancedName：**&#x5347;级后的盔甲的物品名称。
* **effectiveDurability：**&#x76D4;甲的耐久次数。
* **effects/advancedEffects/conditions：**&#x89C1;上，不再赘述。这里是单个盔甲激活的选项。套装和单个不冲突，激活套装时单个的效果不会消失。
* **lore：**&#x76D4;甲的 **Lore**。
* **craftable：**&#x8BE5;盔甲是否可以合成。
* **recipe：**&#x76D4;甲的合成配方。
* **defaultTier：**&#x76D4;甲的品质，具体信息见下。

## 盔甲升级

盔甲升级通过升级碎片进行，可以获得 `advancedEffect` 所设置的效果，并在物品 Lore 末尾添加 `advancedLore` 的内容。

## 盔甲品质

盔甲品质通过升级水晶进行，可以获得对应品质下所设置的盔甲属性，具体见下：

自定义盔甲品质配置可以在 `plugins/EcoArmor/tiers` 文件夹中找到，它的文件名称即为 **盔甲配置id**，其一般配置如下

```
id: ancient
display: "&6&k!!&r <GRADIENT:ffb347>&lANCIENT</GRADIENT:ffcc33>&r &6&k!!&r"
requiresTiers: []
crystal:
  item: end_crystal
  name: "<GRADIENT:ffb347>Ancient Upgrade Crystal</GRADIENT:ffcc33>"
  craftable: false
  recipe:
    - air
    - netherite_block
    - air
    - netherite_block
    - ecoarmor:upgrade_crystal_cobalt
    - netherite_block
    - air
    - netherite_block
    - air
  giveAmount: 1
  lore:
    - "&8Drop this onto an armor piece"
    - "&8to set its tier to:"
    - "&6&k!!&r <GRADIENT:ffb347>&lANCIENT</GRADIENT:ffcc33>&r &6&k!!&r"
properties:
  helmet:
    armor: 3
    toughness: 5
    knockbackResistance: 0
    speedPercentage: 5
    attackSpeedPercentage: 5
    attackDamagePercentage: 0
    attackKnockbackPercentage: 0
  chestplate:
    armor: 8
    toughness: 5
    knockbackResistance: 0
    speedPercentage: 5
    attackSpeedPercentage: 5
    attackDamagePercentage: 0
    attackKnockbackPercentage: 0
  elytra:
    armor: 3
    toughness: 5
    knockbackResistance: 0
    speedPercentage: 5
    attackSpeedPercentage: 5
    attackDamagePercentage: 0
    attackKnockbackPercentage: 0
  leggings:
    armor: 6
    toughness: 6
    knockbackResistance: 0
    speedPercentage: 5
    attackSpeedPercentage: 5
    attackDamagePercentage: 0
    attackKnockbackPercentage: 0
  boots:
    armor: 3
    toughness: 6
    knockbackResistance: 0
    speedPercentage: 5
    attackSpeedPercentage: 5
    attackDamagePercentage: 0
    attackKnockbackPercentage: 0
```

* **id：**&#x76D4;甲品质的 **id**。
* **display：**&#x76D4;甲品质显示给玩家的名称。
* **requiresTiers：**&#x8BE5;盔甲品质升级前盔甲至少达到的盔甲品质。
* **crystal：**&#x4E3A;升级水晶物品的相关设置，与上面盔甲本身对应选项近乎一样，不再赘述。其中 `giveAmount` 是升级消耗的水晶物品数量。
* **properties：**&#x8BE5;盔甲品质给盔甲的属性。下面的 **helmet/chestplate/elytra/leggings/boots** 子选项分别为 **头盔、胸甲、鞘翅、护腿、靴子** 的具体属性，不能删减。

其中：

* **armor：**&#x76D4;甲属性。
* **toughness：**&#x76D4;甲韧性属性。
* **knockbackResistance：**&#x6297;击退属性。
* **speedPercentage：**&#x901F;度加成百分比。
* **attackSpeedPercentage：**&#x653B;击速度加成百分比。
* **attackDamagePercentage：**&#x653B;击伤害加成百分比。
* **attackKnockbackPercentage：**&#x653B;击击退加成百分比。

有关盔甲的原版属性相关知识，你可以在 [**Minecraft Wiki**](https://minecraft.fandom.com/zh/wiki/%E7%9B%94%E7%94%B2) 上查看。




---

[Next Page](https://docs.superiormc.cn/llms-full.txt/1)

