2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MinecraftModのデコンパイルの仕方

Last updated at Posted at 2016-12-30

自己紹介

皆さん、こんにちは!LiT!のキャンプ歴約2年のまるです。
今まで行ったコースの中で一番はまったマインクラフトについての話題をば…

デコンパイル!!

皆さん、こんな経験ありませんか?
「あのmodを参考にしたいけどソースが公開されていない…」
さて、ここで問題です。どうするのが正解でしょう?

正解は…

**「デコンパイルする」**でした!

どうやる?

  1. jd_guiのダウンロード
  2. modのデコンパイル
  3. func_・field_系のエラー直し

↓詳しく説明していきます

1.jd_guiのダウンロード

jd_guiのページにアクセスし、少し下のJU_GUIのところのDownloadタブからjd_gui-1.4.0.jarをダウンロードします。(バージョンは変わっているかもしれません。)
1.png

2.modのデコンパイル

先ほどダウンロードしたjd_guiをダブルクリックで起動します。
そして、デコンパイルしたいmodをjd_guiにドラッグ&ドロップします。
すると、一瞬のうちにデコンパイルされ、ソースコードが表示されます。
(画像には自作のModを使用しています。)
2.png

そして、左上のFile>Save all Sourcesをクリックし、好きなところに保存します。
3.png

そこにzipファイルやらなんやらができたと思います。
それを解凍すると、デコンパイル後のjavaファイルが出てきます。
c0ccb904-0108-ea63-4058-1dc444e0655b.png

これでデコンパイル自体は完成ですが、このままでは使えないのでいろいろしていきましょう。

3. func_・field_系のエラー直し

とりあえずこれを見てください。

seiti.java
package maru.seititools;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class seiti extends net.minecraft.item.Item {

  private boolean isair;
  
  public seiti()
  {
    func_77637_a(net.minecraft.creativetab.CreativeTabs.field_78040_i);
    func_77655_b("seititools_seiti");
    func_111206_d("seititools:seiti");
  }
  
  public boolean func_77648_a(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int meta, float wx, float wy, float wz)
  {
    this.isair = true;
    for (int i = -5; i <= 5; i++) {
      for (int j = 1; j <= 10; j++) {
        for (int k = -5; k <= 5; k++) {
          net.minecraft.block.Block block = world.func_147439_a(x + i, y + j, z + k);
          if ((block != Blocks.field_150357_h) && (block != Blocks.field_150378_br)) {
            world.func_147480_a(x + i, y + j, z + k, true);
          }
          if (block != Blocks.field_150350_a) {
            this.isair = false;
          }
        }
      }
    }
    if (this.isair) {
      return true;
    }
    stack.field_77994_a -= 1;
    return true;
  }
}

func_77637_aなど、意味わからないものがありますよね?
これは、プログラミングで使用している関数とマインクラフトが使用する関数の名前が違うので、コンパイルするときに直しているからです(たぶん…)。
というわけで修復していきましょう。

"minecraft Mod Corder Pack"で検索すると、MCPのダウンロードページを見つけられると思います。そこから該当バージョンのMCPをダウンロードし、fields.csvmethods.csvといったファイルを見つけてください。それがfunc,field系と元の変数名・関数名との対照表になっています。


また、

難読化後の名前に関してはMCP Mapping Viewerが便利ですよ。

というコメントをいただきましたが、イマイチ使い方がよくわからなかったので見送らせていただきました。すみません。(確実に私の技量不足)
興味がある方は使ってみてください。

完成!

func,field系を直したらデコンパイル完成です!
(ライセンスに違反しない範囲で)煮るなり焼くなりしてスキルアップしましょう!

2
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?