I've been doing some investigative work into what is planned/capable with the new Advancements system as of 17w13a. I'll share what I find as I investigate further.
Currently, this is only for Advancement triggers, but I might do some more work later tonight or tomorrow on more stuff related to the system.
DISCLAIMER: Most of this is from doing work apart from actual testing, so most of this isn't guaranteed to work right now - bare that in mind before blaming me for this not working.
Symbols To Notice:
(P) are explicitly prospective, and haven't undergone any rigorous testing, so bare with me in trying to determine their purpose.
[U] are unknown, or haven't been explored in any real detail. These are either too ambiguous or completely devoid of information.
Pre-requisites
This section is for information that I find is necessary for dissecting some of these categories, but doesn't fit into any of them.
Item
An Item is a JSON object, seemingly representing an itemstack.
Keys:
* item: The ID of a Minecraft item.
* count: A Value/Range object, specifying the size of the itemstack.
* (P) data: The damage value of the item.
* (P) enchantments: An array of Enchantment objects.
* [U] potion: Potion data/identifier?
Enchantment
An Enchantment is a JSON object, representing an enchantment (as if I needed to say that).
Keys:
* enchantment: The ID of the enchantment.
* levels: A Value/Range object, specifying the level of the enchantment.
Value/Range
A Value/Range object is a JSON object, which can either represent a single floating point value or a range of them.
Keys:
* value: A floating-point number, representing a coordinate.
OR
* (P) value
* (P) min: A floating-point number, representing the minimum component of a range.
* (P) max: A floating-point number, representing the maximum component of a range.
Position
A Position is a JSON object, representing an area in the world (not just a position).
Keys:
* x: Value/Range object, X component of a coordinate.
* y: Value/Range object, Y component of a coordinate.
* z: Value/Range object, Z component of a coordinate.
Entity
An Entity is a JSON object, representing an entity type.
Keys:
* entity: An object, presumably to be expanded later?
* type: The ID of the entity.
Damage
Damage is a JSON object that represents some form of damage, with lots of specifiers therein.
Keys:
* damage_type
* is_projectile: Boolean, represents whether or not a projectile caused the damage.
* is_explosion: Boolean, represents whether or not an explosion caused the damage.
* [U] bypasses_armor: Boolean, assumably represents damage ignoring armor.
* [U] bypasses_invulnerability: Boolean, assumably represents damage that could affect an invulnerable (read: creative?) player.
* [U] bypasses_magic: Boolean, assumably represents damage that ignores potion effects.
* is_fire: Boolean, represents fire damage.
* [U] is_magic: Boolean, assumably represents potion-based damage. dealt: A Value/Range object, represents the damage that was *dealt. taken`: A Value/Range object, represents the damage that was taken.
* [U] blocked: Boolean, presumably represents whether or not the damage was blocked by a shield.
* source_entity: An Entity object, represents the entity that dealt the damage.
Triggers
enter_block
Conditions:
* block: ID of block to be entered
* state`: BlockState of the block being entered (requires `block)
Does what it says on the tin - if you enter the hitbox of a block (e.g. water, nether portal, etc.), the advancement triggers.
impossible
Conditions: None.
Not able to be gained, period.
inventory_changed
Conditions:
* slots: Tracks the state of arbitrary slots in the player's inventory.
* occupied: A Value/Range object, specifying the number of slots occupied by some item stack.
* (P) full: A Value/Range object, specifying the number of slots occupied by a full item stack (max item quantity).
* empty: A Value/Range object, specifying the number of slots that have no item stack.
* items: An array of Item objects.
This (as the name implies) seems to trigger whenever the inventory is changed, attempting to match the criteria above.
location
Conditions:
* position: Position object.
* (P) biome: A Biome ID (of what form, I'm not sure).
Seems to trigger whenever a certain position in the world (or biome, possibly).
player_damaged
Conditions:
* damage: A Damage object, represents the damage the player took.
Triggers whenever the player takes damage, presumably adhering to the criteria set out in that object.
player_killed_entity
Conditions:
* entity: An Entity object, represents the entity the player killed.
Triggers when a player kills the entity in question.
recipe_unlocked
Conditions:
* recipe: A Recipe ID, specifying the recipe that needs to be unlocked.
Triggers when a player has unlocked a recipe.
summoned_entity
* entity: An Entity object, represents the enemy summoned.
Triggers when a player summons a summonable enemy (e.g. the wither)
used_ender_eye
Conditions:
* [U] distance: A Value/Range object, purpose indiscernible.
Triggers on the use of an ender eye. Not yet sure what distance changes.
bred_animals
Conditions:
* parents: An array of Entity objects, presumably specifying the parent mobs.
* child: An Entity object, specifying the child of the breeding.
Triggers on breeding two animals together.
brewed_potion
Conditions:
* potion: The ID of the potion brewed
Triggers upon brewing a potion.
construct_beacon
Conditions:
* (P) level: A Value/Range object, specifying the level(?) of the beacon tower constructed.
Triggers when a beacon is constructed.
enchanted_items
Conditions:
* item: An item object, specifying the item enchanted.
* levels: A Value/Range object, specifying the level value or range of the enchantment.
Triggers when an item is enchanted. Doesn't seem to have a way to specify the enchantment...
I've been doing some investigative work into what is planned/capable with the new Advancements system as of 17w13a. I'll share what I find as I investigate further.
Currently, this is only for Advancement triggers, but I might do some more work later tonight or tomorrow on more stuff related to the system.
DISCLAIMER: Most of this is from doing work apart from actual testing, so most of this isn't guaranteed to work right now - bare that in mind before blaming me for this not working.
Symbols To Notice:
Pre-requisites
This section is for information that I find is necessary for dissecting some of these categories, but doesn't fit into any of them.
Item
An Item is a JSON object, seemingly representing an itemstack.
Keys:
* item: The ID of a Minecraft item.
* count: A Value/Range object, specifying the size of the itemstack.
* (P) data: The damage value of the item.
* (P) enchantments: An array of Enchantment objects.
* [U] potion: Potion data/identifier?
Enchantment
An Enchantment is a JSON object, representing an enchantment (as if I needed to say that).
Keys:
* enchantment: The ID of the enchantment.
* levels: A Value/Range object, specifying the level of the enchantment.
Value/Range
A Value/Range object is a JSON object, which can either represent a single floating point value or a range of them.
Keys:
* value: A floating-point number, representing a coordinate.
OR
* (P) value
* (P) min: A floating-point number, representing the minimum component of a range.
* (P) max: A floating-point number, representing the maximum component of a range.
Position
A Position is a JSON object, representing an area in the world (not just a position).
Keys:
* x: Value/Range object, X component of a coordinate.
* y: Value/Range object, Y component of a coordinate.
* z: Value/Range object, Z component of a coordinate.
Entity
An Entity is a JSON object, representing an entity type.
Keys:
* entity: An object, presumably to be expanded later?
* type: The ID of the entity.
Damage
Damage is a JSON object that represents some form of damage, with lots of specifiers therein.
Keys:
* damage_type
* is_projectile: Boolean, represents whether or not a projectile caused the damage.
* is_explosion: Boolean, represents whether or not an explosion caused the damage.
* [U] bypasses_armor: Boolean, assumably represents damage ignoring armor.
* [U] bypasses_invulnerability: Boolean, assumably represents damage that could affect an invulnerable (read: creative?) player.
* [U] bypasses_magic: Boolean, assumably represents damage that ignores potion effects.
* is_fire: Boolean, represents fire damage.
* [U] is_magic: Boolean, assumably represents potion-based damage.
dealt: A Value/Range object, represents the damage that was *dealt.
taken`: A Value/Range object, represents the damage that was taken.
* [U] blocked: Boolean, presumably represents whether or not the damage was blocked by a shield.
* source_entity: An Entity object, represents the entity that dealt the damage.
Triggers
enter_block
Conditions:
* block: ID of block to be entered
* state`: BlockState of the block being entered (requires `block)
Does what it says on the tin - if you enter the hitbox of a block (e.g. water, nether portal, etc.), the advancement triggers.
impossible
Conditions: None.
Not able to be gained, period.
inventory_changed
Conditions:
* slots: Tracks the state of arbitrary slots in the player's inventory.
* occupied: A Value/Range object, specifying the number of slots occupied by some item stack.
* (P) full: A Value/Range object, specifying the number of slots occupied by a full item stack (max item quantity).
* empty: A Value/Range object, specifying the number of slots that have no item stack.
* items: An array of Item objects.
This (as the name implies) seems to trigger whenever the inventory is changed, attempting to match the criteria above.
location
Conditions:
* position: Position object.
* (P) biome: A Biome ID (of what form, I'm not sure).
Seems to trigger whenever a certain position in the world (or biome, possibly).
player_damaged
Conditions:
* damage: A Damage object, represents the damage the player took.
Triggers whenever the player takes damage, presumably adhering to the criteria set out in that object.
player_killed_entity
Conditions:
* entity: An Entity object, represents the entity the player killed.
Triggers when a player kills the entity in question.
recipe_unlocked
Conditions:
* recipe: A Recipe ID, specifying the recipe that needs to be unlocked.
Triggers when a player has unlocked a recipe.
summoned_entity
* entity: An Entity object, represents the enemy summoned.
Triggers when a player summons a summonable enemy (e.g. the wither)
used_ender_eye
Conditions:
* [U] distance: A Value/Range object, purpose indiscernible.
Triggers on the use of an ender eye. Not yet sure what distance changes.
bred_animals
Conditions:
* parents: An array of Entity objects, presumably specifying the parent mobs.
* child: An Entity object, specifying the child of the breeding.
Triggers on breeding two animals together.
brewed_potion
Conditions:
* potion: The ID of the potion brewed
Triggers upon brewing a potion.
construct_beacon
Conditions:
* (P) level: A Value/Range object, specifying the level(?) of the beacon tower constructed.
Triggers when a beacon is constructed.
enchanted_items
Conditions:
* item: An item object, specifying the item enchanted.
* levels: A Value/Range object, specifying the level value or range of the enchantment.
Triggers when an item is enchanted. Doesn't seem to have a way to specify the enchantment...