-
Notifications
You must be signed in to change notification settings - Fork 8
English
This wiki pertains to 6.2 with some (but not all) information updated for 6.3.1
For information pertaining 7.0.0, see the Modded Mincraft Wiki page
- In Game GUI
- File Structure
- Channel Based Configuration
- Triggers
- Miscellaneous Features
- Issues & Support
If you do not want to deal with any config files or having to learn the text structure of yet another complex mod, don't worry! This mod comes with a built-in gui to help you edit your song selection. By default you can open the GUI with R, but that can be changed via the keybind menu. The gui has descriptions for everything to help in building configurations.
I would still recommend reading the Triggers section under Important Concepts to get a grasp of how the basic logic behind the mod works even if you are only using the In Game GUI, however.
Before getting into the specifics of how things work, there are some things that will be referenced throughout the entire page that are important to know.
A trigger is basically an in-game event that you can attach to a song to control when that song is able to play. There are many different triggers that are able to be accessed, but the most important thing to note is that there are 2 different types
A simple trigger is a trigger that can only accept a few different parameters and may not require any to be present at all in some cases. These are the easiest to use "as is" and do not require much configuration
A trigger holder is a type of trigger that can have sub-triggers. These sub-triggers are denoted by the use of the identifier parameter. When defining an instance of a trigger holder it must have an identifier present, or that trigger will fail to load in. Identifiers are completely arbitrary, meaning it does not matter what your identifier is as long as it is some kind of string value. It might be a good idea for it to be associated with what the trigger is trying to accomplish though. Identifiers are also unique to that specific trigger, which means using an identifier that has already been defined by another trigger makes no difference.
A parameter is simple a variable type that can be defined for a specific object. For example, volume for songs, fade values for triggers, and triggers for songs are all different parameters. These can be string, numbers, boolean values, or lists. Note that Music Triggers will assume lists are composed of string values. Anything that is a string should be in quotes, but otherwise they are unnecessary.
Most of the config files are TOML files, so it may be helpful to familiarize yourself with the format works before getting into specific configurations of the mod. You can read a full description about the TOML format here, but there are a few niche things about how Music Triggers parses TOML files which are a bit pickier than that page might say.
A table in a TOML file is essentially a string header that will point to variables (parameters) and other nested tables. Each table will consider all lines that come after it which have an extra tab (or 4 spaces) as being under the table until a line that it not blank and not a comment is reached which does not meet the spacing requirements. Defining a child table under one of a higher level should be done like:
[parent]
[parent.child]
nextVar = "thing2"
As an additional example, in the following block thing1, child, and thing2 are all under the table parent, but thing3 does not meet the spacing requirements, which makes thing2 the last line if the parent table. Also note that thing2 is not under child as it would need an additional level of spacing.
[parent]
thing1 = 1
[parent.child]
thing2 = true
thing3 = "differentThing"
Keep in mind that tables cannot contain spaces! In the context of Music Triggers, this is relevant to channel names and song names, so if something is inexplicitly breaking or the output of the in-game GUI looks weird, make sure to double check those do not have spaces.
If you need to reuse a table name within the same hierarchal level of the TOML file, the tables need to be double bracketed. By the same hierarchal level , it means a table with the same name under a parent, or a table at the top level of the file with the same name. For example, the child table here is used twice under parent and needs double brackets
[parent]
thing1 = 0.78
thing2 = false
[[parent.child]]
thing3 = "this"
[[parent.child]]
thing3 = "that"
but in the case of the same child name being used for a different table, double bracketed are not needed.
[parent1]
[parent1.child]
[parent2]
[[parent2.child]]
[[parent2.child]]
In the case of Music Triggers, this is most prevalent to when complex triggers are utilized, when songs are reused, or in the case of titles, images, commands, and toggles. Note that things will not break if you give all your tables double brackets, but it is still a useful thing to know as the in-game GUI will output the least brackets it can when it writes information to files.
Variables are what gets considered as a parameter. In the context the TOML format, it is the name of parameter and then = and then the variable. As dates are not used in the context of Music Triggers, the parameter types you should be familiar with are integers, decimal numbers, boolean values (true/false), string values, and lists. Numbers and boolean values can be input as is, but strings need to be surrounded by quotation marks ("). List values are surrounded by brackets and are not allowed to span across multiple lines. Since Music Triggers does not utilize lists much it assumes all list values are strings and should therefore be in quotes. Below is an example of all the different accepted variable types:
[parent]
intVal = 1235
decVal = -0.289
boolVal = true
strVal = "thing"
listVal = [ "elment1" "element2" "element3" ]
[parent.child]
Almost every number parameter in Music Triggers is able to be randomized. Instead of putting a number in, put a string in with the lower and upper bounds in like "lower:upper". For example if a fade_in parameter is set to "100:200" the actual fade_in value will be a number randomly selected between 100 and 200. Or if a volume is set to "0.9:1.0" for a song it will have a volume between 90%-100% when played
When you run the game for the first time with the mod installed, all the base files should be generated under a folder called MusicTriggers in the config folder. All files the mod uses will be in that folder.
If you choose to use local audio files, you should drop them in a folder called songs under config/MusicTriggers. For more advanced use cases, you can set custom directories per channel, and those channels will check in the set directory for audio files instead of the default ones. A single channel is not allowed to check 2 separate folder, but you are allowed to have multiple channels checking the same folder. The sound files themselves can be any of the following formats
- MP3
- FLAC
- WAV
- Matroska/WebM (AAC, Opus or Vorbis codecs)
- MP4/M4A (AAC codec)
- OGG streams (Opus, Vorbis and FLAC codecs)
- AAC streams
- Stream playlists (M3U and PLS)
There is a file automatically generated called channels.toml. This file is where you will go to define your channels and the config files that come with them. As this is a preset config, you cannot override it with config files from within a specific channel. The name of a channel can be virtually anything you want it to be, with the exception of "jukebox", "preview", or the same name as a previously registered channel. To set the name, of a channel, just use it as the name of the table for that channel like [channelName]. Remember that table names cannot have spaces. As with all config files read in by Music Triggers, channels.toml is read from top to bottom, meaning that channels higher in the files will be registered first. Each registered channel can accept the parameters main, transitions, commands, toggles, redirect, jukebox, songs_folder, sound_category, paused_by_jukebox, and overrides_normal_music. Here are what those do:
main: Sets the file location of the main config file in reference to the MusicTriggers config folder. The default
value is [channelname]/main, where [channelname] is the name of the channel
transitions: Sets the file location of the transitions config file in reference to the MusicTriggers config
folder. The default value is [channelname]/transitions, where [channelname] is the name of the channel
commands: Sets the file location of the commands config file in reference to the MusicTriggers config folder.
The default value is [channelname]/commands, where [channelname] is the name of the channel
toggles: Sets the file location of the toggles config file in reference to the MusicTriggers config folder. The
default value is [channelname]/toggles, where [channelname] is the name of the channel
redirect: Sets the file location of the redirect config file in reference to the MusicTriggers config folder.
The default value is [channelname]/redirect, where [channelname] is the name of the channel
jukebox: Sets the file location of the jukebox config file in reference to the MusicTriggers config folder. The
default value is [channelname]/jukebox, where [channelname] is the name of the channel
songs_folder: Sets the folder location of where the channel with look for audio files. The default value is
config/MusicTriggers/songs
sound_category: The sound category this channel is tied to, as per the the in game audio options. The default
value is music
paused_by_jukebox: Determines if the channel gets paused when there is an active jukebox nearby. The default value
is true
overrides_normal_music: Determines if the channel stops vanilla and blocked audio from playing when it has an
active trigger. The default value is true
There is another file automatically generated called registration.toml. As this is a preset config, you cannot
override it with config files from channels. Within this file you will find 2 options regarding registration.
Those are REGISTER_DISCS and CLIENT_SIDE_ONLY Here are what those options do:
REGISTER_DISCS: This dictates whether or not the the Blank Music Disc, Enhanced Music Disc, and Music Recorder get
registered. See below for more information on music recording and how it works.
CLIENT_SIDE_ONLY: If this is true, the server side is not required to have the mod file. No items, blocks,
or packets will be registered if it is false, which will break some triggers that require information from the
server to function correctly. Here is the breakdown per version on which triggers will not be able to activate:
1.12.2
- home
- structure
- mob
- victory
- pvp
1.16.5+
- home
- snowing
- biome
- structure
- mob
- raid
- victory
- pvp
The 3rd file automatically generated called debug.toml. As this is a preset config, you cannot override it with
config files from channels. Within this file you will find 8 different config options. Those are SHOW_DEBUG,
CURRENT_SONG_ONLY, LOG_LEVEL, PLAY_NORMAL_MUSIC, REVERSE_PRIORITY, COMBINE_EQUAL_PRIORITY,
BLOCKED_MOD_MUSIC, and BLOCKED_MOD_RECORDS. Here are what those do:
SHOW_DEBUG: Determines if the debug information gets rendered, should the currently playing songs and triggers of
all channels, the respective times and fade times of each song, and some useful in-world information regarding the
position of the player to make creating triggers easier
CURRENT_SONG_ONLY: If both this and SHOW_DEBUG are enabled, the debug information will only render information about
the currently playing song
LOG_LEVEL: Determines the minimum log level shown by the log visualization screen in the gui. The accepted levels in
order from lowest to highest are DEBUG, INFO, WARN, ERROR, and FATAL
PLAY_NORMAL_MUSIC: Determines if vanilla and blocked music is able to play when there are no channels with currently
active triggers
REVERSE_PRIORITY: If enabled, the priority checker will be reversed so that the lowest priority wins in the case of
multiple triggers being able to play at once instead of the highest one
COMBINE_EQUAL_PRIORITY: If enabled, the priority system becomes less strict, making it so that when triggers with
the same priority are both active at once, the song pools will be combined and any song from any of those triggers
will be able to play
BLOCKED_MOD_MUSIC: A list of mod ids from which audio registered to the music category will not be able to play by
default
BLOCKED_MOD_RECORDS: A list of mod ids from which audio registered to the records category will not be able to play
by default
There are 6 different file types that will generate for each registered channel. The these types are main, transitions, commands, toggles, redirect, and jukebox. All channel based config files are TOML files with the exception of redirect and jukebox which are simple txt files.
The main config files is where your trigger and song configurations go. This is the file you will be mainly using when configuring the mod
All triggers go under a triggers table and each trigger is defined by a table with the name of that trigger under that. For example, when you want to define the menu trigger - one of the simplest and most straightforward triggers the mod offers - it would look something like this:
[triggers]
[triggers.menu]
If you want to give the menu trigger some fade and delay values, you just need to add a variable with those parameters like so:
[triggers]
[triggers.menu]
fade_in = 100
fade_out = 150
song_delay = "100:200"
If you want to use a trigger holder like the mob trigger and have 2 different parameter sets, it could look something like this:
[triggers]
[[triggers.mob]]
identifier = "mob1"
resource_name = [ "Zombie" ]
level = 2
mob_targeting = true
[[triggers.mob]]
identifier = "mob2"
resource_name = [ "Skeleton" "Creeper" ]
level = 1
All of the different triggers and the parameters they accept are listed below.
Music Linking is a system where you can "link" triggers to each other, even across channels. This is useful if you want to have a song inherit the time where the song from previous trigger left off at, but it can also be used a crossfade helper between different channels or just to block music in another channel when a specific trigger is active. The accepted parameters are channel, inherit_time, linked_triggers, required_triggers, and resume_after_link. Here are what those do:
channel: The name of the channel that is being linked to. It is allowed to be the
same as the parent channel of the trigger, but since each channel can only play 1
sound at a time it will not be able to crossfade.
(Accepts any string)
inherit_time: Determines if the song that starts playing after the linked trigger(s)
become(s) active will be inherit the time from the last playing song of the trigger
that was linked from.
(Accepts true/false)
linked_triggers: The list of triggers in the target channel that must be active for
the link to occur.
(Accepts a list of strings)
required_triggers: The list of triggers in addition to the parent trigger of this
link that must be active in the channel of the parent trigger for the link to occur.
If this parameter is empty or not included, it means that only the parent trigger is
allowed to be active, but if the only element is the parent trigger that means that
the parent trigger is allowed to be active with any combination of other triggers.
Any other combination of triggers listed here means only that combination of triggers
is allowed to be active.
(Accepts a list of strings)
resume_after_link: Determines whether the song playing before the link occurred should
resume where it left off when the link is finished. If inherit_time is false, this
means the song plays where it left off, but if inherit_time is true, it will play the
song from where the linked song left off.
(Accepts true/false)
All songs go under a [songs] table and each song is defined by a table with the name of that song under that. For example, when you add a menu trigger to a song called songOne, it would look like:
[songs]
[songs.songOne]
triggers = [ "menu" ]
Or if you one a song called other3 to be able to play only when multiple triggers are active, you can do something like this:
[songs]
[songs.other3]
triggers = [ "raining" "pet" ]
In order to reference an instance of a trigger holder you need both the name of the trigger and its identifier parameter in the format of name-identifier. For instance, if you were to define a time trigger with an identifier of night that only plays during the nighttime, and a dimension with an identifier of overworld that only plays in the overworld and you have a song called nighttime1 which should only play when both of those are active, it would look like this:
[songs]
[songs.nighttime1]
triggers = [ "time-night" "dimension-overworld" ]
In addition to the triggers parameter, there are 5 other parameters that can be defined for audio. Those are chance, must_finish, pitch, play_once, play_x, resume_on_play, and volume. Here are what each of them do:
chance: A weighted chance value for the song to play within the song pool for a trigger. Default: 100
Note that even if you change the chance for a song to play, the mod will still never play the same song twice in a
row for the same trigger
(Accepts any positive integer value)
must_finish: The song must finish playing before the trigger is able to change
(Accepts true/false)
pitch: NYI
play_once: Allows for specifying various different levels of having the song only play once
1 = The song can only play once within a trigger until the trigger gets changed, but resets when there are no more
songs to play
2 = The song can only play once within a trigger until the trigger gets changed. Does not get reset if there are no
more songs to play
3 = The song can only play once for every time you are logged into a world
4 = The song can only play once per world
5 = The song can only play once per game session
play_x: Determines the number of time the song has to be played before play_once can take effect
(Accepts any positive integer)
resume_on_play: Determines if the song will resume playing from the last known time when it is played more than
once per session
(Accepts true/false)
volume: The value here represents the volume percentage of the song after the category is taken into account, where
1 is 100%. Note that up to 10x the normal maximum volume is supported but that does not mean it is a good idea to
set it to that
(Accepts any decimal value between 0 and 10)
Songs can also have loop points defined for them in addition to the rest of the parameters. For each loop, you need a [loop] table under the song. While they are called "loops" they can be used for more than just going back to a certain point in the song. The accepted loop parameters are from, to, and num_loops:
from: The time in milliseconds that the song must reach for the loop to run
(Accepts any positive integer)
to: The time in milliseconds that the song will be set to after then loop is run.
Note that this can be greater that the "from" value to skip parts of a song
(Accepts any positive integer)
num_loops: The number of times the loop will run before allowing the song to continue
(Accepts any positive integer)
Both triggers and songs are able to have universal parameters which are fallback parameters that are drawn from when the respective parameters are not set. Universal parameters can be overwritten for specific triggers and songs by defining a non default value for the associated parameter for that trigger or song. Each universal parameter set will go under a [universal] table under either the [triggers] table or the [songs] table.
The accepted universal trigger parameters are fade_in, fade_out, persistence, song_delay, start_delay, stop_delay, and trigger_delay.
Universal Triggers Example
[triggers]
[triggers.universal]
fade_in = 50
fade_out = 50
persistence = 100
The accepted universal song parameters are volume, pitch, play_once, and must_finish.
Note that you cannot have a song titled universal, since that would conflict with the universal parameters.
Universal Songs Example
[songs]
[songs.universal]
volume = 0.75
play_once = 1
The transitions file allows you to attach title cards and image cards to certain trigger configurations so that when the required triggers are all active, some text or an image is rendered to the screen.
All title cards go under a [title] table. The accepted title card parameters are triggers, titles, subtitles, title_color, subtitle_color, play_once, vague, centered, horizontal_alignment, vertical_alignment, x, y, scale_x, scale_y, and subtitle_scale. Here are what those do:
triggers: A list of triggers that needs to be active for the title card to run. Remember to format
the triggers as how they are seen in the debug info for this to work correctly.
titles: A list of potential titles, where if there is more than a single element one of them will be
randomly selected.
subtitles: A list of potential subtitles, where if there is more than a single element one of them will be
randomly selected.
title_color: The text color of the rendered title.
subtitle_color: The text color of the rendered subtitle.
play_once: Determines whether the title card can play once or more than once. Unlike the song parameter,
this one is a simple true/false.
vague: If this is true, the set triggers need to be playable, but not necessarily active.
centered: Determines whether the text is centralized or left aligned at the set position.
horizontal_alignment: Determines the default horizontal alignment of the text before the x parameter is applied.
Accepts "left", "center", or "right".
vertical_alignment: Determines the default vertical alignment of the text before the y parameter is applied.
Accepts "top", "center", or "bottom".
x: The horizontal position offset of the text, where positive values move it to the right and negative values
move it to the left.
y: The vertical position offset of the text, where positive values move it down and negative values move it up.
scale_x: The horizontal scaling of the text, where the default is 1 (100%)
scale_y: The vertical scaling of the text, where the default is 1 (100%)
subtitle_scale: The scale of the subtitle in reference to the title, where the default is 0.75 (75%)
All image cards go under an [image] table. The accepted image card parameters are triggers, name, time, fade_in, fade_out, opacity, scale_x, scale_y, horizontal_alignment, vertical_alignment, x, y, play_once, and vague. Here are what those do:
triggers: A list of triggers that needs to be active for the image card to run. Remember to format
the triggers as how they are seen in the debug info for this to work correctly.
name: The name of the image file including the extension
time: The number of ticks the image will be rendered for.
fade_in: The number of ticks it takes the image to fade into the set opacity value.
fade_out: The number of ticks it takes the image to fade out.
opacity: The opacity of the image, where 1 (100%) pertains to the maximum alpha value.
scale_x: The horizontal scaling of the image, where the default is 1 (100%)
scale_y: The vertical scaling of the image, where the default is 1 (100%)
horizontal_alignment: Determines the default horizontal alignment of the image before the x parameter is applied.
Accepts "left", "center", or "right".
vertical_alignment: Determines the default vertical alignment of the image before the y parameter is applied.
Accepts "top", "center", or "bottom".
x: The horizontal position offset of the image, where positive values move it to the right and negative values
move it to the left.
y: The vertical position offset of the image, where positive values move it down and negative values move it up.
play_once: Determines whether the image card can play once or more than once. Unlike the song parameter,
this one is a simple true/false.
vague: If this is true, the set triggers need to be playable, but not necessarily active.
As the name implies, the commands file allow commands to be attached to trigger configurations so that when the required triggers are all active, the command will be sent to the server to be run.
Each command will go under a [command] table. There are 2 parameters commands can accept, being literal and triggers
literal: The literal command string. You put the entire command here.
triggers: The list of triggers that must be active to execute the command. Remember to format the triggers as how
they are seen in the debug info for this to work correctly
The toggles file allows you to dynamically activate and deactivate triggers based on other triggers playing. Each toggle will go under a [toggle] table, in which each toggle table can have up to 3 [to] and 3 [from] child tables.
Each [to] child table must contain both a condition and a triggers parameter.
condition: The status that all triggers listed will be set to after the toggle is run.
Accepts "true", "false", or "switch" where switch inverts condition of each trigger.
triggers: A list of all triggers that will be affected by this particular "to" condition. Remember to format
the triggers as how they are seen in the debug info for this to work correctly
Each [from] child table must contain both a condition and a triggers parameter and may contain a play_once parameter.
condition: The type of toggle that is being run for the specified triggers.
1 = When the triggers are toggled on
2 = When the triggers are playable
3 = When the triggers are active
triggers: A list of all triggers that must meet the "from" condition. Remember to format
the triggers as how they are seen in the debug info for this to work correctly
play_once: Determines whether the toggle will run once or if it is allowed to run multiple times.
The redirect file is a special config file that allows you to assign song names to sounds registered to the vanilla sound engine and external URLs for streaming audio.
External audio supports streaming from all of the following places:
YouTube
SoundCloud
Bandcamp
Vimeo
Twitch streams
Yandex Music
HTTP URLs
The redirect file comes with some instructions when it gets generated, but the basic idea is to do name = URL for audio streaming and name == resource for referencing sounds registered to the vanilla sound engine, where each entry needs to be on a separate line. You are then able to use the names you defined from the redirect file in the main config file for the channel as is, assuming there are no naming conflicts.
The jukebox file is a special config file that allows you to assign songs to a Custom Music Disc without having to assign them to a trigger first.
Similar to the redirect config, you can define a song by doing name = songName, where name is the name you want to assign to the song, and songName is the actual file name in the case of local songs, or the name from the redirect config in the case of redirected songs. Whatever you set the name to here is how you will reference the sound in other places.
Songs defined by the jukebox config also have built in support for custom display names and music disc texture, though both can only be added via a resource pack.
For display names, you can add a language file in your resource pack under assets/musictriggers/lang and name it en_us.lang if you are on 1.12.2 or en_us.json if you are on a modern version of the game. Alternatively for other languages, you can see the valid language codes here.
In the language file, you can set your display name like this if you are on 1.12.2
musictriggers.record.name=Custom Display Name
or like this if you are on a modern version
{
"musictriggers.record.name": "Custom Display Name"
}
where name refers to the name you set in your config file.
Custom disc textures are a bit more involved, but [WIP SECTION]
There are 49 different triggers that can be set and 46 different parameters that can be attached to the various triggers. Different triggers accept and require different parameters.
Some parameters have different functions in different triggers, but below is a general rundown for all of them. If a parameter acts different for a specific trigger, it will be outlined under that trigger. Note that in the case of trigger combinations, parameters are generally taken from the highest priority trigger in the combination. The accepted parameters are priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, persistence, start_delay, time_bundle, start_hour, end_hour, lowest_day_number, highest_day_number, zone_min_x, zone_max_x, zone_min_y, zone_max_y, zone_min_z, zone_max_z, resource_name, start_toggled, not, passive_persistence, toggle_inactive_playable, detection_range, mob_targeting, health, horde_targeting_percentage, horde_health_percentage, mob_nbt, infernal, champion, victory_id, victory_timeout, moon_phase, light_type, is_whitelist, biome_category, rain_type, biome_temperature, check_lower_temp, biome_rainfall, check_higher_rainfall, check_for_sky, check_above_level, slots, items, max_tracks, detection_y_ratio, toggle_save_status, and stop_delay. Here are what those do:
priority: The numerical priority of a trigger. In the case of multiple triggers being able to play at once, the
highest priority wins, unless REVERSE_PRIORITY is enabled.
identifier: A unique string used for setting an instance of a trigger holder. See the Trigger Holder section for
more information. This can be shortened to id in the config and it will still work the same.
fade_in: The number of ticks it takes the first song of the trigger to fade in.
fade_out: The number of ticks it takes the currently playing song to fade out when the trigger is no longer active.
trigger_delay: The number of ticks it takes for a song to start playing when the trigger becomes active.
song_delay: The number of ticks it takes for a song to start playing after a song within the same pool finishes.
level: This one depends on the trigger, but is generally self explanatory. It will be explained more in depth for
the triggers that use it.
persistence: The number of ticks a trigger will be active for after its parameters are no longer met.
start_delay: The number of ticks it takes for a trigger to be active for after its parameters are met.
time_bundle: See the time trigger.
start_hour: See the time trigger.
end_hour: See the time trigger.
lowest_day_number: See the time trigger.
highest_day_number: See the time trigger.
zone_min_x: See the zones trigger.
zone_max_x: See the zones trigger.
zone_min_y: See the zones trigger.
zone_max_y: See the zones trigger.
zone_min_z: See the zones trigger.
zone_max_z: See the zones trigger.
resource_name: A list of strings used for anything that needs to access a registry. It will be explained more in
depth for the triggers that use it.
start_toggled: Sets whether the trigger will start toggled on or off. See the Toggles section for more
information.
not: Inverts the parameters so that the trigger is only active when they are not all met.
passive_persistence: Determines whether triggers that are playable but not active will have their persistence
timers get reset.
toggle_inactive_playable: Determines if triggers that are playable but not active get toggled off
detection_range: The range in blocks a triggers that uses it will check. It will be explained more in depth for
the triggers that use it.
mob_targeting: See the mob trigger.
health: See the mob trigger.
horde_targeting_percentage: See the mob trigger.
horde_health_percentage: See the mob trigger.
mob_nbt: See the mob trigger.
infernal: See the mob trigger.
champion: See the mob trigger.
victory_id: Used by the mob, pvp, and victory triggers. See those for more information.
victory_timeout: Used by the mob, pvp, and victory triggers. See those for more information.
moon_phase: See the time trigger.
light_type: The type of light the light trigger will check for.
is_whitelist: See the gamestage trigger.
biome_category: See the biome trigger.
rain_type: See the biome trigger.
biome_temperature: See the biome trigger.
check_lower_temp: See the biome trigger.
biome_rainfall: See the biome trigger.
check_higher_rainfall: See the biome trigger.
check_for_sky: See the height trigger.
check_above_level: See the height trigger.
slots: See the inventory trigger.
items: See the inventory trigger.
max_tracks: Determines the number of songs the trigger is able to play before it is no longer active. Resets
when the parameters to activate the trigger are no longer met.
detection_y_ratio: Determines the vertical ratio of the detection_range parameter.
toggle_save_status: Determines how the toggle status for the trigger is saved/set.
1 = Toggle status is reset upon logging out of a world
2 = Toggle status is saved upon logging out of a world and read upon logging into a world
stop_delay: The number of ticks the trigger will be unable to become active again for after it stops being
active
See simple triggers for more information. The accepted simple triggers are loading, menu, generic, raining, storming, snowing, lowhp, dead, creative, spectator, pet, underwater, elytra, fishing, drowning, home, bloodmoon, bluemoon, harvestmoon, fallingstars, hurricane, sandstorm, acidrain, blizzard, cloudy, and lightrain.
Activates while the game is loading before the title screen is shown.
Accepts no parameters on its own, but is still affected by the universal trigger parameters
Requires: NONE
Activates on the title screen before a world is joined.
Accepts no parameters on its own, but is still affected by the universal trigger parameters
Requires: NONE
Activates only when there are no other triggers active.
Accepts: fade_in, fade_out, trigger_delay, song_delay, start_toggled
Requires: NONE
Activates when it is raining.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when it is thundering
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when it is snowing
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is at or below the health threshold.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: level
level: The current percentage of max health for the player
Activates when the player is dead.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is in creative mode.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is in spectator mode.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when there a pet owned by the player within 16 blocks of the player's position.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is underwater.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is flying with an elytra
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player is fishing in water.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: NONE
Activates when the player's air level is below the set level.
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: level
level: The air level the player must be at for the trigger to activate. Maximum air level is 300.
Activates when the player is close to their respawn position
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, detection_range
Requires: NONE
detection_range: The range in blocks the player needs to be from their respawn position.
The default value is 16 blocks
Activates when a bloodmoon is active
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Bloodmoon (1.12.2), Nyx (1.12.2), or Enhanced Celestials (1.16.5)
Activates when a bluemoon is active
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Enhanced Celestials (1.16.5)
Activates when a harvestmoon is active
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Nyx (1.12.2) or Enhanced Celestials (1.16.5)
Activates when stars are falling
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Nyx (1.12.2)
Activates during a hurricane
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, detection_range
Requires: Weather, Storms & Tornadoes (1.12.2)
detection_range: The range that will be checked for a hurricane. The default value is 16
Activates during a sandstorm
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, detection_range
Requires: Weather, Storms & Tornadoes (1.12.2)
detection_range: The range that will be checked for a sandstorm. The default value is 16
Activates when it is acid raining
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Better Weather (1.16.5)
Activates during a blizzard
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Better Weather (1.16.5)
Activates when it is lightly raining
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Better Weather (1.16.5)
Activates during a cloudy weather event
Accepts: priority, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Better Weather (1.16.5)
See Trigger Holders for more information. The accepted trigger holders are difficulty, time, light, height, riding, dimension, biome, structure, mob, victory, gui, effect, zones, pvp, advancement, statistic, command, raid, gamestage, rainintensity, tornado, moon, and season
Activates when the difficulty of the world matches the set level.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, level
level: The required difficulty level of the current world.
0 = Peaceful
1 = Easy
2 = Normal
3 = Hard
4 = hardcore
Activates under specific time, day, and moon conditions.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, time_bundle, start_hour, end_hour, moon_phase, lowest_day_number, highest_day_number
Requires: identifier, time_bundle OR start_hour
time_bundle: Preset time bundles for the convenience of not having to figure out how the hours work.
Accepted values are "day", "night", "sunrise", and "sunset".
start_hour: The hour of the day between 0-24 the trigger can activate. Daytime starts at 0 and nighttime starts
at 13. Decimal values are accepted.
end_hour: The hour of the day between 0-24 the trigger is no longer active. The default is 3 hours after the
start_hour. Decimal values are accepted.
moon_phase: The phase of the moon that must be current in the world
0 = Any moon phase
1 = Full Moon
2 = Waning Gibbous
3 = Last Quarter
4 = Waning Crescent
5 = New Moon
6 = Waxing Crescent
7 = First Quarter
8 = Waxing Gibbous
lowest_day_number: The minimum required day number of the world.
highest_day_number: The maximum day number of the world.
Activates under certain light conditions
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, light_type
Requires: identifier, level
level: The light level must be at or below this. Accepts integer values between 0-15.
light_type: The type of light that gets checked for. Accepts "block", "sky", or "any" for either of those.
Activates under certain height conditions based on the y level of the player,
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, check_for_sky, check_above_level
Requires: identifier, level
level: The y level the player must be under.
check_for_sky: Determines if there must be blocks above the player's head for the trigger to be active.
This is true by default.
check_above_level: Reverses the height check so the player must be above the set level instead of under.
If this is true, check_for_sky will be ignored.
Activates when the player is riding something
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier
resource_name: A list mob display names or ids that the entity being ridden must match. If not included, the
trigger will be active for any entity being ridden. If the display name is being checked against, the resource
name must match exactly, but if the id is used, it is allowed to partially match.
Activates based on the dimension the player is in
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name
resource_name: A list of dimension ids. If in 1.12.2, it is recommended to use numerical IDs to guard against
mods that register null dimension names. The dimension id is allowed to partially match.
Activates based on the biome the player is in
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable, biome_category, rain_type, biome_temperature, check_lower_temp, biome_rainfall, check_higher_rainfall
Requires: identifier, resource_name OR biome_category OR rain_type OR biome_temperature OR biome_rainfall
Note that despite the OR requirements, you can check as many of them as you want to, but you must have at least 1.
resource_name: A list of biome ids where any are allowed to partially match the current biome.
biome_category: A list of biome categories from which the biome must be from at least 1. These
are also allowed to partially match.
rain_type: The type of precipitation of the biome. Accepts "rain", "snow", "none" or "any" for any of them.
biome_temperature: The temperature the biome must at or above.
check_lower_temp: Reverses the temperature check so the biome has to be under or equal to it.
biome_rainfall: The amount of precipitation the biome must receive.
check_higher_rainfall: Reverses the rainfall check so it is the maximum rather than the minimum
Activates based on the structure the player is in
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name
resource_name: A list of structure ids where any are allowed to partially match the current structure.
Activates based on various conditions regarding living entities and bosses around the player.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable, detection_range, mob_targeting, health, horde_targeting_percentage, horde_health_percentage, mob_nbt, infernal, champion, victory_id, victory_percentage
Requires: identifier, resource_name, level
level: The number of mobs that must meet the rest of the parameters
resource_name: A list of mob display names or ids within the detection range that must match. If
the display name is used it has to match exactly, whereas mob ids are allowed to partially match.
If MOB is included, any hostile will be checked for.
If BOSS is included, the trigger will check for a boss bar, ignoring the parameters that are not level or
related to health.
detection_range: The range in blocks around the player that will be checked for mobs that meet the rest
of the parameters
mob_targeting: If this is true, the mob(s) must be targeting the player.
health: The health percentage of the mob in regards to its max health must be at or under this.
horde_targeting_percentage: Sets a percentage in regards to the number of required mobs that must be
targeting the player.
horde_health_percentage: Sets a percentage in regards to the number of required mobs that must pass the
health parameter check.
mob_nbt: Handles various aspects related to the NBT data of the mobs. If you are unfamiliar with how NBT
data works, I would recommend avoiding using this parameter entirely. With that in mind, there 6 different
prefixes to keep note of. These are KEY_PRESENT, VAL_PRESENT, GREATER, LESSER, EQUAL, and INVERT.
KEY_PRESENT will check if a tag with a specific key is present and it is a compound tag. VAL_PRESENT will
check if a value-based data parameter is present which is not a compound tag. GREATER will check if the
referenced numerical NBT value is greater than the given value. LESSER will check if the referenced numerical
NBT value is less than the given value. EQUAL is a catch-all parameter that can check if a numerical NBT
value is equal to a given one, if a boolean NBT value is equivalent to the given input, or if a string NBT
value matches the given input. It can also be used after a GREATER or LESSER check to allow the operation to
check for matching values as well. INVERT will check if a boolean NBT value is the opposite of the given
value. It can also be used after the KEY_PRESENT, VAL_PRESENT, or EQUAL checks to invert them. This
parameter parses NBT data as PREFIX;key;key;val where the keys are generally compound tags and values are
the value input getting checked against. For example, in the case of CustomName tag which has text and color
parameters, if you want to check if the color does not match `dark_aqua`, it would be formatted like
`EQUAL;INVERT;CustomName;color;dark_aqua`
infernal: Requires Infernal Mobs to be installed. This is a list of all infernal qualities that are allowed
to partially match the current qualities of the mob. Can include ALL to check for any infernal quality.
infernal: Requires Champion to be installed. This is a list of all champion names that are allowed
to partially match the current champion names of the mob. Can include ALL to check for any champion name.
victory_id: A string corresponding to the identifier of registered victory trigger that will be
activated when the mobs that allowed the current mob trigger to activate are killed.
victory_percentage: The percentage of entities able to activate the trigger in regards to the level
parameter that need to be dead for the corresponding victory trigger to activate
Activates based on entities from mob or pvp triggers that were killed.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable, victory_timeout
Requires: identifier, persistence
victory_timeout: The number of ticks after the last known time an entity was able to activate its associated
trigger that it is allowed to activate a victory trigger for
Activates based on the current GUI being displayed. Note that the implementation of this is currently kinda dumb, so other than the CREDITS case you might not want to use it.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name
resource_name: A list of GUI class names that are allowed to partially match the class powering
the current GUI screen.
Activates based on the potion effects currently applied to the player.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, resource_name, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name
resource_name: A list of effect names that are allowed to partially match one of the
effects the player currently has applied
Activates based on the coordinate position of the player.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, zone_min_x, zone_max_x, zone_min_y, zone_max_y, zone_min_z, zone_max_z
Requires: identifier, zone_min_x, zone_max_x, zone_min_y, zone_max_y, zone_min_z, zone_max_z
zone_min_x: The player's x coordinate must be greater than this value
zone_max_x: The player's x coordinate must be less than this value
zone_min_y: The player's y coordinate must be greater than this value
zone_max_y: The player's y coordinate must be less than this value
zone_min_z: The player's z coordinate must be greater than this value
zone_max_z: The player's z coordinate must be less than this value
Activates when a player is damaged by another player
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, resource_name, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, persistence
Activates when a player gains an advancement
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, resource_name, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name
Note that this trigger is only really active for 1 tick, so either the persistence parameter or a must_finish song parameter is a soft requirement if you actually want to make use of it.
resource_name: A list of advancement names that are allowed to partially match one of the
the advancement gained by the player.
Activates based on a stat value of the player
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, level, start_toggled, not, resource_name, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier, resource_name, level
resource_name: A list of stat names that are allowed to partially match at least 1 stat id.
level: The numerical value of any matching stat must be greater than this
A special trigger that allows for activation upon running the command '/musictriggers [player] commandtrigger [identifier]' or '/mt [player] commandtrigger [identifier]' where [identifier] pertains to the instance of the command trigger that is being queried.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: identifier
Note that this trigger is only really active for 1 tick, so either the persistence parameter or a must_finish song parameter is a soft requirement if you actually want to make use of it.
Activates based on tile entities that are around the player.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, resource_name, detection_range, detection_y_ratio
Requires: identifier, resource_name
Activates based on certain items in certain slots of the player's inventory
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, persistence, start_delay, passive_persistence, toggle_inactive_playable, items, slots
Requires: identifier, items
items: Determines the items that are allowed to match the specified slots. Accepts a list of [WIP]
slots: Determines the inventory slots that will be checked for the matched items. Accepts a list
of strings where each element correlates to a slot or group of slots to match. Valid elements include
"MAINHAND", "OFFHAND", "HOTBAR", "ARMOR", "ANY", or a specific slot number. "MAINHAND" checks the
item currently held in the main hand, "OFFHAND" checks the item currently held in the off hand,
"HOTBAR" checks all 9 hotbar slots, "ARMOR" checks the 4 armor slots, and "ANY" is the default that
checks all inventory slots.
Activates during a raid.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, level, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: (1.16.5+), identifier
level: The minimum wave number that the raid must reach before the trigger can activate.
Activates based on whether the player has or does not certain gamestages.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, resource_name, persistence, start_delay, passive_persistence, toggle_inactive_playable, is_whitelist
Requires: Game Stages (1.12.2, 1.16.5, 1.18.2 Forge, 1.19.2 Forge), identifier, resource_name
resource_name: A list of stage names that the player must contain at least one of.
is_whitelist: If this is false, the player is not allowed to have any of the stage names
listed in the resource_name parameter.
Activates based on the current rain strength.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, level, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Dynamic Surroundings (1.12.2, 1.16.5), identifier, level
level: The current percentage strength of the rain must be greater than this value
Activates if there is a tornado at or above the correct level nearby
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, level, persistence, start_delay, passive_persistence, toggle_inactive_playable, detection_range
Requires: Weather, Storms & Tornadoes (1.12.2), identifier
level: The current level of the tornado must be at or above this level.
Accepts integer values between 0-5
detection_range: The range that will be checked for a tornado. The default value is 16
Activates during a custom moon event.
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, resource_name, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Enhanced Celestials (1.16.5), identifier, resource_name
resource_name: A list of moon names that the current moon event is allowed to partially match.
Activates during a season
Accepts: priority, identifier, fade_in, fade_out, trigger_delay, song_delay, start_toggled, not, level, persistence, start_delay, passive_persistence, toggle_inactive_playable
Requires: Serene Seasons (1.12.2, 1.16.5, 1.18.2 Forge, 1.19.2 Forge), identifier, level
level: The current season must be this.
0 = Spring
1 = Summer
2 = Autumn
3 = Winter
There are a few other features of Music Triggers that don't really fit into any of the other categories, so they will be mentioned here instead
If REGISTER_DISCS is enabled in the registration config, you can use a music recorder to "record" the currently playing audio onto a blank music disc. Simply right click a blank music disc into a music recorder while a song is playing and after a maximum time of 30 seconds, an enhanced music disc will pop out with the correct song attached to it. Enhanced music discs will have a different texture based on the highest priority trigger that was active when it was recorded. In the case of multiple channels playing audio at the same time, a random channel will be chosen to be recorded from.
Since you cannot use a music recorder on the title screen, the menu trigger has a special method of recording. Simply put an enhanced music disc that has already been recorded back into the music recorder and it will be colored differently, indicating it is looking for menu songs. If multiple menu songs are present, a random one will be chosen. If no menu songs are present, the recording will fail and the original disc will be returned.
If you have an issue or are confused about something, don't hesitate to let me know! You can do so by submitting an issue if you notice something not working correctly, or joining the Discord server as I am very active there. Even if I am not online, there will almost certainly be someone willing to help you out in setting things up