自己紹介
皆さん、こんにちは!LiT!のキャンプ歴約2年のまるです。
今まで行ったコースの中で一番はまったマインクラフトについての話題をば…
デコンパイル!!
皆さん、こんな経験ありませんか?
「あのmodを参考にしたいけどソースが公開されていない…」
さて、ここで問題です。どうするのが正解でしょう?
正解は…
**「デコンパイルする」**でした!
どうやる?
- jd_guiのダウンロード
- modのデコンパイル
- func_・field_系のエラー直し
↓詳しく説明していきます
1.jd_guiのダウンロード
jd_guiのページにアクセスし、少し下のJU_GUIのところのDownloadタブからjd_gui-1.4.0.jarをダウンロードします。(バージョンは変わっているかもしれません。)
2.modのデコンパイル
先ほどダウンロードしたjd_guiをダブルクリックで起動します。
そして、デコンパイルしたいmodをjd_guiにドラッグ&ドロップします。
すると、一瞬のうちにデコンパイルされ、ソースコードが表示されます。
(画像には自作のModを使用しています。)
そして、左上のFile>Save all Sourcesをクリックし、好きなところに保存します。
そこにzipファイルやらなんやらができたと思います。
それを解凍すると、デコンパイル後のjavaファイルが出てきます。
これでデコンパイル自体は完成ですが、このままでは使えないのでいろいろしていきましょう。
3. func_・field_系のエラー直し
とりあえずこれを見てください。
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.csv
やmethods.csv
といったファイルを見つけてください。それがfunc,field系と元の変数名・関数名との対照表になっています。
また、
難読化後の名前に関してはMCP Mapping Viewerが便利ですよ。
というコメントをいただきましたが、イマイチ使い方がよくわからなかったので見送らせていただきました。すみません。(確実に私の技量不足)
興味がある方は使ってみてください。
完成!
func,field系を直したらデコンパイル完成です!
(ライセンスに違反しない範囲で)煮るなり焼くなりしてスキルアップしましょう!