Added
- new conversation options
start_new_lines
the amount of new lines that should be printed before the conversation startsnpc_text_fill_new_lines
should lined be filled between the NPC text and the player answer options
world
condition now supports variables for the world name- underscores are now escapable in item names and lore via
\_
weather
condition now allows to define a world, which can be a variable and can now be used in static contexttime
condition now allows to define a world, which can be a variable and can now be used in static contexttime
condition now supports minutespaste
event can now rotate schematicspermission
condition now supports variablesmoonCycle
condition 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
effectlib
section and
condition can now be static- missing tab-completion and documentation for globalpoints and globaltags command
party
condition now supports a location variable, to be used in a static contextenitity
condition now supports variables for the entity namemmochangeclass
objective for MMOCore that listens for a player changing their classremoveentity
event now supports variables for the entity namevariable
condition can now be used in a static context- TrainCarts integration
traincartslocation
objective that executes when the player passed a locationtraincartsride
objective that executes when the player is riding a traintraincartsexit
objective that executes when the player exited a traintraincartsride
condition to check if the player is riding a specific named train
scoretag
event and conditionaction
objective now supports configuring the hand used for the interaction, preventing multiple objective completions at the same time
Changed
spawn
event 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
variables
causing cross conversation validation to break - LuckPerms integration not pushing the permission update to the connected servers correctly.
crafting
objective where complex recipes are not recognizedhieght
condition where variable locations threw an exceptionglobalpoint
condition where not initialized global points where 0point
condition where not initialized points where 0QuestItem
Potions cannot be saved in 1.20.5+- Schedules could run twice on some systems by an inaccurate time returned java's Instant.now()
Journal
interaction 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
mspawnmob
can 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
addPermission
event adds a permission to a playerremovePermission
event removes a permission from a player
- Location Vectors can now be chained
eval
variable to resolve a variable string as variable
Changed
AureliumSkills
was renamed toAuraSkills
the following was changed in BQaureliumskillslevel
condition was renamed toauraskillslevel
aureliumstatslevel
condition was renamed toauraskillsstatslevel
aureliumskillsxp
event was renamed toauraskillsxp
- prevent reply when the text is not completely displayed for the SlowTellRaw conversation IO
resourcepack
objective is now paper onlydie
objective now support respawns without canceling the actual death of the playerph
variable can now be used static
Fixed
- NPE if a player replies to a SlowTellRaw conversation IO when the text is not completely displayed
- head
QuestItem
matches even if they are distinct - modulo operator in math variable can now be used by escaping the percent sign
weather
event not static callable even when providing a world
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_IO
in config frommenu,chest
tomenu,tellraw
- corrected Russian messages in
messages.yml
file
Added
block
objective now supports parametersloc
andregion
to limit the areablock
objective now supports the parameterignorecancel
allow counting breaking / placing blocks in protected regions- command
variable
to list and modify variables on a variable objective - config option
conversation_IO_config.slowtellraw.message_delay
to set the delay between messages in the SlowTellRaw conversation IO resourcepack
objective - to allow checking when the player accepts, denies, downloads, or fails to download a resource packregion
objective now supports variables as region namelocation
objective now allowsentry
andexit
keywords to track entering and leaving the location- allowing adjustment of maximum hologram display radius
- support to execute BetonQuest commands from command blocks
Fixed
variable
objective loads newlines correctly- exception in
lookAtBlock
condition 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
burn
event throwing unexpected error when omitting duration- added missing firework meta to string representation of QuestItem
- required flags in
QuestItem
were not relevant in equals check folder
event 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
hunger
event now supports variablestime
event now supports variables and newticks
argument
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
weather
event did not useduration
lever
event 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
QuestTemplates
can 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
fakeblock
event that has the argumentsshowgroup
andhidegroup
to show and hide FakeBlock groups - added
hook.fake-block
config option, default:true
- added
- add RedisChat Compatibility
- added
redischat
chat 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
runForAll
event can now be used to run events for all players that match a conditionrunIndepent
event 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
item
command (Paper only, Bukkit/Spigot can be configured manually) - can be given to players using the BetonQuest
give
command
- 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_hologram
to set hologram priority if multiple hologram plugins are loaded at once - config option
journal.show_in_backpack
to remove the journal from the backpack - config option
journal.lock_default_journal_slot
to lock the journal to thedefault_journal_slot
- config option
journal.give_on_respawn
to add the journal to the inventory after the player respawns - config option
journal.custom_model_data
to give the journal a ressource pack based skin - config option
mysql.reconnect_interval
to 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_backpack
andinventory_full_drop
to have more specific messages, when the inventory of the player is full menu
conversationIO optionnpc_name_newline_separator
- added
q download
command - variable support for menu titles
- configurable cooldown to menu conversation IO
- holograms
- variable support
- top lists ordered by point values of players
npcs
list 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
packet
is now 1.20.4 compatible freeze
event - ProtocolLib compatibility feature: Blocks the player from moving for the specified amount of ticksblock
objective - properties:absoluteAmount
,absoluteLeft
andabsoluteTotal
command
objectiveequip
objectivedelay
objective - now support variablessudo
event - now supports variablesopsudo
event - now supports variablesvariable
condition - now supports variablesbossbar
notify style now supports variables for theprogress
andstay
argumentsdelay
objective property:rawSeconds
fish
objective now hashookLocation
andrange
settings.consume
objective now hasamount
argument.mmoprofessionlevelup
objective can now check the main character level as wellburning
conditioninconversation
conditionlanguage
conditionheroesattribute
condition - Heroes compatibility feature: Checks a player's level for a particular attribute against a valuevariable
condition - regex can now also be a variablemmspawn
event now has argumenttarget
Makes the spawned mob target the playermmspawn
event now has argumentprivate
Visually hides the spawned mob from other players. Does not stop sound or particlesmmspawn
event now supports themarked
argumentobjective
event now supports a comma separated list of objectivesmmobkill
objective now supports themarked
anddeathRadiusAllPlayers
argumentmarked
argument now supports %player% variableglobaltag
andglobalpoint
variablesburn
event - ignites player for given seconds, supports variablesvelocity
event - throws the player by a vector (can be variable) with a direction and modificationblock
objective - added argumentnoSafety
which disables removing progress when the player does the opposite of what the objective asks forblock
objective - added property variablesabsoluteLeft
,absoluteTotal
,absoluteAmount
that always return absolute valueshunger
condition and eventvariable
condition - forceSync argument forces the condition to be checked on the main threadvariable
condition - now supports variables as both the input and the regular expressioncommand
event - now suppress console outputcancelconversation
eventtime
event - now supports subtraction and world selection, which made it persistent and staticglobalpoint
event - new syntax for manipulating global pointsexperience
event - it's now possible to change xp, change and set levels and set the xp bardeleteglobalpoint
eventscore
event - more options for manipulating the scoreboarditem
variable - newname
andlore
argument and now supports items from other packagesrandomnumber
variable added - supports variablesgive
event - newbackpack
argument to place items in the backpack (if a valid QuestItem)party
event - new optionalamount
of maximal affected playersdrop
eventitemdurability
event, condition and variablenumbercompare
conditioncancelOnLogout
argument forfolder
eventnpcinteract
objective - now supports the argumentinteraction
to choose between left, right or both clickslog
eventparty
event - new range 0 and -1 to select players in the same world or server widestage
objective, condition and eventfirst
event - attempts to run a list of events until one successfully runs, like a compressedif
event
Changed
- Java 17 is now required
- changed package names from
pl.betoncraft.betonquest
toorg.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.yml
was 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
,journal
anditems
are now defined in a config section matching their namesconversations
andmenus
are now defined in a config section matching their names and a unique identifier like the file name before- The
enabled
boolean is now defined in thepackage
section
- 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
,amount
andtotal
variables- the
left
andamount
variables of some objectives were swapped and have been corrected:left
is the amount left,amount
is 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_effects
toeffectlib
- the section
disabled
got removed - the section
check_interval
is now an inner section of the effect and now calledcheckinterval
- next to the
npcs
section there is now anlocations
section - 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
click
optionsshiftLeft
,shiftRight
andmiddleMouse
to execute events on item clicks- Therefore
left
andright
in theclick
section no longer include shift clicks
- Therefore
folder
event - now executes events immediately if no delay is setweather
event - now has an optional variable duration (in seconds) and an optional world parampaste
event - can now be staticchestput
objective - 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
experience
objective 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
smelt
objective - now requires a QuestItem instead of a BlockSelectorcancelquest
command - has its own permission nowcompass
command - has its own permission nowlanguage
command - is now persistentpoint
command - list can now be filtered by beginning letterstag
command - list can now be filtered by beginning lettersglobalpoint
command - list can now be filtered by beginning lettersglobaltag
command - list can now be filtered by beginning lettersjournal
command - list can now be filtered by beginning lettersobjective
command - list can now be filtered by beginning lettersvariable
condition supports escapable underscores to avoid replacementkill
event - now kills the player, instead of dealing damage, which is more reliablelightning
event - now has a new noDamage argumentclear
andkillmob' events - got replaced by new
removeentity` event- the line length of
SlowTellRaw
conversation 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
command
event no longer runs for all players on the server if a variable is usedmath
andversion
variables - now staticalternative
andcheck
condition - now staticopen_events
in a menu are now called before the menu actually opensconversation
event now support a start option
Removed
- deprecated internals, code and old features
- Support for MMOLib
message
eventtitle
eventplaysound
event
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
location
objective - is now more robust if the player changes a worldbrew
objective - now counts newly brewed potions even if there were already some potions of the desired type inchestput
objective - 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
pickrandom
event - did not calculated chance correctlypickrandom
event - did not allowed dashes in event namesaction
objective - ignored offhand at allenchant
objective - did not work at all, now hasamount
andrequirementMode
parameters- 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 journal
command 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
air
with the give command or the give event crashes the server - duplication of holograms when reloading BetonQuest and the hologram is hidden
menu
conversation IO kicked players when conversation started in the air caused by flying detectionmenu
conversation 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
sudo
andcommand
events leading to broken conversations that could not be exited - the NPC's head could be stolen from conversations with the
chest
style
Security
- it was possible to put a QuestItem into a chest
- bump log4j dependency 2.15.0 to fix CVE-2021-44228
take
event - 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
drop
eventitemdurability
event, condition and variablenumbercompare
condition- RedisChat integration: A new chat interceptor
sudo
event now has variable support- Russian translation
Changed
- The MythicMobs integration to MM 5.3.5+
Fixed
- ObjectivePaymentEvent (JobsReborn Integration)
craft
objective did not consume materialslocation
objective variable resolvingvariable
objective data storage- Concurrency issue problems with conversations
- Performance issues
- Database issues
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
deleteglobalpoint
event - The
cancelconversation
event - ItemVariable
name
andlore
options - Support for global variables in holograms
- Backpack argument to the give-event
- An optional maximum amount to the party event
- Every objective with an
amount
argument 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.cancelquest
andbetonquest.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
chest
conversation style actually consumed the item - Many more...
Fixed
- ProtocolLib's based
packet
interceptor was fixed for MC 1.19, now ProtocolLib 5.0.0 is required - conversation IO chest did not show the correct NPC heads
objective
event - static calls did not remove the objective for online players- legacy
§x
HEX 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
command
event 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 delete
did 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
📰 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
pickrandom
event did not calculated chance correctly
-Changes
tag remove
is no longer allowed. Onlytag delete
works in order to ensure a consistent syntax. Use search and replace to easily update your configs.
+Additions
objective
event now supports a comma separated list of objectives- The journal can now have a custom skin based on the
journal.custom_model_data
setting. - The objective
mmoprofessionlevelup
can now check the main character level as well. consume
objective now hasamount
argument.mmobkill
objective now supports themarked
anddeathRadiusAllPlayers
argument- 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.
bossbar
notify style now supports variables for theprogress
argument
+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