Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JAD varnaming problem #88

Closed
XiaoPangxie732 opened this issue Feb 17, 2021 · 4 comments
Closed

JAD varnaming problem #88

XiaoPangxie732 opened this issue Feb 17, 2021 · 4 comments

Comments

@XiaoPangxie732
Copy link

XiaoPangxie732 commented Feb 17, 2021

JAD var generator won't regenerate the parameter names of the method. Because of this, parameter names may conflict with the generated names.

@XiaoPangxie732 XiaoPangxie732 changed the title udv and jvn doesn't work in some cases JAD varnaming problem Apr 2, 2021
@XiaoPangxie732
Copy link
Author

Maybe this is because method parameter names are declared in SRG mappings, so could please add an option to regenerate method parameter names?

@LexManos
Copy link
Member

LexManos commented Apr 2, 2021

You've provided no context, and your first post doesnt actually explain what you're doing.
There already exists a flag to disable using bytecode LV names. So... Done.

@LexManos LexManos closed this as completed Apr 2, 2021
@TheCurle
Copy link

TheCurle commented Apr 2, 2021

(the flag is patched in by us, you can use it with -jvn)

@XiaoPangxie732
Copy link
Author

I tried with "-dgs=1 -rsy=1 -asc=1 -bsm=1 -iec=1 -jvn=1 -udv=0 -ump=0", but the result is bad: arguments in lambda is not JAD style, method parameter names is JAD style in code but not in declaration.

Code fragment decompiled by ForgeFlower with "-dgs=1 -rsy=1 -asc=1 -bsm=1 -iec=1 -jvn=1 -udv=0 -ump=0"
   public void remove(ServerPlayer var1) {
      ServerLevel serverlevel = serverplayer.getLevel();
      serverplayer.awardStat(Stats.LEAVE_GAME); // 'serverplayer' is actually 'var1'
      this.save(serverplayer);
      if (serverplayer.isPassenger()) {
         Entity entity = serverplayer.getRootVehicle();
         if (entity.hasExactlyOnePlayerPassenger()) {
            LOGGER.debug("Removing player mount");
            serverplayer.stopRiding();
            entity.getPassengersAndSelf().forEach((var0) -> var0.setRemoved(Entity.RemovalReason.UNLOADED_WITH_PLAYER));
         }
      }
      ...
   }
   ...
   protected void save(ServerPlayer var1) {
      this.playerIo.save(serverplayer);
      ServerStatsCounter serverstatscounter = this.stats.get(serverplayer.getUUID());
      if (serverstatscounter != null) {
         serverstatscounter.save();
      }

      PlayerAdvancements playeradvancements = this.advancements.get(serverplayer.getUUID());
      if (playeradvancements != null) {
         playeradvancements.save();
      }

   }

I wrote a JAD name generator that generates JAD style names and writes them to LVT. Then use ForgeFlower with "-dgs=1 -rsy=1 -asc=1 -bsm=1 -iec=1" to decompile, the result is good. (at least better than above)

Code fragment decompiled by ForgeFlower with "-dgs=1 -rsy=1 -asc=1 -bsm=1 -iec=1" and my JAD name generator
   public void remove(ServerPlayer serverplayer) {
      ServerLevel serverlevel = serverplayer.getLevel();
      serverplayer.awardStat(Stats.LEAVE_GAME);
      this.save(serverplayer);
      if (serverplayer.isPassenger()) {
         Entity entity = serverplayer.getRootVehicle();
         if (entity.hasExactlyOnePlayerPassenger()) {
            LOGGER.debug("Removing player mount");
            serverplayer.stopRiding();
            entity.getPassengersAndSelf().forEach((entity) -> entity.setRemoved(Entity.RemovalReason.UNLOADED_WITH_PLAYER));
         }
      }
      ...
   }
   ...
   protected void save(ServerPlayer serverplayer) {
      this.playerIo.save(serverplayer);
      ServerStatsCounter serverstatscounter = this.stats.get(serverplayer.getUUID());
      if (serverstatscounter != null) {
         serverstatscounter.save();
      }

      PlayerAdvancements playeradvancements = this.advancements.get(serverplayer.getUUID());
      if (playeradvancements != null) {
         playeradvancements.save();
      }

   }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants