PaperMC/paperweight

Support for getDeclaredField and Class#forName in reobfJar

PlayerSchark opened this issue · 2 comments

Due to some nested classes in NMS are package-private it should be possible that Class#forName and Class#getDeclaredField are supported by the reobfJar task.

Example:

Class.forName("net.minecraft.network.ConnectionProtocol$PacketSet").getDeclaredField("classToId")
should be reobfuscated to:
Class.forName("net.minecraft.network.EnumProtocol$a").getDeclaredField("b")

or:

Entity.class.getDeclaredField("tickCount")
should be reobfuscated to:
Entity.class.getDeclaredField("ag")

It seems that SpecialSource already supports it in its RemapperProcessor.

It's worth noting that there are already libraries to handle this at runtime, https://github.com/jpenilla/reflection-remapper

I'm not sure if this is something we will bother with, given our intent to move away from relying on remapping in the future

we are in the process of building out tooling for the other direction, obf reflection calls -> mojang mapped source, since paper will ship mojang mapped jars per default in the future, so I dont see this being added to paperweight-userdev