1.7.10の開発講座を修正中です。このページには誤りや古い情報が含まれる可能性があります。
特殊な機能を持たないブロックを追加します。
目次
ソースコード
package tutorial.aluminiummod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
@Mod(modid = "AluminiumMod", name = "Aluminium Mod", version = "1.0.0")
public class AluminiumMod {
public static Item aluminium;
//追加するブロックの宣言
public static Block blockAluminium;
@EventHandler
public void perInit(FMLPreInitializationEvent event) {
aluminium = new Item()
.setCreativeTab(CreativeTabs.tabMaterials)
.setUnlocalizedName("aluminium")
.setTextureName("aluminiummod:aluminium");
GameRegistry.registerItem(aluminium, "aluminium");
//Blockを継承したクラスのインスタンスを生成し、代入する。
blockAluminium = new AluminiumBlock(Material.rock)
//システム名の登録
.setBlockName("blockAluminium")
//テクスチャ名の登録
.setBlockTextureName("aluminiummod:aluminium_block");
//GameRegistryへの登録
GameRegistry.registerBlock(blockAluminium, "blockAluminium");
}
}
package tutorial.aluminiummod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
public class AluminiumBlock extends Block {
public AluminiumBlock(Material material) {
super(material);
//クリエイティブタブの登録
this.setCreativeTab(CreativeTabs.tabBlock);
//硬さの設定
this.setHardness(5.0F);
//爆破耐性の設定
this.setResistance(10.0F);
//ブロックの上を歩いた時の音を登録する。
this.setStepSound(Block.soundTypeMetal);
//回収するのに必要なツールを設定する。
this.setHarvestLevel("pickaxe", 2);
//明るさの設定
this.setLightLevel(0.0F);
}
}
解説
Block
minecraftのブロックはすべてこのクラスを継承している。modで追加するブロックもこのクラスを継承することになる。
コンストラクタ(Material material)
そのブロックのマテリアルを設定する。Materialにまとめれているので確認されたし。
Block setBlockName(String name)
ブロックのシステム名を登録するメソッド。
Block setBlockTextureName(String name)
ブロックのテクスチャを登録するメソッド。 アイテムと同様。
Block setCreativeTab(CreativeTabs tab)
ブロックをクリエイティブタブに登録するメソッド。アイテムと同様。
Block setHardness(float hardness)
ブロックの硬さを設定する。数値を上げると硬くなる。黒曜石は50.0F。金・ラピスラズリ以外の圧縮ブロックが5.0F。net.minecraft.block.Blockを参照。
Block setResistance(float resistance)
ブロックの爆破耐性を設定する。数値を上げると耐えられる爆発力が高くなる。黒曜石は2000.0F。圧縮ブロックは10.0F。こちらもnet.minecraft.block.Blockを参照。
Block setStepSound(StepSound sound)
ブロックの上を歩いたり、破壊したりしたときになる音の種類を設定する。
void setHarvestLevel(String type, int level)
typeで適正ツールの種類を指定、levelでレベルを指定する。レベルは高いほど要求するツールが強力なものになる。
Block setLightLevel(float level)
ブロックの光度を設定する。ここで渡した値に15をかけたものが光源レベルになる。0.0~1.0以外は無効。
GameRegistry
Block registerBlock(Block block, String name)
GameRegistryに追加ブロックを登録するメソッド。
使用例
オファレンブロックを追加する部分。メタデータなどを使っている箇所は省略した。
package nahama.ofalenmod;
/*略*/
/**@author Akasata Nahama*/
@Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION)
public class OfalenModCore {
public static final String MODID = "OfalenMod";
public static final String MODNAME = "Ofalen Mod";
public static final String VERSION = "[1.7.10]1.0.0";
/*略*/
/**最初に行われる処理。アイテム・ブロックの追加などを行う*/
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
/*略*/
//ブロックを設定するメソッドを実行
OfalenModBlockCore.registerBlock();
/*略*/
}
/*略*/
}
package nahama.ofalenmod.core;
/*略*/
public class OfalenModBlockCore {
/*略*/
public static Block blockOfalen;
/*略*/
/**ブロックを設定する*/
public static void registerBlock () {
/*略*/
blockOfalen = new OfalenBlock()
.setBlockName("blockOfalen")
.setBlockTextureName("ofalenmod:ofalen_block-");
GameRegistry.registerBlock(blockOfalen, ItemOfalenBlock.class, "blockOfalen");
/*略*/
}
}
package nahama.ofalenmod.block;
/*略*/
public class OfalenBlock extends Block {
/*略*/
public OfalenBlock() {
super(Material.rock);
this.setCreativeTab(OfalenModCore.tabOfalen);
this.setHardness(7.5F);
this.setResistance(15.0F);
this.setStepSound(Block.soundTypeMetal);
this.setLightLevel(1.0F);
this.setHarvestLevel("pickaxe", 3);
}
/*略*/
}
このままテストプレイをしてみると、テクスチャがない状態ではピンクと黒のデフォルトテクスチャになってしまう。また、名前も、tile.blockAluminium.nameとなる。これらの解決方法は次回。
過去の質問
- レッドストーンブロックのように、ブロックをレッドストーン動力源にするにはどうすればよいですか?
- canProvidePowerをオーバーライドし、常にtrueを返すようにしてください。また、isProvidingWeakPowerをオーバーライドし、常に15を返すようにしてください。レッドストーンのクラスである"BlockCompressedPowered"も参照してください。
階段や、ハーフブロックの追加方法ってありますかね?
1.7.10で階段やハーフブロックを追加するには、メタデータを扱う必要があります。
メタデータを持つブロックの追加(1.7.10)のコメント欄にも簡単な説明がありますが、BlockStairsやBlockSlabなどのバニラの実装を参考にしてください。
どこか指定の場所(例えばマグマの近くなど)のみに生成されるようにするにはどうすればいいですか?
ワールド生成時の処理を追加するには、IWorldGeneratorを実装したクラスを登録する必要があります。
溶岩源の生成後に処理を行うよう登録し、周囲に溶岩源があることを生成時の条件とすればよいでしょう。
「鉱石の追加」でブロックの自然生成について扱っているので、ご確認ください。