From 13w36a to 1.7.5/14w05b the game used the player's name as the name of the statistics file, this was then changed to the player's UUID to allow for players to change their name and still be able to keep their all their data.
Thankfully Mojang did implement a datafixer for this - besides a small gap in 18w03a to 18w19b (1.13)? - and with it always being the first thing that gets datafixed once upgrading you can always name the outputted file a player's name and the game will rename it to the correct version, if necessary.
If there is any issues with this program and or you find another issue with statistics please say in the issues section of the GitHub repo! I would hate to mess up someone's data like that, even something so minor (always take backups!).
In 13w36a/b the redstone torch statistics uses the unlit version which then got deleted in 13w37a causing all their corresponding statistics to be deleted along side.
In 14w03a minecraft started its switch from numerical to namespace - I.e #0003 into
minecraft:dirt - for blocks and items, this hit the statistics in 14w06a but Mojang never added a
datafixer ever for upgrading numeric IDs deleting all blocks and items once upgrading after 14w05b.
In 16w32a entity names were changed from UpperCamelCase to lower_snake_case and the statistics followed suit, but they failed to add a datafixer for these meaning once upgrading, all entity killed and killed by statistics are deleted.
The entity renames for the statistics then later gets reverted in 16w36a (1.11)
back to the old format but with the mobs that became seperate use their new names: this effects horses, donkeys, mules,
skeleton horses and zombie horses all being seperated from EntityHorse, skeletons, wither skeletons and strays from
Skeleton and zombies, zombie villagers and husks from Zombie all into their own seperate entities
instead of being a tag on the base entity.
Due to skeleton and zombies still having the same name from before the changes, they upgrade to 16w36a and beyond perfectly fine but the horses do not, meaning no matter what, when upgrading to versions after 1.10.2 it will always delete the kills and killed by horse statistics.
Originally when shulker boxes were added all the colours shared the same ID shulker_box and had a color tag to control each
type, this was then changed the following snapshot to have seperate ID, they added a datafixer for the item but not the statistic.
This is a little more complicated than the usual ID change as eventually in 18w10b (1.13) they added an undyed version with the same ID, meaning that it'd be more accurate to leave the ID if upgrading to versions after that.
In 1.11.1-pre the totem of undying's ID changed from Totem to Totem of Undying, Mojang added a datafixer for but
forgot about the statistics meaning updating totem statistics to this version and beyond will delete them.
As with most things, 17w47a - also known as the start of "The Flattening" -
reworked at lot of things, including how statistics are stored: no more stat.useItem.minecraft.[ID] now each entry is stored in its
own section to do with that specific stat - I.e "dropped", "used", "crafted" etc. - and with the offical
datafixer for this not being created until 1.13-pre3 means playing in versions between 17w47a and 1.13-pre3 will delete all statistics.
As well as reworking the statistic format The Flattening also reworked how items worked, importantly for us, spawn eggs. Before, all spawn eggs shared
the same ID and either had a DV pre-15w33a (1.9) pertaining to that
entity's internal ID - I.e Creeper = 50, FallingSand = 21, MinecartCommandBlock = 40 etc. - or afterwards, having a EntityTag ID
of that specific mob - "creeper", "falling_block", "commandblock_minecart". But after The Flattening they seperated them all into their own items,
leaving the generic "spawn_egg" stats without a corresponding item.
They also just accidently forgot to update to update terracotta's name. whoopies.
They updated the ID of terracotta in 17w47b from hardened_clay into terracotta.
When turtle scute was first added it was called turtle_shell_piece, this was then changed the next snapshot into its modern name of
turtle_scute though without a datafixer.
When corals were first added in 18w10a - though not being obtainable in survival till 10d - till 18w14a they had a diffrent naming scheme: they named by colour,
coral blocks were called [colour]_coral, coral [colour]_plant and dead coral [colour]_dead_coral, this was then
changed in the next snapshot to the modern formatting, but without a datafixer for the statistic till 1.13-pre3 and dead coral till 18w32a (1.13.1)
which erroneously converts it into waterlogged dead coral, which conveniently
can be used for shenanigans.
When seagrass was first added in 18w07a its ID was originally sea_grass to seagrass and once this was changed in the next snapshot,
not all did they forget to add a datafixer for the block till 1.13-pre1 they forgot about the statistics till 1.13-pre3.
When pufferfish mob was first added in 18w08b it was called puffer_fish the underscore was then removed in the next snapshot, but without a datafixer
for the statistic, deleting them once upgrading out of these versions.
Following suit from the previous changes with the pufferfish, salmon and cod were changed in 18w20a to remove their suffix of _mob, though with a datafixer
for the statistics being added in 1.13-pre6
Kelp, like most plants after the removal of numerical IDs, have two related blocks: The stem and the tippy top part. The stem was called kelp and the top and item
was called kelp_top, this was then changed to kelp_plant and kelp respectively but without a datafixer till 1.13-pre3 for the statistics.
Prismarine brick stairs and slabs were originally plural-ised in their ID, having prismarine_bricks_[type] as to follow the base block's name. This was then changed
to removal the S only for the slabs and stairs - but still keeping the base block plural? - without a datafixer till 1.13-pre3.
In 18w20b melons were Mojang's target for the day: changing the melon slice from melon into melon_slice, melon from melon_block to
melon and glistering melon from speckled_melon to glistering_melon_slice but forgetting a datafixer for the statistics till 1.13-pre3.
In 1.13-pre5 the flattening was slowing down but one of the last few things they did was update a few entities ID's that were strangely named. this included:
| 1.12 ID | 1.13 ID |
|---|---|
| evocation_illager | evoker |
| vindication_illager | vindicator |
| illusion_illager | illusioner |
| evocation_fangs | evoker_fangs |
| commandblock_minecart | command_block_minecart |
| eye_of_ender_signal | eye_of_ender |
| fireworks_rocket | firework_rocket |
| snowman | snow_golem |
| villager_golem | iron_golem |
| xp_bottle | experience_bottle |
| xp_orb | experience_orb |
Mojang did these changes without adding a data fixer initally, meaning once upgrading into this version all entities statistics are deleted and so are evoker spawn eggs due to this and weirdly as well as bucket of clownfish because screw them in particular?
In 1.20.3-pre1 the item ID of grass (not block of, nor double tall) was changed to short_grass, Mojang forgot a datafixer initally and as such
all related statistics are deleted once upgrading to this version.