2017年12月17日日曜日

Forge MDK を使って独自の鉱石を作成する

概要

前回 独自インゴットを作成してみました
今回はブロックの鉱石を作成してみます
コードは前回のものをそのまま流用し追加していきます

環境

  • 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

sample_ore.png

これも既存の鉄鉱石の画像を適当に変更して使用します

その他

  • mcmod.info

変更なし

全体としてプロジェクトエクスプローラが以下のようになっていれば OK です
origin_ore3.png

動作確認

プロジェクトを選択して Client の実行の構成から起動しましょう
成功するとブロックの一覧に表示され更にブロックなので置くこともできます

ブロック一覧
origin_ore2.png

配置した様子
origin_ore1.png

最後に

Forge MDK で独自の鉱石を作成してみました
クラフトなどの定義を追加すれば素材としても使えます

クラフトの定義方法なども勉強してそのうち紹介できればなとは思っています

参考サイト

0 件のコメント:

コメントを投稿