Visual Studio の拡張機能 Minecraft Mod Developer Pack について
拡張機能、Visual Studio Minecraft Mod Developer Pack を触ったので作業を記録します。
現段階では、Visual Studio で Minecraft Mod 開発するにはバグ&躓く点が多く、私ではデバッグ実行からの Minecraft 起動(ただし作成した Mod は読み込めない)までしか行うことができませんでした(バグなのかやり方がまずいのかわからない)。不完全ですが手順を後述します。
I LOVE Visual Studio and Minecraft.
従来の方法、Eclipse における開発にて
まず、Visual Studio で行う前に Eclipse でやってみました、とても簡単にHello, World を行うことができましたし、Mod 開発を少し味わうことができました。参照したページは以下の通りです。特に躓くことなく30分ほどで最初の Mod を作成することができると思われます。
- MinecraftForge導入手順
- 1.7のレシピ追加
- レシピ追加のチュートリアル。1.8 の場合は、ソースの名前空間「cpw.mods.fml.***」を「net.minecraftforge.***」に変更します。参照:1.7から1.8への変更点
Visual Studio での開発について
Visual Studio で開発するには、次の 2 つの拡張機能が関わってくる(インストールが必要なのは Minecraft の方だけ)のですが、結構いろんな Issues に引っかかりました。
特にあれなのは、Minecraft Mod Developer Pack の Issues の対応が 5 月頭で止まっているところ。また、今は Java Language Support の方は Visual Studio 2015 でインテリセンスが動きません。
Visual Studio で Minecraft Mod 開発にトライ
ということで、不完全ですが手順を記載します。
環境
- Windows 8.1 x64
- Visual Studio 2015 RTM
- Java SE Development Kit (JDK) for Windows x64 をインストール
- (Minecraft Mod Developer Pack の必要環境。x64指定らしい。)
と、PCのユーザー名にスペースが入らないこと…。(Issue #21)
JDK をインストール後、拡張機能のMinecraft Mod Developer Pack をインストールします。
以下は必ず必要かはわかりませんが設定しました。
- 環境変数のPath に「C:\Program Files\Java\jdk1.8.0_51\bin;」を追加。
- 環境変数「JAVA_HOME」に「C:\Program Files\Java\jdk1.8.0_51」を追加。
プロジェクトの用意
Visual Studio 2015 のファイル>新規作成>プロジェクトから、以下のようにテンプレートを選択します。
(ちなみに一番下のテンプレートはおそらく工業化Modのテンプレート)
作成後、出力ウィンドウに「gradlew setupDecompWorkspace --refresh-dependencies」と出ますのでしばらく待ちます。
ネットでいろいろ取得するので、環境によって5-20分はかかるよ、と Hello.txtに書いてあります。
準備完了後は、出力ウィンドウの最後に
C:/Users/hogehoge/.gradle/caches/minecraft/net/minecraftforge/forge/1.8-11.14.1.1357/start/
と出ます。
また、ここでエラー「javac.exe はコード2を伴って終了しました。」と出る場合は、ユーザー名にスペースが入ると起こるバグによるものだと思われます。
準備完了後、ファイルは以下のようになっています。
Visual Studio にて ExampleMod.java を開き、
次のようにレシピ追加のコードを書きます。(これは 1.7のレシピ追加より)
package com.example.examplemod; import net.minecraft.init.Blocks; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) public class ExampleMod { public static final String MODID = "samplemod"; public static final String VERSION = "1.0"; @EventHandler public void init(FMLInitializationEvent event) { // some example code System.out.println("DIRT BLOCK >> "+Blocks.dirt.getUnlocalizedName()); GameRegistry.addRecipe(new ItemStack(Items.diamond), "#", "#", "#", '#', Blocks.dirt ); GameRegistry.addRecipe(new ItemStack(Items.diamond), "###", '#',Blocks.dirt ); GameRegistry.addRecipe(new ItemStack(Items.diamond), "# #", '#',Blocks.dirt ); GameRegistry.addRecipe(new ItemStack(Items.ender_pearl), "FWF", "W W", "FWF", 'F',Items.feather, 'W',Blocks.end_stone ); GameRegistry.addRecipe(new ItemStack(Blocks.wool,5), "LWL", 'L',Blocks.leaves, 'W',Blocks.web ); GameRegistry.addRecipe(new ItemStack(Blocks.wool,5,10), "LLL", "LWL", "LLL", 'L',Blocks.leaves, 'W',Blocks.web ); GameRegistry.addRecipe(new ItemStack(Items.diamond_pickaxe), "HD", 'H',new ItemStack(Items.diamond_hoe,1, OreDictionary.WILDCARD_VALUE), 'D',Items.diamond ); GameRegistry.addShapelessRecipe(new ItemStack(Items.diamond), new ItemStack(Blocks.wool,1,5), Items.feather, Blocks.web ); } }
起動
F5 より起動します。が、このF5から起動すると、下の様に Mod が 3つしか読み込まれず、先ほど書いた Mod は読み込まれていません。
この時の出力をGist / Failure Output に記載しておきました。
[14:32:01] [Client thread/INFO] [FML]: FML has found a non-mod file MinecraftMod 1.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible.
このあたりが怪しいのですがわからず。
仕方ないので、次のように書いた「RunClient.bat」を作成し、「gradlew」ファイルと同じ場所に配置して実行します。
call gradlew runClient pause
これだと Mod が 4 つ読み込まれ、先ほど書いたコードの通り、土ブロックからダイアモンドを作成できます。
この時の出力をGist / runClinetに記載しておきました。
以上、現段階では Visual Studio での Mod 開発は厳しい模様。