### Changed
- previous maven artifact repository nexus `https://nexus.betonquest.org/repository/betonquest/` replaced with reposilite available at `https://repo.betonquest.org/betonquest/`
- Bukkit API events are now called sync/async depending on the tread context they are called in
- actions, objectives, and conditions do not replace underscores anymore. quoting syntax needs to be used now
- `brew` objective now checks brewed items in a more accurate way
- `simple` quest items now resolve placeholders one time on reload to support `constant` placeholders
- `owner:%player%` was changed to `owner:` to allow constant pre-parsing
- `npc_conversations` show the combat message only if there is a bound conversation
- `Journal` and `Quest Item` are checked with PersistentDataContainer instead of lore
- `hologram`'s `top:` line to customizable format
- LoadDataEvent is now called before and after the data is loaded with a new enum `LoadDataEvent.State` that indicates the state
- configuration structure and naming
- reworked the entire config.yml file
- renamed `max_npc_distance` to `max_conversation_distance`
- renamed `acceptNPCLeftClick` to `npcs.accept_left_click`
- renamed `npcInteractionLimit` to `npcs.interaction_limit`
- `message.yml` file was deleted, and instead the lang folder now contains all translations
- `menuConfig.yml` file was deleted, translations are in the lang folder, and the config is part of config.yml
- `item.backpack.cancel_button` and `item.backpack.compass_button` do not have a `DEFAULT` value anymore, instead you need to specify an item
- terminology and naming
- renamed `Variables` to `Placeholders` in the entire project
- renamed `Events` to `Actions` in the entire project
- renamed `global` property for objectives to `auto-once`
- cross-packages now use `>` instead of `.` to solve conflicts in placeholders
- in objectives - `event` and `condition` are now `actions` and `conditions`
- in actions - `condition` is now `conditions`
- in menus - `condition` is now `conditions`
- in conversations - options `condition`, `event`, `pointer` and `extend` are now `conditions`, `actions`, `pointers` and `extends`
- commands
- `item` command now requires the specification of serializer
- `variable` command allows setting and getting data now for offline players
- `objectives` can now be removed from the database via command even when it does not exist
- conversations and conversation IOs
- conversations now always print their start and stop conversation message
- `menu` conversation IO settings are now defined the `config.yml` file in the `conversation.io.menu` section
- `menu` conversation IO based on packetevents renamed to `packetevents`
- `menu` conversation IO displaying and scroll behavior rework
- `menu` conversation IO no longer ignores canceled bukkit events to process as input
- `packet` chat interceptor was renamed to `packetevents`
- custom items in the chest conversation IO are now defined in the `properties` section as an option
- `%quester%` placeholder is used instead of `%npc%` for the quester's name in conversations; `%npc` placeholder is now used for the new npc system
- `chest` conversation IO now actually ends when there is to npc option left or the player closes the inventory
- integrations
- `ProtocolLib` was replaced with `PacketEvents`
- `MMOCore` integration updated to `1.13.1-SNAPSHOT`
- menus and menu items
- menu item's name and lore are no longer italic by default, name can be overridden while keeping original lore
- `bound_item` now finds the first menu allowed to open instead aborting after the first check
- npcs
- `citizens` npcs to use the npc identifiers of BetonQuest instead of those from Citizens
- `citizens` npcs hiding now uses the inbuilt player filter trait
- `npcs` in the `npc_holograms` and `npcs`, `conditions` and `locations` in the `effectlib` section now use comma-separated lists
- element behavior
- the actions in quest cancelers to be now executed before the teleport
- `items` now have a type like other elements
- `math` placeholder now gives a better exception message and does not return 0 instead
- `cancel` action now respects by default canceler conditions
- `fish` objective use block selector instead of a quest item
- `actions`, `objectives`, `conditions` and co. are now case-insensitive
- `interact` objective now accepting `any` as an option for the entity type argument
- `pickrandom` action now use tilde instead of percentage
- `mooncycle` condition is now `moonphase` and uses a list of the phases instead of numbers
- `mmobkill` objective now uses the killer (if present) to resolve names and distances
### Added
- `package.version` for quest packages and quest templates
- `constants` can be addressed with the new constant placeholder
- `bypass` keyword to `cancel` action to ignore conditions in quest cancelers
- `eval` action and condition to resolve a string and interpret it again as action/condition
- `sync` placeholder offering identical evaluation as `eval` but forcing the execution on the main thread
- `mainhand` selection order to `take` action
- `abort` flag and `fail` actions to (chest) take action
- `debug dump` command to only dump the history to the log file
- `unit` as optional argument to the `folder` action to define the time unit for ticks, seconds, and minutes - defaults to seconds
- support for `itemModel` for the totem NotifyIO (MC 1.21.4+)
- optional ingame message for plugin updates (previously removed in 2.1.0)
- `FastStats` to provide better statistics for BetonQuest
- all of Minecraft's default font widths are now used to calculate the width of a string for line wrapping
- support for text parsing formatter allowing for minimessage, minedown, and other formats for texts
- support for placeholders in all actions, objectives, conditions, and more
- list arguments allow for placeholders to be used in each element or all elements
- menu features
- menu items are now in the `menu_items` section, allowing references from multiple menus
- `title` allows defining different messages
- `bind` item for specific clicks
- `check` flag to `menu` action to respect the menu's open conditions
- `menu` action now supports the `update` action to update the currently opened menu
- item types and item system improvements
- `mmoitem`, `nexo`, `craftEngine`, `itemsAdder`, `mythic`, `brew`, `magic` item types
- `simple` item type
- `item-name` argument (MC 1.20.6+)
- `item-model` & `no-item-model` arguments (MC 1.21.4+)
- `custom-model-data` support for data lists (MC 1.21.4+)
- `quest-item` argument for Mythic(-Mobs) and MMOItems item types
- integrations and features to existing integrations
- `FancyNpcs`, `ZNPCsPlus` and `MythicMobs` as new options for npcs
- `FancyHolograms` as compatible hologram plugin
- `citizens` npcs are now used only from default registry
- `mcast` action to cast a Mythic(Mobs) skill with skill parameters for a player
- `mmostat` action to modify the player's stats using the MythicLib (MmoLib) integration
- `brew` action/condition `mode` parameter to select by name or id
- `mode` to `mmobkill` to allow checking for faction instead of name
- new conversation features
- notification categories `conversation_start` and `conversation_end`
- `menu` conversation IO settings to configure the scroll down and up buttons
- native `menu` io implementation which sets the player's speed to zero instead mounting it on an arrow (MC 1.21.4+)
- `invincible` config option to disable conversation invincibility
- `conversation.block_item_transfer` option with per-conversation override to prevent item moving while in a conversation
- new notification category `conversation_nothing_to_start`
- config option `conversation.interceptor.display_history` to allow the interceptor to send the chat history after a conversation
- config option `conversation.interceptor.delay` to configure a delay between the end of a conversation and the moment the interceptor is ended
- new objectives
- `timer` to track ingame time
- `point` to track point changes
### Removed
- spigot support entirely, now paper is required
- undocumented prefix feature in conversation
- `citizens_npcs_by_name` config option, which is now part of the id
- start and stop sound in the configuration for conversations were removed in favor of the notification system that now also has the two new build in categories `conversation_start` and `conversation_end`
- `menu reload` command which did not work
- `variables` section
- `MMOItems` conditions, actions, and the `mmoitemcraft` objective in favor of the built-in ones
- `journal.chars_per_page` was deleted from the config.yml
- undocumented way of addressing packages in some placeholders
- `journal.show_separator` option deleted
- `display_missed` config option, as the `none` interceptor should be used instead
- legacy multiply with `*` for points
- dependency `PaperLib` since its discontinued
- aliases `/q`, `/j` and `/b` to improve compatibility with other plugins by actively reducing conflicts on command names
- `Brewery` item condition and actions, in favor of the built-in ones
### Fixed
- plugin did not reload menu config correctly
- potions generated have not been extended/upgraded since 2.2.1
- biome condition on Minecraft 1.21.4 could not parse the biome from the instruction anymore
- `randomnumber` placeholder now correctly returns lower bound
- `stage` objective `index` property not working and now also starts at 0
- betonquest command without arguments did not work anymore
- `Fabled` hook not working properly
- `quest canceler` did not resolve global placeholders
- `quest canceler` used `loc` instead of `location` key for teleportation
- `journal` language only changed after rejoin when changing player language
- `journal` entry renaming or deleting via command now affects all specified pointers and not only one
- `ride` objective did only count vehicles, not all entities
- scrolling the mouse in the menu conversation IO did not work
- `MMOCore` attribute loading with MMOCore 1.13
- missing messages `animals_to_tame` and `times_to_jump` in language files by adding them
- `menu` item parsing with newlines caused missing lines in some cases
- `menu`s throwing exception on reload when bound commands are used
- `mmoitemcraft` objective NoSuchMethodError with MMOItems 6.10+
- `menu` conversation IO exception in one edge case
- `interact` objective's documentations used hookLocation instead of loc for the location
- `randomnumber` placeholder using locale/eventually comma instead of dots breaking further using like math
- `interact` objective now blocks the interaction with an item frame properly if cancel is set
- `brewery` null pointer exception when a brew has no recipe
- `npcrange` objective did count player without it valid for `outside` action
- `global objective` error on join when it was added with the command or the tag got removed
- `tellraw` conversation IO showed pop-up for unknown command
- `simple` item `flags` crashed plugin when invalid
- disabling the plugin no longer causes hardly expected zip errors
- `mspawnmob` exception when spawning the mob is canceled/forbidden
- conversations could cause deadlocks when too many conditions are checked
- `itemdurability` placeholder parsed differently than intended in docs
- database connection is now more stable and reconnect probably works better now
- `QuestItem`s and `Journal`s could be put into bundles (MC 1.21.4+)
- hologram integration with the lowest priority was selected instead of with the highest
- broken conversation states no longer trap players
- `firework` colors de-/serializing in `simple` item when there is no color
- `nujobs_payment` objective wrongly using target amount for everything
- `MMOCore` actions and conditions now no longer wrongly accept offline players
- offline player data access in multiple elements supporting offline context
- code in `npcmove` action effecting the end of a navigation to may return to a previous location in some cases
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }