-
Bug
-
Resolution: Works As Intended
-
None
-
21w08b, 21w10a, 21w11a, 21w14a, 21w15a, 21w17a, 21w18a
-
None
-
Community Consensus
Consider the following advancement:
{ "criteria": { "test": { "trigger": "minecraft:inventory_changed", "conditions": { "items": [ { "item": "minecraft:stone", "count": 0 } ] } } }, "rewards": { "experience": 1 } }
If we follow the logic, whenever a player's inventory is changed, if they don't have any stone in it, they should be granted 1 exp point.
But what is happening is that the advancement is never triggered. The behavior is the same if we put "max" to 0 for the count.
This is a bug, since this logic can be achieved with the following advancement, meaning that the "inventory_changed" trigger is properly triggered when you remove the last of a certain item from your inventory:
{ "criteria": { "test": { "trigger": "minecraft:inventory_changed", "conditions": { "player": [ { "condition": "minecraft:inverted", "term": { "condition": "minecraft:entity_properties", "entity": "this", "predicate": { "nbt": "{ Inventory: [ { id: 'minecraft:stone' } ] }" } } } ] } } }, "rewards": { "experience": 1 } }
But this is not as flexible as the "items" condition approach (for example item tags are not available), it is heavier to process, and it is very ugly.
I included a small data pack to quickly test if the bug is fixed: when your inventory changes, if you have no stone in it, you get a message saying which method triggered the advancement (item or NBT).