石橋を叩いて壊すブログ

Minecraft V1.6.2をMCP8.05でデコンパイルするとエラーが出る

MinecraftのクライアントMODを作るには、まずMinecraftをデコンパイルし(ソースの形に戻し)、
それを改造・コンパイルしなければならない。
このデコンパイル・コンパイルの作業に使われるのがMCP。らしい。

で、このMCPはJava 6にしか対応していないと某サイトに書いてあった。
しかし困ったことに、手元にはJava 7しかない。
Java 6は既に古いバージョンで、Oracleの公式サイトからダウンロードできない。
公式サイトにも「Javaサポートを購入したユーザー、またはJava 6が必要なOracle製品を所有するユーザーのみ」Java 6を配布すると書いてある。
当然そんなサポートは購入していない。

仕方が無いのでJava 7でMCPを動かしてみると以下のとおりエラーが出た。

src\minecraft\net\minecraft\src\ChatMessageComponent.java:256: 警告:最終パラメータの不正確な引数型を持った可変引数メソッドの非可変引数呼出し。

                var7.append(StatCollector.translateToLocalFormatted(this.field_111090_h, var13));
                                                                                         ^

  可変引数呼出しに関してはObjectにキャストします。
  非可変引数呼出しに関してはObject[]にキャストしてこの警告を出さないようにします
src\minecraft\net\minecraft\src\Minecraft.java:293: エラー: シンボルを見つけられません
        Display.setResizable(true);
               ^

  シンボル:   メソッド setResizable(boolean)
  場所: クラス Display
src\minecraft\net\minecraft\src\Minecraft.java:851: エラー: シンボルを見つけられません
        if (!this.fullscreen && Display.wasResized())
                                       ^

  シンボル:   メソッド wasResized()
  場所: クラス Display
src\minecraft\net\minecraft\src\Minecraft.java:853: エラー: シンボルを見つけられません
            this.displayWidth = Display.getWidth();
                                       ^

  シンボル:   メソッド getWidth()
  場所: クラス Display
src\minecraft\net\minecraft\src\Minecraft.java:854: エラー: シンボルを見つけられません
            this.displayHeight = Display.getHeight();
                                        ^

  シンボル:   メソッド getHeight()
  場所: クラス Display
src\minecraft\net\minecraft\src\MouseHelper.java:29: エラー: シンボルを見つけられません
        Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2);
                                       ^

  シンボル:   メソッド getWidth()
  場所: クラス Display
src\minecraft\net\minecraft\src\MouseHelper.java:29: エラー: シンボルを見つけられません
        Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2);
                                                               ^

  シンボル:   メソッド getHeight()
  場所: クラス Display
注意:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
エラー6個
警告1個

MCPのrecompile.batを実行してコンパイルしようとしても同様のエラーが出る。
これではMODを作成できない。

…と思ったのだが、自分はMOD製作にEclipseを使っていて、物は試しとEclipseの実行ボタンを押すと、なぜかコンパイルしてクライアントを実行できる。
なんでだ?
調査してみよう。

まず先に、1個だけでている警告を片付けておく。
コンパイラが「可変引数呼出しに関してはObjectにキャストします」と助言してくれているとおり
キャストすれば問題は解決する。

編集前:var7.append(StatCollector.translateToLocalFormatted(this.field_111090_h, var13));

                                                                                    ↓ここに(Object)を追加する。

編集後:var7.append(StatCollector.translateToLocalFormatted(this.field_111090_h, (Object)var13));

次に、残る6件のエラーだが、recompile.batもEclipseもきっと同様にjavacを使ってコンパイルしているのだろう…
とすると引数が違うのか?と思い、javacの-classpathを比較してみた。
問題になっているDisplayクラスは、ソースファイル(Minecraft.java)の先頭部分で「import org.lwjgl.opengl.Display;」と書いてあったから、
lwjglに関する部分に違いがあるに違いない。

下は、recompile.batを実行したときに表示されるログのうち、javacの-classpath引数部分を見やすく改行したもの。

-classpath 
"jars\versions\1.6.2\1.6.2.jar;
lib;
lib\*;
lib;
lib\*;
jars\bin\minecraft.jar;
jars\bin\jinput.jar;
jars\bin\lwjgl.jar;
jars\bin\lwjgl_util.jar;
jars\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;
jars\libraries\org\lwjgl\lwjgl\lwjgl-platform\2.9.0\lwjgl-platform-2.9.0-natives-windows.jar;
jars\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jar;
jars\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;
jars\libraries\net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar;
jars\libraries\argo\argo\2.25_fixed\argo-2.25_fixed.jar;
jars\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;
jars\libraries\org\bouncycastle\bcprov-jdk15on\1.47\bcprov-jdk15on-1.47.jar;
jars\libraries\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;
jars\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;
jars\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar;
jars\libraries\commons-io\commons-io\2.4\commons-io-2.4.jar;
jars\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;
jars\libraries\net\sf\jopt-simple\jopt-simple\4.5\jopt-simple-4.5.jar;
jars\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;
jars\libraries\com\google\guava\guava\14.0\guava-14.0.jar;
jars\libraries\com\google\code\gson\gson\2.2.2\gson-2.2.2.jar;
jars\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar"

次の画像は、Eclipseでパッケージの「Client」を右クリックしてプロパティを表示し、
コンパイル時に読み込まれるjarファイルの設定画面を撮ったもの。

Eclipseでは、lwjglに関するファイルは画像で選択されている3件しかない。
すなわち、
lwjgl-platform-2.9.0-natives-windows.jar
lwjgl_util-2.9.0.jar
lwjgl-2.9.0.jar
である。

recompile.batが読み込んでいるファイルのうちlwjglに関するものは、6件ある。
すなわち、
lwjgl.jar
lwjgl_util.jar
lwjgl-platform-2.9.0-natives-windows.jar
lwjgl_util-2.9.0.jar
lwjgl-2.9.0.jar
librarylwjglopenal-20100824.jar
である。

この違いが何なのかについて調べるには自分では知識が足らないが
とりあえず環境をあわせれば上手くいくかもしれないという直感はあるので
mcp805\jars\のフォルダから、問題のlwjgl.jarとlwjgl_util.jarを消してrecompile.batしてみる。※

== Recompiling client ==
> Cleaning bin
> Recompiling
- Done in 11.88 seconds
== Recompiling server ==
> Cleaning bin
> Recompiling
- Done in 8.55 seconds
続行するには何かキーを押してください . . .

コンパイルが通った。( ゚д゚)ポカーン
起動も出来てしまった。
これでいいのか?
わからないけどいいことにしておこう。

ついでに、問題の2ファイルを消してからデコンパイルすると、デコンパイル時にエラーが出なくなった。

Minecraft V1.6でランチャーが導入されてフォルダ構成も変わっているようだから
ひょっとして問題の2つのファイルはいらないファイルなのかもしれない。
Minecraftをアンインストールして再インストールしたら綺麗に掃除できるだろうか。恐いからやらないけど。

(※
lwjgl.jarとlwjgl_util.jarのほかにlibrarylwjglopenal-20100824.jarは消さなくていいのか?
と言われそうだが、librarylwjglopenal-20100824.jarの存在はこの記事を書いているときに画像を見直して気づいた。
ようするに消さなくても動くようだ。)

この記事を評価

28 24

コメント

  1. 【ゲスト】 データの消し方がわかりませんでした [2013/10/20 17:23]
  2. 【石橋】 消すのはデータというかファイルだね。MCPのインストールやデコンパイルまでは実行できてますか?MCPのインストールフォルダ(バージョンや設定によるがmcp805とかmc806とかいう名前のフォルダ)の下にjarsというフォルダがあり、その中からlwjgl.jarとlwjgl_util.jarを消せばいいと思いますよ。たぶん。 [2013/10/20 18:00]
  3. 【ゲスト】 私の場合この通りにしてみたらエクリプスさんでのテストプレイが起動しないわコンパイルも成功しないわで大惨事でした、こういうパターンもありますという参考に…>< [2013/10/27 14:40]
  4. 【kk】 同じく、でコンパイルできません。
    mcp805で、Java6の最新を使っています [2014/8/14 12:15]
  5. 【石橋】 最低限エラーを貼って欲しい(勿論それでも答えられるとは限らない)。というか、それ以前の問題としてこの記事はJava7でのコンパイルの話だよ。 [2014/8/14 13:13]
  6. 【kk】 すみませんJava7でも行ったところ同じエラーだったので、Java7ということにしておきます。
    decompile.batを実行したときにcmdの画面に表示されたコードです↓
    ERROR:root:FATAL ERROR
    Traceback (most recent call last):
    File "runtime\decompile.py", line 58, in decompile
    commands = Commands(conffile, verify=True, no_patch=no_patch, workdir=workdi
    r, json=json)
    File "C:\Pylo\MCreator 1.3.5 [1.6.2]P (1)\forge\mcp\runtime\commands.py", line
    176, in __init__
    normalStart = self.readconf(workdir, json)
    File "C:\Pylo\MCreator 1.3.5 [1.6.2]P (1)\forge\mcp\runtime\commands.py", line
    562, in readconf
    mcLibraries = MinecraftDiscovery.getLibraries(mcDir, self.jsonFile, osKeywor
    d)
    File "C:\Pylo\MCreator 1.3.5 [1.6.2]P (1)\forge\mcp\runtime\MinecraftDiscovery
    .py", line 138, in getLibraries
    libFullPath = os.path.join(os.path.join(root, "libraries"), libPath, libSub
    dir, libVersion, libFilename)
    File "ntpath.pyc", line 108, in join
    UnicodeDecodeError: 'ascii' codec can't decode byte 0x8d in position 9: ordinal
    not in range(128)
    続行するには何かキーを押してください . . . [2014/8/14 16:32]
  7. 【石橋】 うちはBukkit専門なんでMCPは経験浅いんだけど、エラーメッセージにforgeという単語があるあたり、これプラグインのMinecraft Forgeとか入れてない?バニラのマインクラフトをMCPに掛けてみたらどうかな。 [2014/8/14 16:54]
  8. 【kk】 はい やっています^^ [2014/8/14 16:55]
  9. 【石橋】 Forge入りならForgeのファイル追加してMCP動かさないとエラーになるとどっかで聞いた覚えがあるよ。ただ、うちはただのMCPだけでも専門外でForge入りとなると輪を掛けて専門外なんで、続きは適切なとこで質問してもらえるとよろしいかと。 [2014/8/14 17:04]

【この記事にコメント】
お名前:
コメント:

295,353

記事カテゴリー

最近の記事

  1. FF14を翻訳したら国によって結構特色が違った[12/11]
  2. ゼロから始めるFactorioの回路構築(実践例編)[7/24]
  3. ゼロから始めるFactorioの回路構築(条件回路・論理演算編)[7/24]
  4. ゼロから始めるFactorioの回路構築(定数回路・算術回路編)[7/24]
  5. ゼロから始めるFactorioの回路構築(入力・出力・混合編)[7/24]

RSS1.0 RSS2.0

最近のコメント

  1. おー、お役に立てたようでなによりです。再起…[9/11]
  2. この記事が非常の役立ちました。おかげさまで…[9/9]
  3. 1.14.2のAPIで試しましたが、MapInitializeEv…[9/9]
  4. 天晴れ!押したらポーションのモヤモヤでまし…[5/26]
  5. 習うより慣れろって感じで。この記事は記事冒…[4/7]

記事を検索


管理人

石橋

結構な倹約家