Skip to content

Latest commit

 

History

History
157 lines (139 loc) · 4.64 KB

别名.md

File metadata and controls

157 lines (139 loc) · 4.64 KB

本页阐释了一种高级 YAML 技术——别名,这样就不用在 drops 文件中重复相同的参数或参数组,实现代码复用。别名通常放在 aliases 文件的 aliases" 部分中,虽然实际上放哪儿都行(

"别名" 可以用于任何 YAML 配置文件。

别名可以定义一个字符串、列表、数字甚至整个数据块,为其命名,以后只需写上该名称即可调用。调用别名时,甚至可以修改数据的子部分。

下面是一些示例:

简易示例

aliases:
    # 仅定义单个数据的别名示例
    - &environ [DAMAGE_ENTITY_EXPLOSION, DAMAGE_FIRE,  DAMAGE_CONTACT, DAMAGE_DROWNING, DAMAGE_FALL, DAMAGE_SUFFOCATION]

    # 定义数据方块的别名示例,使用先前定义的别名
    - &environDropNothing
      tool: *environ
      drop: NOTHING
      exclusive: 1 # 该掉落物与其他 exclusive 值不同的掉落物不会同时掉落


otherblocks:
    CREATURE_ZOMBIE:
        - &environDropNothing  # 停止怪物掉落 - 无自然掉落

        # 这边还可以放别的自定义掉落...

修改别名内容

在下述示例中,要部分修改别名时,可轻松在不同方块间复制相似配置。注意,<<:("合并键")可用于修改别名。

aliases:
        - &damageall
          tool: ALL
          drop: AIR
          damageattacker: 1

        - &dropnothing
          tool: ALL
          drop: NOTHING
          chance: 100

        - &defaultdroplow  # 该别名掉落默认物品的几率很小
          tool: ALL
          drop: DEFAULT
          chance: 5

        - &specitem  # 该别名专用于覆盖"工具"条件
          tool: ALL
          drop: DEFAULT
          chance: 100
          exclusive: 1

otherblocks:
#石头
    STONE:
        - *dropnothing
        - *damageall
        - *defaultdroplow
        - <<: *specitem
          tool: ANY_PICKAXE

    DIRT:
        - *dropnothing
        - *damageall
        - *defaultdroplow
        - <<: *specitem
          tool: ANY_SPADE

从修改的别名定义别名

下面这个示例又要更厉害一点。注意 &specitem-pick 是如何通过修改 &specitem 别名来定义的。

    # enelar 的原始示例
    别名:

    # 1) 直接空手撸,方块不变。(&damageall)
    # 2) 使用错误的工具时,方块不变。(&wrongtool)
    # 3) 使用镐,任何材质的镐都可掉落,总是掉落圆石。
    # 4) 否则干掉玩家。(用泥土、沙子、鱼、种子啥的乱七八糟的东西破坏的话) (&atata)

        - &wrongtool
          tool: ANY
          drop: DENY
          exclusive: wrong
        - &atata
          damageattacker: 20
          tool: ANY
          drop: NOTHING
          toolexcept: [ANY_SPADE, ANY_AXE, ANY_HOE, ANY_PICKAXE]
          replacementblock: DEFAULT
          message: "我超!用错物品了 23333 咱可不是在玩 RPG 啊对吧("
          exclusive: atata
        - &damageall
          tool: ALL
          drop: AIR
          replacementblock: DEFAULT
          message: "啊嘶——我的指头寄了!"
          damageattacker: 1
        - &defaultdroplow
          tool: ALL
          drop: DEFAULT
          chance: 5
        - &specitem
          tool: ALL
          drop: DEFAULT
          chance: 100
          exclusive: 1
        - &dropstone
          tool: ANY_PICKAXE
          drop: COBBLESTONE
          exclusive: 1

    COAL_ORE:
        - <<: *wrongtool
          toolexcept: ANY_PICKAXE
        - <<: *damageall
          damageattacker: 8
        - <<: *atata
        - <<: *dropstone
        - &specitem-pick 
          <<: *specitem
          tool: ANY_PICKAXE
          chance: 40
          permissions: race_a.COAL_ORE
        - <<: *specitem-pick
          chance: 60
          permissions: race_h.COAL_ORE
        - <<: *specitem-pick
          chance: 60
          permissions: race_t.COAL_ORE
        - <<: *specitem-pick
          chance: 5
          permissions: race_r.COAL_ORE

没咋看懂的话,这里是定义 &specitem-pick 的特定部分:

        - &specitem-pick # 注意:这个别名必须独占一行
          <<: *specitem  # 划重点,<<: 可以修改别名
          tool: ANY_PICKAXE # 将工具从 &specitem 的值 ALL 更改为 ANY_PICKAXE

与 DropGroups 搭配使用

别名也可以与 DropGroups 搭配使用,以创建更复杂的别名。

aliases:
  - &map_and_compass
    dropgroup: mapcompass
    chance: 0.01%
    drops:
      - drop: MAP
      - drop: COMPASS

otherblocks:
  SAND:
    - *map_and_compass

这可能有更多实际应用 (毕竟多次定义 mapcompass 掉落也是有点烦的)。 如果日后咱想到一个更实际的例子,咱会再来更新的。