Added
- A Bukkit event which fires when a player's points change
folderevent now has an argumentcancelConditionsto cancel a running folderactionobjective now supports configuring the hand used for the interaction, preventing multiple objective completions at the same time on right click
Fixed
- fixed NPC navigation by giving better error messages and handling the stuck action correctly
- custom sounds from resourcepacks could not be used in conversation start and end sound
chestputobjective caused that no chest could be opened on the server whenmultipleaccesswas forbidden(default)- providing wrong commit sha to the download command now gives a proper error message
- no longer set damage in
QuestItemif none set - loading of a backup file has the wrong order of applying the statements, causing exceptions and a broken migration
Added
- new conversation options
start_new_linesthe amount of new lines that should be printed before the conversation startsnpc_text_fill_new_linesshould lined be filled between the NPC text and the player answer options
worldcondition now supports variables for the world name- underscores are now escapable in item names and lore via
\_ weathercondition now allows to define a world, which can be a variable and can now be used in static contexttimecondition now allows to define a world, which can be a variable and can now be used in static contexttimecondition now supports minutespasteevent can now rotate schematicspermissioncondition now supports variablesmoonCyclecondition now allows to define a world, which can be a variable and can now be used in static context- global variable support for npc ids and condition ids in
effectlibsection andcondition can now be static- missing tab-completion and documentation for globalpoints and globaltags command
partycondition now supports a location variable, to be used in a static contextenititycondition now supports variables for the entity namemmochangeclassobjective for MMOCore that listens for a player changing their classremoveentityevent now supports variables for the entity namevariablecondition can now be used in a static context- TrainCarts integration
traincartslocationobjective that executes when the player passed a locationtraincartsrideobjective that executes when the player is riding a traintraincartsexitobjective that executes when the player exited a traintraincartsridecondition to check if the player is riding a specific named train
scoretagevent and conditionactionobjective now supports configuring the hand used for the interaction, preventing multiple objective completions at the same time
Changed
spawnevent now only spawn mobs and no other entities- ProSkillAPI rename to Fabled
- this includes the class and level condition
Fixed
- broken title check in book
QuestItem - BlockSelector did not match exact block matches and started regex matching causing performance issues during load and reload
- wrong order of arguments in fire work effects
- non-static
variablescausing cross conversation validation to break - LuckPerms integration not pushing the permission update to the connected servers correctly.
craftingobjective where complex recipes are not recognizedhieghtcondition where variable locations threw an exceptionglobalpointcondition where not initialized global points where 0pointcondition where not initialized points where 0QuestItemPotions cannot be saved in 1.20.5+- Schedules could run twice on some systems by an inaccurate time returned java's Instant.now()
Journalinteraction with blocks like lecterns- sections that are created in templates by write operations, where no edits should actually be done
- this caused a lot of "ghost" sections that could not be loaded like schedules, menus and manny more
- Conversations work in 1.21.3 again
Added
- BreweryX compatibility
Changed
mspawnmobcan now be used in static context
Fixed
- LuckPerms integration not sending the permission updates via the messaging service to connected Servers in the same network.
- LuckPerms TagCalculator trying to use PlayerData even if player is offline
- Memory Leak in CombatTagger
- AdvancementIO not working in mc 1.20.5/6 and 1.21
- chaining of movenpc events did trigger fail events
- effect event duration -1 did not result in infinite duration
- translation in conversation got stored in default language
- incorrect calculation of the width of strings when using characters with certain accents when doing pagination
Added
- LuckPerms permission events
addPermissionevent adds a permission to a playerremovePermissionevent removes a permission from a player
- Location Vectors can now be chained
evalvariable to resolve a variable string as variable
Changed
AureliumSkillswas renamed toAuraSkillsthe following was changed in BQaureliumskillslevelcondition was renamed toauraskillslevelaureliumstatslevelcondition was renamed toauraskillsstatslevelaureliumskillsxpevent was renamed toauraskillsxp
- prevent reply when the text is not completely displayed for the SlowTellRaw conversation IO
resourcepackobjective is now paper onlydieobjective now support respawns without canceling the actual death of the playerphvariable can now be used static
Fixed
- NPE if a player replies to a SlowTellRaw conversation IO when the text is not completely displayed
- head
QuestItemmatches even if they are distinct - modulo operator in math variable can now be used by escaping the percent sign
weatherevent not static callable even when providing a world
Fixed
- math variable with dots (since 2.1.0)
Changed
- player variable
%player%is now the same as%player.name%%player.name%will display the name of the player%player.display%will use the display name used in chat%player.uuid%will display the UUID of the player
- marking of mobs now uses variables in all contexts of spawning killing and removing
- marking of mobs is now stored in the persistent data container of the entity to prevent loss on server restart
- default
default_conversation_IOin config frommenu,chesttomenu,tellraw - corrected Russian messages in
messages.ymlfile
Added
blockobjective now supports parameterslocandregionto limit the areablockobjective now supports the parameterignorecancelallow counting breaking / placing blocks in protected regions- command
variableto list and modify variables on a variable objective - config option
conversation_IO_config.slowtellraw.message_delayto set the delay between messages in the SlowTellRaw conversation IO resourcepackobjective - to allow checking when the player accepts, denies, downloads, or fails to download a resource packregionobjective now supports variables as region namelocationobjective now allowsentryandexitkeywords to track entering and leaving the location- allowing adjustment of maximum hologram display radius
- support to execute BetonQuest commands from command blocks
Fixed
variableobjective loads newlines correctly- exception in
lookAtBlockcondition when omitting the type - MMOCoreClassCondition, MMOItemsGiveEvent, MMOItemsHandCondition and MMOItemsItemCondition now work with numeric identifiers
- yaml multiline instructions could lead to partly working events, conditions and objectives
- creation of advancement tab when an advancement NotifyIO is sent
burnevent throwing unexpected error when omitting duration- added missing firework meta to string representation of QuestItem
- required flags in
QuestItemwere not relevant in equals check folderevent did not respect the sync / async context that it is executed in- incorrectly measuring the distance between player and hologram if they are in different worlds
- incorrect calculation of the width of strings when using some special characters when doing pagination
- previously undocumented quoting in instructions
Added
hungerevent now supports variablestimeevent now supports variables and newticksargument
Changed
- Quests by PikaMug got updated from version 4.X to 5.X
- The ProtocolLib dependency was downgraded from 5.2.0-SNAPSHOT-679 to 5.0.0-SNAPSHOT-636
Fixed
weatherevent did not usedurationleverevent does not work with redstone- papers future remove of CB package relocation
Added
- Logging
- Ingame logging
- Logging during
/q reload
- Logging during
- New command
/q debug ingame - Debug logging to separate file
- Log history length can be freely configured
- Ingame logging
- Quest Templates
- A new folder
QuestTemplatescan now be used to define templates for packages - templates can also extend templates
- A new folder
- add AureliumSkills Compatiblity
- added AureliumSkillsLevelCondition
- All existing users must add aureliumskills: 'true' to their config.yml's hook section.
- added AureliumStatsLevelCondition
- added AureliumSkillsLevelExperienceEvent
- add DecentHolograms Compatibility
- holograms from DecentHolograms are a direct alternative to HolographicDisplays
- add LuckPerms context integration for tags
- All existing users must add luckperms: 'true' to their config.yml's hook section.
- add FakeBlock Compatibility
- added
fakeblockevent that has the argumentsshowgroupandhidegroupto show and hide FakeBlock groups - added
hook.fake-blockconfig option, default:true
- added
- add RedisChat Compatibility
- added
redischatchat interceptor
- added
- added Event Schedules to replace old static-events system
- static events from schedulers now respect static conditions
- events called by schedules are always called player independent
runForAllevent can now be used to run events for all players that match a conditionrunIndepentevent can be used to run events static (player independent) from player dependent contexts
- added support for Base64 encode custom heads
- can be created from items in inventory using the BetonQuest
itemcommand (Paper only, Bukkit/Spigot can be configured manually) - can be given to players using the BetonQuest
givecommand
- can be created from items in inventory using the BetonQuest
- NotifyIO "totemIO"
- Support for MythicLib
- player attribute to QuestCompassTargetChangeEvent
- added PlayerObjectiveChangeEvent, PlayerJournalAddEvent, PlayerJournalDeleteEvent
- Allow %player% variable for PLAYER_HEAD quest items
- allow access to objective variable properties from other packages
- allow point variables from other packages
- API method in objective API that starts and stops it per player
- config option
default_hologramto set hologram priority if multiple hologram plugins are loaded at once - config option
journal.show_in_backpackto remove the journal from the backpack - config option
journal.lock_default_journal_slotto lock the journal to thedefault_journal_slot - config option
journal.give_on_respawnto add the journal to the inventory after the player respawns - config option
journal.custom_model_datato give the journal a ressource pack based skin - config option
mysql.reconnect_intervalto set the reconnect interval if the connection to the database gets lost - compass now supports items from other packages
- new messages.yml entries
inventory_full_backpackandinventory_full_dropto have more specific messages, when the inventory of the player is full menuconversationIO optionnpc_name_newline_separator- added
q downloadcommand - variable support for menu titles
- configurable cooldown to menu conversation IO
- holograms
- variable support
- top lists ordered by point values of players
npcslist now supports global variables as NPC ID in NPC Holograms
- menus now support global variables
- exposed the Citizen variable and enhanced location capabilities
- menus now support string with newline or string list text values for lore
- amount of objectives now support variables
- added quest item flag recording and restore
- Conversations now support cross conversation pointers to conversations in other packages
- QuestCancelers can now be referenced across packages
- Chat Interceptor
packetis now 1.20.4 compatible freezeevent - ProtocolLib compatibility feature: Blocks the player from moving for the specified amount of ticksblockobjective - properties:absoluteAmount,absoluteLeftandabsoluteTotalcommandobjectiveequipobjectivedelayobjective - now support variablessudoevent - now supports variablesopsudoevent - now supports variablesvariablecondition - now supports variablesbossbarnotify style now supports variables for theprogressandstayargumentsdelayobjective property:rawSecondsfishobjective now hashookLocationandrangesettings.consumeobjective now hasamountargument.mmoprofessionlevelupobjective can now check the main character level as wellburningconditioninconversationconditionlanguageconditionheroesattributecondition - Heroes compatibility feature: Checks a player's level for a particular attribute against a valuevariablecondition - regex can now also be a variablemmspawnevent now has argumenttargetMakes the spawned mob target the playermmspawnevent now has argumentprivateVisually hides the spawned mob from other players. Does not stop sound or particlesmmspawnevent now supports themarkedargumentobjectiveevent now supports a comma separated list of objectivesmmobkillobjective now supports themarkedanddeathRadiusAllPlayersargumentmarkedargument now supports %player% variableglobaltagandglobalpointvariablesburnevent - ignites player for given seconds, supports variablesvelocityevent - throws the player by a vector (can be variable) with a direction and modificationblockobjective - added argumentnoSafetywhich disables removing progress when the player does the opposite of what the objective asks forblockobjective - added property variablesabsoluteLeft,absoluteTotal,absoluteAmountthat always return absolute valueshungercondition and eventvariablecondition - forceSync argument forces the condition to be checked on the main threadvariablecondition - now supports variables as both the input and the regular expressioncommandevent - now suppress console outputcancelconversationeventtimeevent - now supports subtraction and world selection, which made it persistent and staticglobalpointevent - new syntax for manipulating global pointsexperienceevent - it's now possible to change xp, change and set levels and set the xp bardeleteglobalpointeventscoreevent - more options for manipulating the scoreboarditemvariable - newnameandloreargument and now supports items from other packagesrandomnumbervariable added - supports variablesgiveevent - newbackpackargument to place items in the backpack (if a valid QuestItem)partyevent - new optionalamountof maximal affected playersdropeventitemdurabilityevent, condition and variablenumbercompareconditioncancelOnLogoutargument forfoldereventnpcinteractobjective - now supports the argumentinteractionto choose between left, right or both clickslogeventpartyevent - new range 0 and -1 to select players in the same world or server widestageobjective, condition and eventfirstevent - attempts to run a list of events until one successfully runs, like a compressedifevent
Changed
- Java 17 is now required
- changed package names from
pl.betoncraft.betonquesttoorg.betonquest.betonquest - Changed quest package structure
- Quest packages are now searched and loaded from the folder
BetonQuest/QuestPackages/ - Quest packages can now contain more quest packages in sub folders
- Relative paths can now navigate downwards and not only upwards
main.ymlwas renamed topackage.yml- Any file and folder structure with any file and folder names is now allowed, except
package.yml, as that file indicates a quest package events,objectives,conditions,journalanditemsare now defined in a config section matching their namesconversationsandmenusare now defined in a config section matching their names and a unique identifier like the file name before- The
enabledboolean is now defined in thepackagesection
- Quest packages are now searched and loaded from the folder
- all objectives that can be advanced without directly completing now support notify
- all objectives that can be advanced without directly completing now support
left,amountandtotalvariables- the
leftandamountvariables of some objectives were swapped and have been corrected:leftis the amount left,amountis the amount done
- the
- NPC Holograms are reworked
- individual refresh rate for each hologram
- the boolean follow is now set per hologram
- the vector offset origin has been changed. The hologram is now directly above the NPCs head by default. This means all previously custom vectors are now increased by 3 blocks on the y-axis.
- npc_effects are reworked
- the section changed its naming from
npc_effectstoeffectlib - the section
disabledgot removed - the section
check_intervalis now an inner section of the effect and now calledcheckinterval - next to the
npcssection there is now anlocationssection - effects will now follow npcs if they're pathing to another spot
- the section changed its naming from
- AureliumSkills updated to version Beta1.2.5
- PikaMug Quests updated to version 4.1.3
- Items now support AIR
- Menus now support new
clickoptionsshiftLeft,shiftRightandmiddleMouseto execute events on item clicks- Therefore
leftandrightin theclicksection no longer include shift clicks
- Therefore
folderevent - now executes events immediately if no delay is setweatherevent - now has an optional variable duration (in seconds) and an optional world parampasteevent - can now be staticchestputobjective - can now block other players from accessing a chest while someone is putting items inside- The location and region objectives now register movement of players inside a vehicle
- written book is now readable as a quest item
- HolographicDisplays updated to 3.0.0
- Added staticness indicator to variables that can be executed without a direct player connection
- written book quest items can now be read
experienceobjective event and condition were reworked- condition and objective do not support raw experience anymore
- all allow decimal level and variables now
- changed backpack configuration. "" will hide the compass or canceler
smeltobjective - now requires a QuestItem instead of a BlockSelectorcancelquestcommand - has its own permission nowcompasscommand - has its own permission nowlanguagecommand - is now persistentpointcommand - list can now be filtered by beginning letterstagcommand - list can now be filtered by beginning lettersglobalpointcommand - list can now be filtered by beginning lettersglobaltagcommand - list can now be filtered by beginning lettersjournalcommand - list can now be filtered by beginning lettersobjectivecommand - list can now be filtered by beginning lettersvariablecondition supports escapable underscores to avoid replacementkillevent - now kills the player, instead of dealing damage, which is more reliablelightningevent - now has a new noDamage argumentclearandkillmob' events - got replaced by newremoveentity` event- the line length of
SlowTellRawconversation IO from 60 to 50 to fit the actual minecraft chat - Item enchantments was changed to include zero as a legal value, not just positive numbers
- the objectives mmocorecastskill and mmoitemcastability were merged into the mmoskill objective
commandevent no longer runs for all players on the server if a variable is usedmathandversionvariables - now staticalternativeandcheckcondition - now staticopen_eventsin a menu are now called before the menu actually opensconversationevent now support a start option
Removed
- deprecated internals, code and old features
- Support for MMOLib
messageeventtitleeventplaysoundevent
Fixed
- added missing spaces to time left property of delay objective
- catchup now works even if schedule was never executed before
- q version now works again
- RPGMenu error when teleport events are used as click events
- RPGMenu bound items not always working
- npc_holograms do now show errors during reload and not one tick later
- first slot in backpack stays empty when journal is in player inventory
- npc_holograms are not shown correctly with multiple defined npcs
- spectator mode is now disabled for chest conversation io to prevent being stuck in the conversation
- packet chat interceptor does not catch action bar anymore
- time event does not work with floating point values
- global variable recursive resolution cross packages
- inaccurate location variable decimal rounding
- NPC holograms from Citizens are not hidden correctly
locationobjective - is now more robust if the player changes a worldbrewobjective - now counts newly brewed potions even if there were already some potions of the desired type inchestputobjective - did now work with double chests other slots presentmenu(open) event - showed the previous menu again- non .yml files causing errors when loading quest packages
pickrandomevent - did not calculated chance correctlypickrandomevent - did not allowed dashes in event namesactionobjective - ignored offhand at allenchantobjective - did not work at all, now hasamountandrequirementModeparameters- Hologram topX line not working with profiles
- the craft objective could be completed without consuming materials
- LocationObjective resolves variable for a player who does not have the objective, and so maybe also dont have the variable
- performance when using many conditions / events / ... repeatedly
/q journalcommand allowed invalid journal pointers- AsyncSaver will shut itself down if the database connection is lost, resulting in data loss
- Journal entries did count color codes as line length, affecting the formatting of pages
- Notification categories could be modified during runtime with the notify event
- Leading spaces are now preserved in conversation messages and journal entries
- giving
airwith the give command or the give event crashes the server - duplication of holograms when reloading BetonQuest and the hologram is hidden
menuconversation IO kicked players when conversation started in the air caused by flying detectionmenuconversation IO did not stopped scrolling at the bottom and began to scroll from the top again- removed the hearts of the Armorstand in the Menu Conversation IO
- journal entries now keep their leading whitespaces
- exceptions in
sudoandcommandevents leading to broken conversations that could not be exited - the NPC's head could be stolen from conversations with the
cheststyle
Security
- it was possible to put a QuestItem into a chest
- bump log4j dependency 2.15.0 to fix CVE-2021-44228
takeevent - is now threadsafe
This is the last long term support update for BetonQuest 1.12.X. Soon BetonQuest 2.0 will be released.
Changed
- the MythicMobs integration was updated to MythicMobs 5.3.5
- the MythicLib integration was updated to MythicLib 1.6-SNAPSHOT
- the objectives mmocorecastskill and mmoitemcastability were merged into the mmoskill objective
- the MMOCore-API integration was updated to MMOCore-API 1.12-SNAPSHOT
- the MMOItems-API integration was updated to MMOItems-API 6.9.4-SNAPSHOT
Fixed
- conversation could have a deadlock and a player can get stuck in a conversation
- conversation could not be canceled due to a race condition
- JobsReborn ObjectivePaymentEvent couldn't be used
- ProtocolLib warning for Minecraft 1.20.2
Added
dropeventitemdurabilityevent, condition and variablenumbercomparecondition- RedisChat integration: A new chat interceptor
sudoevent now has variable support- Russian translation
Changed
- The MythicMobs integration to MM 5.3.5+
Fixed
- ObjectivePaymentEvent (JobsReborn Integration)
craftobjective did not consume materialslocationobjective variable resolvingvariableobjective data storage- Concurrency issue problems with conversations
- Performance issues
- Database issues
Fixed
- An issue with some MySQL implementation that did not allow default values for new table columns.
A lot of time has passed since we lasted updated Modrinth, so these are just the most important changes.
A few manual migration steps are required. They are documented on the migration page!
Added
- Integration for the Fakeblock plugin: Demo Video
- Support for heads with custom textures
- Support for global variables in menus
- The
deleteglobalpointevent - The
cancelconversationevent - ItemVariable
nameandloreoptions - Support for global variables in holograms
- Backpack argument to the give-event
- An optional maximum amount to the party event
- Every objective with an
amountargument now supports variables for the amount.
Changed
- Citizens 2.0.31-SNAPSHOT is now required and fixed hiding of hologram lines above NPCs
- Remastered NPC Holograms: See Migration Guide!
- Remastered EffectLib Integration: See Migration Guide!
- The experience event can now change the player's xp, change and set levels and set the xp bar.
- Static events now respect conditions, if they are static aswell
- Permission seperation for
betonquest.cancelquestandbetonquest.compass - QuestItems can now require now enchantments
- Improved french translations with the help of @JeremyDarbellay
- The smelt objective now requires a QuestItem instead of a BlockSelector: See Migration Guide!
Fixed
- PacketInterceptor did not work in every Minecraft version
- NPC holograms from Citizens were not hidden correctly
- Creation of ghost items when menus closed themselfs
- The legacy §x HEX color format not working in some context
- Eating of items when entering the
chestconversation style actually consumed the item - Many more...
Fixed
- ProtocolLib's based
packetinterceptor was fixed for MC 1.19, now ProtocolLib 5.0.0 is required - conversation IO chest did not show the correct NPC heads
objectiveevent - static calls did not remove the objective for online players- legacy
§xHEX color format not working in some contexts - eating of items when entering the chest conversation io actually consumed the item
Added
- Global Variables can now be used in NPCHolograms
Changed
- The
commandevent now suppresses it's console output - The Quests integration now uses Quests 4.6.2
- The ProtocolLib integrations now require v5.0.0+
Fixed
journal deletedid not work- ProtocolLib based packet interceptor for MC 1.19
Added
- Language condition
- Option to hide the compass and quest cancelers from the backpack
- DecentHolograms support alongside HolographicDisplays
Changed
-
Experience objective event and condition where reworked
- condition and objective do not support raw experience anymore
- all allow decimal level and variables now
-
Improved error message when running incompatible integrated plugins
-
Automated conversion of invalid CountingObjective data to the new format
- Caused by the objective data that was previously saved by the objective before they became CountingObjectives
- This is logged with a warning
Fixed
- ChestPut objective does not work with double chests
- Action objective ignoring offhand
- Pickrandom event did not allowed dashes in event names
- Inaccurate location variable decimal rounding
- Exception when reloading an integration that did not hooked during startup
- Global variable resolution
- Correctly handle failure of parsing a double as value of a VariableNumber
A few bug fixes have been made:
-
fixed the purge command not working because of the journal
-
fixed the BrewObjective
-
fixed a concurrency issue with folder event, when a single event takes too long to execute
📰 Big 2.0 News Hello, we have a bunch of changes and new features for you:
IMPORTANT
The package enabled boolean was moved to the new package section. If you have disabled packages you need to move this setting to it's new place under package.enabled. Otherwise all disabled QuestPackages will now be loaded.
package:
enabled: false
🆕 Quest Templates Thanks to Wolf2323's efforts, we are finally able to release Quest Templates
What is a Quest Template? Do you have quest parts that need to be repeated all over again? Therefore, you just copy and paste them? Or do you have something like a utility quest package? Then Templates are perfect for you.
With Templates you now have a QuestTemplates folder beside your QuestPackages folder. In this folder you can write quests, as you are used to. But they will not get loaded as a quest. Instead you can reference them from any quest package. Then this template will be merged together with the quest package as if it's contents were defined in the quest package. This does not modify the files but happens in the background (Similar to how inheritance works in object oriented programming).
With this concept it is possible to centralise quest code in one place. You can also override specific values from the template per quest package. Additionally, you can use other templates inside a template. And of course a quest package can also inherit from multiple templates!
➡️ https://docs.betonquest.org/2.0.0-DEV/Documentation/Packages-%26-Templates/#templates
📋 Additional Updates
-Fixes
pickrandomevent did not calculated chance correctly
-Changes
tag removeis no longer allowed. Onlytag deleteworks in order to ensure a consistent syntax. Use search and replace to easily update your configs.
+Additions
objectiveevent now supports a comma separated list of objectives- The journal can now have a custom skin based on the
journal.custom_model_datasetting. - The objective
mmoprofessionlevelupcan now check the main character level as well. consumeobjective now hasamountargument.mmobkillobjective now supports themarkedanddeathRadiusAllPlayersargument- A written book quest item can now be read.
- The BlockObjective now has native absolute properties (e.g.
absoluteLeft) so that math.calc is no longer needed for well-formatted output. - The variable condition now supports variables as both the input and the regular expression.
bossbarnotify style now supports variables for theprogressargument
+New Documentation
- Yuyukey added a tutorial for quest packages: https://docs.betonquest.org/2.0.0-DEV/Tutorials/Syntax/Quest-Packages/
- SaltyAimbOtter added a guide for common regular expression use cases: https://docs.betonquest.org/2.0.0-DEV/Documentation/Reference/#regex-regular-expressions
If you like our changes consider helping the project by funding future updates: https://opencollective.com/betonquest



