Custom Models

In this page you will learn how to create custom models for your Waystones

name: "Regular"
components:
  - type: block
    offset:
      x: 0
      y: 0
      z: 0
    data:
      'waystone_type:server,private,region,public':
        type: 'NOTE_BLOCK'
        break-time-tick: 30
      'waystone_type:server_normal,private_normal,region_normal,public_normal':
        type: 'CHISELED_STONE_BRICKS'
        break-time-tick: 30
      'waystone_type:server_nether,private_nether,region_nether,public_nether':
        type: 'NETHER_BRICKS'
        break-time-tick: 30
      'waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        break-time-tick: 30
        type:
          - 'PURPUR_PILLAR'
          - 'CHISELED_SANDSTONE'
  # pillar holder
  - type: block
    offset:
      x: 0
      y: 1
      z: 0
    data:
      '*':
        type: 'BARRIER'
        break-time-tick: 30
  # foot
  - type: block
    offset:
      x: 0
      y: 2
      z: 0
    data:
      'waystone_type:server,server_normal,private,private_normal,region,region_normal,public,public_normal':
        break-time-tick: 30
        type:
          - 'SMOOTH_STONE_SLAB'
          - 'STONE_SLAB'
      'waystone_type:server_nether,private_nether,region_nether,public_nether':
        type: 'NETHER_BRICK_SLAB'
        break-time-tick: 30
      'waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        break-time-tick: 30
        type:
          - 'PURPUR_SLAB'
          - 'SANDSTONE_SLAB'
  # top
  - type: armorstand
    offset:
      x: 0.5
      y: 1.7
      z: 0.5
    data:
      'waystone_type:server,server_normal,private,private_normal,region,region_normal,public,public_normal':
        helmet:
          type: POLISHED_ANDESITE
        small: true
      'waystone_type:server_nether,private_nether,region_nether,public_nether':
        helmet:
          type: NETHER_BRICKS
        small: true
      'waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        helmet:
          # You can use ; to detect which material is available on the server
          type: PURPUR_BLOCK;END_STONE
        small: true
  # cap
  - type: armorstand
    offset:
      x: 0.5
      y: 0.67
      z: 0.5
    data:
      'waystone_type:server,server_normal,private,private_normal,region,region_normal,public,public_normal':
        helmet:
          type: POLISHED_ANDESITE
      'waystone_type:server_nether,private_nether,region_nether,public_nether':
        helmet:
          type: NETHER_BRICKS
      'waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        helmet:
          type: PURPUR_BLOCK;END_STONE
  # top pillar
  - type: armorstand
    offset:
      x: 0.5
      y: -0.48
      z: 0.5
    data:
      'state:active waystone_type:server,server_normal,server_the_end,server_nether':
        helmet:
          type: DIAMOND_BLOCK
      'state:active waystone_type:public,public_normal,public_the_end,public_nether':
        helmet:
          type: GOLD_BLOCK
      'state:active waystone_type:region,region_normal,region_the_end,region_nether':
        helmet:
          type: REDSTONE_BLOCK
      'state:active waystone_type:private,private_normal,private_the_end,private_nether':
        helmet:
          type: EMERALD_BLOCK
      'state:inactive waystone_type:server,server_normal,private,private_normal,region,region_normal,public,public_normal':
        helmet:
          type: POLISHED_ANDESITE
      'state:inactive waystone_type:server_nether,private_nether,region_nether,public_nether':
        helmet:
          type: NETHER_BRICKS
      'state:inactive waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        helmet:
          type: PURPUR_PILLAR;CUT_SANDSTONE
  # bottom pillar
  - type: armorstand
    offset:
      x: 0.5
      y: 0.14
      z: 0.5
    data:
      'state:active waystone_type:server,server_normal,server_the_end,server_nether':
        helmet:
          type: DIAMOND_BLOCK
          amount: 1
      'state:active waystone_type:public,public_normal,public_the_end,public_nether':
        helmet:
          type: GOLD_BLOCK
          amount: 1
      'state:active waystone_type:region,region_normal,region_the_end,region_nether':
        helmet:
          type: REDSTONE_BLOCK
          amount: 1
      'state:active waystone_type:private,private_normal,private_the_end,private_nether':
        helmet:
          type: EMERALD_BLOCK
          amount: 1
      'state:inactive waystone_type:server,server_normal,private,private_normal,region,region_normal,public,public_normal':
        helmet:
          type: POLISHED_ANDESITE
          amount: 1
      'state:inactive waystone_type:server_nether,private_nether,region_nether,public_nether':
        helmet:
          type: NETHER_BRICKS
          amount: 1
      'state:inactive waystone_type:server_the_end,public_the_end,private_the_end,region_the_end':
        helmet:
          type: PURPUR_PILLAR;CUT_SANDSTONE
          amount: 1
  - type: hologram
    offset:
      x: 0.5
      y: 2.7
      z: 0.5

The example above is the default configuration for models.yml . You can customize these to create your own custom models. But in order to do that, you will need to understand each configuration element inside the configuration.

The first element you will see is a model map. It is required for the plugin to get the list of available custom models inside your configuration.

And then inside the model map, there is a set of your custom models. Each model configuration is set using a map with its name as the key. For example, you see regular on the config, which means that the waystone name is set to regular . You can use any name you want, as long as it follows the rules:

  • Do not use space characters or any untypable character as the waystone name

Inside of your model configuration, there are few fields that you need to customize

  • name - It is used as the waystone display name (You can use any name you want, you don't have to follow the naming rules)

  • components - List of components/elements/blocks that is gonna be rendered for your Waystone model

Components

Component is a type of configuration that is used to specify what object should be rendered at a specific offset. It can be a block, small block, item, armor stand, etc. The components declared as a list of components. And a component is declared as a map that must contain these fields:

  • type - The component type

  • offset - The offset

    • x - The X offset

    • y - The Y offset

    • z - The Z offset

  • data - Set of data for the component (Component Data)

Component Data

Component data is located inside the data field on your component map. The data field is declared as a set of component data. And the component data is declared as a map. But there will be only 1 data chosen to render the component. The plugin will decide which data will be chosen by using the rules specified on the data key. For example:

          'waystone_type:public,public_normal':
            type: 'CHISELED_STONE_BRICKS'
          'waystone_type:public_nether':
            type: 'NETHER_BRICKS'
          'waystone_type:public_the_end':
            type:
              - 'PURPUR_PILLAR'
              - 'CHISELED_SANDSTONE'

There are 3 data, each data has its own rule in order to be applied to the component. The first one is environment:normal which means that the data will only be applied to the waystone if only the waystone environment type is a normal type (that can only be placed on overworld). The 2nd and the 3rd ones do the same thing, it can only be applied to the waystone if only the waystone environment type matches with the specified environment type.

You can have multiple values for each rule by using a comma , as the separator. For example: environment:normal,nether , this means that the data will be applied to the component if only the waystone environment type is normal or nether.

You can also combine 2 rules by using a space as the separator. For example: environment:nether waystone_type:public , this means that the data will be applied to the component if only the waystone environment type is nether AND the waystone type is public.

If there are none of the data matches, it will use empty data.

Here is the list of available style rules for the plugin:

  • state - will be used if only the waystone state matches with the specified state. There can be only 2 states, active (when the player activated the waystone) or inactive (when the player hasn't activated the waystone). This rule cannot be applied for block/ItemsAdder's custom block/Oraxen custom block component type.

  • waystone_type - will be used if only the waystone type matches with the specified waystone type.

Inside the data map, there are the component type's data that configures the component styling.

Component Types

Component type decides what kind of thing that will be rendered to your waystone. There are several supported types that are available to use on this plugin.

Block Type

This component type allows you to use any block as your waystone model.

Component Data format:

  • type - The block type

Example:

'environment:normal':
    type: CHISELED_STONE_BRICKS

The example above will set the block to CHISELED_STONE_BRICKS when the waystone environment is normal.

Hologram

This component type will place the waystone hologram on your waystone model. This type of component does not have Component Data (not configurable using component data).

Example:

components:
    - type: hologram
      offset:
        x: 0.5
        y: 2.7
        z: 0.5
      

ArmorStand

This component type will place an armorstand on your waystone model. It can be used as a hologram, floating item, smaller block, player head, etc.

Component Data format:

  • helmet - Helmet item for the armor stand (An ItemStack, see Configuration Element, optional, default: an Air Itemstack)

  • chestplate - Chestplate item for the armorstand (An ItemStack, optional, default: an Air Itemstack)

  • leggings - Leggings item (An ItemStack, optional, default: an Air itemstack)

  • boots - Boots item (An ItemStack, optional, default: an Air itemstack)

  • small - Makes the armorstand small (true/false, optional, default: false)

  • marker - Makes the armorstand has no hitbox (true/false, optional, default: false)

  • no-base-plate - Makes the armorstand has no base plate (true/false, optional, default: false)

  • invisible - Makes the armorstand invisible but the armor items (true/false, optional, default: true)

  • arms - Shows the armorstand arms (true/false, optional, default: false)

  • head-pose - Pose for the head (A Vector, See Configuration Element, optional)

  • body-pose - Pose for the body (A Vector, optional)

  • right-arm-pose - Pose for the right arm (A Vector, optional)

  • left-arm-pose - Pose for the left arm (A Vector, optional)

  • right-leg-pose - Pose for the right leg (A Vector, optional)

  • left-leg-pose - Pose for the left leg (A Vector, optional)

Example:

components:
    - type: armorstand
      offset:
        x: 0.5
        y: 0
        z: 0.5
      data:
        '*':
          helmet:
            type: STONE
          head-pose: 
            x: 0
            y: 0.3
            z: 0

ItemsAdder

This component will place a block (from ItemsAdder custom block). In order to use this, you must have ItemsAdder installed on your server (Download it here).

Component Data format:

  • custom-block - The custom block id name specified in your ItemsAdder configuration

Example:

components:
    - type: items-adder
      offset:
        x: 0
        y: 0
        z: 0
      data:
        'state:active':
          custom-block: 'my_active_custom_block_id'
        '*':
          custom-block: 'my_inactive_custom_block_id'

Oraxen

This component will place a block (from Oraxen custom block). In order to use this, you must have Oraxen installed on your server (Download it here).

Component Data format:

  • item-id - The item id name specified in your Oraxen configuration

Example:

components:
    - type: oraxen
      offset:
        x: 0
        y: 0
        z: 0
      data:
        'state:active':
          item-id: 'my_active_custom_block_id'
        '*':
          item-id: 'my_inactive_custom_block_id'

Last updated