最新版 |
編集中の文章 |
3行目: |
3行目: |
| | | |
| ==はじめに== | | ==はじめに== |
− | MinecraftのMOD作成チュートリアルにようこそ!私達ModderはMinecraftに対してたくさんの制御ができますが、それにはたくさんのコードに圧倒されます。しかし、新しいブロックや機能をMinecraftに追加するのは非常に自由な経験です。もし、あなたにとってゲームの一部分が不満であるとすれば、変えてしまえばいいのです!もし、もっとたくさんのコンテンツが欲しいなら、追加すればいいのです!これらのチュートリアルは簡単にMOD開発を始めるためにほとんどのmodderたちに便利であろう基本的なMODづくりの概念を教えるためのものです。
| + | MinecraftのMOD作成にようこそ!私達ModderはMinecraftに対してたくさんの制御ができますが、それにはたくさんのコードに圧倒されます。しかし、新しいブロックや機能をMinecraftに追加するのは非常に自由な経験です。もし、ゲームの一部分があなたが嫌いであるとすれば、変えればいいのです!もし、もっとたくさんのコンテンツが欲しいなら、追加すればいいのです!これらのチュートリアルは簡単にMOD開発を始めるためにほとんどのmodderたちに便利であろう基本的なMODづくりの概念を教えるためのものです。 |
| | | |
| ==終着点== | | ==終着点== |
− | *どのようにマインクラフトのコードを編集すればいいのか理解する。 | + | *どのようにMinecraftのコードを編集すればいいのか理解する。 |
| *Eclipseでどのようにパッケージやクラスを作ればいいのか理解する。 | | *Eclipseでどのようにパッケージやクラスを作ればいいのか理解する。 |
| *MinecraftのMODのために例文集として理解し使えるようにする。 | | *MinecraftのMODのために例文集として理解し使えるようにする。 |
24行目: |
24行目: |
| | | |
| ===EclipseでForgeプロジェクトを開く=== | | ===EclipseでForgeプロジェクトを開く=== |
− | このチュートリアルではあなたがEclipseを使っていることが前提です。Eclipse以外でも、NetBeansやEmacs,Vimなどでも行うことができます。しかし、MinecraftのMODプログラマーはEclipseで始めることによって、かなりの恩恵をうけることができます。
| + | このチュートリアルではあなたがEclipseを使っているとして行います。Eclipse以外でも、NetBeansやEmacs,Vimなどでも行うことができます。しかし、MinecraftのMODプログラマーはEclipseで始めることによって、かなりの恩恵をうけることができます。 |
− | もし、まだ準備していないのならば、Eclipseをダウンロードして下さい。残念なことにも、たくさんのファイルを含みますので、多くのシステムメモリが要求されることをご了承ください。しかし、どれだけシステムリソースをくおうとも、Eclipseは素晴らしいJavaのツールを提供してくれます。あなたが最初にEclipseを開くときは、Eclipseはワークスペースを訪ねてくるでしょう。それを、'''/forge/mcp/eclipse'''にすることをご理解ください。
| + | もしあなたが、準備していないのならば、Eclipseをダウンロードして下さい。不幸なことにも、たくさんのファイルを含みますので、多くのシステムメモリが要求されることにご了承ください。しかし、どれだけシステムリソースをくおうとも、Eclipseは素晴らしいJavaのツールを提供してくれます。あなたが、最初にEclipseを開くときは、Eclipseはワークスペースを訪ねてくるでしょう。それを、'''/forge/mcp/eclipse'''にすることをご理解ください。 |
| | | |
| ''間違ったワークスペースを設定してしまった際、違うワークスペースをすでにEclipseで用いている場合、ファイル→ワークスペースの切り替え→その他から切り替えることが可能です。'' | | ''間違ったワークスペースを設定してしまった際、違うワークスペースをすでにEclipseで用いている場合、ファイル→ワークスペースの切り替え→その他から切り替えることが可能です。'' |
91行目: |
91行目: |
| } | | } |
| </source> | | </source> |
− |
| |
− | 追加されるインポートリストはEclipseが自動的に編成します。そのため、特別にインポートに関しては何も言いません。
| |
− | このコードを書いた時点では、エラーになるかもしれません。CommonProxyが赤いアンダーラインによって惹かれているかと思います。Proxy Classセッションで、このクラスを作るからです。
| |
− |
| |
− | ===BaseModアノテーション===
| |
− | このBaseMODクラスに関して、質問があるでしょうが、このセクションではそれらに答えます。このセクションでは、BaseModクラスで使われていて、何を示しているのかを列挙します。
| |
− |
| |
− | '''@Mod'''
| |
− |
| |
− | ForgeにこのクラスがBaseModクラスであることを伝えます。3つのパラメータを持ちます。
| |
− |
| |
− | *modid
| |
− |
| |
− | あなたのMODに対しての一意の名前です。最初のリリース以降変えるべきではありません。
| |
− |
| |
− | *name
| |
− |
| |
− | 人間の読めるMODの名前です。
| |
− |
| |
− | *version
| |
− |
| |
− | MODのバージョンを指します。好きなバージョンの書式を用いて構いません。
| |
− |
| |
− | '''@NetworkMod'''
| |
− |
| |
− | *clientSideRequired
| |
− |
| |
− | クライアント側でこのModが必要かを示します。trueであるべきです。
| |
− |
| |
− | *serverSideRequired
| |
− |
| |
− | サーバー側でクライアント側と通信するために必要か示します。サーバー側に設置されていない場合入れないようにするには、trueに設定します。
| |
− |
| |
− | '''@Instance'''
| |
− |
| |
− | BaseModはSingletonです。(デザインパターンの1種)これはForgeが利用するあなたのクラスへの参照です。@Mod内のmodidと同じ引数を与える必要があります。さもなければ、デフォルトで空の文字列となりますが、同様に空の文字列となっているMODと競合を引き起こします。
| |
− |
| |
− | '''@SidedProxy'''
| |
− |
| |
− | このプロキシは、Forgeがサーバーかクライアントかどちらが走っていて走っていないかを判別するためにあります。このアノテーションはどのようなフィールドに対しても使用可能です。
| |
− |
| |
− | *clientSide
| |
− |
| |
− | クライアントの実装されている完全修飾名を含みます
| |
− |
| |
− | *serverSide
| |
− |
| |
− | サーバーの実装されている完全修飾名を含みます
| |
− |
| |
− | '''@PreInit'''
| |
− |
| |
− | このメソッドは、@Initの付けられたメソッドが呼ばれる前に呼び出されます。設定ファイルの読み込みなどに利用できます。
| |
− |
| |
− | '''@Init'''
| |
− |
| |
− | ここで一般的なMODの初期化を行います。ブロックやアイテムの登録、世界ジェネレータの登録、レシピの登録など、一般的なものはココで見つかります。
| |
− |
| |
− | '''@PostInit'''
| |
− |
| |
− | 他のMODと一緒に働くために提供されています。例えば、初期のブロックidを他のmodに使われていないidに変更したりします。
| |
− |
| |
− | ==Proxyクラス==
| |
− |
| |
− | ===前置き===
| |
− |
| |
− | Minecraftはシングルプレイモードであっても、クライアントとサーバーのセットアップを使います。クライアントがワールドをレンダリングする一方で、サーバーがワールドの状態をメンテナンスします。そのため、特別なことをしない限り、クライアントとサーバーが同時に動くこととなります。片方のサイドで動くコードのための2つのアノテーションが存在するのです。
| |
− |
| |
− | @SidedProxyアノテーションは、サーバー側にクライアント側とは違うコンストラクタを呼ばせたいときに利用します。両方とも同じ型か、フィールドを継承している必要があります。また、それらのクラスの名前は、文字列として渡されます。baseModないでは、このアノテーションは以下のように利用されています。
| |
− | <source lang="java">
| |
− | @SidedProxy(clientSide="tutorial.generic.client.ClientProxy", serverSide="tutorial.generic.CommonProxy")
| |
− | public static CommonProxy proxy;
| |
− | </source>
| |
− |
| |
− | いつ、どこでプロキシがインスタンス化されるかはわかりませんが、tutorial.generic.CommonProxyがサーバーサイドでは呼ばれ、tutorial.generic.ClientProxyがクライアントサイドでは呼ばれることになります。
| |
− |
| |
− | ==作り方==
| |
− |
| |
− | 最初に、サーバーサイドのプロキシを見てみましょう。上のコードを見る限り、このクラスはtutorial.generic.CommonProxyに見つかります。CommonProxyクラスをそのパッケージに作ってください。そして以下の例を書いて下さい。
| |
− |
| |
− | <source lang="java">
| |
− | package tutorial.generic;
| |
− |
| |
− | public class CommonProxy {
| |
− | public static String ITEMS_PNG = "/tutorial/generic/items.png";
| |
− | public static String BLOCK_PNG = "/tutorial/generic/block.png";
| |
− |
| |
− | // Client stuff
| |
− | public void registerRenderers() {
| |
− | // Nothing here as the server doesn't render graphics!
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | クライアントサイドのプロキシでは、tutorial.generic.client.ClientProxyにあります。同様にクラスを作ってください。また、以下のコードを利用してください。
| |
− | <source lang="java">
| |
− | package tutorial.generic.client;
| |
− |
| |
− | import net.minecraftforge.client.MinecraftForgeClient;
| |
− | import tutorial.generic.CommonProxy;
| |
− |
| |
− | public class ClientProxy extends CommonProxy {
| |
− |
| |
− | @Override
| |
− | public void registerRenderers() {
| |
− | MinecraftForgeClient.preloadTexture(ITEMS_PNG);
| |
− | MinecraftForgeClient.preloadTexture(BLOCK_PNG);
| |
− | }
| |
− |
| |
− | }
| |
− | </source>
| |
− |
| |
− | これらの中の、フィールドやregisterRenderメソッドの説明は、[[Icons and Textures]]で見つかります。今では、これらのイメージは存在しません。
| |
− |
| |
− | ==以上で終わりです==
| |
− |
| |
− | 以上のことをすれば、パッケージエクスプローラーは以下のようになっているはずです。
| |
− |
| |
− | *Minecraft
| |
− | **src
| |
− | ***tutorial.generic
| |
− | ****Generic
| |
− | ****CommonProxy
| |
− | ***tutorial.generic.client
| |
− | ****ClientProxy
| |
− |
| |
− | 以上で、あなたのコンテンツをForgeを用いて追加する準備が完了しました。
| |
− |
| |
− | ==次に何をしましょう?==
| |
− |
| |
− | *[[Crafting and Smelting]] -新しいアイテムを使う最も優しい方法のチュートリアルです。
| |
− | *[[Basic items]]-基本的なアイテム作成
| |
− | *[[Basic blocks]]-基本的なブロックの作成
| |