本次创建方块block的流程和上一次创建物品item的流程比较相似
演示包名:com.Joy187.newmod (之后都简称为包名)
1. 新建 -> 创建一个 包名.blocks 包

2.在刚刚创建的blocks包中新建一个类 BlockBase

3.在 包名.init 包中新建一个 ModBlocks 类

4.对BlockBase.java 进行编写:
package com.Joy187.newmod.blocks;
import com.Joy187.newmod.Main;
import com.Joy187.newmod.init.ModBlocks;
import com.Joy187.newmod.init.ModItems;
import com.Joy187.newmod.util.IHasModel;
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;
public class BlockBase extends Block implements IHasModel{
public BlockBase(String name, Material material) {
super(material);
setUnlocalizedName(name);
setRegistryName(name);
setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
ModBlocks.BLOCKS.add(this);
ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
}
@Override
public void registerModels() {
Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
}
4.对RegistryHandler.java 进行编写(加入关于方块的信息,和上一节的物品item方法类似):
package com.Joy187.newmod.util.handlers;
import com.Joy187.newmod.init.ModBlocks;
import com.Joy187.newmod.init.ModItems;
import com.Joy187.newmod.util.IHasModel;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@EventBusSubscriber
public class RegistryHandler {
@SubscribeEvent
public static void onItemRegister(RegistryEvent.Register<Item> event) {
event.getRegistry().registerAll(ModItems.ITEMS.toArray(new Item[0]));
}
@SubscribeEvent
public static void onBlockRegister(RegistryEvent.Register<Block> event) {
event.getRegistry().registerAll(ModBlocks.BLOCKS.toArray(new Block[0]));
}
@SubscribeEvent
public static void onModelRegister(ModelRegistryEvent event) {
for(Item item: ModItems.ITEMS){
if(item instanceof IHasModel) {
((IHasModel)item).registerModels();
}
}
for (Block block: ModBlocks.BLOCKS) {
if (block instanceof IHasModel) {
((IHasModel)block).registerModels();
}
}
}
}
5.对ModBlocks.java 进行编写(创造方块):
package com.Joy187.newmod.init;
import java.util.ArrayList;
import java.util.List;
import com.Joy187.newmod.blocks.BlockBase;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
public class ModBlocks {
public static final List<Block> BLOCKS = new ArrayList<Block>();
public static final Block ZS_BLOCK = new BlockBase("zs_block", Material.IRON);
}
6. 在 src/main/resources 中新建一个 包->命名为 assets.你的modid.blockstates

7. 新建一个 无标题文本文件

在文件中进行编辑:
{
"variants": {
"normal": { "model": "joymod:zs_block" }
//你的modid(和mcmod.info文件一致) : 你的方块名称(与ModBlocks的名称保持一致)
}
}
将文件保存至blockstates文件夹

8. 在models文件夹下 -> 新建 assets.你的modid.models.block->完成(用于存储方块模型信息)

9. 新建一个 无标题文本文件(编写方块models)
编辑如下代码
{
"parent": "block/cube_all",
"textures": {
"all": "joymod:blocks/zs_block"
//modid 你的方块名称
}
}
文件命名为方块名.json -> 保存到 models.block文件夹

10. 新建一个 无标题文本文件(编写方块物品栏models)
编辑如下代码
{
"parent": "joymod:block/zs_block"
//modid 你的方块名称
}
文件命名为方块名.json -> 保存到 models.item 文件夹

11. 对方块lang文件进行编辑
item.labor_shovel.name=Labor Shovel
tile.zs_block.name=ZS Block

12. 在textures文件夹下 -> 新建 assets.你的modid.textures.blocks->完成(用于存储方块材质信息)

13. 将两种材质分别放入textures.blocks和textures.items中

测试zs_block.png图片

解释:textures.blocks(方块材质) 和 textures.items (方块物品栏材质)

14. 保存所有文件,刷新项目 (F5) -> 运行程序

15. 游戏中成功出现我们的方块,创建成功!

ohhh