Obfuscation map

Obfuscation maps are ProGuard mappings from old (original) names to new (obfuscated) names for classes and class members that have been renamed. They have been exported in the client.json for every snapshot and release available in the Launcher since 19w36a, and the client.json for 1.14.4 has been updated slightly after 19w36a's release to include obfuscation maps as well.

Usage
The obfuscation maps can be used to remap obfuscated stack traces (as in crash reports) to readable stack traces. A tutorial is available.

Dinnerbone and Adrian Östergård have suggested that the obfuscation maps may make modding easier. Searge has implied that the obfuscation maps can replace certain third-party programs such as the Mod Coder Pack.

On August 12th, 2020, Dinnerbone states that modding projects can switch to official Mojang names provided in the obfuscation maps.

Third-party usages
The obfuscation maps include enough information to deobfuscate Minecraft for decompilation. Third-party programs may exist for this purpose.

According to the License, such decompiled source code can only be distributed in a modified version or part of a larger project. This was changed from being available only for internal purposes before August 14th, 2020.

License
Every obfuscation map file starts with a line indicating the license of the maps.

This current license has been in use since 21w03a. "# (c) 2020 Microsoft Corporation. These mappings are provided 'as-is' and you bear the risk of using them. You may copy and use the mappings for development purposes, but you may not redistribute the mappings complete and unmodified. Microsoft makes no warranties, express or implied, with respect to the mappings provided here. Use and modification of this document or the source code (in any form) of Minecraft: Java Edition is governed by the Minecraft End User License Agreement available at https://account.mojang.com/documents/minecraft_eula."

Versions prior to 21w03a have a slightly different license. "# (c) 2020 Microsoft Corporation. All rights reserved. These mappings are provided 'as-is' and you bear the risk of using them. You may copy and use the mappings for development purposes, but you may not redistribute the mappings complete and unmodified. Microsoft makes no warranties, express or implied, with respect to the mappings provided here. Use and modification of source code for Minecraft: Java Edition is governed by the Minecraft End User License Agreement available at https://account.mojang.com/documents/minecraft_eula."

For missing launcher versions released before 14th August 2020, such as Combat Tests, their obfuscation maps are available on another older license. "# (c) 2019 Microsoft Corporation. All rights reserved. This information is provided 'as-is' and you bear the risk of using it. This information does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this information for your internal, reference purposes. Microsoft makes no warranties, express or implied, with respect to the information provided here."

Per Dinnerbone, any obfuscation mapping released before the license update on 14th August 2020 would be still available under this older license in addition to being available under the new license.

Trivia

 * Out of all versions published after 19w36a (September 4, 2019), Combat Test 3 is yet the only one published without any obfuscation map.
 * Unlike previous Combat Tests, the version it forked against, 1.14.4, has obfuscation maps released.
 * All consequent Combat Tests have obfuscation maps released, and are based off versions with obfuscation maps released.


 * Before the August 16th, 2020 license update, versions released in year 2020 had  in the license notice in the obfuscation map files.
 * Despite that Combat Test 8b is published after the license update, it still uses the old license notice and has the 2019 year notice.


 * In client obfuscation mappings, the very first function listed is called, an easter egg reference to The Game.
 * This function is used to trigger a Java crash after holding the debug key combination for ten seconds.