Top
Best
New

Posted by SteveHawk27 10/29/2025

Minecraft removing obfuscation in Java Edition(www.minecraft.net)
1027 points | 464 commentspage 2
kevincox 10/29/2025|
I'm pretty excited this but for a slightly strange reason. I have a little monitor for the logs that posts things like player joins and deaths to a chat room. It is fun and also encourages people to hop on the server when someone joins.

However the source information was always missing and strange in the logs making matching some messages difficult. Hopefully this will make more messages more unique so that I can easily match the ones I am interested in.

64718283661 10/29/2025||
The community obfuscation mappings unrestrictively licensed. The Microsoft ones are not. It's a trap.
einsteinx2 10/29/2025||
But the whole point is there are no more mappings. I’m not sure what the trap is supposed to be?
throwaway290 10/30/2025||
Your mod uses variable name FooBar in ways Microsoft don't like, Microsoft sues you for copyright

before the judge would have to admit it was just coincident.

rstat1 10/30/2025|||
They've had plenty of opportunity to do this and haven't, so would find it incredibly unlikely they would magically start to have a problem now

Not to mention doing would basically kill game as one of the biggest reason people even still play Minecraft is the modding scene, not the minimum viable effort that have been the official updates for last number of years.

throwaway290 10/30/2025||
don't think they could do it previously because the code is not open and any names are a result of deobfuscation so clashes are accidental
einsteinx2 10/30/2025||||
I’ll preface this by saying I’m not a lawyer, but let’s say Microsoft released an obfuscated version where the method FooBar is called FakeName instead. If I use FakeName in my mod, aren’t I hypothetically at risk of the same thing? How does the actual name matter for this argument?

Or is the argument that only source code is copyrighted, but not binaries so it only matters if the name matches the original source code? That doesn’t seem possible because it’s copyright infringement to share a retail game binary, so they’re clearly copyrighted as well.

So I’m really unclear how the risk here is any different regardless of obfuscation since the mod needs to use method names from the copyrighted binary either way.

throwaway290 10/30/2025||
I'm pretty sure if code is obfuscated there are no usable names and so people or deobfuscator comes up with original names.
circuit10 10/30/2025|||
Wouldn’t the structure of the code be be more copyrightable than the names?
throwaway290 10/30/2025||
community makes mods, they don't duplicate game code structure, and if they do it's clearly by accident because the code is obfuscated
circuit10 11/2/2025||
But the mod relies on the code structure as much as it relies on the names, I think it could still be considered a derivative work, I don’t think this would be copyrightable but I find the code structure being copyrightable more plausible than the names
poly2it 10/29/2025||
Does copyright apply to variable names?
jagged-chisel 10/29/2025||
Given the Oracle v Google decision, the likely answer is yes. But then there’s a fair use argument to be made.
Tyrannosaur 10/30/2025||
I was initially a little confused at your comment. I had thought the decision was against Oracle being able to sue for use of the Java API.

Reading a little closer, the decision was that even assuming the API copyright claim was valid, Google's use of the API was fair use.

> In April 2021, the Supreme Court ruled in a 6–2 decision that Google's use of the Java APIs served an organizing function and fell within the four factors of fair use, bypassing the question on the copyrightability of the APIs. The decision reversed the Federal Circuit ruling and remanded the case for further review.

https://en.wikipedia.org/wiki/Google_LLC_v._Oracle_America,_....

charcircuit 10/29/2025||
I would rather see allowing creators to monetize their Java edition mods again, and to get rid of their restrictive rules on mods. The old version of the EULA actually gave people a lot of freedom, but then they changed the rules on everyone and locked it down. Obfuscation is not a true problem compared to those.
immibis 10/30/2025|
You're always welcome to just ignore the EULA and hope they don't sue you. Which they won't because the costs to them are much greater than the benefits. Even with the monetized server thing, they didn't sue them, but they did create a server address blacklist, but it only contains a minority of monetized servers.
nullfield 10/30/2025||
One and only account (Mojang) that I can think of that I lost because it got taken over, and I couldn’t get support to help fix it (something about “go make another Mojang account”?)… and since I don’t really get the migration process they did or final outcome, it’s more of a “oh well losing that sucks”.
lurk2 10/30/2025|
This situation was a lot more common than people might think. If you bought the game before Notch introduced the EULA (late 2011 if memory serves), what they did was also probably illegal, since they didn’t have the legal boilerplate in place that would allow them to brick the game the way that they did. There was a streamer trying to start a class action over it a few years ago, but I don’t think anything ever came of it.
OkayPhysicist 10/30/2025||
What they did was illegal, and you absolutely can (and are encouraged to do so by Microsoft) sue them in small claims court for your Minecraft account back.
squigz 10/30/2025||
> and are encouraged to do so by Microsoft

Source? It seems that if they wanted people to get their lost accounts back, there's more efficient, less expensive ways of doing it?

OkayPhysicist 10/30/2025||
"Encourage" may be a strong word, but it's specifically outlined in the Microsoft Services Agreement:

> 11. Choice of Law and Place to Resolve Disputes. If you live in (or, if a business, your principal place of business is in) the United States, the laws of the state where you live (or, if a business, where your principal place of business is located) govern all claims, regardless of conflict of laws principles, except that the Federal Arbitration Act governs all provisions relating to arbitration. You and we irrevocably consent to the exclusive jurisdiction and venue of the state or federal courts in King County, Washington, for all disputes arising out of or relating to these Terms or the Services that are not heard in arbitration or small claims court.

xxmarkuski 10/30/2025||
Minecraft modding has done so much to get young people into CS. I started learning Java when I was 10 because I wanted to do modding. At university, I met so many people who had the same experience. The tooling developed for Minecraft modding is world-class and better than what is developed during PhDs. It's very advanced, and people internalized the JVM and Java spec. One problem, though, is that Mojang's updates often change much of the foundation, and upgrading mods is very time-intensive. Mojang announced in 2012 that an official modding API is in the works. This is another step.
PaulKeeble 10/29/2025||
As I understand it way back in the early Beta days of Minecraft obfuscation was added to avoid mods being embedded into the JAR and it being released as a combination enabling piracy of the game with mods embedded.

This has been a pain to workaround for years as the modding scene has gotten bigger. Hopefully this makes modding a bit more accessible.

LauraMedia 10/30/2025||
Yeah I still remember when you had to manually patch your minecraft.jar with mods. Always remove the META-INF directory so it works. Back then, when you installed two mods that were incompatible with each other, you had to throw away the whole minecraft.jar and start again.

This already changed A LOT when Forge and later Fabric came out, with a simple patch system akin to BepinEx and a mods folder.

mmis1000 11/1/2025||
The later generation mod loader use preloader and asm hooks though. So the file isn't even physically patched, just patched in memory. That is such an old day that you still need to patch the jar by yourself. (If I am not remembered it incorrectly, I think the community change happens between 1.3 and 1.5?)
spullara 10/29/2025||
You know what would make it even easier? Releasing the source code with a license that allows for modding.
nisegami 10/29/2025||
I consider Microsoft to be genuinely evil as an institution, but this is still nice to see.
immibis 10/30/2025||
Notice they're only doing this after the game is ensloppified (they make their money from merch and movies now, not from game sales) and after the game code suffers from so much inner-platform effect that modding it directly isn't as useful any more.

The inner platform effect is when, in an effort to make it so people don't have to use the original programming language because programming is complicated, you create a worse programming language and make people use that. In Minecraft, it's data and resource packs. The Java code isn't just a function on the block that renders it, any more - there's a bunch of indirection through resource packs, and they've gone abstraction hell with that too, adding unnecessary abstractions in the way of the actual abstraction they want.

vintermann 10/30/2025|||
Their model seems to be to keep Java Edition reasonably pure and close to the original spirit (with most of the original developers working on that), but do all the minebux exploitation on Bedrock, where a big majority of the children players are. The main evil thing they've done to Java players is the account migration, but even that was sort of understandable given how questionable Mojang's original account system was.
squigz 10/30/2025|||
> modding it directly isn't as useful any more.

Can you elaborate on this? This seems like a strange way of saying, "it's easier to mod little things with data/resource packs" - and mods are still absolutely necessary, as data/resource packs can't do everything. But they're great for, say, adding tags to random items (something I do regularly) or - the most obvious usecase - texture packs

immibis 10/30/2025||
Previously if you wanted to create a simple block type you would write something like this (very roughly and excusing HN not supporting code formatting):

public class MyBlock extends Block {public Icon getTexture() {return 0;} public String getTextureAtlasPath() {return "/mymod.png";}}

Later it was

public class MyBlock extends Block {Icon icon; public void registerIcons(IconRegistry r) {icon = r.register("mymod:myblock");} public Icon getTexture() {return icon;}}

You need a little bit more code and you have to know that "mymod:myblock" really means "/assets/mymod/icons/blocks/myblock.png" but it's not too bad. (Why not specify the actual path?)

But now it takes the Java class, plus about 5 different JSON files that are magically linked based on strings like the above (interpreted differently in each context), and if you want to simply set the icon in a few lines of code like before, you can't because all the code is specialized for handling JSON files. https://docs.minecraftforge.net/en/1.12.x/models/files/

You could argue it's better because it handles more block shapes, but the story for shapes isn't much better - you used to be able to write if(thingAboutItem) renderCertainWay(); but now you can write {"when":{"certain_condition":"true"}, "apply":{"model":"certain_model"}} and there's a whole bunch of code to write to map "certain_condition" to the condition you want, and woe betide you if your model isn't a bunch of textured axis-aligned cuboids. https://docs.minecraftforge.net/en/1.12.x/models/using/ https://docs.minecraftforge.net/en/1.12.x/models/advanced/ex...

If you know the inner-platform effect, it's the inner-platform effect: creating a poor replica of part of your programming environment in the quest for "configurability" or "no-code". https://en.wikipedia.org/wiki/Inner-platform_effect https://thedailywtf.com/articles/the_inner-platform_effect https://news.ycombinator.com/item?id=39412321

Modding with data packs is harder than modding with Java used to be, and modding with Java now is also harder than modding with Java used to be, because of data packs.

kgwxd 10/30/2025||
I fear it's the first step to announcing the discontinuation of Java Edition development.
squigz 10/30/2025||
I don't really think this would be the end of the world, would it? Much of the content they've added over the past few years has been of questionable merit, at least to me. Surely at some point they'll run out of ideas that can reasonably fit inside vanilla Minecraft?

(But no, I don't think they're going to stop JE development. I'd bet it's still the far more popular version, and they probably still make plenty of money from sales)

kgwxd 10/30/2025|||
-Surely at some point they'll run out of ideas that can reasonably fit inside vanilla Minecraft?

Exactly...? How much content is built with Bedrock edition and Marketplace Add-on's?

rbits 10/31/2025|||
I'm pretty sure Bedrock Edition is far more popular if you take all platforms into account.

But I agree Java Edition is not ending any time soon.

Traubenfuchs 10/29/2025||
I'd like to see a benchmark between the obfuscated and non obfuscated version.
internetter 10/29/2025||
Probably virtually the same. If I recall, the "obfuscation" was mostly mangling
Traubenfuchs 10/29/2025|||
Luckily I have never had to deal with obfuscation, but from what I have seen there are some grotesque things like defining every single randomly named method call in an array or map with random order or weirdly combining or tearing apart methods.

The only time I encountered it was when I was working for the government, we were working on the rules that decide who gets audited in depth by the tax police. The .jar it compiled to was obfuscated.

wtallis 10/29/2025|||
My decade-old recollection is also that Minecraft's obfuscation didn't do anything structural, just mangled class and method names. Think of it more like JavaScript minification than a serious attempt to thwart reverse engineering.
duskwuff 10/29/2025||
Minecraft - like most Java games - just used Proguard. It renames classes/fields/methods and sometimes inlines private methods, but doesn't make any substantial changes to control flow.
xxs 10/29/2025||||
I have seen =tons= of obfuscation (non-minecraft). Back in the late 90s it used to be popular, unfortunately.

Most of the stuff is like naming every method a or b, and using the fact they are overloaded, given one-letter-name or a reserved keyword like 'if' to classnames (or packages) was popular, too. Pretty much constant pool modifications w/o too much byte-code-editing.

Overall cheap and unnecessary and has not stopped anyone.

ok123456 10/29/2025||
It's still pretty popular. Most large smartphone applications are obfuscated to some degree. At least for Android, because it's bytecode for a VM, it's still trivial to disassemble and understand what is happening at a high level.
circuit10 10/29/2025|||
For Minecraft it’s just removing names and replacing them with random strings
SkiFire13 10/29/2025|||
AFAIK it also shortens the names, which might make the jar smaller or make it take less time to do name resolution at runtime. It probably won't be very relevant though, especially after startup.
PaulKeeble 10/29/2025|||
The files will be a little smaller obscured but it doesn't usually impact much other than RAM usage. The algorithms are all the same. Given the size of methods for being JIT compiled is token based not text size I don't think it even impacts that choice. So expect it to be identical.
xxs 10/29/2025||
same, except for meta space used - the class/variable names don't have pretty much any meaningful impact on java runtime, when the code is JIT'd. Even before (interpret mode) that the className/fields/methods are just references in the constant pool
Chihuahua0633 10/30/2025|
I have to assume this runs the risk of opening the floodgates for potential vulnerabilities to be discovered now. Hopefully they're prepared to start working on a bunch of new bug reports.
lucb1e 10/30/2025||
Closed-source code isn't that much less secure than open one that I think this is a legitimate worry, especially in this case where the obfuscation doesn't sound like it was effective much
mmis1000 11/1/2025|||
Whether is obfuscated or not. Minecraft java runs most logic in java, and write the save and network handling in parse & validate style instead of serialization/deserialization style. So there isn't much "vulnerabilities" for you though. The game probably isn't best in performance, but there aren't much vulnerabilities either.
rbits 10/31/2025||
They already released deobfuscation mappings years ago. Modders already have a deep understanding of the Minecraft codebase.
More comments...