Item Identity
For the engine to price an item, it first has to know which item it is. It gives every item a stable identity, and how it does that decides whether copies of the same item are grouped together or scattered.
Custom items
When an item comes from Nexo, Oraxen, ItemsAdder, MMOItems or MythicMobs, the engine asks that plugin for the item's own id and keys the item by it, as custom:<material>:<plugin>/<id>. Because the id comes from the source plugin, every copy of the same custom item shares one identity, even when individual copies carry different lore, stats or rolls. That is what lets the engine gather enough sales of a custom item to price it at all.
Spawners
A spawner from SilkSpawners is keyed by the mob it spawns, as custom:spawner:silkspawners/<mob>. A spawner from SpawnerMeta is keyed by its mob too, as custom:spawner:spawnermeta/<mob>, followed by its upgrade levels in SpawnerMeta's own order (range, delay, amount) when any of them is above the base, for example spawnermeta/zombie/1-2-2. An empty SpawnerMeta spawner is spawnermeta/empty, and one holding a spawn egg is spawnermeta/empty/<mob>.
A rename or an extra lore line does not change a spawner's identity. A SpawnerMeta spawner's remaining charges are left out, because they get used up and would otherwise give every sale its own item.
Vanilla items
A plain vanilla item is keyed by its material, so all plain diamonds are one item. A vanilla item carrying real extra data, a custom name, lore, enchantments or a model id, is keyed by its material plus a short fingerprint of that data, so a named, enchanted blade is treated as its own item rather than lumped in with the plain ones.
The fingerprint also takes in the details that change what an item is worth, and an item carrying one of them gets a fingerprint even with no name or lore:
- the potion type and custom effects, for potions, splash and lingering potions, and tipped arrows
- the contents of a shulker box or bundle, as the items inside and their total counts, so the slots they sit in do not matter
- the mob a spawner spawns
- an armor trim's material and pattern
- a player head's texture, or its owner
- how much durability is left, in quarters, for a damaged item
- banner patterns
- a firework's flight duration and effects, and a firework star's effect
So a Strength and a Healing potion, an empty and a full shulker box, and a zombie and a blaze spawner each get their own price. Contents are read one level deep, so a bundle inside a shulker box counts as that bundle, not as everything inside it.
How it reads custom items
The engine reads each plugin through that plugin's own public API, and does so defensively. If a plugin is absent or changes, the reader returns nothing and the item falls back to the vanilla rules, so nothing breaks. See Supported Plugins for the exact plugins and the ids they provide.