概要
前回 独自インゴットを作成してみました
今回はブロックの鉱石を作成してみます
コードは前回のものをそのまま流用し追加していきます
環境
- macOS X 10.13.2
- Minecraft 1.12.2
- Forge 1.12.2 - 14.23.1.2555
- Forge MDK 1.12.2 - 14.23.1.2555
- Java 1.8.0_151
- eclipse Oxygen.1a Release (4.7.1a)
各種 Java ファイルの作成
コードを書いていきます
com.sample.mod パッケージの作成
- Reference.java
変更なし
- SampleMod.java
変更なし
com.sample.mod.handlers パッケージの作成
- RegistyHandler.java
package com.sample.mod.handlers;
import com.sample.mod.init.BlockInit;
import com.sample.mod.init.ItemInit;
public class RegistyHandler {
public static void Client() {
}
public static void Common() {
ItemInit.init();
ItemInit.register();
BlockInit.init();
BlockInit.register();
BlockInit.registerRenders();
}
}
BlockInit の処理をコールします
BlockInit は後で作成します
com.sample.mod.init パッケージの作成
- BlockInit.java
package com.sample.mod.init;
import com.sample.mod.init.blocks.CustomOre;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
public class BlockInit {
public static Block sample_ore;
public static void init() {
sample_ore = new CustomOre("sample_ore", 2.0F, 4.0F, 2);
}
public static void register() {
registerBlock(sample_ore);
}
public static void registerBlock(Block block) {
ForgeRegistries.BLOCKS.register(block);
block.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
ItemBlock item = new ItemBlock(block);
item.setRegistryName(block.getRegistryName());
ForgeRegistries.ITEMS.register(item);
}
public static void registerRenders() {
registerRender(sample_ore);
}
public static void registerRender(Block block) {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));
}
}
作成する鉱石の登録と描画を行います
CustomOre クラスを定義してそちらで鉱石の定義を行います
com.sample.mod.init.blocks パッケージの作成
- CustomBlock.java
package com.sample.mod.init.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
public class CustomBlock extends Block {
public CustomBlock(String name, float hardness, float resistance) {
super(Material.ROCK);
setUnlocalizedName(name);
setRegistryName(name);
setHardness(hardness);
setResistance(resistance);
}
public CustomBlock(Material materialIn) {
super(materialIn);
}
}
まず CustomBlock でブロックの定義と設定を行います
hardness は鉱石の硬さで resistance はピッケルの耐久度に影響する値です
- CustoreOre.java
package com.sample.mod.init.blocks;
import net.minecraft.block.material.Material;
public class CustomOre extends CustomBlock {
public CustomOre(String name, float hardness, float resistance, int harvestLevel) {
super(name, hardness, resistance);
setHarvestLevel("pickaxe", harvestLevel);
}
public CustomOre(Material materialIn) {
super(materialIn);
}
}
先ほど作成した CustomBlock を継承して作成します
harvestLevel はピッケルのレベルを指定することができます
木以上で掘れる鉱石、石以上で掘れる鉱石、鉄以上で掘れる鉱石などを定義することができます
com.sample.mod.proxy パッケージの作成
- ClientProxy.java
変更なし
- CommonProxy.java
変更なし
各種リソースファイルの作成
次に各種リソースファイルを作成します
リソースファイルとは mod の画像や定義情報のことを指します
assets.sm.lang
- en_us.lang
item.sample_ingot.name=Sample Ingot
tile.sample_ore.name=Sample Ore
鉱石用の名前の定義を追記します
assets.sm.models.block
- sample_ore.json
{
"parent": "block/cube_all",
"textures": {
"all": "sm:blocks/sample_ore"
}
}
鉱石としての定義を追加します
assets.sm.models.item
- sample_ore.json
{
"parent": "sm:block/sample_ore"
}
アイテムとしての定義を追加します
assets.sm.blockstates
- sample_ore.json
{
"variants": {
"normal": { "model": "sm:sample_ore" }
}
}
ブロックの形状を定義するファイルです
とりあえず鉄鉱石のものをそのまま採用します
assets.sm.textures.blocks
- sample_ore.png
これも既存の鉄鉱石の画像を適当に変更して使用します
その他
- mcmod.info
変更なし
全体としてプロジェクトエクスプローラが以下のようになっていれば OK です
動作確認
プロジェクトを選択して Client の実行の構成から起動しましょう
成功するとブロックの一覧に表示され更にブロックなので置くこともできます
ブロック一覧
配置した様子
最後に
Forge MDK で独自の鉱石を作成してみました
クラフトなどの定義を追加すれば素材としても使えます
クラフトの定義方法なども勉強してそのうち紹介できればなとは思っています
0 件のコメント:
コメントを投稿