Skip to content

Aliases (advanced YAML usage)

Eddie Louie edited this page Dec 21, 2016 · 7 revisions

YAML allows you to use an advanced tool called "aliases". These tricks work in any config file that's written in YAML.

Aliases allow you to define a string/list/number or even a whole block of data, give it a name and recall it later with just that name. You can even modify sub-sections of the data when recalling the alias.

Some examples follow:

Simple Example

aliases:
    # example of an alias that defines just a single piece of data
    - &environ [DAMAGE_ENTITY_EXPLOSION, DAMAGE_FIRE,  DAMAGE_CONTACT, DAMAGE_DROWNING, DAMAGE_FALL, DAMAGE_SUFFOCATION]

    # example of an alias that defines a block of data, using the previously defined alias
    - &environDropNothing
      tool: *environ
      drop: NOTHING
      exclusive: 1 # this means that if this drop occurs - none of the others will, unless they have the same number


otherblocks:
    CREATURE_ZOMBIE:
        - *environDropNothing  # stop mob farming - no environmental drops

        # continue with any other custom drops....

Modifying alias contents

The following example is designed to allow you to easily copy a similar config between different blocks whilst modifying a section of the alias. Note the use of <<: (a "merge key") as this is what allows you to modify the alias.

aliases:
        - &damageall
          tool: ALL
          drop: AIR
          damageattacker: 1
        - &dropnothing
          tool: ALL
          drop: NOTHING
          chance: 100
        - &defaultdroplow  # this alias has a low chance of dropping default item
          tool: ALL
          drop: DEFAULT
          chance: 5
        - &specitem  # this alias is being used specifically for overwriting the "tool" condition later
          tool: ALL
          drop: DEFAULT
          chance: 100
          exclusive: 1

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

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

Defining aliases from modified aliases

Again a more advanced example. Pay attention to how &specitem-pick is defined from a modification of the &specitem alias.

    # original example by enelar
    ALIASES:

    #1) With fingers - damage attacker, nothing changed with block. (&damageall)
    #2) On wrong tool - nothing changed with block. (&wrongtool)
    #3) On pickaxe, each race individual chance to drop, always drops cobblestone.
    #4) Kill player else. (Broken with dirt, sand, fish, seeds, etc) (&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: "WTF! Wrong item... Non RP playing..."
          exclusive: atata
        - &damageall
          tool: ALL
          drop: AIR
          replacementblock: DEFAULT
          message: "Oh, my fingers!"
          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

If you missed it here is the specific part defining &specitem-pick:

        - &specitem-pick # note: this alias name must be on it's own line
          <<: *specitem  # remember, <<: allows you to modify the alias
          tool: ANY_PICKAXE # change tool from &specitem's ALL value to ANY_PICKAXE

Use with DropGroups

Aliases can also be used with DropGroups to create more complex aliases.

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

otherblocks:
  SAND:
    - *map_and_compass

This likely has more practical applications (as you probably wouldn't want to define the mapcompass drop more than once. I might improve this example later with a more practical example if I think of one.

References

A nice reference with some advanced examples is shown in the SnakeYAML documentation here (aliases) and here (merges).

Alias nodes are described in the YAML specification here. A basic example is also shown in Example 2.24 on that page.