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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.superiormc.cn/ecox-doc/yi-ban-pei-zhi-ge-shi/ecox-wu-pin-yu-fa-xue-xi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
