提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
2行目: | 2行目: | ||
==SpriteID無限化(独自のterrain.png, gui/items.pngの利用)== | ==SpriteID無限化(独自のterrain.png, gui/items.pngの利用)== | ||
− | + | 今までのサンプルではバニラのテクスチャを参照していた. ブロックはterrain.png, アイテムはgui/items.pngだった. ModLoaderにおけるaddOverrideというメソッドはこれらの空き領域に対し16*16のテクスチャを上書きし, そのテクスチャのインデックスを返すものだったため, 空き領域が埋まるとMinecraftがクラッシュしてしまう. この問題を解決するためにforgeではブロックやアイテムが参照するテクスチャを切り替える機構が用意された. なおこのサンプルでは'''プロキシシステム'''を利用する. <br/> | |
− | + | また, 独自のterrain.png, items.pngにも名前の制限はない. しかしテクスチャのサイズは256ドット×256ドットである. これは16ドット×16ドットのテクスチャが16×16個まとまっているものである.<br/> | |
− | </ | + | 今回サンプルに作成したテクスチャは以下の2つ.<br/> |
− | + | *[[メディア:SpriteSampleBlocks.png]]<br/> | |
− | また, 独自のterrain.png, items.pngにも名前の制限はない. しかしテクスチャのサイズは256ドット×256ドットである. これは16ドット×16ドットのテクスチャが16×16個まとまっているものである. 今回サンプルに作成したテクスチャは以下の2つ. | + | *[[メディア:SpriteSampleItems.png]]<br/> |
− | </ | ||
− | *[[メディア:SpriteSampleBlocks.png]] | ||
− | *[[メディア:SpriteSampleItems.png]] | ||
===フォルダ構造=== | ===フォルダ構造=== | ||
209行目: | 206行目: | ||
==解説== | ==解説== | ||
− | + | [[Forge式コンフィグファイルの利用]]同様, 既に解説した箇所の解説は省略する. | |
− | [[Forge式コンフィグファイルの利用]]同様, 既に解説した箇所の解説は省略する. | + | |
− | |||
===SpriteSampleCoreクラス=== | ===SpriteSampleCoreクラス=== | ||
217行目: | 213行目: | ||
import cpw.mods.fml.common.SidedProxy; | import cpw.mods.fml.common.SidedProxy; | ||
</source> | </source> | ||
− | + | プロキシシステムを使うためのアノテーション. | |
− | + | <br/> | |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
226行目: | 220行目: | ||
public static CommonProxy proxy; | public static CommonProxy proxy; | ||
</source> | </source> | ||
− | + | @SidedProxyの引数でクライアント側とサーバー側のクラスを指定する. この指定はフルパスでなければならない. | |
− | @SidedProxyの引数でクライアント側とサーバー側のクラスを指定する. この指定はフルパスでなければならない. | + | <br/> |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
proxy.registerTextures(); | proxy.registerTextures(); | ||
</source> | </source> | ||
− | + | プロキシのインスタンスを通してテクスチャの登録を行う. この1行はクライアント側でもサーバー側でも実行されるが, それぞれの実装はClientProxy, CommonProxyで異なる. | |
− | + | <br/> | |
− | </ | ||
− | |||
===BlockSpriteSampleクラスのgetTextureFileメソッド=== | ===BlockSpriteSampleクラスのgetTextureFileメソッド=== | ||
246行目: | 236行目: | ||
} | } | ||
</source> | </source> | ||
− | + | 参照したいテクスチャファイルのパスを返す. この時テクスチャ自体はmcroot/bin/minecraft/mods/spritesフォルダにあることになる. | |
− | |||
− | |||
− | |||
===ItemSpriteSampleクラスのgetTextureFileメソッド=== | ===ItemSpriteSampleクラスのgetTextureFileメソッド=== | ||
258行目: | 245行目: | ||
} | } | ||
</source> | </source> | ||
− | + | ブロックの場合と同様. アイテムのテクスチャファイルのパスを返す. | |
− | |||
− | |||
− | |||
===CommonProxyクラス=== | ===CommonProxyクラス=== | ||
270行目: | 254行目: | ||
} | } | ||
</source> | </source> | ||
− | + | サーバー側, CommonProxyでは何もしないが, ClientProxyでオーバーライドして使うために空のメソッドを定義している. | |
− | |||
− | |||
− | |||
===ClientProxyクラス=== | ===ClientProxyクラス=== | ||
279行目: | 260行目: | ||
package mods.spritesample.client; | package mods.spritesample.client; | ||
</source> | </source> | ||
− | + | クライアント専用のクラスは全てmods/spritesample/clientフォルダに入れることで, どのクラスがクライアント専用なのかをはっきりさせる. 必要ないなら同じパッケージでよい. | |
− | + | <br/> | |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
import net.minecraftforge.client.MinecraftForgeClient; | import net.minecraftforge.client.MinecraftForgeClient; | ||
</source> | </source> | ||
− | + | MinecraftForgeAPIのうちクライアント側のみの機能を提供するクラス. | |
− | + | <br/> | |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
296行目: | 273行目: | ||
import cpw.mods.fml.common.asm.SideOnly; | import cpw.mods.fml.common.asm.SideOnly; | ||
</source> | </source> | ||
− | + | [[新しいコーディング記法とUniversal Modding]]で触れたアノテーション. 共通でない(≒クライアント専用, サーバー専用)クラスやメソッドにつける. | |
− | [[新しいコーディング記法とUniversal Modding]]で触れたアノテーション. 共通でない(≒クライアント専用, サーバー専用)クラスやメソッドにつける. | + | <br/> |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
import mods.spritesample.CommonProxy; | import mods.spritesample.CommonProxy; | ||
</source> | </source> | ||
− | + | CommonProxyとはパッケージが異なるのでインポートしておく. | |
− | + | <br/> | |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
313行目: | 286行目: | ||
public class ClientProxy extends CommonProxy | public class ClientProxy extends CommonProxy | ||
</source> | </source> | ||
− | + | ClientProxyに@SideOnlyアノテーションを付与している. またClientProxyはCommonProxyを継承している. | |
− | + | <br/> | |
− | </ | ||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
326行目: | 297行目: | ||
} | } | ||
</source> | </source> | ||
− | + | CommonProxyで定義したメソッドをオーバーライドする. preloadTextureは引数のパスで指定した画像ファイルをキャッシュに読み込むメソッド. ここで指定する引数は上記のBlockSpriteSampleクラスとItemSpriteSampleクラスで記述したファイルパスと同じにする. | |
− | |||
− | |||
− | |||
==実際の挙動== | ==実際の挙動== | ||
− | + | 今回の挙動も今までのサンプルとは大差ない. しかし, blocks.pngやitems.pngの左上の16*16のテクスチャを変更したり, コード内のterrainIdやsetIconCoordを変更するとそれに応じてテクスチャも変更される. | |
− | |||
− |