GitHub repository: SkytAsul/BeautyQuests
Description: A quests plugin based on a simple-to-use graphical interface (Minecraft)
Topics: bukkit, discord, graphical-interface, gui, inventories, java, minecraft, quest, quests-plugin, rpg, spigot, wiki

1.0.2 - Fixes: tag_name: 1.0.2
body: - Fixed plugin not starting on 1.8
- Fixed missing items and blocks on 1.20.3 and 1.20.4
- Fixed impossible to edit min/max values for "random rewards"
- Added support for PostgreSQL databases
- Optimized WorldGuard integration
- Added advanced "mustBeHighest" option for region requirement
1.0.1 - Minecraft 1.20.4: tag_name: 1.0.1
body: * Added support for 1.20.3 and 1.20.4
* Scoreboard scores at the right are no longer shown in those versions
1.0 - Full recode: tag_name: 1.0
body: # Changelog
### Code-wise:
- Completely separated the api, the features and the integrations in different modules. This will help future development, and will make extension development easier for external developers.
- Rewritten most of the plugin to allow more flexbility in future features. This means cleaner code, less bugs and hopefully a performance boost!
- Deployed javadocs and sources artifacts of the API on the Maven repository
### NPCs integrations:
- **Having an NPC plugin is no longer mandatory** to use BeautyQuests :) This means anybody can now simply download the plugin and run it without any dependency to add.
- You can now have NPCs from **multiple NPCs plugins**. For instance, some of your NPCs come from Citizens, and some others from ZNPCs.
Changed how most stages handle progress:
- all stages that have some kind of progress can now have a progress bar (e.g. "eat food", "craft items" or "play time")
- you can now configure much more finely the description of stages with progress in *config.yml*
- added integration for ZNPCsPlus
- upgraded support for ZNPCs from 3.6 to 4.2
### Placeholders:
- All placeholders in strings are now named and no longer indexed.
- For instance: `Level {short_level} for {job_name}` replaced `Level {0} for {1}`
- This is 1. much more easier to understand when translating the plugin
- And 2. an amazing thing to allow much more personalized messages, because there are now many different placeholders for every message.
### Rewards/requirements
- By popular request, the remove button for rewards and requirements from middle-click to shift + left-click :)
- Added a way to configure the reason sent in the chat when a player wants to start a quest but does not meet a requirement
- Added a way to configure the description of rewards and requirements in the quest description shown in the menu
- Fixed issue with requirement reason order

![Image showing a quest in the menu with custom rewards and requirements descriptions](https://cdn.discordapp.com/attachments/482638987572281374/1098336581770805289/image.png?ex=653038a7&is=651dc3a7&hm=a9c5c3f9dc779178e4795a4e8d3478a7bf58fbf07df7072a5333c5e2d197a2fc&)
### Misc. changes:
- The GPS integration has been removed and is now a tracker in the expansion
- The `skillAPIoverride` *config.yml* option has been deleted. Instead, a new reward type has been created: "SkillAPI XP Rreward"
- Placeholders are now parsed by default in command rewards
- Checkpoints are now using the "quest flow" feature to follow the path players have taken during the quest
- Changed middle-click to shift-left-click to remove items from GUIs
- Added `%beautyquests_quest_restartable_ID%` placeholder to get whether a quest is restartable or not
- Added support for 1.20, 1.20.1 and 1.20.2
- Added MMOItems item comparison
- Fixed multiple exceptions
- Fixed an issue with the "parse placeholders" option of "write in chat" stage not working
- Added "max messages per history page" dialog option in *config.yml*
- Changed some quest pool give logic, this will probably fix issues with the "avoid duplicates" pool option. This will also allow users to use the "yes/no" GUI to accept or not quests from the pool!
- Fixed issues with 1.20.2 (including scoreboard support)
- Placeholders should now be parsed everywhere
- Reworked quest selection GUI (the menu that appears when a player clicks on an NPC): the description, rewards and requirements of quests are now shown. It is also now more configurable:
```yaml
# - Quest selection -
# Options related to the behavior when a player click on an NPC which has associated quests
questsSelection:
  # If enabled, the "choose a quest from this NPC" GUI will not open if there is only 1 quest attached to the NPC
  skip gui if only one quest: true
  # Hide quests from the GUI if the requirements are not met
  hide quests without requirement: true
```
- Fixed blockdata editor not working
- Fixed particle GUI not showing up-to-date data
- Fixed `/quests edit` not working properly when clicking on an NPC
- Fixed `/quests edit` not working properly when editing a quest with branches
- Added support for ZNPCsPlus 2.0
* Fixed "scoreboard" requirement
* Fixed some dialog lines not having placeholders parsed
* Fixed outdated migration to DB algorithm
* Fixed bugs when filling entirely a page of rewards or requirements
* Fixed errors when running the plugin on Java 8
* Updated translations
* Added Finish and Danish translations
* Added some logging to understand issues with inventories
* Fixed custom mob name and minimum level not being updated in the GUI while editing mobs to kill
* Added a "DISABLED" mention to the "validation requirements" button of the "wait some time" stage
* Fixed the NPC selection editor not working for "kill mobs" stage
* Fixed error popping in console when scoreboards failed to enable
* Made plugin extra resilient to lack of data for a stage
* Added player selector support for pool start command
* Fixed dynmap integration not working
* Added offline modes to "play time" stage
* Fixed item creator GUI not refreshing properly
* Players cannot place quest items as blocks anymore
* When setting "none" as the custom stage description, the stage will no longer appear in the scoreboard if there are other stages to branch with (this allows to make hidden stages)
* Added some customization to the GUIs:
  * Previous page and next page buttons can now be configured separately as two configuration settings in the new "gui" section (see below)
  * You can now customize more deeply the page item, for instance, by adding custom model data to them
  * Added a new configuration setting "vertical separator" that can be used to remove the column of glass pane in most GUIs. This gives 5 more slots to show objects.
```yaml
# - GUIs-
# Some options related to graphical user interfaces
gui:
  # Previous page item
  previous page item: ARROW
  # Next page item
  next page item: ARROW
  # Show a vertical separator made of glass pane between the items pane and the arrow buttons
  vertical separator: true
```
Here is an example of utilisation of the new options, as well as a texture pack and custom fonts:
![Image](https://cdn.discordapp.com/attachments/1179516837977919650/1179881881186095175/image.png)
0.20.1: tag_name: 0.20.1
body: **Changelog:**
- Added support for 1.19.3 and 1.19.4
- Added lot of debug logs for player data loading
- Updated lot of translations, added Brazilian Portuguese translations
- Added the {3} placeholder for stageDescriptionItemsSplit.amountFormat config option. It represents the progression as a percentage.
- Added "skip npc gui if only one quest" config option, which defaults on "true"
- Added "hide unknown quest placeholders" scoreboard config parameter, which allows to hide lines such as ones containing the {quest_time_limit} placeholder from the Expansion when the current quest does not have a time limit
- Made block type name customizable for Mine/Place blocks stages.
- Helpful when using block tags such as minecraft:iron_ores, now you can have the counter with a pretty name such as "Iron Ores".
- Refactored how stage with progression work internally (kill mobs, eat/fish/enchant/melt items, place/break blocks).
  - Code is now cleaner and will allow more customization in the future.
  - Migration will happen automatically.
  - *Once quests are migrated, there is no way to come back unless you restore a backup.*
  - Updated "kill mobs" and "mine/place blocks" stage edition GUIs to allow more than 8 mobs.
- Added "ItemsAdder ID" item comparison for "bring/craft/melt/enchant/fish/eat/drink items" stages
- Added "none" keyword to the "asking message" editor for "bring items" stage
- Internally reworked data management to be handled fully asynchronously => it will prevent the server from crashing when the database connection is lost :)
- Added the /quests pools start <player> <pool> command
- Moved /quests resetPlayerPool to /quests pools resetPlayer

**Fixes:**
- Fixed issues in 1.8
- Fixed "quest limit" feature not working correctly
- Fixed issues with "quest stop" reward for branches
- "region exit" stage is now working correctly with WorldGuard 7
- Fixed WildStacker on 1.8
- Fixed bugs with "fill buckets" stage
- Fixed scoreboard not being used at its full width
- Fixed hex colors not working in scoreboard
- Fixed equipment requirement not checking item amount
- Added database auto-reconnect option
- Potion of the Turtle Master is now correctly displayed in stage description
- Made logger file encoded in UTF-8
- Improved TPS by a lot when using znpcs

**Full Changelog**: https://github.com/SkytAsul/BeautyQuests/compare/0.20...0.20.1
0.20 - Err... wow?: tag_name: 0.20
body: **New stages, requirements...**
* Added a "Die" stage, which gets completed when players... die.
    * You can choose which death reasons are acceptable (drowning, getting killed by an entity, falling from too high...)
* Added Equipment requirement: you can now choose which item a player has to hold in its hand, which helmet it must wear...
* Added Deal Damage stage type: this stage will get completed once player deals a specific amount of damage to configurable mob types
* Added "Eat or drink" stage type, which works for every type of consumable items: food, milk bucket, potions...
* "Craft item" stages now work for items melted through a furnace (or smoker or blast furnace) and items "crafted" using a smithing table (netherite items)
* In a "Kill mobs" stage, you can now choose the target level of mobs to kill from the MythicMobs and LevelledMobs plugins

**Quests menu**
* GUI description for quests is now modulable, which means external developers are now able to add their own custom lines!
* Quest description and rewards are now shown in the "in progress" and "finished" tabs.
* Added a quest option "Visibility" to choose specifically in which tabs of the menu the quest should appear. This option also allows you to enable or not the marker on your dynamic map (dynmap or BlueMap)

**New commands interface**

* Switched the custom command framework to Lamp.
* This allows for more advanced command features (such as flags, i.e. */quests start ... -overrideRequirements* instead of a nameless true at the end of the command)
* This allows for Mojang's Brigadier to be used: arguments now have proper names and coloring.
* This allows for player selectors! The finishAll, resetPlayer, cancel, finish and start commands now accepts multiple players (i.e. */quests start @a[distance=0..50] 12*)

![BQ command in chat](https://cdn.discordapp.com/attachments/482638987572281374/1013155635677892769/unknown.png)

**Scoreboard quest tracker**
* Quest tracker in the scoreboard now has more attached placeholders: quest name, quest advancement, quest description, quest rewards (and time left for the expansion)
* Renamed placeholders {questName} to {quest_name} and {questDescription} to {quest_advancement} in scoreboards (backward compatibility is kept)
* This allows to dynamically get informations about the quest currently being shown

**Versions and plugins support**
* Added support for Minecraft 1.19
* Dropped support for Minecraft 1.10, 1.11, 1.13 and 1.14
* Added support for MythicMobs 5
* Added support for HolographicDIsplays 3
* Added support for PaperMC API-specific features (for the moment, it is only used to prevent quest items from being dropped on death)
* Added AdvancedSpawners integration
* Updated BlueMap integration (now works with 3.3 and higher *only*)
* Added DecentHolograms integration to show holograms. (nothing different with the HolographicDisplays integration)
* Added LevelledMobs integration
* Added WildStacker integration: when killing a whole stack of entities, all of the mobs are now counted for the quest

**Data change**
* Changed player data structures in database and files.
* Stage datas are no longer saved in one the 5 previously available slots (stage_0_datas, stage_1_datas...). They are now saved in a list.
* This is more efficient and is a lot more flexible, which means that more complex systems of stages or branching will come in the future :)
* This fixed a bug with SQL rows being created multiple times and bloating the database (some tables which previously had hundreds of thousands of rows will now only contain a few thousands).
* All the changes in database will be made automatically, and duplicated rows will get deleted.
* For the DB migration to happen gracefully, **the database user must have the permission to do ALTER actions**.
* In the case of very large servers, the DB migration may take some time to happen. Some extra caution must be taken, so please come talk to me on Discord.
* Database system has been revamped and now uses the widely-used *HikariCP* connection pool. This means performance improvements and probably less weird issues related to database connection.
* Sped up database data storage by making proper use of primary keys. The performance improvement will be *huge* on large databases.

**PlayerBlockTracker**
* Added an integration with the PlayerBlockTracker plugin
* If the plugin is enabled on your server and the BQ config.yml option "usePlayerBlockTracker" is set to true (enabled by default) then BeautyQuests will use PlayerBlockTracker's advanced block tracking capabilities to prevent players from completing a "mine X blocks" stage with player-placed blocks (to prevent exploits)
* In comparison with BeautyQuests integrated block tracking system, this allows:
    * to track blocks moved using pistons
    * to track blocks placed by other players
    * to track blocks across time: the data is persistent and no longer lost after a server restart
* Available here: [URL]https://github.com/Flo0/PlayerBlockTracker/releases[/URL]

**Reworked most of the API**
* Probably all external code will fail to work until updated correctly. It is mostly methods/classes/fields renaming though.
* Added a whole new "Locatable" API which allows to fetch informations about where the player has to go in its quests
* Refactored internal player account loading system, now there is a better API to fetch account of offline players
* Exposed the "Locale" API
* Added "stage options" system for external plugins to save datas into stages
* Added "additional player datas" system to add more datas in a player account
* Quest objects (rewards and requirements) can now be (de)serialized using *ConfigurationSection* instead of *Map<String, Object>*, for better code readability
* Moved *AbstractCountableStage *to the new *api.stages.types* package
* ...and more, check it out by yourself :)

**Miscellaneous changes and fixes**
* The "list" command in multi-line editors now show line numbers
* Added the ability to remove the pool from a quest by shift-clicking
* Sounds of messages on dialogs are now cutted out when players skip a message
* Made some "list" GUI sorted by name
* Edited the "npcClick" config option from a single choice to a list of clicks.
* Available clicks are: LEFT, RIGHT, SHIFT_LEFT, SHIFT_RIGHT.
* Fixed issues where multiple stages can get completed at the same time
* Fixed the "blockdata" editor filling unspecified block datas with their default values
* Fixed the "quest item" option editor allowing for non-item materials (such as fire), which caused the quest item to disappear entirely from the menu
* Fixed errors on PaperMC when using asynchronous rewards
* Fixed dialog history still opening whereas disabled in config.yml
* Fixed the "interact with" stage being completed twice
* Fixed an issue with holograms disappearing
* Added missing translations, updated FR, RU, VI, ES, IT, PL, CN, TH, HU locales
* Added UK locale
* Fixed the active quest description when players were in an async start/end of quest
* Fixed several issues with 1.8
* When a backup is created (when updating the plugin for instance), player datas also get "backuped" (only if using the YAML storage system)
* Fixed crafting exploit
* Fixed timer not being tested in */quests start <player> <quest id>*
* Fixed bugs on quests launched automatically on first join
* Fixed a bug with "interact with block at" when the world is unloaded at startup
* Made player removed from inventory system when it crashes during the GUI opening (this may have caused item exploits)
* Added bStats metrics for dependencies
* Fixed wrong message being sent for "bring back items" stage
* Fixed empty message being sent for the same stage when the message is set to "null"
* Added a per-player limit of launcheable quests using permissions: *beautyquests.start.X*
* Made some changes in order to allow creating quests in symbolic linked folders
* Quests that are not in progress can no longer be cancelled using */quests cancel* (why was this even possible?)
0.19.7 - Minecraft 1.19 support: tag_name: 0.19.7
body: **Changelog:**

- Fixed errors on PaperMC when using asynchronous rewards
- Fixed dialog history still opening whereas disabled in config.yml
- Added 1.19 support
- Dropped 1.10, 1.11, 1.13 and 1.14 support
- Fixed an issue with newer versions of HolographicDisplays 3.0.0. Users _must_ update to the very latest version of HolographicDisplays, available [here](https://ci.codemc.io/job/filoghost/job/HolographicDisplays/)!
0.19.6 - Fixes: tag_name: 0.19.6
body: **Changelog:**
- Fixed particles being shown to every players instead of a per-player behavior
- Fixed some materials (such as the "Otherside" music disc) not being recognized by the plugin
- Fixed some issues with the colored string wrapper, which caused the server to crash.
0.19.5 - Patching the patch: tag_name: 0.19.5
body: **Changelog:**
- Patched the previous patch: crafting stages no longer got completed when not shift-clicking on the items...
0.19.4 - Fix crafting exploit: tag_name: 0.19.4
body: **Changelog:**
* Updated zh_CN locale
* Fixed an exploit where players can complete a crafting stage whereas they do not actually craft the required item
0.19.3: tag_name: 0.19.3
body: **Additions:**
* Added the ability to select a custom ID when creating a quest, using `/quests create [id]` (although it is recommended to let the id field empty and let the plugin decide the ID)
* Added "melt items in furnace" and "enchant items" stage types
* Added the "parse placeholder" option for command rewards. If enabled, PlaceholderAPI placeholders will get replaced by their value before command execution.
* Added `%beautyquests_started%` palceholder, which displays a list of started quests along with their description.
* Added "dialogs.maxDistance" config option. It decides the maximum number of blocks players can walk away from a NPC before its dialog gets stopped and resets.

**Changes:**
* If the `dialogs.inActionBar` option is enabled, messages will now be displayed on screen for the correct duration
* When errors occur while parsing placeholders, they are now sent to the console
* Totally reworked the particles system to be more efficient; it is now possible to use new particles (previously it was only possible to use pre-1.13 particles)
* Changed quests YML data format
* Migration will occur automatically, but is irreversible
* Backward-compatibility is kept
* For devs: switched in-code (de)serialization system from using raw *Map<String, Object>* to complete Bukkit's *ConfigurationSection* system

**Fixes:**
* Fixed exception in "find NPC" stages with no dialogs
* When Citizens gets reloaded, BeautyQuests will now adapt and no longer crash all of its NPCs (this probably fixes an issue with ItemsAdder and holograms)
* Updated FR, CN, VI locales

SpigotMC update: https://www.spigotmc.org/resources/beautyquests.39255/update?update=455535
0.19.2: tag_name: 0.19.2
body: See full changelog here: https://www.spigotmc.org/resources/beautyquests.39255/update?update=452801
0.19.1: tag_name: 0.19.1