Integration Listπ
This page contains documentation for known integrations that exist for third party plugins. Some integrations also have dedicated pages in the documentation. In total 38 plugins have dedicated support for BetonQuest.
Provided by BetonQuestπ
BetonQuest hooks into other plugins by itself to provide more events, conditions and objectives or other features.
AuraSkills, Brewery, Citizens, DecentHolograms, Denizen, EffectLib, FakeBlock, Heroes, HolographicDisplays, JobsReborn, LuckPerms, Magic,
mcMMO, MythicLib, MMOCore, MMOItems, MythicMobs, PlaceholderAPI, ProtocolLib, Quests, RedisChat, Shopkeepers, TrainCarts, ProSkillAPI,
Skript, Vault, WorldEdit, FastAsyncWorldEdit and WorldGuard.
Provided by other pluginsπ
Some plugins also hook into BetonQuest and provide support by themselves:
nuNPCDestinations,
CalebCompass,
Depenizen,
NotQuests,
HonnyCompass
MythicDungeons
JourneyBetonQuest
There are also plugins that hook into BetonQuest that require a clientside mod:
BetonQuestGUI,
NGVexJournal
AuraSkillsπ
Conditionsπ
Skill level: auraskillslevel
π
Checks if the player has the specified skill level. The amount can be a variable or a number.
The player needs to be on that level or higher to meet the condition.
You can disable this behaviour by adding the equal
argument, then the player must match the specified level exactly.
1 2 |
|
Stat level: auraskillsstatslevel
π
Checks if the player has the specified stat level. The amount can be a variable or a number.
The player needs to be on that level or higher to meet the condition.
You can disable this behaviour by adding the equal
argument, then the player must match the specified level exactly.
1 2 |
|
Eventsπ
Give Skill Xp : auraskillsxp
π
Adds experience to the players skill. The amount can be a variable or a number.
The level
argument is optional and would convert the amount to levels instead of XP points.
1 2 |
|
Brewery & BreweryXπ
Conditionsπ
Drunk: drunk
π
This condition is true if the player is drunken. Only argument is the minimal drunkness (0-100).
1 |
|
Drunk Quality: drunkquality
π
This condition is true if the player has the given drunk quality. Only argument is the minimal drunk quality (1-10).
1 |
|
Has Brew: hasbrew
π
This condition is true if the player has the given brew with the specified amount in his inventory.
1 |
|
Eventsπ
Give Brew: givebrew
π
Gives the player the specified drink. The first number is the amount, and the second number is the quality of the drink.
1 |
|
Take Brew: takebrew
π
Removes the specified drink from the players inventory. An amount needs to be specified.
1 |
|
Citizensπ
If you have this plugin you can use it's NPCs for conversations. I highly recommend you installing it, it's NPCs are way more immersive. Having Citizens also allows you to use NPCKill objective and to have moving NPC's.
A Citizen NPC will only react to right clicks by default. This can be changed by
setting acceptNPCLeftClick
in the config.yml to true
.
Notice
You need to specify the ID of the NPC instead of it's name in the package.yml when using Citizens!
Conditionsπ
NPC distance: npcdistance
π
This condition will return true if the player is closer to the NPC with the given ID than the given distance. The NPCs ID is the first argument, the distance is the second. If the npc is despawned the condition will return false.
Example
npcdistance 16 22
NPC location: npclocation
π
persistent, static
This condition will return true if a npc is close to a location. First argument is the id of the NPC, second the location and third the maximum distance to the location that the npc is allowed to have.
Example
npclocation 16 4.0;14.0;-20.0;world 22
NPC region: npcregion
π
persistent, static
Notice
This condition also requires WorldGuard to work.
This condition will return true if a npc is inside a region. First argument is the id of the npc second is the name of the region.
Example
npcregion 16 spawn
Eventsπ
Move NPC: movenpc
π
This event will make the NPC move to a specified location. It will not return on its own,
so you have to set a single path point with /npc path command - it will then return to that point every time.
If you make it move too far away, it will teleport or break, so beware. You can change maximum pathfinding range in Citizens
configuration files. The first argument in this event is ID of the NPC to move. Second one is a location in a standard format (like in teleport
event).
You can also specify multiple locations separated by colons to let the npc follow a path of locations.
You can also specify additional arguments: block
will block the NPC so you won't be able to start a conversation with him while he is moving,
wait:
is a number of tick the NPC will wait at its destination before firing events,
done:
is a list of events fired after reaching the destination, fail:
is a list of events fired if this event fails.
Move event can fail if the NPC is already moving for another player.
Example
movenpc 121 100;200;300;world,105;200;280;world block wait:20 done:msg_were_here,give_reward fail:msg_cant_go,give_reward
Stop moving NPC: stopnpc
π
This will stop all current move tasks for the npc with the given ID.
Example
stopnpc 16
Teleport NPC: teleportnpc
π
This event will teleport the NPC with the given ID to the given location.
Example
teleportnpc 53 100;200;300;world
Objectivesπ
NPC Interact: npcinteract
π
The player has to right-click on the NPC with specified ID. It can also optionally cancel the action, so the conversation won't start.
The first argument is number (ID of the NPC).
You can add the optional argument cancel
to cancel the actual interaction with the NPC.
With interaction
you can also define the type of interaction that is required, you can define left
, right
or any
.
Example
npcinteract 3 cancel conditions:sneak events:steal
npcinteract 54 interaction:left events:poke
NPC Kill: npckill
π
The NPC kill objective requires the player to kill a NPC with the given ID. You can also define how many times the NPC
has to be killed. Right after the objective's name there must be the ID of the NPC. You can also add an amount with the
amount
keyword. You can use the notify
keyword to display a message each time the player advances the objective,
optionally with the notification interval after a colon.
This objective has three properties: amount
, left
and total
. amount
is the amount of NPCs already killed,
left
is the amount of NPCs still needed to kill and total
is the amount of NPCs initially required.
Example
npckill 16 amount:3 events:reward notify
NPC Range: npcrange
π
The player has to enter/leave a circle with the given radius around the NPC to complete this objective.
It is also possible to define multiple NPCs separated with ,
. The objective will be completed as soon as you meet the requirement of just one npc.
First argument is the ID of the NPC, second one is the type: Either enter
, leave
, inside
or outside
and the third one is the range.
The types enter
, leave
force the player to actually enter the radius after you were outside of it and vice versa.
This means that enter
is not completed when the player gets the objective and is already in the range, while inside
is instantly completed.
Example
npcrange 3,5 enter 20 events:master_inRange
Variablesπ
Citizen Variable: %citizen.<id>.<argument>%
π
This variable resolves information about a Citizen NPC by id. Specifying an argument determines the return: the NPC name, or full name.
Arguments: * name - Return citizen name * full_name - Full Citizen name
Example
%citizen.15.name% # Bob
%citizen.15.full_name% # &eBob
Citizen Location Variable: %citizen.<id>.location.<mode>.<precision>%
π
This variable resolves to all Citizen location arguments: the x, y and z coordinates, the world name, the yaw and pitch (head rotation). The first argument is citizen, followed by the citizen ID, then location. It also supports the BetonQuest Unified Location Formatting modes which can optionally be added to the end.
Example
%citizen.15.location% # -> 325;121;814;npcWorldName;12;6
%citizen.15.location.xyz% # -> 325 121 814
%citizen.15.location.x% # -> 325
%citizen.15.location.y% # -> 121
%citizen.15.location.z% # -> 814
%citizen.15.location.yaw% # -> 12
%citizen.15.location.pitch% # -> 6
%citizen.15.location.world% # -> npcWorldName
%citizen.15.location.ulfShort% # -> 325;121;814;npcWorldName
%citizen.15.location.ulfLong% # -> 325;121;814;npcWorldName;12;6
%citizen.15.location.x.2% # -> 325.16
%citizen.15.location.ulfLong.5% # -> 325.54268;121.32186;814.45824;npcWorldName;12.0;6.0
Denizenπ
Depenizen is also integrated with BetonQuest! Discover available features on the meta documentation.
Eventsπ
Script: script
π
With this event you can fire Denizen task scripts. Don't confuse it with skript
event, these are different. The first and only argument is the name of the script.
runDenizenScript: "script beton"
EffectLibπ
If you install this plugin on your server you will be able to play particle effects on NPCs and locations.
You can also use the particle
event to trigger particle.
Info
EffectLib is not a normal plugin, it's a powerful developer tool - there are no official docs. However, the Magic plugin has a wiki for EffectLib. It does contain a few magic specific settings though so please don't be confused if some stuff does not work. There is also a magic editor with autocompletion for EffectLib.
effectlib: #(1)!
farmer: #(2)!
class: VortexEffect #(3)!
iterations: 20 #(4)!
particle: crit_magic
helixes: 3
circles: 1
grow: 0.1
radius: 0.5
pitch: -60 #(9)!
yaw: 90 #(10)!
interval: 30 #(8)!
checkinterval: 80 #(11)!
npcs: #(5)!
- 1
locations: #(6)!
- 171;72;-127;world
conditions: #(7)!
- '!con_tag_started'
- '!con_tag_finished'
- All effects need to be defined in this section.
- Each effect is defined as a separate subsection. You can choose any name for it.
- Any EffectLib effect class.
- This and all following options until
interval
are EffectLib parameters. You can find them in the 3rd party documentation linked above. - A list of all NPCs on which this effect is displayed. This section is optional.
- A list of all locations on wich the effect is displayed. Optional.
- The conditions that must be true so that the player can see this effect.
- Controls after how many ticks the effect is restarted. Optional, default: 100 ticks
- Controls the vertical direction of the effect.
- Controls the horizontal direction of the effect.
- Controls how often the conditions should be checked (in ticks). Optional, default: 100 ticks
Eventsπ
Particle: particle
π
This event will load an effect defined in effects
section
and display it on player's location. The only argument
is the name of the effect. You can optionally add loc:
argument
followed by a location written like 100;200;300;world;180;-90
to put
it on that location. If you add private
argument the effect will only
be displayed to the player for which you ran the event.
Example
effects:
beton:
class: HelixEffect
iterations: 100
particle: smoke
helixes: 5
circles: 20
grow: 3
radius: 30
events:
playEffect: particle beton loc:100;200;300;world;180;-90 private
FakeBlockπ
If you have the FakeBlock integration installed, you will be able to view and hide the block groups created in FakeBlock on a player-specific basis.
Eventsπ
Show and hide block groups: fakeblock
π
Shows or hides the block group for the player. The block group can be specified as a comma-separated list.
The groups are case-sensitive. To show a group the showgroup
argument is required. To hide a group the hidegroup
argument is required.
events:
showBridge: "fakeblock showgroup bridge"
hideCityBorder: "fakeblock hidegroup gate,wall,door"
Heroesπ
When you install Heroes, all kills done via this plugin's skills will be counted in MobKill objectives.
Conditionsπ
Heroes Class: heroesclass
π
This condition checks the classes of the player. The first argument must be primary
, secondary
or mastered
. Second is the name of a class or any
. You can optionally specify level:
argument followed by the required level of the player.
Example
heroesclass mastered warrior
Heroes Attribute: heroesattribute
π
This condition check's the level of a player's attribute. The first argument must be strength
, constitution
, endurance
, dexterity
, intellect
, wisdom
, or charisma
. Second argument is the required level of the attribute. Must be greater than or equal the specified number.
Example
heroesattribute strength 5
Skill: heroesskill
π
This condition checks if the player can use specified skill. The first argument is the name of the skill.
Example
heroesskill charge
Eventsπ
Heroes experience: heroesexp
π
This event simply gives the player specified amount of Heroes experience. The first argument is either primary
or secondary
and it means player's class. Second one is the amount of experience to add.
Example
heroesexp primary 1000
JobsRebornπ
Requires adding the following to config.yml:
hook:
jobs: 'true'
Conditionsπ
Can Level up: nujobs_canlevel {jobname}
π
Returns true if the player can level up
Has Job: nujobs_hasjob {jobname}
π
Returns true if the player has this job
Example
nujobs_hasjob Woodcutter
Job Full: nujobs_jobfull {jobname}
π
Returns true if the job is at the maximum slots
Job Level: nujobs_joblevel {jobname} {min} {max}
π
Returns true if the player has this job, and at a level equal to or between the min/max
Example
nujobs_joblevel Woodcutter 5 10
Eventsπ
Add Jobs Experience: nujobs_addexp {jobname} {exp}
π
Gives the player experience
Increase Jobs Level: nujobs_addlevel {jobname} {amount}
π
Increases the player level by amount.
Decrease Jobs Level: nujobs_dellevel {jobname} {amount}
π
Decreases the players level by amount.
Join Jobs Job Event: nujobs_joinjob {jobname}
π
Joins the player to job.
Leave Jobs Job Event: nujobs_leavejob {jobname}
π
Removes the player from job.
Set Jobs Level: nujobs_setlevel {jobname} {level}
π
Set the player to level.
Objectivesπ
Join Jobs Job Objective: nujobs_joinjob {jobname}
π
Triggers when player joins job.
Leave Jobs Job Objective: nujobs_leavejob {jobname}
π
Triggers when player leaves job.
Notice
This is not triggered by '/jobs leaveall'
Jobs Job Levelup: nujobs_levelup {jobname}
π
Triggers when player levels up.
Jobs Job Payment: nujobs_payment {amount}
π
Triggers when player makes {amount} of money from jobs. You can use the notify
keyword to display a message each time
the player advances the objective, optionally with the notification interval after a colon.
This objective has three properties: amount
, left
and total
. amount
is the amount of money already received,
left
is the amount of money still needed to receive and total
is the amount of money initially required.
LuckPermsπ
Context Integrationπ
Any BetonQuest tag (global and per-player) can be used as a LuckPerms context. This means that a player needs the specified tag for a permission
to be true - this removes the need for tons of permission add ...
events as you can hook your existing
quest progress tags right into LuckPerms permission
contexts.
The syntax is as follows:
key | value |
---|---|
betonquest:tag:PACKAGE_NAME.TAG_NAME | true |
betonquest:globaltag:PACKAGE_NAME.TAG_NAME | true |
betonquest:tag:myPackage.tagName | true |
betonquest:globaltag:myQuest.someTag | true |
Check the Luck Perms documentation for an in-depth explanation on what contexts are and how to add them to permissions.
Permissionsπ
If you prefer to directly add or remove permissions without triggering the LuckPerms changelog chat notifications,
you can utilize the luckperms addPermission
and luckperms removePermission
events.
You also have the possibility to assign groups to the player via the group.<GroupName>
permission.
events:
addDefaultGroup: "luckperms addPermission permission:group.default,group.quester" #(1)!
addNegated: "luckperms addPermission permission:tutorial.done value:false" #(2)!
addWithContext: "luckperms addPermission permission:group.legend context:server;lobby" #(3)!
addTemporary: "luckperms addPermission permission:donator.level.one expiry:20 unit:MINUTES" #(4)!
removeTutorial: "luckperms removePermission permission:tutorial.done"
removeMultiple: "luckperms removePermission permission:tutorial.done,group.default" #(5)!
- You can define single or multiple permissions with the
permission
key. You need to separate them with a comma. - You can define Permissions with a optional
value
offalse
to negate them and give them to the player. If you want to override the value of the permission, you can use thevalue
argument and set it totrue
. - You can also add optional
context
s to the permissions likeserver;lobby
. Read more about contexts here. You can define multiple contexts by separating them with a comma. - With the key
expiry
you can define the time until the permission expires. There can only be one expiry argument. If you dont use theunit
parameter, it defaults do DAYS. Other units can be found here. - You can remove multiple permissions at once by separating them with a comma.
You can also add context
, value
and expiry
to the removePermission
event
but its not recommended as it only removes exact matches.
Instead only use the permission to remove.
Magicπ
Conditionsπ
Wand: wand
π
This condition can check wands. The first argument is either hand
, inventory
or lost
. If you choose lost
, the condition will check if the player has lost a wand. If you choose hand
, the condition will check if you're holding a wand in your hand. inventory
will check your whole inventory instead of just the hand. In case of hand
and inventory
arguments you can also add optional name:
argument followed by the name of the wand (as defined in wands.yml in Magic plugin) to check if it's the specific type of the wand. In the case of inventory
you can specify an amount with amount
and this will only return true if a player has that amount. You can also use optional spells:
argument, followed by a list of spells separated with a comma. Each spell in this list must have a minimal level defined after a colon.
Example
wand hand name:master spells:flare:3,missile:2
McMMOπ
Conditionsπ
McMMO Level: mcmmolevel
π
This conditions checks if the player has high enough level in the specified skill. The first argument is the name of the skill, second one is the minimum level the player needs to have to pass this condition.
Example
mcmmolevel woodcutting 50
Eventsπ
Add MCMMO Experience: mcmmoexp
π
This event adds experience points in a specified skill. The first argument is the name of the skill, second one is the amount of experience to add.
Example
mcmmoexp swords 1500
MMOCore & MMOItems & MythicLibπ
Conditionsπ
MMOCore class: mmoclass
π
Checks if a player has the given MMOCore class. You can check for any class that is not the default class by writing *
instead of a class name.
If a level has been specified the player needs to be on that level
or higher to meet the condition.
You can disable this behaviour by adding the equal
argument.
1 2 3 4 |
|
MMOCore attribute: mmoattribute
π
Checks if a player has the specified attribute on the given level or higher.
You can disable this behaviour by adding the equal
argument.
1 2 |
|
MMOCore profession: mmoprofession
π
Checks if a player has the specified profession on the given level or higher.
You can disable this behaviour by adding the equal
argument.
1 2 |
|
MMOItems item: mmoitem
π
Checks if a player has the specified amount of MMOItems or more in his inventory. If no amount has been defined the default amount is one.
1 2 |
|
MMOItems hand: mmohand
π
Checks if a player holds the specified MMOItem in his hand. Checks the main hand if not specified otherwise using the offhand
argument.
If no amount has been defined the default amount is one.
1 2 |
|
MythicLib stat: mmostat
π
Checks these
stats that combine all sorts of stats from MMOCore and MMOItems.
The player needs to be on the specified level or higher in order to meet this condition.
You can disable this behaviour by adding the equal
argument.
1 |
|
Objectivesπ
Break Special Blocks: mmocorebreakblock
π
This objective requires the player to break
special blocks from MMOCore. Please note that you must use this objective over block
if you are using MMOCore's custom mining system.
All three different block types and an amount can be defined. You can also send notifications to the player by appending
the notify
keyword optionally with the notification interval after a colon.
This objective has three properties: amount
, left
and total
. amount
is the amount of blocks already broken,
left
is the amount of blocks still left to break and total
is the amount of blocks initially required.
1 2 3 |
|
Change MMOCore class: mmochangeclass
π
This objective requires the player to change their class.
Example | |
---|---|
1 2 3 |
|
MMOCore Profession levelup: mmoprofessionlevelup
π
This objective requires the player to level the given profession to the specified level.
Use main
to check for class level ups.
1 |
|
Craft item: mmoitemcraft
π
This objective requires the player to craft the item with the given type and id.
It supports any MMOItem that was crafted using vanilla crafting methods, MMOItems "recipe-amounts" crafting and MMOItems station crafting.
An amount can also be set if it shall differ from the default (which is one) by adding the amount:
argument.
The amount is based on how many items have actually been crafted, not how often a specific recipe has been used! Therefore,
a recipe that makes four items at once will let the objective progress by four steps. You can use the notify
keyword
to display a message each time the player advances the objective, optionally with the notification interval after a
colon.
This objective has three properties: amount
, left
and total
. amount
is the amount of items already crafted,
left
is the amount of items still needed to craft and total
is the amount of items initially required.
1 2 |
|
Upgrade Item: mmoitemupgrade
π
This objective tracks if a player upgrades the given item with an upgrade consumable.
1 |
|
Apply gemstone: mmoitemapplygem
π
This objective is completed when the player applies the gemstone with the given gemstoneID to an item with the given itemType and itemID.
1 |
|
Activate MythicLib skill: mmoskill
π
This objective requires the player to activate a MythicLib skill (e.g. with MMOItems or MMOCore).
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
skill | SKILL_ID | The ID of the skill. | |
trigger | name:level | All trigger types. | The types of triggers that can be used to activate the skill. If not specified, all triggers are allowed. |
Example | |
---|---|
1 2 3 |
|
Eventsπ
Give MMOCore class experience: mmoclassexperience
π
Adds experience to the players class. The amount can be a variable or a number. The level
argument
is optional and would convert the amount to levels instead of XP points.
1 2 |
|
Give MMOCore profession experience: mmoprofessionexperience
π
Adds experience in the specified player profession. The amount can be a variable or a number. The level
argument
is optional and would convert the amount to levels instead of XP points.
1 2 |
|
Give class points: mmocoreclasspoints
π
Gives the player class points. The amount can be a variable or a number.
1 |
|
Give skill points: mmocoreskillpoints
π
Gives the player skill points. The amount can be a variable or a number.
1 |
|
Give attribute points: mmocoreattributepoints
π
Gives the player attribute points. The amount can be a variable or a number.
1 |
|
Give attribute reallocation points: mmocoreattributereallocationpoints
π
Gives the player attribute reallocation points. The amount can be a variable or a number.
1 |
|
Give MMOItem: mmoitemgive
π
Gives the player predefined item. Default amount is one and can be set manually to a higher amount or a variable.
The item can be adjusted to the players level by adding the scale
option. If you want all items to be stacked together
the singleStack
option can be set. If the player doesn't have required space in the inventory, the items will be dropped on the ground.
You can also specify the notify
keyword to display a message to the player about what items have been received.
1 |
|
Take MMOItem: mmoitemtake
π
Removes the specified item from the players inventory. Optional arguments are an amount and notify
to send a notification
to the player.
Which inventory types are checked is defined by the invOrder:
option. You can use Backpack
, Inventory
and Armor
there. One after another will be checked if multiple types are defined.
The backpack will not work before 2.0's item rework since the current item system does not safe custom NBT data.
You can also specify notify
keyword to display a simple message to the player about loosing items.
Amount can be a variable.
1 2 3 4 5 |
|
MythicMobsπ
Required MythicMobs version: 5.3.5 or above
Objectivesπ
MobKill: mmobkill
π
You need to kill the specified amount of MythicMobs to complete this objective. The first argument must be
the mob's internal name (the one defined in your MythicMobs configuration). Multiple mob names must be comma seperated.
You can optionally add the amount:
argument to specify how many of these mobs need to be killed. It's also possible
to add the optional arguments minLevel
and maxLevel
to further customize what mobs need to be killed.
You can also add an optional neutralDeathRadiusAllPlayers
argument to complete the objective for each nearby player
within the defined radius when the mob is killed by any non-player source.
Alternatively, you could use the deathRadiusAllPlayers
argument to count all deaths of the specified mythic mob(s),
no matter if it was killed by a non-player source or not.
You can add a notify
keyword if you want to send a notification to players whenever the objective progresses.
You can also add an optional marked
argument to only count kills marked with the mspawn
event. Variables are supported.
This objective has three properties: amount
, left
and total
. amount
is the amount of mythic mobs already killed,
left
is the amount of mythic mobs still needed to kill and total
is the amount of mythic mobs initially required.
Example
mmobkill SkeletalKnight amount:2 events:reward
mmobkill SnekBoss,SnailBoss,SunBoss amount:10 events:reward
mmobkill SnekBoss amount:2 minlevel:4 maxlevel:6 events:reward marked:DungeonBoss3
mmobkill dungeonDevil deathRadiusAllPlayers:30 events:reward
Conditionsπ
MythicMob distance: mythicmobdistance
π
Check whether the player is near a specific MythicMobs entity. The first argument is the internal name of the mob (the one defined in MythicMobs' configuration). The second argument is the distance to check, measured in block lengths in a circular radius.
Example
mythicmobdistance SkeletalKnight 7
Eventsπ
Spawn MythicMob: mspawnmob
π
persistent, static
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
location | ULF | The location to spawn the mob at. | |
name | name:level | MythicMobs mob name. A level must be specifed after a colon. | |
amount | Positive Number | Amount of mobs to spawn. | |
target | Keyword | False | Will make the mob target the player. |
private | Keyword | Disabled | Will hide the mob from all other players until restart. This does not hide particles or block sound from the mob. Also see notes below. |
marked | marked:text | None | Marks the mob, supporting variables. You can check for marked mobs in mmobkill objective. |
events:
spawnBoss: mspawnmob 100;200;300;world MegaBoss:1 1 target
spawnKnights: mspawnmob 100;200;300;world SkeletalKnight:3 5
spawnPrivateDevil: mspawnmob 100;200;300;world Mephisto:1 5 target private marked:DungeonBoss3
Private Argument
The private
argument requires some MythicMob setup for optimal use.
It's best to use the private
argument in combination with the target
argument so the mob does not attack
players that cannot see it.
Additionally, the mob should be configured to never change its AI target using MythicMobs.
Private & Target Arguments
The private
and target
arguments are ignored when the event is used in a static context like Schedules.
PlaceholderAPIπ
If you have this plugin, BetonQuest will add a betonquest
placeholder to it and you will be able to use ph
variable in your conversations.
Placeholder: betonquest
π
You can use all BetonQuest variables in any other plugin that supports PlaceholderAPI.
You can even use BetonQuests conditions using the condition variable!
This works using the %betonquest_package:variable%
placeholder. The package:
part is the name of a package.
The variable
part is just a BetonQuest variable without percentage characters, like point.beton.amount
.
Testing your placeholder is easy using this command:
/papi parse <PlayerName> %betonquest_<PackageName>:<VariableType>.<Property>%
1 |
|
Variable: ph
π
persistent, static
You can also use placeholders from other plugins in BetonQuest. Simply insert a variable starting with ph
, the second argument should be the placeholder without percentage characters.
Example
%ph.player_item_in_hand%
ProtocolLibπ
Eventsπ
Freeze players: 'freeze'π
This event allows you to freeze player for the given amount of ticks:
freezeMe: "freeze 100" #Freezes the player for 5 seconds
Chat Interceptorπ
Packet interceptor: packet
π
This interceptor works on network package level and is thus much more reliable than the simple
interceptor when working with advanced Chat plugins.
Questsπ
Quests is another questing plugin, which offers very simple creation of quests. If you don't want to spend a lot of time to write advanced quests in BetonQuest but you need a specific thing from this plugin you can use Custom Event Reward or Custom Condition Requirement. Alternatively, if you have a lot of quests written in Quests, but want to integrate them with the conversation system, you can use quest
event and quest
condition.
Condition Requirement (Quests)π
When adding requirements to a quest, choose "Custom requirement" and then select "BetonQuest condition". Now specify condition's name and it's package (like package.conditionName
). Quests will check BetonQuest condition when starting the quest.
Event Reward (Quests)π
When adding rewards to a quest or a stage, choose "Custom reward" and then select "BetonQuest event". Now specify event's name and it's package (like package.eventName
). Quests will fire BetonQuest event when this reward will run.
Conditionsπ
Quest condition: quest
π
This condition is met when the player has completed the specified quest. The first and only argument is the name of the quest. It it contains any spaces replace them with _
.
Example
quest stone_miner
Eventsπ
Quest: quest
π
This event will start the quest for the player. The first argument must be the name of the quest, as defined in name
option in the quest. If the name contains any spaces replace them with _
. You can optionally add check-requirements
argument if you want the event to respect this quest's requirements (otherwise the quest will be forced to be started).
Example
quest stone_miner check-requirements
RedisChatπ
Chat Interceptorπ
RedisChat interceptor: redischat
π
This chat interceptor works directly with RedisChat to pause the chat during conversations.
Shopkeepersπ
Conditionsπ
Shop amount: shopamount
π
This condition checks if the player owns specified (or greater) amount of shops. It doesn't matter what type these shops are. The only argument is a number - minimum amount of shops.
Example
shopamount 2
Eventsπ
Open shop window: shopkeeper
π
This event opens a trading window of a Villager. The only argument is the uniqueID of the shop. You can find it in Shopkeepers/saves.yml file, under uniqueID
option.
Example
shopkeeper b687538e-14ce-4b77-ae9f-e83b12f0b929
Fabledπ
Conditionsπ
Fabled Class: fabledclass
π
This condition checks if the player has specified class or a child class of the specified one.
The first argument is simply the name of a class.
You can add exact
argument if you want to check for that exact class, without checking child classes.
Example
fabledclass warrior
Fabled Level: fabledlevel
π
This condition checks if the player has specified or greater level than the specified class level. The first argument is class name, the second one is the required level.
Example
fabledlevel warrior 3
Skriptπ
BetonQuest can also hook into Skript. Firstly, to avoid any confusion, I will refere to everything here by name of the plugin (Skript event is something else than BetonQuest event). Having Skript on your server will enable using BetonQuest events and conditions in scripts, and also trigger them by BetonQuest event.
You can use cross-package paths using -
between the packages. Example:
player meets condition "default-Forest-Jack.Completed"
Skript event triggered by BetonQuest skript
eventπ
This entry will describe two things: Skript event and BetonQuest event.
- Skript event -
on [betonquest] event "id"
- this is the line you use in your scripts to trigger the code.betonquest
part is optional, andid
is just some string, which must be equal to the one you specified in BetonQuest event. - BetonQuest event -
skript
- this event will trigger the above Skript event in your scripts. The instruction string accepts only one argument, id of the event. It have to be the same as the one defined in Skript event for it to be triggered.
Example
In your script
on betonquest event "concrete":
events:
fire_concrete_script: skript concrete
Skript conditionπ
You can check BetonQuest conditions in your scripts by using the syntax player meets [betonquest] condition "id"
. betonquest
is optional, and id
is the name of the condition, as defined in the conditions section.
Example
In your script
player meets condition "has_ore"
has_ore: item iron_ore:5
Skript eventπ
You can also fire BetonQuest events with scripts. The syntax for Skript effect is fire [betonquest] event "id" for player
. Everything else works just like in condition above.
Example
In your script
fire event "give_emeralds" for player
events:
give_emeralds: give emerald:5
TrainCartsπ
TrainCarts is a plugin that allows you to create trains with advanced features.
Conditionsπ
TrainCarts ride condition: traincartsride
π
Checks if the player is riding a specific named train.
Example
traincartsride train1
Objectivesπ
TrainCarts location objective: traincartslocation
π
This objective requires the player to be at a specific location while sitting in a train. It works similarly to the location objective, but the player must be in a TrainCarts train to complete it.
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
location | x;y;z;world | The Location the player has to pass whiles sitting in the train. | |
range | range:double | 1 | The optional range around the location where the player must be. |
entry | entry | Disabled | The player must enter (go from outside to inside) the location to complete the objective. |
exit | exit | Disabled | The player must exit (go from inside to outside) the location to complete the objective. |
name | name:Train1 | The optional Name of the Train. |
Example
traincartslocation 100;60;100;world
traincartslocation name:Train1 100;60;100;world range:2
traincartslocation 100;60;100;world entry range:2
TrainCarts ride objective: traincartsride
π
This objective requires the player to ride a train for a specific time. The time starts after the player enters the train and stops when the player exits the train. The conditions are checked every time the player enters or leaves the train or completes the objective. If the conditions are not met, the time will not be counted.
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
name | name:Train1 | The optional Name of the Train. | |
amount | amount:20 | 0 | The optional amount of time in seconds, the player has to ride a specific train. |
Example
traincartsride
traincartsride name:Train1
traincartsride name:Train1 amount:20
TrainCarts ride objective: traincartsexit
π
This objective requires the player to exit a train.
Example
traincartsexit
traincartsexit name:Train1
Vaultπ
Conditionsπ
Vault Money Condition: money
π
Checks if the player has the specified amount of money.
conditions:
hasMoney: "money 1"
canAffordPlot: "money 10000"
isRich: "money 1000000"
Tip
Invert this condition if you want to check if the player has less money than specified. Example:
conditions:
isRich: "money 100000"
events:
giveSubsidy: "money +500 conditions:!isRich" #(1)!
- If the player has less than 100000 money, the
giveSubsidy
event will be fired.
Eventsπ
Vault Money Event: money
π
Deposits, withdraws or multiplies money in the player's account.
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
amount | Number | The amount of money to add or remove. Use * to multiply. |
|
notify | Keyword: notify |
Disabled | Display a message to the player when their balance is changed. |
events:
sellItem: "money +100"
buyPlot: "money -10000"
winLottery: "money *7 notify"
Change Permission (Groups): permission
π
Adds or removes a permission or a group.
Parameter | Syntax | Default Value | Explanation |
---|---|---|---|
action | add or remove |
Whether to add or remove the thing specified using the following arguments. | |
type | perm or group |
Whether to use a permission or permission group. | |
name | The name of the permission. | The name of the permission or group to add. | |
world | The name of the world. | Global | You can limit permissions to certain worlds only. If no world is set the permission will be set everywhere (global). |
events:
allowFly: "permission add perm essentials.fly"
joinBandit: "permission add group bandit"
leaveBandit: "permission remove group bandit"
Variablesπ
Vault Money Variable: money
π
Use %money.amount%
for showing the player's balance.
Use %money.left:500%
for showing the difference between the player's balance and the specified amount of money.
events:
notifyBalance: "notify You have %money.amount%$!"
notifyNotEnough: "notify You still need %money.left:10000%$ to buy this plot."
WorldEdit or FastAsyncWorldEditπ
Eventsπ
Paste schematic: paste
π
persistent, static
This event will paste a schematic at the given location.
The first argument is a location and the second one is the name of a schematic file.
The file must be located in WorldEdit/schematics
or FastAsyncWorldEdit/schematics
and must have a name like
some_building.schematic
. If WorldEdit saves .schem
schematic files, simply append .schem
to the
schematic name in the event's instruction.
The optional noair
keyword can be added to ignore air blocks while pasting.
You can also rotate the schematic by adding rotation:90
where 90
is the angle in degrees.
events:
pasteCastle: "paste 100;200;300;world castle noair" #(1)!
pasteTree: "paste 100;200;300;world tree.schem noair" #(2)!
- Pastes the schematic file
castle.schematic
at the location100;200;300;world
. - Pastes the schematic file
tree.schem
at the location100;200;300;world
.
WorldGuardπ
Conditionsπ
Inside Region: region
π
This condition is met when the player is inside the specified region. The only argument is the name of the region.
conditions:
inCastle: "region castle"
Objectivesπ
Enter Region: region
π
To complete this objective you need to enter WorldGuard region with specified name. A required argument is the name of the region and you may also pass an optional entry
and/or exit
to only trigger when entering or exiting a region instead of anytime inside a region.
objectives:
deathZone: "region deathZone entry events:kill"