diff options
Diffstat (limited to 'docs/configuration')
| -rw-r--r-- | docs/configuration/basic-options.md | 569 | ||||
| -rw-r--r-- | docs/configuration/colour-codes.md | 58 | ||||
| -rw-r--r-- | docs/configuration/configuration-problems.md | 96 | ||||
| -rw-r--r-- | docs/configuration/creating-a-category.md | 68 | ||||
| -rw-r--r-- | docs/configuration/creating-a-quest.md | 428 | ||||
| -rw-r--r-- | docs/configuration/custom-gui-items.md | 68 | ||||
| -rw-r--r-- | docs/configuration/defining-items.md | 317 | ||||
| -rw-r--r-- | docs/configuration/global-configurations.md | 103 | ||||
| -rw-r--r-- | docs/configuration/gui-configuration.md | 269 | ||||
| -rw-r--r-- | docs/configuration/index.md | 7 | ||||
| -rw-r--r-- | docs/configuration/storage-providers.md | 137 |
11 files changed, 2120 insertions, 0 deletions
diff --git a/docs/configuration/basic-options.md b/docs/configuration/basic-options.md new file mode 100644 index 00000000..24927b12 --- /dev/null +++ b/docs/configuration/basic-options.md @@ -0,0 +1,569 @@ +--- +title: Basic options +parent: Configuration +nav_order: 1 +--- +# Basic options +{: .no_toc } + +Quests allows you to configure **basic options** for the +plugin. These can all be located in the `config.yml`. + +{: .how-to-read } +> Each option is laid out with its path underneath the title. +> A dot in the path means an extra level of indentation, for example +> `options.categories-enabled` represents: +> +> ```yaml +> options: +> categories-enabled: [value] +> ``` +> +> You should have a working knowledge of how to format YAML files +> before configuring this plugin. + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +## Categories enabled + + +*`options.categories-enabled`* + +Choose whether or not quests will be sorted into categories. If this is +disabled, quests will be put into one big GUI instead, with categories +only helping determine the order they are sorted. + +``` yaml +options: + ... + categories-enabled: true +``` + +## Trim gui size + + +*`options.trim-gui-size`* + +Choose whether or not the quests GUI will scale down (reduce the number +of rows) so that there are not any empty rows. + +``` yaml +options: + ... + trim-gui-size: true +``` + +## Titles enabled + + +*`options.titles-enabled`* + +Choose whether or not titles will appear when starting / finishing +quests. + +``` yaml +options: + ... + titles-enabled: true +``` + +## Quest started limit + +*`options.quest-started-limit`* + +{: .warning } +**This option has been removed in version 3.8 and this wiki entry is +subject to removal.** Please see [quest limit](#quest-limit "wikilink") +instead. + +Choose the number of quests players can start at one time. This will +include quests which have [quest-specific +autostart](Creating_a_quest#Autostart "wikilink") enabled, however this +value will be ignored if [global +`quest-autostart`](Basic_options#Quest_autostart "wikilink") is enabled. + +``` yaml +options: + ... + quest-started-limit: 2 +``` + +## Quest limit + + +*`options.quest-limit`* + +Choose the number of quests players can start at one time. This will +include quests which have [quest-specific +autostart](Creating_a_quest#Autostart "wikilink") enabled, however this +value will be ignored if [global +`quest-autostart`](Basic_options#Quest_autostart "wikilink") is enabled. + +Each key is called a **limit group** (sometimes referred to as a quest +rank), and players can start the set number of quests depending on their +limit group. The group named `default` must be defined and is available +to everybody, however the rest can be granted through the permission +`quests.limit.<limit group>`. + +``` yaml +options: + ... + quest-limit: + default: 2 + group1: 5 + group2: 10 + # ... +``` + +Group permissions are also documented in [Commands and permissions § +Permissions](commands-and-permissions#permissions "wikilink"). + +## Allow quest cancel + + +*`options.allow-quest-cancel`* + +Choose whether or not players can cancel quests themselves via command +or by right-clicking in the GUI. If this is set to false, consider +removing the right-click cancel instruction from the [global quest +display +configuration](Global_configurations#Global_quest_display_configuration "wikilink"). + +``` yaml +options: + ... + allow-quest-cancel: true +``` + +## Allow quest track + + +*`options.allow-quest-track`* + +Choose whether or not players can track quests themselves via command or +by middle-clicking in the GUI. If this is set to false, consider +removing the middle-click track instruction from the [global quest +display +configuration](Global_configurations#Global_quest_display_configuration "wikilink"). + +``` yaml +options: + ... + allow-quest-track: true +``` + +## Task type exclusions + + +*`options.task-type-exclusions`* + +Prevent Quests from allowing specific task type registrations from those +bearing a specific name. This can be used if you have an incompatible +plugin which causes a dependent task type to activate, thus potentially +leading to errors. + +``` yaml +options: + ... + task-type-exclusions: [] +``` + +**Example** + +``` yaml +options: + ... + task-type-exclusions: + - "blockbreak" + - "blockbreakcertain" +``` + +## Guinames + + +*`options.guinames`* + +Change and define specific GUI names for localization. + +``` yaml +options: + ... + guinames: + quests-category: "Quests Categories" + quests-menu: "Quests" + quests-started-menu: "Started Quests" + daily-quests: "Daily Quests" + quest-cancel: "Cancel Quest" +``` + +## Sounds + + +*`options.sounds`* + +Choose which sounds play at certain events. + +``` yaml +options: + ... + sounds: + quest-start: "ENTITY_PLAYER_LEVELUP:2:3" + quest-cancel: "UI_TOAST_OUT:2:3" + quest-complete: "UI_TOAST_CHALLENGE_COMPLETE:1.25:3" + gui: + open: "ITEM_BOOK_PAGE_TURN:1:3" + interact: "ITEM_BOOK_PAGE_TURN1:3" +``` + +To define a sound, choose one from [this +list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html) +(1.9+) or [this +list](https://helpch.at/docs/1.8.8/index.html?org/bukkit/Sound.html) +(1.8). + +To not have a sound play, you can leave the string blank (i.e. `""`), +for example: + +``` yaml +options: + ... + sounds: + quest-start: "" +``` + +You can choose a specific pitch and volume by including them in the +following format `SOUND:PITCH:VOLUME`. Note that the pitch is any float +between 0.5 and 2 (inclusively), and the volume must be greater than 0. +The volume only changes how far out the sound can be heard by the +player, not the actual volume played back on the client. + +**Example (1.9+):** `ENTITY_PLAYER_LEVELUP:2:3` -\> sound +`ENTITY_PLAYER_LEVELUP` at pitch `2` with a volume of `3`. + +## GUI hide locked + + +*`options.gui-hide-locked`* + +Choose whether quests which cannot be started is visible to the player +or not. + +``` yaml +options: + ... + gui-hide-locked: false +``` + +## GUI confirm cancel + + +*`options.gui-confirm-cancel`* + +Choose whether or not there is a confirmation screen when right clicking +to cancel a quest. Cancelling by command does not prompt a confirmation +screen. + +``` yaml +options: + ... + gui-confirm-cancel: true +``` + +## GUI hide quests if no permission + + +*`options.gui-hide-quests-nopermission`* + +Choose whether or not quests are hidden to the player if they do not +have permission for the quest. + +``` yaml +options: + ... + gui-hide-quests-nopermission: false +``` + +## GUI hide categories if no permission + + +*`options.gui-hide-categories-nopermission`* + +Choose whether or not categories are hidden to the player if they do not +have permission for the category. + +``` yaml +options: + ... + gui-hide-categories-nopermission: false +``` + +## GUI use PlaceholderAPI + + +*`options.gui-use-placeholderapi`* + +Choose whether or not the quest GUI is parsed with PlaceholderAPI. This +is disabled by default for performance reasons. + +``` yaml +options: + ... + gui-use-placeholderapi: false +``` + +## GUI truncate requirements + + +*`options.gui-truncate-requirements`* + +Choose whether or not the displayed quest requirements for specific +quests should be cut short. The plugin will show "Quest 1 +X more" as +the requirement, rather than listing each quest "Quest 1, Quest 2, Quest +3, ..." to stop lores overflowing off the screen. + +``` yaml +options: + ... + gui-truncate-requirements: true +``` + +## GUI actions + + +*`options.gui-actions`* + +Set the click actions for the UI. For a list of click types, check the +[ClickType javadoc +page](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/ClickType.html). + +``` yaml +options: + ... + gui-actions: + start-quest: "LEFT" + track-quest: "MIDDLE" + cancel-quest: "RIGHT" +``` + +## Quest autostart + + +*`options.quest-autostart`* + +Choose whether or not players need to start quests themselves. This will +ignore the configured [quest started +limit](#Quest_started_limit "wikilink"), and is different from the +[autostart](#Autostart "wikilink") option. + +``` yaml +options: + ... + quest-autostart: false +``` + +## Quest autotrack + + +*`options.quest-autotrack`* + +Choose whether or not players need to track quests themselves. This will +automatically track quests when they are started, and will attempt to +track the next available started quests when the player finishes a +quest. + +``` yaml +options: + ... + quest-autotrack: true +``` + +## Verbose logging level + + +*`options.verbose-logging-level`* + +Choose how much quests will log to the console. This will filter the +output based on the following options: 0 = errors only, 1 = warnings, 2 += info, 3 = debug + +``` yaml +options: + ... + verbose-logging-level: 2 +``` + +## Quests use PlaceholderAPI + + +*`options.quests-use-placeholderapi`* + +Choose whether or not start strings, reward strings, reward commands and +start commands are parsed with PlaceholderAPI. This is disabled by +default for performance reasons. + +``` yaml +options: + ... + quests-use-placeholderapi: false +``` + +## Verify quest exists on load + + +*`options.verify-quest-exists-on-load`* + +Verify quests exist when a player's data is loaded - inconsistencies may +arise when players progress on specific quests and those quests are +later removed. Their progress is still retained in the quest progress +file, which may lead to issues such as players reaching a quest started +limit when the quests they had active no longer exist - having this +option enabled prevents non-existent quests from loading as quest +progress. + +``` yaml +options: + ... + verify-quest-exists-on-load: true +``` + +## Performance tweaking + + +*`options.performance-tweaking`* + +Set some specific options within the internals of Quests. + +The `queue executor interval` relates to how frequently players are +checked for completed quests. Not every player is checked at once for +performance purposes, and players are only submitted to the queue upon +completion of a task. The interval defines how frequently players are +polled from the queue. + +The `autosave interval` refers to how frequently all online players data +is saved. Data is saved at autosave intervals to prevent data loss +should the server crash. + +These options are measured in ticks, 1 second = 20 ticks. + +``` yaml +options: + ... + performance-tweaking: + quest-queue-executor-interval: 1 + quest-autosave-interval: 12000 +``` + +## Tab completion + + +*`options.tab-completion`* + +Choose whether or not commands can be tab completed. Quests will never +offer tab completions which players cannot run, regardless of this +setting. (In other words, players who are not admins will not see tab +completions for `/quests admin` if they do not have the admin +permission.) + +``` yaml +options: + ... + tab-completion: + enabled: true +``` + +## Error checking + + +*`options.error-checking`* + +Configure how Quests handles errors in your configuration. By default, +Quests will not allow quests to be loaded if they contain an +[error](Configuration_problems#Types_of_problem "wikilink"), since this +could lead to undefined behaviour. The option `override-errors` will +ignore this behaviour and forcibly allow the quest to be registered. + +``` yaml +options: + ... + error-checking: + override-errors: false +``` + +## Placeholder cache time + + +''`options.placeholder-cache-time`" + +Set how long Quests will retain parsed PlaceholderAPI strings in the +cache, in seconds. See [PlaceholderAPI § Caching +placeholders](PlaceholderAPI#Caching_placeholders "wikilink") for more +information. + +``` yaml +options: + ... + placeholder-cache-time: 10 +``` + +## Global task configuration override + + +*`options.global-task-configuration-override`* + +Choose whether or not options set in the [global task +configuration](Global_configurations#Global_task_configuration "wikilink") +will override per-quest specific options. + +``` yaml +options: + ... + global-task-configuration-override: false +``` + +## Global quest display configuration override + + +*`options.global-quest-display-configuration-override`* + +Choose whether or not the [global quest display +configuration](Global_configurations#Global_quest_display_configuration "wikilink") +will override per-quest specific options. + +``` yaml +options: + ... + global-quest-display-configuration-override: false +``` + +## Storage + + +*`options.storage`* + +Configure how Quests will store playerdata. See [storage +providers](Storage_providers "wikilink") for more info. + +``` yaml +options: + ... + storage: + provider: "yaml" + synchronisation: + delay-loading: 0 + database-settings: + network: + database: "minecraft" + username: "root" + password: "" + address: "localhost:3306" + connection-pool-settings: + maximum-pool-size: 8 + minimum-idle: 8 + maximum-lifetime: 1800000 + connection-timeout: 5000 + table-prefix: "quests_" +``` diff --git a/docs/configuration/colour-codes.md b/docs/configuration/colour-codes.md new file mode 100644 index 00000000..6c7339c0 --- /dev/null +++ b/docs/configuration/colour-codes.md @@ -0,0 +1,58 @@ +--- +title: Colour codes +parent: Configuration +nav_order: 8 +--- +# Colour (color) codes + +You can use colour codes anywhere the plugin accepts a message (plugin messages, display items, and in task configurations themselves). + +The following table shows the colour capabilities of specific server versions: + +| | Before 1.16 | 1.16+ | +| ---- | ---- | ---- | +| Colour Codes | ✔️ | ✔️ | +| Hexadecimal | ❌ | ✔️ | + +## Colour codes +The plugin will automatically translate colour codes from '&' to '§' for you. + +| Name | Chat Code | Hex Equivalent | +| ---- | ---- | ---- | +| Black | `&0` | #000000 | +| Dark Blue | `&1` | #0000AA | +| Dark Green | `&2` | #00AA00 | +| Dark Aqua | `&3` | #00AAAA | +| Dark Red | `&4` | #AA0000 | +| Dark Purple | `&5` | #AA00AA | +| Gold | `&6` | #FFAA00 | +| Gray | `&7` | #AAAAAA | +| Dark Gray | `&8` | #555555 | +| Blue | `&9` | #5555FF | +| Green | `&a` | #55FF55 | +| Aqua | `&b` | #55FFFF | +| Red | `&c` | #FF5555 | +| Light Purple | `&d` | #FF55FF | +| Yellow | `&e` | #FFFF55 | +| White | `&f` | #FFFFFF | +| Obfuscated | `&k` | - | +| Bold | `&l` | - | +| Strikethrough | `&m` | - | +| Underline | `&n` | - | +| Italic | `&o` | - | +| Reset | `&r` | - | + +## Hexadecimal colour +For compatible Minecraft versions, the plugin will also translate hex colour codes for you. + +You can include a hex colour code as you would with a normal colour code: `&#<hex colour code>`. + +{: .important } +The `#` symbol indicates a hexadecimal colour code. These must be exactly six characters long. + +For example, the following messages are identical: +``` +&cThis is a red message. + +&#FF5555This is a red message. +``` diff --git a/docs/configuration/configuration-problems.md b/docs/configuration/configuration-problems.md new file mode 100644 index 00000000..a55bbfde --- /dev/null +++ b/docs/configuration/configuration-problems.md @@ -0,0 +1,96 @@ +--- +title: Configuration problems +parent: Configuration +nav_order: 9 +--- + +# Configuration problems + +If you have a configuration error, Quests will log details both to the console and in-game (if you use `/q a reload`). + + + +These problems are designed to be as readable as possible, allowing self-diagnosis for your configuration. Warnings are also used to spot common misconfigurations, which may lead to quests not working as expected, thus being interpreted as a bug. + +Most problems have extended descriptions if you mouse-over them in-game. + +## Types of problem + +| Type | Description | +|:-------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Error | Errors prevent the specific quest from loading. These can be overidden in the config at `options.error-checking.override-errors`. Examples include an incorrect quest ID or malformed YAML file. | +| Warning | Warnings have no impact other than to inform you that a quest may not work as expected. Examples include an invalid material for a blockbuildcertain task, or a required quest which does not exist. | + +## Understanding a problem +Problems generally follow this format: +``` +<name of file> ---- + | - <type of problem>: <description of problem> :<location of problem> +``` + +**Example 1** + +Take the following configuration. + +```yaml +tasks: + damage: + type: "dealdamage" +``` +The following error will show if you try to create a `dealdamage` task without specifying how much damage needs to be dealt. +``` +example1.yml ---- + | - E: Required field 'amount' is missing for task type 'dealdamage' :tasks.damage.amount +``` +In the above example, the problem is an error (as denoted by E) and will prevent the quest (`example1`) from loading. +The descriptor at the end shows you exactly where the error comes from in the YML file, which looks like this: + +The source of the error is given by `:tasks.damage.amount`, where each dot denotes a level of indentation. In this case, it is expecting a value at `amount`, but it is not defined. + +Below is the fixed version. + +```yaml +tasks: + damage: + type: "dealdamage" + amount: 10 +``` + +**Example 2** + +``` +example2.yml ---- + | - E: Expected an integer for 'amount', but got 'ten' instead :tasks.inventory.amount + | - W: Material 'notablock' does not exist :tasks.inventory.item + | - W: Quest requirement 'example' does not exist :options.requires +``` +```yaml +tasks: + inventory: + type: "inventory" + amount: ten + item: notablock +... +options: + requires: + - "example" + ... +``` +In this case, the task is broken since instead of numbers for the amount of items needed (`amount`), the string "ten" is there instead, causing an error. The source of the error is indicated by the location at the end `tasks.inventory.amount`. + +Also, a warning is shown for the item "thisisnotablock" at `tasks.inventory.item` and for the requirement "example" at `options.requires`. These warnings are informing you that the task may not work as expected, as "thisisnotablock" is not a real item, and that the quest "example" which is required to have been completed in order to start this quest does not exist. + +Unlike errors, warnings do not prevent quests from being loaded. + +Below is a fixed version: +```yaml +tasks: + inventory: + type: "inventory" + amount: 10 + item: DIAMOND +... +options: + # requirements section removed + ... +```
\ No newline at end of file diff --git a/docs/configuration/creating-a-category.md b/docs/configuration/creating-a-category.md new file mode 100644 index 00000000..e777b260 --- /dev/null +++ b/docs/configuration/creating-a-category.md @@ -0,0 +1,68 @@ +--- +title: Creating a category +parent: Configuration +nav_order: 3 +--- + +# Creating a category +{: .no_toc } + +Categories are stored in `categories.yml`. On older versions of Quests +they were stored in the main `config.yml`; quests will read categories +from `config.yml` if a `categories.yml` file is not present. + + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +## Category ID + +ID of category, this is the text you should enter when putting quests +inside a category. + +## Display + + +*`display`* + +The item that is shown in the GUI. + +### Name + + +*`display.name`* + +The name of the item. + +### Lore + + +*`display.lore`* + +The lore (description) of the item. + +### Type + + +*`display.type`* + +The type (material name/id) of item. + +## Permission required + + +*`permission-required`* + +Whether permission is needed to open this category, or start quests +within it. This permission will follow this format: +`quests.category.<category>`\`. + +## Hidden + + +*`hidden`* + +Whether this category is shown in the main quests menu. diff --git a/docs/configuration/creating-a-quest.md b/docs/configuration/creating-a-quest.md new file mode 100644 index 00000000..6e3b7283 --- /dev/null +++ b/docs/configuration/creating-a-quest.md @@ -0,0 +1,428 @@ +--- +title: Creating a quest +parent: Configuration +nav_order: 2 +--- + +# Creating a quest +{: .no_toc } + +Each file inside the `quests` subfolder represents a +single quest. The **name** of the file represents the **quest id** and +must be alphanumeric (excluding the .yml extension). + +{: .note } +An example can be seen in the [default +configuration](https://github.com/LMBishop/Quests/blob/master/bukkit/src/main/resources/resources/bukkit/quests/example1.yml). + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +## Quest ID + +The quest ID is the name of the file (excluding .yml extension) and must +alphanumeric and unique. This ID is used as the reference in commands, +players' quest progress file and in placeholders. + +## Tasks + + +*`tasks`* + +Tasks are the objectives the player must do to complete the quest. +Simalar to quest IDs, there are task IDs. They can be identical to the +quest ID but must be unique to each other. + +For help on adding the tasks, refer to [task configuration +layout](Task_configuration_layout "wikilink") + +## Display + + +*`display`* + +This is the item which will be shown to the player in the quest GUI. + +### Name + + +*`display.name`* + +The name of the item. This is also the name used in chat messages. + +``` yaml +display: + name: "&cExample I (Single Task)" +``` + +### Normal lore + + +*`display.lore-normal`* + +The lore (description) of the item as seen if the quest is not started. + +``` yaml +display: + ... + lore-normal: + - "&cThis category is designed to show you the different" + - "&cattributes a quest can have." + - "" + - "&7This quest requires you to:" + - "&7 - Break &f30 blocks&7." + - "" + - "&7Rewards:" + - "&7 - &f10 &7diamonds." +``` + +### Started lore + + +*`display.lore-started`* + +The lore (description) of the item **appended to `lore-normal`** if the +quest is started. This is a good place to put progression details. To +get the progression of a player in a task, write `{TASKID:progress}` and +replace `TASKID` with the ID of the task you want to get the progress +for. Alternatively, you can write `{TASKID:complete}` to get if the task +is complete. + +``` yaml +display: + ... + lore-started: + - "" + - "&7Your current progression:" + - "&7 - &f{mining:progress}&7/30 blocks broken." +``` + +### Type + + +*`display.type`* + +The type (material name) of item. + +``` yaml +display: + ... + type: "WOODEN_PICKAXE" +``` + +## Rewards + + +*`rewards`* + +**Optional.** This is a list of commands which will be executed when the +player completes the quest. You can use `{player}` and the players name +will be substituted in place. + +``` yaml +rewards: + - "give {player} diamond 10" +``` + +## Start commands + + +*`startcommands`* + +**Optional.** This is a list of commands which will be executed when the +player starts the quest. You can use `{player}` and the player's name +will be substituted in place. + +``` yaml +startcommands: + - "broadcast {player} has started a quest" +``` + +## Start string + + +*`startstring`* + +**Optional.** This is a list of messages which will be sent to the +player when they start the quest. This is useful for telling the player +their objectives. + +``` yaml +startstring: + - " &8- &7You must break 30 blocks." +``` + +## Reward string + + +*`rewardstring`* + +**Optional.** This is a list of messages which will be sent to the +player when they complete the quest. This is useful for telling the +player their rewards. + +``` yaml +rewardstring: + - " &8- &7You have received 10 dimaonds." +``` + +## Placeholders + + +*`placeholders`* + +**Optional.** This is a set of placeholders which can be accessed using +PlaceholderAPI. To get the progression of a player in a task, write +`{TASKID:progress}` and replace `TASKID` with the ID of the task you +want to get the progress for. Alternatively, you can write +`{TASKID:complete}` to get if the task is complete. + +``` yaml +placeholders: + description: "&7Break &f30 blocks &7of any type." + progress: " &8- &f{mining:progress}&7/30 broken" +``` + +These placeholders will be called using PlaceholderAPI. See [quest +progress in scoreboard](Quest_progress_in_scoreboard "wikilink") for a +guide which utilises this feature. + +## Options + + +*`options`* + +This section defines quest-specific options. + +### Category + + +*`options.category`* + +**Optional.** The category the quest will be in. You should put the ID +of the category here. + +``` yaml +options: + ... + category: "example" +``` + +### Requirements + + +*`options.requires`* + +**Optional.** List of Quest IDs the player must complete before being +able to start this quest. + +``` yaml +options: + ... + requires: + - "quest-id" +``` + +### Permission required + + +*`options.permission-required`* + +**Optional.** Whether or not the quest should require a permission to +start. The permission will be `quests.quest.<id>`. + +``` yaml +options: + ... + permission-required: false +``` + +### Cancellable + + +*`options.cancellable`* + +**Optional.** Whether or not this quest can be cancelled. If global or +local quest autostart is enabled, or is cancelling quests is disabled, +then this option is ignored. + +``` yaml +options: + ... + cancellable: false +``` + +### Counts towards limit + + +*`options.counts-towards-limit`* + +**Optional.** Whether or not this quest counts towards the players quest +started limit. If global quest autostart is enabled, this will have no +effect as quest limits are disabled. + +``` yaml +options: + ... + counts-towards-limit: false +``` + +### Repeatable + + +*`options.repeatable`* + +**Optional.** Whether or not the quest can be replayed. + +``` yaml +options: + ... + repeatable: false +``` + +### Cooldown + + +*`options.cooldown`* + +**Optional.** Whether ot not the quest is placed on cooldown or is +immediately replayable. + +``` yaml +options: + ... + cooldown: + enabled: true + time: 1440 # minutes +``` + +### Time limit + + +*`options.time-limit`* + +**Optional.** Whether or not this quest has a time limit to complete it. +If the time limit is reached, the quest will be cancelled and progress +reset. + +``` yaml +options: + ... + time-limit: + enabled: true + time: 1440 # minutes +``` + +### Sort order + + +*`options.sort-order`* + +**Optional.** How the plugin sorts the quests in the GUI, lower numbers +come first. + +``` yaml +options: + ... + sort-order: 1 +``` + +### Autostart + + +*`options.autostart`* + +**Optional.** Whether or not the quest should automatically be started. +This is similar to enabling quest autostart for the entire plugin, but +specific only to this quest, meaning it cannot be cancelled and counts +towards the players quest started limit. + +See [§ counts towards +limit](Creating_a_quest#Counts_towards_limit "wikilink") if you do not +want autostart quests to count towards the quest started limit. + +``` yaml +options: + ... + autostart: true +``` + +### Completed display + + +*`options.completed-display`* + +**Optional.** The display item this quest should take if it is +completed. This accepts the standard ItemStack definition format +described in [Defining items](Defining_items "wikilink"). If this option +is not specified, the display item [defined in the main +config.yml](gui-configuration#quest-completed-display "wikilink") will +be used. + +``` yaml +options: + ... + completed-display: + type: "STEAK" +``` + +### Cooldown display + + +*`options.cooldown-display`* + +**Optional.** The display item this quest should take if it is on +cooldown. This accepts the standard ItemStack definition format +described in [Defining items](Defining_items "wikilink"). If this option +is not specified, the display item [defined in the main +config.yml](gui-configuration#quest-cooldown-display "wikilink") will be +used. + +``` yaml +options: + ... + cooldown-display: + type: "STEAK" +``` + +### Permission display + + +*`options.permission-display`* + +**Optional.** The display item this quest should take if the player does +not have permission to start it. This accepts the standard ItemStack +definition format described in [Defining +items](Defining_items "wikilink"). If this option is not specified, the +display item [defined in the main +config.yml](gui-configuration#quest-permission-display "wikilink") will +be used. + +``` yaml +options: + ... + permission-display: + type: "STEAK" +``` + +### Locked display + + +*`options.locked-display`* + +**Optional.** The display item this quest should take if the player has +not unlocked it. This accepts the standard ItemStack definition format +described in [Defining items](Defining_items "wikilink"). If this option +is not specified, the display item [defined in the main +config.yml](gui-configuration#quest-locked-display "wikilink") will be +used. + +``` yaml +options: + ... + locked-display: + type: "STEAK" +``` diff --git a/docs/configuration/custom-gui-items.md b/docs/configuration/custom-gui-items.md new file mode 100644 index 00000000..3ce97b15 --- /dev/null +++ b/docs/configuration/custom-gui-items.md @@ -0,0 +1,68 @@ +--- +title: Custom GUI items +parent: Configuration +nav_order: 7 +--- +# Custom GUI items + +**Custom GUI items** are dummy items added to the category menu and the +quest menu. This can be used to help stylise your quests GUI. + +This can be done in the `config.yml`: + +``` yaml +custom-elements: + "categories": # apply to the categories menu (the main menu by default) + 0: # <--- slot 1, note the slots start from 0! so 0 = slot 1 in this case + display: + name: "&cExample Custom Item (slot 1)" + lore: + - "&7This is a custom item which can be added" + - "&7to your menus. This is purely cosmetic." + - "" + - "&7Two empty slots should follow." + type: "DIAMOND_BLOCK" + 1: # <--- start from slot 2 + spacer: true # empty slot in GUI + repeat: 2 # repeats for 2 slots + 3: # <--- start from slot 4 + display: + name: "&cExample Custom Item (slots 4 - 7)" + lore: + - "&7This is a custom item which can be added" + - "&7to your menus, but in slot 4 and repeated" + - "&73 times." + - "&7" + - "&7This will come after 2 empty slots." + - "&7" + - "&7This is purely cosmetic." + type: "NETHERRACK" + repeat: 3 # repeats for 3 more slots + commands: + - "this command will be executed if the player click on this item" +``` + +The optional `repeat` field will repeat the item for consecutive slots +after that. + +The optional `commands` list will execute commands if the player clicks +on the item. The `{player}` placeholder can be used to substitute the +player name. + +These custom elements take precedence over quest items, as quests and +categories will fill empty slots once all the custom items have been +set. + + + +To add a custom item within the quest menu itself, you must specify the +category, or if categories are disabled you can specify "quests" +instead: + +``` yaml +custom-elements: + "c:<category-name>": # apply to <category-name> menu + ... + "quests": # apply to whole quests menu if categories are disabled + ... +``` diff --git a/docs/configuration/defining-items.md b/docs/configuration/defining-items.md new file mode 100644 index 00000000..fddec792 --- /dev/null +++ b/docs/configuration/defining-items.md @@ -0,0 +1,317 @@ +--- +title: Defining items +parent: Configuration +nav_order: 5 +--- + +# Defining items +{: .no_toc } + +An **ItemStack** is a **representation of an item** in an inventory. +Every configured ItemStack in Quests is parsed the exact same way. This +page gives guidance on how to define items with specific attributes. + +{: .note } +The information on this page describes how to define items across every +configuration file. + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +## Layout + +``` yaml +item: + name: "&6&lSuper Cool Stick" + item: STICK + lore: + - "&7Really cool lore." + # field4: value4 + # etc. +``` + +## Options + +| Field | Optional | Minecraft Version | More Information | +|----------------------|-----------------|-------------------|-----------------------------------------| +| `item` | ❌ | \- | [Jump](#item "wikilink") | +| `name` | ✅ <sup>\*</sup> | \- | [Jump](#name "wikilink") | +| `lore` | ✅ | \- | [Jump](#lore "wikilink") | +| `enchantments` | ✅ | \- | [Jump](#enchantments "wikilink") | +| `itemflags` | ✅ | 1.8+ | [Jump](#item-flags "wikilink") | +| `unbreakable` | ✅ | 1.13+ | [Jump](#unbreakable "wikilink") | +| `attributemodifiers` | ✅ | 1.13+ | [Jump](#attribute-modifiers "wikilink") | +| `custommodeldata` | ✅ | 1.14+ | [Jump](#custom-model-data "wikilink") | +| `owner-[...]` | ✅ | 1.8+ | [Jump](#owner "wikilink") | + +<sup>\*: The name must be defined for the display item of Quests.</sup> + +### Item + + +*`item` or `type` or `material`* + +The item is the material the itemstack is made out of. Please see the +[latest +javadocs](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html) +(1.13+) or the [1.12 +javadocs](https://helpch.at/docs/1.12.2/org/bukkit/Material.html) +(1.8-1.12) for item names. For 1.8-1.12, data codes can be added on at +the end with a colon `:<code>`. + +``` yaml +item: + item: "WHEAT" + ... +``` + +### Name + + +*`name`* + +The name is displayed at the top of the item when hovered over, or just +above the hotbar when selected. + +``` yaml +item: + name: "&2&lSuper Cool Name" + ... +``` + +### Lore + + +*`lore`* + +The lore is the description of the item seen when hovering over it. You +can remove this omit entirely if a lore is not desired. + +``` yaml +item: + lore: + - "Line 1" + - "Line 2" + ... +``` + +### Enchantments + +The format of enchantments depends on your Minecraft version. + + +**Pre-1.13**: Use [spigot +names](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html) +-\> format "{enchantment}:{level}" + +**1.13+**: Use Vanilla names -\> namespace for vanilla enchantments is +"minecraft" -\> format "{namespace}:{enchantment}:{level}" + +``` yaml +item: + enchantments: + - "minecraft:infinity:1" + ... +``` + +### Item flags + +Item flags can be added to hide enchantment names, etc. A full list of +itemflags is available on the [Spigot +javadocs](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemFlag.html). + +``` yaml +item: + itemflags: + - "HIDE_ATTRIBUTES" + ... +``` + +### Unbreakable + +- *1.13+*' + +``` yaml +item: + unbreakable: true + ... +``` + +### Attribute modifiers + +**1.13+** Adds specific attribute modifiers to the items. The UUID +should always be specified otherwise the server will randomly generate +one on each restart. Full list of attributes is available on the [Spigot +javadocs](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/attribute/Attribute.html), +along with full list of +[operations](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/attribute/AttributeModifier.Operation.html). + +``` yaml +item: + attributemodifiers: + - attribute: GENERIC_MOVEMENT_SPEED + modifier: + uuid: "49dc07dc-bfdb-4dc7-85d3-66ef52b51858" + name: "generic.movementSpeed" + operation: ADD_NUMBER + amount: 0.03 + equipmentslot: HAND + - attribute: GENERIC_MOVEMENT_SPEED + modifier: + uuid: "e22513cf-b15f-4443-9e2f-103c0ff9731b" + name: "generic.movementSpeed" + operation: ADD_NUMBER + amount: 0.01 + equipmentslot: OFF_HAND + ... +``` + +### Custom model data + +**1.14+** + +``` yaml +item: + custommodeldata: 12345 + ... +``` + +### Owner + +This only applies if you have a skull item stack (`PLAYER_HEAD` 1.13+, +`SKULL_ITEM` 1.8-1.12). There are three ways to define the player for +the skull: by **username**; **uuid**; or, **base64 encoded string**. + +The **preferred method** is to **explicitly specify a base64 encoded +string**. Using any of the other two methods require that the player has +joined the server before, and may possibly make a request to Mojang +(locking the server thread) depending on which server software you use. + +You can get the base64 encoded representation of a player skin here: +<https://mineskin.org/>. It will look like the following (may be +referred to as 'texture data'): + + ewogICJ0aW1lc3RhbXAiIDogMTYyNTgzNjU0OTAxNCwKICAicHJvZmlsZUlkIiA6ICJlMmNlNzA0ZWVjNGE0YjE4YTNlYjA4MTRiMzdmYTFkNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJmYXRwaWdzYXJlZmF0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzJiMTIzMWEyZjNkYTQ2OTQxZDY1OWI4NDNjZWZhNDljOGE1NTA0ZjE4MzNlOTA3YzY3YmJiMTQ2NTE0OTlhNyIKICAgIH0KICB9Cn0= + +You can specify each type by the following: + +``` yaml +item: + owner-base64: "base64 encoded string" + ... +``` + +``` yaml +item: + owner-username: "username" + ... +``` + +``` yaml +item: + owner-uuid: "uuid" + ... +``` + +## Quest items + +**Quest items** can help simplify your configuration by putting +individual itemstacks inside a named file (under directory items/), to +allow for easy referencing from a task configuration and reducing +configuration duplication across your quests. + +The types of quest items are as follows: + +- `raw` (items imported using /q a items import) +- `defined` (items manually written following the format above) +- `mmoitems` (items from MMOItems) +- `slimefun` (items from Slimefun) +- `executableitems` (items from ExecutableItems) + +### Importing items + +**Importing** an item means creating a new quest item **from the item +you are holding** in game. To do this, simply hold the desired item and +run `/q a items import <id>`, where `<id>` is the desired name of the +item. Your item will be saved to file items/\<id\>.yml, **with the type +'raw**'. + +<https://i.imgur.com/6lsld61.png> <https://i.imgur.com/Pg2eO9a.png> + +### Defining items + +You can manually define an item by creating a new `yml` file within the +items/ directory. You must specify a `type` and the item itself under +`item`. + +#### Defined + +**Defined quest items** are regular ItemStacks and follow the format +defined under [§ Configurable +options](Defined_items#Configurable_options "wikilink"). + + items/testitem.yml + +``` yaml +type: "defined" +item: + name: "Cool item" + type: DIAMOND_SWORD + lore: + - "Really cool lore" +``` + +#### MMOItems + +**MMOItems quest items** are ItemStacks which belong to the MMOItems +plugin. + + items/testitem.yml + +``` yaml +type: "mmoitems" +item: + type: "BOW" #mmoitems type + id: "HELL_BOW" #mmoitems id +``` + +#### Slimefun + +**Slimefun quest items** are ItemStacks which belong to the Slimefun +plugin. + + items/testitem.yml + +``` yaml +type: "slimefun" +item: + id: "slimefun_item_id" #slimefun id +``` + +#### ExecutableItems + +**ExecutableItems quest items** are ItemStacks which belong to the +ExecutableItems plugin. + + items/testitem.yml + +``` yaml +type: "executableitems" +item: + id: "executableitems_id" #executableitems id +``` + +### Referencing a quest item + +In most cases where an ItemStack is accepted in Quests, you can simply +provide the ID of the quest item under the key `quest-item`. + +``` yaml +# Within a task +type: "inventory" +item: + quest-item: "testitem" +``` diff --git a/docs/configuration/global-configurations.md b/docs/configuration/global-configurations.md new file mode 100644 index 00000000..6be6b744 --- /dev/null +++ b/docs/configuration/global-configurations.md @@ -0,0 +1,103 @@ +--- +title: Global configurations +parent: Configuration +nav_order: 4 +--- + +# Global configurations + +**Global configurations** are intended to be used in place of +**quest-specific configurations**. This helps reduce repetition across +your configuration as you copy common elements from quest to quest, and +also allows you to quickly propagate edits across quests. + +## Global task configuration + +A global task configuration will add configuration values to all tasks +of a specified type. + +For example (in `config.yml`), + +``` yaml +... +global-task-configuration: + types: + inventory: + update-progress: true +... +``` + +This will add to *all* tasks configurations with `type: inventory` +across *all* quests the following: `update-progress: true`. + +{: .note } +Any errors which arise from global task configurations will appear as +if they are coming from individual quests. + +Quest-level configurations will override anything set here. To change +this behaviour, modify the [global task configuration +override](Basic_options#Global_task_configuration_override "wikilink"). + +## Global quest display configuration + +A global quest display configuration adds text to the display items of +items in the GUI. + +By default, this is already configured: + +``` yaml +global-quest-display: + lore: + append-not-started: + - "" + - "&eLeft Click &7to start this quest." + append-started: + - "" + - "&aYou have started this quest." + - "&eMiddle Click &7to track this quest." + - "&eRight Click &7to cancel this quest." + append-tracked: + - "" + - "&aYou are &etracking &athis quest." + - "&eMiddle Click &7to stop tracking this quest." + - "&eRight Click &7to cancel this quest." +``` + +<img src="https://i.imgur.com/l0FI5Ma.png" width="450px"> + +If you do not want this, simply remove the section. + +## Global macros + +Global macros help you reduce repetition across your configuration +files by centralizing values in your config.yml. Think of them as your +own variables/placeholders which you can use in your quest files. + +You can define macros in your `config.yml`, under the `global-macros` +section: + + global-macros: + ... + # <name of macro>: <string value of macro> + top-bar: "&6---&7---&6---" + +To use these in your quests, reference it by using +`<$m name-of-macro $m>`. Macro names **cannot have spaces**. + +For example, to use the `top-bar` macro in `example-quest.yml`: + +``` yaml +tasks: + ... +display: + ... + lore-normal: + - "<$m top-bar $>" + - "..." + ... +``` + +{: .caution } +Macros are replaced by a pre-processor before a configuration is +parsed. This means they have the ability to cause syntax errors in +ways you do not expect if you are not careful.
\ No newline at end of file diff --git a/docs/configuration/gui-configuration.md b/docs/configuration/gui-configuration.md new file mode 100644 index 00000000..6a40629a --- /dev/null +++ b/docs/configuration/gui-configuration.md @@ -0,0 +1,269 @@ +--- +title: GUI configuration +parent: Configuration +nav_order: 6 +--- + +# GUI configuration + +*See also [Custom GUI items](Custom_GUI_items "wikilink") and [Defining +items](Defining_items "wikilink").* + +The **GUI configuration** is defined in the `config.yml`. These define +the static UI elements such as the back button, quest locked display +etc. All options accept the standard ItemStack definition format +described in [Defining items](Defining_items "wikilink"). + +## Back button + + +*`gui.back-button`* + +The back button displayed within sub menus. + +``` yaml +gui: + ... + back-button: + name: "&cReturn" + lore: + - "&7Return to the categories menu." + type: "ARROW" +``` + +## Page previous + + +*`gui.page-prev`* + +The previous page button displayed on paiginated menus. + +``` yaml +gui: + ... + page-prev: + name: "&7Previous Page" + lore: + - "&7Switch the page to page &c{prevpage}." + type: "FEATHER" +``` + +The `{prevpage}` variable represents the page number for the previous +page. + +## Page next + + +*`gui.page-next`* + +The next page button displayed on paiginated menus. + +``` yaml +gui: + ... + page-next: + name: "&7Next Page" + lore: + - "&7Switch the page to page &c{nextpage}." + type: "FEATHER" +``` + +The `{nextpage}` variable represents the page number for the next page. + +## Page description + + +*`gui.page-next`* + +The current page item displayed on paginated menus. The amount of this +item will automatically update on the page number. + +``` yaml +gui: + ... + page-desc: + name: "&7Page &c{page}" + lore: + - "&7You are currently viewing page &c{page}." + type: "PAPER" +``` + +The `{page}` variable represents the page number for the current page. + +## Quest locked display + + +*`gui.quest-locked-display`* + +The item is used to represent locked quests. A quest is locked if its +[requirements](Creating_a_quest#Requirements "wikilink") are not met. + +``` yaml +gui: + ... + quest-locked-display: + name: "&c&lQuest Locked" + lore: + - "&7You have not completed the requirements" + - "&7for this quest (&c{quest}&7)." + - "" + - "&7Requires: &c{requirements}" + - "&7to be completed to unlock." + type: "RED_STAINED_GLASS_PANE" +``` + +The `{quest}` variable represents the quest [display +name](Creating_a_quest#name "wikilink"), with its formatting stripped. + +The `{questid}` variable represents the quest ID. + +The `{requirements}` variable represents the display names of the quests +needed to unlock this quest. By default, this name is truncated to show +only the first quest, with a number after (e.g. "Example II +4 more"). +This behaviour is defined at [Basic options § GUI-truncate +requirements](basic-options.md#GUI-truncate-requirements "wikilink") + +## Quest permission display + + +*`gui.quest-permission-display`* + +The item is used to represent quests which the player does not have +permission to start. + +``` yaml +gui: + ... + quest-permission-display: + name: "&6&lNo Permission" + lore: + - "&7You do not have permission for this" + - "&7quest (&6{quest}&7)." + type: "BROWN_STAINED_GLASS_PANE" +``` + +The `{quest}` variable represents the quest [display +name](Creating_a_quest#name "wikilink"), with its formatting stripped. + +The `{questid}` variable represents the quest ID. + +## Quest cooldown display + + +*`gui.quest-cooldown-display`* + +The item is used to represent quests which are repeatable, the player +has completed, but are on cooldown. + +``` yaml +gui: + ... + quest-cooldown-display: + name: "&e&lQuest On Cooldown" + lore: + - "&7You have recently completed this quest" + - "&7(&e{quest}&7) and you must" + - "&7wait another &e{time} &7to unlock again." + type: "ORANGE_STAINED_GLASS_PANE" +``` + +The `{quest}` variable represents the quest [display +name](Creating_a_quest#name "wikilink"), with its formatting stripped. + +The `{questid}` variable represents the quest ID. + +The `{time}` variable represents the formatted time remaining until the +cooldown period is over. This can be configured in the messages section. + +## Quest completed display + + +*`gui.quest-completed-display`* + +The item is used to represent quests which are completed and not +repeatable. + +``` yaml +gui: + ... + quest-completed-display: + name: "&a&lQuest Complete" + lore: + - "&7You have completed this quest" + - "&7(&a{quest}&7) and cannot." + - "&7repeat it." + type: "GREEN_STAINED_GLASS_PANE" +``` + +The `{quest}` variable represents the quest [display +name](Creating_a_quest#name "wikilink"), with its formatting stripped. + +The `{questid}` variable represents the quest ID. + +## No started quests + + +*`gui.no-started-quests`* + +This is shown as the only item in the quest started menu if the player +has not started any quests. + +``` yaml +gui: + ... + no-started-quests: + name: "&c&lNo Started Quests" + lore: + - "&7Go start some!" + type: "FEATHER" +``` + +## Quest cancel yes + + +*`gui.quest-cancel-yes`* + +Confirmation item in the quest cancel menu. + +``` yaml +gui: + ... + quest-cancel-yes: + name: "&a&lConfirm Cancel" + lore: + - "&7Confirm you wish to cancel" + - "&7this quest and lose all" + - "&7progress." + type: "GREEN_STAINED_GLASS_PANE" +``` + +## Quest cancel no + + +*`gui.quest-cancel-no`* + +Cancellation item in the quest cancel menu. + +``` yaml +gui: + ... + quest-cancel-no: + name: "&c&lAbort Cancel" + lore: + - "&7Return to the quest menu." + type: "RED_STAINED_GLASS_PANE" +``` + +## Quest cancel background + + +*`gui.quest-cancel-background`* + +Background item in the quest cancel menu. + +``` yaml +gui: + ... + quest-cancel-background: + type: "GRAY_STAINED_GLASS_PANE" +``` diff --git a/docs/configuration/index.md b/docs/configuration/index.md new file mode 100644 index 00000000..32f9e38e --- /dev/null +++ b/docs/configuration/index.md @@ -0,0 +1,7 @@ +--- +title: Configuration +nav_order: 5 +has_children: true +--- + +# Configuration
\ No newline at end of file diff --git a/docs/configuration/storage-providers.md b/docs/configuration/storage-providers.md new file mode 100644 index 00000000..f8d68886 --- /dev/null +++ b/docs/configuration/storage-providers.md @@ -0,0 +1,137 @@ +--- +title: Storage providers +parent: Configuration +nav_order: 10 +--- + +# Storage providers +{: .no_toc } + +A **storage provider** is a source for player data +(sometimes referred to as quest progress files). Quests requires that +one storage system be configured to allow the plugin to initialise. If +there is no storage system configured, the plugin will default to +**yaml** storage. If there is an error for any reason during the +initialisation of a storage system, the plugin will be disabled. + +- YAML (`yaml`) +- MySQL (`mysql`) + +When changing storage systems, **the plugin must be restarted for the +changes to have effect**. + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +## Supported storage systems + +### Flatfile + +#### YAML + +Storing player data in YAML files is the default storage method in +Quests, and is a type of 'flatfile' storage. + +``` yaml +options: + ... + storage: + provider: "yaml" +``` + +Player data can be found inside Quests/playerdata/ and can be modified +as long as the server is not running. It is not recommended to try and +alter these files while the server is online, as this could cause data +consistency issues. + +### Network + +{: .warning } +> ️**Using Quests on a BungeeCord network may lead to a possible race +> condition.** Allowing players to to connect directly to another server +> running Quests may result in the new server loading old data. This +> happens because BungeeCord establishes a connection with the new server +> before disconnecting the player from the old one, leading to the new +> server loading player data before the old server has saved it. +> +> Quests offers a workaround, which is to [delay the loading of player +> data](#delay-loading "wikilink"). You may also want to +> consider forcing players to switch servers through a hub server, or +> decreasing the autosave period. In either case, the race condition still +> exists; there is not an easy way to coordinate the loading/saving due to +> how BungeeCord works. **You must understand this warning before using +> Quests in this way.** + +#### MySQL + +Quests can connect to and store player data in a MySQL database. This is +particularly useful if you want to have multiple servers use the same +player data. + +``` yaml +options: + ... + storage: + provider: "mysql" +``` + +You must also configure the plugin to connect to the database. + +``` yaml + database-settings: + network: + database: "minecraft" + username: "root" + password: "" + address: "localhost:3306" +``` + +The database specified **must** exist before connecting Quests to it. +The address is given in the following format: ip:port (e.g +127.0.0.1:3306). + +There are also some other options you can configure, as Quests uses +HikariCP to manage its connections to the database. You can see +descriptions of each option on the [HikariCP +README](https://github.com/brettwooldridge/HikariCP). + +``` yaml + connection-pool-settings: + maximum-pool-size: 8 + minimum-idle: 8 + maximum-lifetime: 1800000 + connection-timeout: 5000 + table-prefix: "quests_" +``` + +## Data synchronisiation + +### Delay loading + +Quests offers a workaround to the [race +condition](Storage_providers#Network "wikilink"), which is to delay the +loading of player data in hopes that the server before has enough time +to save the data. + +You can enable this in your config here: + +``` yaml +options: + ... + storage: + provider: "mysql" + synchronisation: + delay-loading: 0 # (ticks - change to any value above 0) + ... +``` + +A value of 50 (2.5 seconds) should be enough for most servers, however +you may want to increase it if, for example, your database is not on the +same network as your Minecraft server. Again, this **does not solve the +race condition**, but it should help mitigate it. + +See the issue in the issue tracker: +[Issue 180](https://github.com/LMBishop/Quests/issues/180) |
