## Applying Modifiers

The internal plugin DiceModifierPlugin provides methods to allow the use of dice modifiers.

There are two types of modifiers: *simple* modifiers and *conditional* modifiers.

### Simple modifiers

Let's say you want to roll seven six-sided dice and plus `1` to **all** dice:

So, if seven six-sided dice are equals to `[1,6,5,3,2,3,6]`, then the result of the expression will be `[2,7,6,4,3,4,7]`.

Feel free to use any operator you want:

7.d6 - 2.on_every_die
7.d6 * 2.on_every_die
7.d6 ** 2.on_every_die // exponentiation
7.d6 / 2.on_every_die
7.d6 % 2.on_every_die // modulo

It's also possible to use a dice as modifier:

7.d6 + 1.d6.on_every_die
7.d6 / 3.d6.best_die.on_every_die

The first script rolls seven six-sided dice and plus to each die the result of a six-sided die. The last script rolls seven six-sided dice and divides each die by the best die of three six-sided dice.

All these scripts returns dice rolling command.

### Conditional modifiers

*Conditional* modifiers are just like the *simple* modifier, but we can specify which dice will be affected by the modifier:

7.d6 + 1.on_each_die_if{it.is_even}

In this example, we roll seven six-sided dice and plus `1` to each *even* dice. So, if seven six-sided dice are equals to `[1,6,5,3,2,3,6]`, then the result will be `[1,7,5,3,3,3,7]`.

You can pass to `on_each_die_if()` method several types of objects:

7.d6 + 1.on_each_die_if(1)
7.d6 + 1.on_each_die_if([1,3,5])
7.d6 + 1.on_each_die_if(1..4)
7.d6 + 1.on_each_die_if(1.d4)

A more *idiomatic* way to express those modifiers is also supported:

7.d6 + 1.on_each_die_if{it == 1}
7.d6 + 1.on_each_die_if{it in [1,3,5]}
7.d6 + 1.on_each_die_if{it in 1..4}
7.d6 + 1.on_each_die_if{it in 1.d4}