Uploaded:2023/01/01 Latest-Update:2023/01/01

MOD作成 - 簡単なブロックを追加する

目次は右上の「≡」から!

ModIdやメインクラスのjavaファイル名などの各自で異なる部分はいちいち説明しないのでご注意を。

ブロックのクラス

左のPackage Explorerから「src/main/java > com.masec.newmod」を右クリック、「New > Package」を押します。
Name:の「com.masec.newmod」の右に「.block」を書き足して「Finish」

作った「com.masec.new_mod.block」を右クリックして「New > Class」を押します。
クラス名はアイテム名と揃えます。今回は「TestIngotBlock」にしました。

● クラスのコード

作られたファイルを編集して、一旦ここまで作ります。

package com.masec.newmod.block;

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

public class TestIngotBlock extends Block {

  public TestIngotBlock() {
    super(Properties.of(Material.METAL));
  }

}

書き換える場所をマーカーで示しました。

各自で違うところをマーカーしたやつ
package com.masec.newmod.block; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class TestIngotBlock extends Block { public TestIngotBlock() { super(Properties.of(Material.METAL)); } }

桃色でマーカーしたところはブロックの素材を指定する部分です。以下から選んでください。
よくわからない項目は変数名を適当に訳しています。

変数概要
AIR空気
STRUCTURAL_AIR構造的な空気
PORTALポータル
CLOTH_DECORATION布のデコレーション
PLANT植物
WATER_PLANT水棲植物
REPLACEABLE_PLANT置き換えられる植物
REPLACEABLE_FIREPROOF_PLANT置き換えられる防火植物
REPLACEABLE_WATER_PLANT置き換えられる水棲植物
WATER
BUBBLE_COLUMN気泡
LAVAマグマ
TOP_SNOW
FIRE
DECORATION装飾
WEBクモの巣
BUILDABLE_GLASS建築可能なガラス
CLAY粘土
DIRT
GRASS草ブロック
ICE_SOLID氷塊
SAND
SPONGEスポンジ
SHULKER_SHELLシュルカーの殻
WOOD
NETHER_WOODネザーの木
BAMBOO_SAPLINGタケノコ
BAMBOO
WOOLウール
EXPLOSIVE爆発物
LEAVES
GLASSガラス
ICE
CACTUSサボテン
STONE
METAL金属
SNOW雪ブロック
HEAVY_METAL重い金属
BARRIERバリアブロック
PISTONピストン
CORALサンゴ
VEGETABLE野菜
EGG(カメの)卵
CAKEケーキ

● ブロックの性質

以下のように super() の閉じカッコの前で改行して、一行に一つずつブロックの性質を書き加えていきます。

package com.masec.newmod.block; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraftforge.common.ToolType; public class TestIngotBlock extends Block { public TestIngotBlock() { super(Properties.of(Material.METAL) .strength(5.0f, 5.0f) .harvestTool(ToolType.PICKAXE) .harvestLevel(3) .sound(SoundType.METAL)); } }

・.strength(float, float)

採掘にかかる秒数、爆発耐性を指定します。

・.harvestTool(ToolType)

採掘の適性ツールを指定します。 ToolType.AXEToolType.HOEToolType.PICKAXEToolType.SHOVEL から選びます。

・.harvestLevel(Int)

アイテムドロップの適性ツールを指定します。0が木、1が石、2が鉄、3がダイヤ、4がネザライトです。

・.sound(SoundType)

破壊などのサウンドを指定します。以下から選んでください。

詳細
変数概要
WOOD
GRAVEL砂利
GRASS
LILY_PADハスの葉
STONE
METAL金属
GLASSガラス
WOOL羊毛
SAND
SNOW
LADDERハシゴ
ANVIL金床
SLIME_BLOCKスライムブロック
HONEY_BLOCKハチミツブロック
WET_GRASS水棲植物
CORAL_BLOCKサンゴ
BAMBOO
BAMBOO_SAPLINGタケノコ
SCAFFOLDING足場ブロック
SWEET_BERRY_BUSHスイートベリーの茂み
CROP作物
HARD_CROP固い作物(ビートルート)
VINEツタ
NETHER_WARTネザーウォート
LANTERNランタン
STEMネザーの木
NYLIUMナイリウム
FUNGUSネザーのキノコ
ROOTSネザーの草
SHROOMLIGHTシュルームライト
WEEPING_VINES歪んだツタ
TWISTING_VINES深紅のツタ
SOUL_SANDソウルサンド
SOUL_SOILソウルソイル
BASALT玄武岩
WART_BLOCKウォートブロック
NETHERRACKネザーラック
NETHER_BRICKSネザーレンガ
NETHER_SPROUTSネザースプラウト
NETHER_OREネザーの鉱石(クォーツ)
BONE_BLOCK骨ブロック
NETHERITE_BLOCKネザライトブロック
ANCIENT_DEBRIS古代のがれき
LODESTONEロードストーン
CHAINチェーン
NETHER_GOLD_OREネザー金鉱石
GILDED_BLACKSTONE金入りブラックストーン

その他のコンポーネント

詳細

・.noCollission()

当たり判定をなくす

・.noOcclusion()

オクルージョンを無効にする

・.friction(float)

摩擦を指定する

・.speedFactor(float)

上を歩いた時の速度を指定する

・.jumpFactor(float)

上に乗ったときのジャンプ力を指定する

・.lightLevel(int)

光源レベルを指定する

・.instabreak()

草花のように一瞬で壊せるようにする

・.randomTicks()

ランダムティックの影響を受けるようにする

・.dynamicShape()

・.noDrops()

壊しても何もドロップしないようにする

ブロックを登録

アイテムのパッケージを追加したときと同様に、 「com.masec.newmod.init」を右クリックしてクラスを新規作成します。クラス名は「BlockInit」です。

● クラスのコード

これもまた、作られたファイルを編集してこうなります。

package com.masec.newmod.init;

import com.masec.newmod.NewMod;
import com.masec.newmod.block.TestIngotBlock;

import net.minecraft.block.Block;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class BlockInit {
  public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, NewMod.MOD_ID);
  public static final RegistryObject TEST_INGOT_BLOCK =BLOCKS.register("test_ingot_block", () -> new TestIngotBlock());
}

書き換える場所をマーカーで示しました。

各自で違うところをマーカーしたやつ
package com.masec.newmod.init; import com.masec.newmod.NewMod; import com.masec.newmod.block.TestIngotBlock; import net.minecraft.block.Block; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class BlockInit { public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, NewMod.MOD_ID); public static final RegistryObject<Block> TEST_INGOT_BLOCK =BLOCKS.register("test_ingot_block", () -> new TestIngotBlock()); }

桃色でマーカーしたところはこのファイルで初めて定義しています。雰囲気を合わせて自分のものに置き換えてください(大文字とか) 「"test_ingot_block"」のほうはコマンドなどで使われる、アイテムのidとなります。

ブロックのアイテム

アイテムとしてのブロックを追加しないと、/setblockだけできて/giveできないということになります。バニラだとネザーポータルとかそうですね。

ItemInit.javaを開いて以下の行を書き加えます。各自で異なる部分に注意してください。

package com.masec.newmod.init; import com.masec.newmod.NewMod; import com.masec.newmod.item.TestIngot; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.Item.Properties; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class ItemInit { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, NewMod.MOD_ID); public static final RegistryObject<Item> TEST_INGOT = ITEMS.register("test_ingot", () -> new TestIngot()); public static final RegistryObject<Item> TEST_INGOT_BLOCK = ITEMS.register("test_ingot_block", () -> new BlockItem(BlockInit.TEST_INGOT_BLOCK.get(),new Properties().tab(ItemGroup.TAB_BUILDING_BLOCKS))); }
イベントバス

アイテムの時のように、メインクラスのファイルに少し書き加えます。
各自で名前が違うと思いますが「NewMod.java」を開きます。

package com.masec.newmod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.masec.newmod.init.BlockInit; import com.masec.newmod.init.ItemInit; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; // The value here should match an entry in the META-INF/mods.toml file @Mod(NewMod.MOD_ID) public class NewMod { // Directly reference a log4j logger. public static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "new_mod"; public NewMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); bus.addListener(this::setup); ItemInit.ITEMS.register(bus); BlockInit.BLOCKS.register(bus); // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { // some preinit code } }

これを書き加えて終わりです。上のほうは各自で書き換える部分がありますね。

ルートテーブル

Package Explorerから「src/main/resources」を右クリックして「data.new_mod.loot_table.blocks」というパッケージを作ります。

その中に「test_ingot_block.json」を作ります。

{ "type": "minecraft:block", "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "new_mod:test_ingot_block" } ] } ] }
リソース

Package Explorerから「src/main/resources」を右クリックしてパッケージを作ります。名前は「assets.new_mod.blockstates」のようにします。
同様に、models.blockも追加します。

● モデル/テクスチャ

「assets.new_mod.blockstates」に「test_ingot_block.json」を作ります。ファイル名はブロックのIDです。

{ "variants": { "": { "model": "new_mod:block/test_ingot_block" } } }

「assets.new_mod.models.block」にも「test_ingot_block.json」を作ります。ファイル名はブロックのIDです。

{ "parent": "block/cube_all", "textures": { "all": "new_mod:blocks/test_ingot_block" } }

ブロックのアイテム用に「assets.new_mod.models.item」にも「test_ingot_block.json」を作ります。ファイル名はブロックのIDです。

{ "parent": "new_mod:block/test_ingot_block" }

Eclipseからちょっと出て、はじめに作ったフォルダの「src/main/resources/assets/newmod/textures」に 「blocks」フォルダを作り、テクスチャを入れます。テクスチャの名前は「test_ingot_block.png」のようにします。
最後はEclipseに戻り、「src/main/resources」を右クリックして「Refresh」します。

マイクラを起動して確認

このように、きれいなブロックが追加できました。

参考サイト
©2023 Rinca Hayamine