Forge MDK 1.12.2 の環境での説明になります。
環境構築などについては下記のページを参考にしてください。
www.main-function.com
新しいブロックを作ろう
"testmod"のPackageにクラスを追加します。
右クリック(もしくはメニューバーのFile)、New、Classで作成ダイアログが開きます。
今回はクラス名を "MyBlock" とします。
空のクラスが作成されました。
package testmod;
public class MyBlock {
}
ここにBlockの実装を追記していきます。
まずは以下のように入力してください。
package testmod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
public class MyBlock extends Block {
public MyBlock(String name, Material materialIn) {
super(materialIn);
setUnlocalizedName(name);
setRegistryName(name);
}
}
簡単に説明をしていきます。
新しくBlockを作成するためにMinecraftのBlockクラスを継承する必要があります。
クラスをインポートして、Blockクラスを継承します。
import net.minecraft.block.Block;
public class MyBlock extends Block {
次にMyBlockのコンストラクタを書きます。
import net.minecraft.block.material.Material;
:
public MyBlock(String name, Material materialIn) {
super(materialIn);
setUnlocalizedName(name);
setRegistryName(name);
}
ブロックの名前とマテリアルを引数で渡します。
Materialクラスを使用するのでインポートが必要です。
親クラスのコンストラクタを super(materialIn) で呼びます。
名前をセットしておきます。
これで新たに作成するBlockクラスが作成できました。
作ったブロックを登録しよう
次に新しく作ったBlockクラスを登録する処理を書きます。
先程と同様に "testmod" のPackageに "ModBlocks" というクラスを追加します。
以下のソースを書きます。
package testmod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@Mod.EventBusSubscriber(modid=TestMod.MODID)
public class ModBlocks {
public static Block myBlock = null;
public static void init() {
myBlock = new MyBlock("myBlock",Material.ROCK).setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
event.getRegistry().registerAll(myBlock);
}
@SubscribeEvent
public static void registerItemBlocks(RegistryEvent.Register<Item> event) {
event.getRegistry().register(new ItemBlock(myBlock).setRegistryName(myBlock.getRegistryName()));
}
}
init()でMyBlockクラスのインスタンスを生成します。
引数に名前"myBlock"とマテリアル"ROCK"を渡して生成します。
Block登録時に呼ばれるイベント関数でBlockの登録を行います。
最後にModBlocksの初期化関数をTestModの初期化時に呼ぶようにします。
@Mod(modid=TestMod.MODID, version=TestMod.VERSION)
public class TestMod {
public static final String MODID = "testmod";
public static final String VERSION = "1.0";
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
ModBlocks.init();
}
@EventHandler
public void init(FMLInitializationEvent event) {
}
}
動かして確認してみよう
早速実行してみましょう。
起動したら[E]キーを押して持ち物画面を開きます。
建築ブロックのタブの一番下にスクロールします。
表示がおかしいですが新規に作成したBlockが追加されていることを確認します。
[R]キーを押してフィールドに配置もできます。
これで新規のBlockを追加することができました。