本页阐释了一种高级 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 搭配使用,以创建更复杂的别名。
aliases:
- &map_and_compass
dropgroup: mapcompass
chance: 0.01%
drops:
- drop: MAP
- drop: COMPASS
otherblocks:
SAND:
- *map_and_compass
这可能有更多实际应用 (毕竟多次定义 mapcompass 掉落也是有点烦的)。 如果日后咱想到一个更实际的例子,咱会再来更新的。