> For the complete documentation index, see [llms.txt](https://docs.superiormc.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.superiormc.cn/ecox-doc/yi-ban-pei-zhi-ge-shi/ecox-wu-pin-yu-fa-xue-xi.md).

# 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
```
