# 🧬 Evolution

***

### Evolution

The Evolution feature allows items to be upgraded from **Item A** to **Item B** through an evolution process. This process requires specific **requirements** to be met before the evolution can take place.

<figure><img src="https://1245303946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEMKTTfYtO1c14jr3rkcH%2Fuploads%2FYym5tj127XwcgZihAdeW%2Fimage.png?alt=media&#x26;token=6ad0d7c2-5689-4bb0-ab9c-371a1c8d0a8c" alt=""><figcaption><p>Evolution GUI</p></figcaption></figure>

## ⚙️ How Evolution Works

When you place a required item into the item slot, the items that it can evolve into will appear.\
Each GUI can support multiple possible evolutions for a single item.

***

## 🔑 Permission

Each station has its own permission requirement in order to be used. Of course, you can customize or change the permission to suit your needs.

```yaml
settings:
  permission: nwmmoupgrade.evolution.sword
```

***

## 🌟 Features

***

### **1. Material Item**

If enabled, this means the operation of the station will require the specified materials in order to function as intended. You can define one or more material items, and the station will only execute if the player provides the required materials.

```yaml
materials:
  enabled: false
  items:
    - type: MATERIAL
      id: STEEL_INGOT
      amount: 5
      slot: 30
      #match-item-type: SWORD #filter option
      #match-tier-type: RARE #filter option
      #match-item:
      # - SWORD:KATANA
```

**Note:**\
type is the type of the MMOItem.\
id is the ID of the MMOItem.\
amount is the quantity of the material required.\
slot is the GUI slot where the material must be placed.

#### Options

These are additional conditions that enhance material requirements:

* **match-item-type:**\
  The material will only be accepted if the item placed in the item slot has the matching type specified here.
* **match-item-tier:**\
  The material will only be accepted if the item placed in the item slot has the matching tier specified here.
* **match-item:**\
  The material will only be accepted if the item placed in the item slot has the matching According to the item defined in match-item specified here.

***

### **2. Chance Item**

If enabled and used in conjunction with chance-based mechanics, the Chance Item provides an additional success rate boost.

```yaml
chance-item:
  enabled: false
  items:
    - type: MATERIAL
      id: RARE_DIAMOND
      amount: 5
      slot: 32
      chance: 50
      #match-item-type: SWORD #filter option
      #match-tier-type: RARE #filter option
      #match-item:
      # - SWORD:KATANA
    - type: MATERIAL
      id: SILVER_INGOT
      amount: 1
      slot: 32
      chance: 50
      #match-item-type: ARMOR #filter option
      #match-tier-type: RARE #filter option
      #match-item:
      # - SWORD:KATANA
```

**Note:**\
type is the type of the MMOItem.\
id is the ID of the MMOItem.\
amount is the quantity of the material required.\
slot is the GUI slot where the material must be placed.\
chance This sets the success chance for the Chance Item

#### Options

* match-item-type
* match-item-tier
* match-item

***

### **3. Material Formula**

The Material Formula feature provides a highly flexible way to dynamically calculate the cost and material requirements.

#### Material Increase

When enabled, material requirements scale upward based on item level.

**In Short:**\
Level Up = Material Requirements.

#### Formula Configuration

```yaml
material-formula:
  enabled: true
  formula: "1"
```

***

### **4. Cost Upgrade**

This feature allows you to use currencies such as PlayerPoints, CoinsEngine, or Vault.

```yaml
cost:
    enabled: true
    currency: pp
    amount: 5000
```

```yaml
cost:
    enabled: true
    currency: ce;nwcoin
    amount: "{global_custom_advance_cost_item}" # cost amount
```

```yaml
cost:
    enabled: true # Enable/disable cost system
```

***

### **5. Default Chance**

```yaml
options:
    ....
    default-chance: 0
```

***

### **6. Tiers**

```yaml
options:
    ....
    tiers:
      enabled: false
      no-tier-chance: 10
      tier-list:
        - tier: COMMON
          chance: 2
        - tier: RARE
          chance: 15
```

***

## 🌳 7. Evolution Tree

The Evolution feature works by defining MMOItems IDs inside the evolution-tree.\
If you want an item to evolve into multiple items in a specific order, you can structure it as a tree.

Example:

```
1 → 2 → 3 → x
```

This means the item will evolve step-by-step from ID 1 to 2 to 3, and finally to x.

***

### **1. Required-Items**

Required Item are the results that players receive when the process is successfully completed.

***

### **2. Evolve To**

Format:

```
MMOITEM;<type>;<id>
```

Example:

```
MMOITEM;WEAPON;FIRE_SWORD
```

Here is a table of condition types and their formats:

<table data-header-hidden><thead><tr><th></th><th width="216"></th><th width="223"></th><th></th></tr></thead><tbody><tr><td><strong>Type</strong></td><td><strong>Format</strong></td><td><strong>Example</strong></td><td><strong>Description</strong></td></tr><tr><td>MMOItems</td><td><code>MMOITEM;&#x3C;type>;&#x3C;id>;&#x3C;amount></code></td><td><code>MMOITEM;MATERIAL;RARE_DIAMOND;10</code></td><td>Requires a specific MMOItem and amount</td></tr><tr><td>Vanilla</td><td><code>VANILLA;&#x3C;material>;&#x3C;amount></code></td><td><code>VANILLA;STONE;15</code></td><td>Requires a specific vanilla item and amount</td></tr><tr><td>Placeholder</td><td><code>PLACEHOLDER;&#x3C;placeholder>;&#x3C;syntax>;&#x3C;result></code></td><td><code>PLACEHOLDER;%luckperms_groups%;==;default</code></td><td>Checks placeholder value matches result</td></tr><tr><td>Vault</td><td><code>vault;&#x3C;amount></code></td><td><code>vault;123</code></td><td>Requires the player to have a certain amount of money</td></tr><tr><td>Level</td><td><code>LEVEL;&#x3C;amount></code></td><td><code>LEVEL;123</code></td><td>Requires the player to have a certain level</td></tr><tr><td>CoinsEngine</td><td><code>COINSENGINE;&#x3C;currency>;&#x3C;amount></code></td><td><code>COINSENGINE;nwcoin;100</code></td><td>Requires the player to have a certain amount of money</td></tr><tr><td>PlayerPoint</td><td>playerpoint;&#x3C;amount></td><td><code>playerpoint;100</code></td><td>Requires the player to have a certain amount of money</td></tr><tr><td>Nexo</td><td><code>nexo;&#x3C;material>;&#x3C;amount></code></td><td><code>Nexo;Custom_block;15</code></td><td>Requires a specific nexo item and amount</td></tr><tr><td>ItemsAdder</td><td><code>ia;&#x3C;namespace>;&#x3C;amount></code></td><td><code>ia;&#x3C;test:test>;1</code></td><td>Requires a specific ItemsAdder item and amount</td></tr></tbody></table>

These conditions give you a flexible way to control when a player is allowed to process items.

#### Condition Syntax

PLACEHOLDER;\<placeholder>;\<syntax>;\<result>

Available syntax options include:

Examples:

* `"PLACEHOLDER;%player_level%;>=;30"`
* `"PLACEHOLDER;%luckperms_group%;==;vip"`
* `"PLACEHOLDER;%player_health%;<;10"`
* `"PLACEHOLDER;%some_placeholder%;has_value"`

***

### **Example Evolution Tree**

```yaml
evolution-tree:
    WARDEN_SWORD:
      tree:
        1:
          evolve-to: MMOITEM;SWORD;RUNE_SWORD
          required-items:
            - "MMOITEM;MATERIAL;RARE_DIAMOND;10"
            - "LEVEL;5;display- <green> Level 5"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [20,21,12,3,4]
            result:
              slot: 5
        2:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-items:
            - "vanilla;stone;15"
          display:
            path:
              name: "&a&lAdd Socket"
              lore:
                - "&7Click to add a Gem slot"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [20,21,12,3,4,6,7]
            result:
              slot: 8
        3:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-items:
            - "MMOITEM;MATERIAL;RARE_DIAMOND;10"
            - "VANILLA;STONE;15"
            - "PLACEHOLDER;%money%;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,22,23]
            result:
              slot: 24
        4:
          evolve-to: MMOITEM;SWORD;AQUA_SWORD
          required-items:
            - "VANILLA;STONE;15"
            - "PLACEHOLDER;%money%;5000"
            - "LEVEL;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,30,39,40 ]
            result:
              slot: 41
        5:
          evolve-to: MMOITEM;SWORD;KATANA
          required-items:
            - "MMOITEM;ARMOR;AQUA_DRAGON_SET_CHESTPLATE;1"
            - "PLACEHOLDER;%money%;5000"
            - "LEVEL;5000"
            - "VAULT;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,30,39,40,42,43 ]
            required-item:
              slot: [ 0,1,2,3 ]
              vault-item:
                material: GOLD_INGOT
                name: "Cost: {cost}"
                cmd: 100
              placeholder-item:
                material: GOLD_INGOT
                name: "Placeholder "
                cmd: 100
              level-item:
                material: GOLD_INGOT
                name: "Level "
                cmd: 100
            result:
              slot: 44
```

***

### **3. Display**

Display is used to define where the item should appear on the GUI for required-items.

```yaml
display:
  path:
    name: "&a"
    lore:
      - "&7"
    material: LIME_STAINED_GLASS_PANE
    cmd: 1
    slot: [ 20,21,30,39,40,42,43 ]
  required-item:
    slot: [ 0,1,2,3 ]
    vault-item:
      material: GOLD_INGOT
      name: "Cost: {cost}"
      cmd: 100
    placeholder-item:
      material: GOLD_INGOT
      name: "Placeholder "
      cmd: 100
    level-item:
      material: GOLD_INGOT
      name: "Level "
      cmd: 100
  result:
    slot: 44
```

***

## 🔧 4. Required Upgrade-level & Amount

Required Upgrade-level & Amount required-upgrade-level: This is an optional setting. When you press Confirm, if the item does not have the required upgrade level, the process will be blocked. (By default, this check is disabled and only applies if you manually set a value.) required-amount: This is also checked when you press Confirm. If the item does not meet the required amount, the process will not proceed. (By default, if not specified, the ratio is 1:1.)

```yaml
  evolution-tree:
    KATANA:
      tree:
        1:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-upgrade-level: 10
          required-amount: 17
```

***

## 🔀 9. Merge

This is an additional feature for Evolution. When an evolution is successful, you can choose to merge the stats from the original item into the evolved item.

```yaml
options:
  ....
  merge:
    enabled: true
    whitelist-stats:
      enabled: true
      stats:
        - ENCHANTS
```

***

**Example Full Config**

```yaml
##########################################################################
#
#                         nwMMOUpgrade - Evolution
#      Created By Discord NN#7999 (Newworld Server)
#
#      Supports RGB and standard color codes.
#      1.RGB = &#ffffff
#      2.Standard = &f
#      3. MiniMessage = <red>
#      4. Legacy Hex = &x
#      https://www.birdflop.com/resources/rgb/
#
##########################################################################

#Contact&Support: https://discord.gg/gwXcr7c6Gq

#MMOItems Type
applies-to:
  - SWORD

# Sound settings
#https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html
sounds:
  confirm-success: ENTITY_EXPERIENCE_ORB_PICKUP
  confirm-fail: BLOCK_ANVIL_DESTROY
  confirm-no-item: BLOCK_NOTE_BLOCK_PLING

#GUI customization
gui:
  #GUI title, should support images normally.
  title: "&#FCFF00M&#FCFF12e&#FCFF24n&#FCFF36u&#FCFE48: &#FCFE6CE&#FDFE7Fv&#FDFE91o&#FDFEA3l&#FDFEB5u&#FDFDC7t&#FDFDD9i&#FDFDEBo&#FDFDFDn"
  rows: 6 #GUI slots
  display-slots:
    item:
      material: LIME_STAINED_GLASS_PANE
      name: "<color:#00FF4F>Place the item to upgrade<color:#57E342>"
      lore:
        - "&7Drag and drop your item here"
      cmd: 1
    material:
      material: YELLOW_STAINED_GLASS_PANE
      name: "<color:#E7FF00>Place the materials<color:#F2FF08>"
      lore:
        - "&7Drag and drop the required materials here"
      cmd: 1
    chance:
      material: PINK_STAINED_GLASS_PANE
      name: "<color:#FF00F8>Place a chance-enhancing stone (if any)<color:#E68DFF>"
      lore:
        - "&7Drag and drop the chance-enhancing stone here"
      cmd: 1
  slots:
    #Slot for the item you want to add Gem slots to.
    item: 19
    confirm:
      material: BRICK
      name: "&a&lConfirm" #Button name
      lore: #Add your messages here.
        - "&7Click to add a Evolution"
        - ""
        - "&fCost: &a{cost}"
        - "&aRequirements"
        - "{requirements}"
      slot:
        - 48-50
      #Supports custom model data.
      cmd: 2600
    filter:
      name: "&f" #Name
      material: BLACK_STAINED_GLASS_PANE
      cmd: 1

  evolution-tree:
    KATANA:
      tree:
        1:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-upgrade-level: 5
          #edit up to u in config.yml     
          #evolution-requirement-line: "&8- &f{display_name} &7(&e{current_value}&7/&a{required_value}&7)"
          required-items:
            - "PLACEHOLDER;%luckperms_groups%;==;default;display-<red>Default Group"
            - "MMOITEM;MATERIAL;RARE_DIAMOND;10;display-<white>{name} <red>{amount}ea"
            - "vault;123;display-&fCost: &#FCFF00{amount}"
            - # - "MMOITEM;MATERIAL;STEEL_INGOT;5"
            - # - "MMOITEM;MATERIAL;SILVER_INGOT;15"
            - # - "VANILLA;STONE;15"
            - # - "PLACEHOLDER;%money%;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,22,23,24 ]
            result:
              slot: 25
    WARDEN_SWORD:
      tree:
        1:
          evolve-to: MMOITEM;SWORD;RUNE_SWORD
          required-items:
            - "MMOITEM;MATERIAL;RARE_DIAMOND;10"
            - "LEVEL;5;display- <green> Level 5"
            # - "PLACEHOLDER;%vault_eco_balance%;>;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [20,21,12,3,4]
            result:
              slot: 5
        2:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-items:
            #- "MMOITEM;MATERIAL;RARE_DIAMOND;10"
            #- "MMOITEM;MATERIAL;STEEL_INGOT;5"
            #- "MMOITEM;MATERIAL;SILVER_INGOT;15"
            - "vanilla;stone;15"
            #- "PLACEHOLDER;%money%;5000"
            #- "vault;5000"
          display:
            path:
              name: "&a&lAdd Socket" #Button name
              lore: #Add your messages here.
                - "&7Click to add a Gem slot"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [20,21,12,3,4,6,7]
            result:
              slot: 8
        3:
          evolve-to: MMOITEM;SWORD;WARDEN_SWORD
          required-items:
            - "MMOITEM;MATERIAL;RARE_DIAMOND;10"
            - "VANILLA;STONE;15"
            - "PLACEHOLDER;%money%;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,22,23]
            result:
              slot: 24
        4:
          evolve-to: MMOITEM;SWORD;AQUA_SWORD
          required-items:
            - "VANILLA;STONE;15"
            # - "PLACEHOLDER;%money%;5000"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,30,39,40 ]
            result:
              slot: 41
        5:
          evolve-to: MMOITEM;SWORD;KATANA
          required-items:
            - "MMOITEM;ARMOR;AQUA_DRAGON_SET_CHESTPLATE;1"
            # - "MMOITEM;MATERIAL;STEEL_INGOT;5"
            # - "MMOITEM;MATERIAL;SILVER_INGOT;15"
            # - "VANILLA;STONE;15"
          display:
            path:
              name: "&a"
              lore:
                - "&7"
              material: LIME_STAINED_GLASS_PANE
              cmd: 1
              slot: [ 20,21,30,39,40,42,43 ]
            result:
              slot: 44

materials:
  enabled: false
  items:
    - type: MATERIAL
      id: STEEL_INGOT
      amount: 5
      slot: 30
      match-item-type: SWORD #filter option
      #match-tier-type: RARE #filter option
    - type: MATERIAL
      id: FIRE_ESSENCE
      amount: 5
      slot: 30
      match-item-type: ARMOR #filter option

chance-item:
  enabled: false
  items:
    - type: MATERIAL
      id: RARE_DIAMOND
      amount: 5
      slot: 32
      chance: 50
      match-item-type: SWORD #filter option
      # match-tier-type: RARE #filter option
    - type: MATERIAL
      id: SILVER_INGOT
      amount: 1
      slot: 32
      chance: 50
      match-item-type: ARMOR #filter option
      # match-tier-type: RARE #filter option

settings:
  permission: nwmmoupgrade.evolution.default
  cost:
    enabled: false #Cost
    amount: 5000
  options:
    material-formula:
      enabled: false
      formula: 1
    default-chance: 100
    merge:
      enabled: false
      whitelist-stats:
        enabled: false #whitelist
        #stats: []
        stats:
          - ENCHANTS
          # - GEM_COLOR
          # - GEM_SOCKETS
          # - UPGRADE
          # - ATTACK_DAMAGE
          # - ATTACK_SPEED

```
