This guide will show you how to show quest progress in a scoreboard. The plugin [[AnimatedScoreboard|https://www.spigotmc.org/resources/animatedscoreboard.20848/]] will provide this scoreboard, however this will work for any plugin accepting PlaceholderAPI.

'''This utilises three features from Quests:'''
* tracking quests
* PlaceholderAPI integration
* local quest placeholders

The final result will look like this:

[[https://i.imgur.com/NkcZTB2.png]]
[[https://i.imgur.com/EIWAwb2.png]]

== Adding local quest placeholders ==
Local quest placeholders are used here to provide the progress of the quest and to provide a breif description of the quest. We will use a simple blockbreak quest as our base here, where we must break 30 blocks to complete the quest.
```
/Quests/quests/example1.yml
```
```yaml
...

placeholders:
  description: "&7Break &f30 blocks &7of any type."
  progress: " &8- &f{mining:progress}&7/30 broken"

...
```
These placeholders will be called using PlaceholderAPI using the AnimatedScoreboard plugin. For example, using the placeholder <code>%quests_q:example1_p:description%</code> with PlaceholderAPI will return <code>&7Break &f30 blocks &7of any type.</code>. These are known as [[PlaceholderAPI#Quest details|local quest placeholders]].

Our <code>description</code> placeholder provides a description of the quest. The `progress` placeholder will show the players progression with the quest.

'''You can create any placeholders here, and decide the names for yourself.''' These are designed for you to be able to access information about a quest with PlaceholderAPI. Avoid using underscores and spaces, this may cause issues when referencing them using placeholders.

To see the full quest (with comments), click [[https://github.com/LMBishop/Quests/blob/master/src/main/resources/resources/bukkit/quests/example1.yml|here]].

== Configuring AnimatedScoreboard ==
⚠️ '''This guide assumes you have a basic understanding of the plugin [[AnimatedScoreboard|https://www.spigotmc.org/resources/animatedscoreboard.20848/]].'''

For our config with AnimatedScoreboard, we will create two seperate scoreboards: one with tracked quest information and one informing the user that they are not tracking a quest.

```
/AnimatedScoreboard/scoreboards/questtrack.yml
```
```yaml
display:
    title:
      text: 
       - "&6&lAmazing Server"
    line-1:
      text:
      - "&7"
      score: 5 
    line-2:
      text:
      - "&e&lTracked Quest:"
      score: 4
    line-3:
      text:
      - "&e%quests_tracked%"
      score: 3
    line-4:
      text:
      - "&7%quests_tracked_p:description%"
      score: 2
    line-5:
      text:
      - "&7%quests_tracked_p:progress%"
      score: 1
    line-6:
      text:
      - "&7"
      score: 0      
```

The placeholder <code>%quests_tracked<...>%</code> will access the players tracked quest. In order to track a quest you must middle-click in-game on the quest within the GUI. By default, when you start a quest it is automatically tracked.

Simply put, we are accessing the placeholders called <code>description</code> and <code>progress</code> which we made earlier in the player's tracked quest.

Now, we are going to create a default scoreboard for when there is no tracked quest.

```
/AnimatedScoreboard/scoreboards/defaultscoreboard.yml
```
```yaml
display:
    title:
      text: 
       - "&6&lAmazing Server"
    line-1:
      text:
      - "&7"
      score: 3 
    line-2:
      text:
      - "&e&lTracked Quest:"
      score: 2
    line-3:
      text:
      - "&7You are not tracking a quest."
      score: 1
    line-4:
      text:
      - "&7"
      score: 0      
```
This is a simple static scoreboard. Finally, we must add a trigger to switch between the two scoreboards.

Triggers must first be enabled within AnimatedScoreboard:
```
/AnimatedScoreboard/config.yml
```
```yaml
...
enable-triggers: true
...
```
Then, the server must be restarted. There should be a new folder called <code>triggers</code>.

Now, we must create two files <code>ontrack.yml</code> and <code>ontrackend.yml</code>. This will switch between the two scoreboard whenever the player tracks / stops tracking a quest.
```
/AnimatedScoreboard/triggers/ontrack.yml
```
```yaml
event: com.leonardobishop.quests.bukkit.api.event.PlayerStartTrackQuestEvent
target-player: getPlayer
trigger-scoreboard: questtrack
```
This will switch to the `questtrack` scoreboard when a quest is tracked.
```
/AnimatedScoreboard/triggers/ontrackend.yml
```
```yaml
event: com.leonardobishop.quests.bukkit.api.event.PlayerStopTrackQuestEvent
target-player: getPlayer
trigger-scoreboard: defaultscoreboard
```
This will switch to the `defaultscoreboard` scoreboard when a quest is no longer tracked.

That's it! Restart the server and you should be able to see the progress update in the scoreboard. Please note, you will have to include local quest placeholders for every quest.

== Further reading ==

* [[Creating a quest]]

