Skip to content

Deobfuscated names and javadocs

What

Deobfuscated mappings are collection of names which recover the meaning of classes/methods/fields/etc. of the obfuscated program, in our case, Minecraft.

Why

Computer programs are essentially lists of instructions. By running a compute program, you tell computer “do this, then do that,” so on and so forth.

Instructions are in form of numbers. Back in 1950s, computer programmers still had to write these number manually (punch cards, etc). Assembly langauge was invented to increase readability.

Both of the following asks computer to calculate 1 + 1, and store values somewhere:

0000 0100 
0000 0100
0110 0000
0011 0110 0001
0000 0100 
0000 0100
0110 0000
0011 0110 0001
ICONST_1 # Integer constant 1
ICONST_1
IADD     # Integer addition
ISTORE 1 # Store in slot #1
ICONST_1 # Integer constant 1
ICONST_1
IADD     # Integer addition
ISTORE 1 # Store in slot #1

(Those are JVM Bytecode instructions.)

So if you want to create trouble for other people to understand your code, you can write binary numbers.

Later, languages like BASIC, C were invented, so programmers can write this:

int computationResult = 1 + 1; // This is computation result, so we call it computation result.
int computationResult = 1 + 1; // This is computation result, so we call it computation result.

and a translator (i.e. compiler) will translate that to real instructions.

At this time, if you still want to create trouble for other people, by the same idea, you will

  1. Don‘t give source code
  2. Mess up the translation result

Step 2 is what we call “obfuscation”. It makes sure people get this nonsense

int aaaaa = 1 + 1; // What‘s the point of this aaaaa???
int aaaaa = 1 + 1; // What‘s the point of this aaaaa???

However, people can still make a guess. It is obvious that this is a computation result for something. This guessing effort is what we call “deobfuscation”. Deobfuscation helps us understand what are the codes doing.

List

Project NameInitiatorOpen to contribution?LicenseClasses?Methods?Fields?Parameters?Local Var.?Javadocs?Status
"MCP" [1]MCP TeamYes (via MCPBot)N/A [2]No [3]YesYesYesNoYesDead [4]
"BuildData" [5]Spigot Team? [6]? [6:1]Yes?No?No?NoNoNoUnknown [6:2]
YarnFabricMCYes (via PR)CC0-1.0YesYesYesYesNo [7]YesActive
Official MappingMojangNo (Proprietary)ARRYesYesYesNoNoNoActive
CraneArchitectoryYes (via PR)ARRNo [8]No [8:1]No [8:2]YesNoYesActive
Quilt MappingQuiltMCYes (via PR)CC0-1.0YesYesYesYesNoYesActive
ParchmentParchmentMCYes (via PR)CC0-1.0No [8:3]No [8:4]No [8:5]YesNoYesActive
Plasma [9]M.C.L [10]Yes (via PR)CC0-1.0Yes?Yes?YesYes?NoYes?Stable?
Yarrn [11]PhoenixVXYes (via PR)CC0-1.0Yes?Yes?YesYes?NoYes?Stable?

Special remarks


  1. The name "MCP Mapping" is technically errorous: MCP Team has never given this crowdsourcing project (i.e. the MCPBot and its successor MCPBot Reborn) a specific name. Lex, leader of the Forge team who was also once a member of MCP team, personally uses "crowdsourced mapping" to refer to it when necessary. Nevertheless, it is a wildly accepted name used by several mapping look-up bots to denote the exports from MCPBot Reborn project. ↩︎

  2. Exports of MCPBot has never been given a specific license, unlike the original MCP kit which includes a clearly written license.txt. Some consider this to be all-rights-reserved by default, while there are also community members who believe that these individual contributions are too small and too generic to be copyrightable. ↩︎

  3. MCPBot does not crowdsource class names; they are from MCPConfig (also discussed above). ↩︎

  4. Contrary to common belief, the so-called "MCP mapping" is not maintained by Forge team, but by the remnant of MCP team (specifically bspkrs; kashike also have access to its database; it is also said that cpw also have access, but it has never been verified). Therefore Forge team has no control over the crowdsourcing project. MCPBot_Reborn has never switched its target to 1.16 or onwards, despites kashike's claim of "I'm going to try and update MCPBot to 1.16 this weekend, fyi" made on Jun 25th, 2020. It fells into stagnation/hiatus until bspkrs announced its decomission on Nov 8th, 2021 ↩︎

  5. Neither Bukkit nor Spigot team has given this project a specific name. The name "BuildData" here refers to a project that contains data related to the name of a repository that contains mapping information related to Spigot building. In Bukkit/Spigot-based modders, this mapping is implied when using the term "NMS" (acronym of the net.minecraft.server package). ↩︎

  6. Little to no information has been disclosed about the generation and usage terms about this mapping. ↩︎ ↩︎ ↩︎

  7. See FabricMC/Yarn#2362. However, it is technically possible to include local variable names (powered by TinyV2 format). ↩︎

  8. Both Crane and Parchment are not standalone mapping systems. They are complementary to the "Official mapping" by its design. In Fabric Loom's terminology, they are cases of "layered mapping". ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  9. Formerly "Minecraft Cursed POMF", a parody on both POMF ("Public Open Mapping File", old name used by Yarn until Dec. 2018) and MCP (sharing the same acronym). Only targets beta-1.7.3 for now. ↩︎

  10. Full name "Minecraft Cursed Legacy". This is a project aiming at providing modding toolchains on "legacy versions", currently beta-1.7.3 only. ↩︎

  11. Also known as "Yarn-Indev". It is a set of mapping files targeting Minecraft Indev. https://github.com/PhoenixVX/Indev-Yarn ↩︎

Updated at: