# 基于列表自展开的物品

## 前置知识

* [shu-ju-data](https://cloudstack.gitbook.io/azureflow/he-xin-gong-neng/ji-chu-wu-pin-pei-zhi/shu-ju-data "mention")
* [yang-shi-display](https://cloudstack.gitbook.io/azureflow/he-xin-gong-neng/ji-chu-wu-pin-pei-zhi/yang-shi-display "mention")
* [lore-zi-dong-zhan-kai-lie-biao](https://cloudstack.gitbook.io/azureflow/get-started/xuan-ran-ji-zhi/lore-zi-dong-zhan-kai-lie-biao "mention")
* [lie-biao-list](https://cloudstack.gitbook.io/azureflow/get-started/supported-data-types/fu-he-shu-ju-lei-xing/lie-biao-list "mention")

## 示例

{% stepper %}
{% step %}

### 定义列表数据

首先，我们需要为物品定义一个数据列表，用于存储物品的属性值。

这里我们创建一个名为 `lores` 的列表，每个元素都是物品的一个属性，例如物理攻击、暴击伤害、暴击率，并且每个属性值可以用随机数生成。

示例配置如下：

```yaml
import:
  module:
    random: random

data:
  lores:
    - "物理攻击: " + random.int(100, 200)
    - "暴击伤害: " + random.int(100, 200)
    - "暴击率: " + random.int(10, 20)
```

这里，`random.int(100, 200)` 等语句表示每次生成该物品时，相关属性都会在指定范围内随机生成数值。
{% endstep %}

{% step %}

### Lore 中引用列表变量

为了让属性能够展示在物品上，我们在样式中使用 `display.lore` 配置项。通过 `${lores}` 语法，可以自动将 `lores` 列表内容逐行展开并显示。

示例配置如下：

```yaml
display:
  lore:
    - "物品属性："
    - "${lores}"
```

此时物品展示效果为：

<pre><code>物品属性：
<strong>物理攻击: 187
</strong>暴击伤害: 115
暴击率: 18
</code></pre>

`lores` 列表中的每一项都会单独成行显示。
{% endstep %}

{% step %}

#### 完整示例

在 AzureFlow/items/ 文件夹下，创建一个名为 `ExpandLoreItem.yml` 的文件，并写入如下内容：

```yaml
import:
  module:
    random: random

data:
  lores:
    - "物理攻击: " + random.int(100, 200)
    - "暴击伤害: " + random.int(100, 200)
    - "暴击率: " + random.int(10, 20)
 
display:
  material: golden_sword
  name: '&6自定义属性武器'
  lore:
    - "物品属性："
    - "${lores}"
 
internal:
  # 每个物品的唯一标识不一样，实际生成的值与你的物品可能不一样
  uuid: 8fa8dc36-3a9b-4e10-8145-d7eacfa2370f
  alias: [expand_lore_item]
```

保存文件后，回到服务器，输入 `af reload` 重载插件，再输入 `af get expand_lore_item` 即可获得该物品。
{% endstep %}
{% endstepper %}

## 效果说明

只需在 `display.lore` 使用 `${lores}`，列表中的内容会自动一行一属性展示，无需手动编写每一行。

这样可以极大地简化多属性物品的制作流程。

## 总结

通过上述方法，可以轻松实现物品属性的自动展开，让自定义物品更具丰富表现力。

你还可以根据需要，扩展 `lores` 列表的内容，实现更多属性或效果展示。

如需更复杂的逻辑，比如属性增减、条件显示，也可以在 `data` 或 `action` 配置中结合其他功能实现。\\
