提供: Minecraft Modding Wiki
2013年2月23日 (土) 09:04時点における59.136.13.226 (トーク)による版
移動先: 案内検索

このページはForge wiki内のBasic Blocks Tutorialの翻訳記事です。多くが意訳で、雑な翻訳であること、見やすさに応じて太字などは独自に変えられている場合がありますのでご注意ください。

Havvy's Minecraft Forge Tutorials(Basic Blocks)

終着点

  • Minecraftにおける新しいブロックの追加の基礎を学ぶ
    • Dirt,Stone,GlowStoneに似ているものを追加する
  • 以下のブロックのメソッドの利用方法について理解する
    • setStepSound
    • setResistance
    • setHardness
    • setCreativeTab
  • 以下のブロックのメソッドのオーバーライドの利用方法について理解する。
    • idDropped
    • quantityDropped

前提知識

  • Forgeの開発環境が整っていること
  • Basic Moddingの理解

基本

ブロックはMinecraftのワールドの大部分を構成しています。プレイヤーやモブ、壁画やアイテム以外はすべてがブロックです。

シンプルなブロックを作ることは、Blockのコンストラクタがデフォルトでpublicなので、アイテムを作ることよりも簡単です。一方で、ブロックは設定しなくてはならないことを多く持っています。すべてのブロックは以下のプロパティを持ちます。

Block ID

ゲーム内では、ブロックに0~4095の一意の値をつけます。500からはじめ1つのブロックにつき1づつ使います。

Texture ID

ユーザーに見せるテクスチャ

Material マテリアルは、次のセクションで解説する様々なプロパティを設定します。

Blast Resistance

クリーパーやTNTなどの爆発をどの程度軽減するか。

Luminance

どの程度そのブロックが明るく輝くか

Hardness

そのブロックを掘るのにどれだけ時間がかかるか

Creative Tab

どのクリエイティブのタブに属するか。

Sounds

エンティティがブロックの上を歩いた時、どのような音が聞こえるか。

Materials

残りのプロパティと比べると、マテリアルは何をセットするか複雑です。ですが、良いニュースなことに、あなたはおそらくマテリアルを作成する必要はありません。マテリアルは以下のプロパティによって設定されます。

  • ブロックが燃えるかどうか
  • ブロックがそれ自身でドロップされるかどうか
  • ブロックがピストンなどで押すことができるかどうか
  • マッピングにおけるカラー
  • ブロックが雪や葉っぱのように半透明かどうか
  • ブロックが雪のように地面をカバーするかどうか

正確なリストは、net.minecraft.src.Materialにて見つけることができます。それらの中から選ぶことは難しいはずがありません。もし、あなたの望むようなマテリアルが存在しなければ、新しく作って使えばいいのです。

GenericBlock

Blockを継承しなくてもブロックをすることは可能ですが、カスタムテクスチャを利用する際は便利です。そのため、以下のクラスをtutorial.generic.packageに追加してください。

package tutorial.generic;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class GenericBlock extends Block {

        public GenericBlock (int id, int texture, Material material) {
                super(id, texture, material);
        }
        
        @Override
        public String getTextureFile () {
                return CommonProxy.BLOCK_PNG;
        }

}

このコンストラクタはブロックのコンストラクタに渡しているだけです。Blockに対しての改良は、独自のテクスチャファイルを読み込むためのgetTextureFileに対してのオーバーライドのみです。 残りの設定はbaseModクラス内で行います。

Generic Dirt

ブロッククラスを見てください。Dirtは0.5Fの硬さ、じゃりと同じ音を持っています。ここでは、少しのメソッドしかありません。

public final static Block genericDirt = new GenericBlock(500, 1, Material.ground)
        .setHardness(0.5F).setStepSound(Block.soundGravelFootstep)
        .setBlockName("genericDirt").setCreativeTab(CreativeTabs.tabBlock);

見る限り、ブロックIDは500になり、textureは0でgroundマテリアルを利用します。 setHardnessでは、float値を取ります。dirtは0.5Fで、黒曜石は50Fです。硬さについては、[Minecraft Wiki]にて詳しく記述されています。 setStepSoundは音を設定します。簡単にいえば、あなたの使いたい全ての音はBlockクラス内のフィールドに記述されています。 setBlockNameは内部的なブロックへの名前を設定します。 setCreativeTabはクリエイティブでのインベントリのタブにアイテムを設定します。この例では、ブロックタブが利用されています。

他のプロパティはデフォルト値になっています。

ブロックの登録

ブロックはForgeに登録される必要性があります。そうするために、GameRegistry.registerBlock(Block block,String internalName)をloadメソッドに追加してください。

GameRegistry.registerBlock(genericDirt, "genericDirt");

この内部名はあなたのMODの中の他のブロックに対して一意である必要があります。名前を一意にするための良いアイデアとして、Block.setBlockName()で使った名前と同じにすることを薦めます。 この文字列の値はIDからブロックに対応づける文字列になります。

パブリックネーム

人間の読めない名前をつけるべきではありません。インベントリでこのブロックにオーバーレイした時、このブロックの名前が読めなくなります。このため、パブリックネームをLanguageRegistryを利用して登録する必要があります。ココで使うメソッドはaddNameです。

LanguageRegistry.addName(Object toName, String readableName);

アイテムやアイテムスタックやブロックにオブジェクトはなり得ます。このケースでは、ブロックになります。Genericのloadメソッドに以下のように追加してください。

LanguageRegistry.addName(genericDirt, "Generic Dirt");

これで、アイテムを拾っても"Generic Dirt"と表示されるようになりました。

効果的なツール

ここまでで、ブロックは作れましたが、もしそのブロックを何かのツール(ソードを除く)で掘りたい場合、1.5秒かかります。たとえ、シャベルであっても。これはDirtらしくありません。ブロックを効果的に掘ることを可能にするために、MinecraftForgeのスタティックメソッドであるsetBlockHarvestLevelを利用します。

MinecraftForge.setBlockHarvestLevel(Block block, String toolClass, int tier);

toolClassは"pickaxe"、"shovel"、"axe"もしくは自分で作った新しいツールクラスのな前から選んでください。tierは0が木、1が石、2が鉄、3がダイアモンドです。

それでは、このメソッドを使って、木のシャベルを用いてより効果的に採掘できるようにgenericDirtを設定しましょう。

MinecraftForge.setBlockHarvestLevel(genericDirt, "shovel", 0);