(一) 注册一个方块
新建一个类,继承Block(本来可以不用新建,可以直接实例化一个Block,为方便管理还是新建一个)
package com.qiao.mymod.block;import net.minecraft.block.Block;public class MyBlock extends Block {public MyBlock(Properties properties) {super(properties);}
}
注册这个方块
public class MyMod
{public static Block block;public static Item item;// Directly reference a log4j logger.private static final Logger LOGGER = LogManager.getLogger();。。。。。。略// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD// Event bus for receiving Registry Events)@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)public static class RegistryEvents {/*** 订阅 事件 RegistryEvent.Register<Block>* @param blockRegistryEvent*/@SubscribeEventpublic static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {//实例化方块,方块的属性什么的跟 石头一致MyMod.block=new MyBlock(Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(1.5F, 6.0F));block.setRegistryName("mymod:my_block");blockRegistryEvent.getRegistry().register(block);LOGGER.info("HELLO from Register Block");}/**** 订阅 事件 RegistryEvent.Register<Item>* @param itemRegisterEvent*/@SubscribeEventpublic static void onItemRegistry(final RegistryEvent.Register<Item> itemRegisterEvent){Item.Properties properties=new Item.Properties(); //新建一Item的属性类 Item.Properties 是Item下的一个内部类,可以摁住CTRL+左键点进去看看具体有那些属性properties.group(MyItemGroup.MY_ITEM); //将这个物品暂时寄存在食物选卡下面item=new MyItem(10,10F,false,properties);item.setRegistryName("mymod:my_item");itemRegisterEvent.getRegistry().register(item);// .setRegistryName("mymod:my_item") 这个方法是设置Item的Id 规则是modID:物品id//注册my_block的itemItem.Properties blockP = new Item.Properties();blockP.group(MyItemGroup.MY_ITEM);//通过实例化ItemBlock,生成一个my_block的ItemItem it=new ItemBlock(block,blockP);it.setRegistryName(block.getRegistryName());itemRegisterEvent.getRegistry().register(it);LOGGER.info("加载 物品"); //后台打印个日志}}
}
注册一个方块同时还得注册这个方块的item,用来显示在手里和物品栏里。同样的都得设置setRegistryName。
将这个方块放在mygroup选卡下。
(二)方块配置
代码写完了,然后给方块模型、翻译、贴材质。这里参考原版里的石头 stone
翻译(略,参考上一篇)
模型状态: resources\assets\mymod\blockstates\my_block.json (没有就新建,也可以直接把原版石头的copy过来) 这里没有石头那么多状态。
{"variants": {"": [{ "model": "mymod:block/my_block" }]}
}
模型: resources\assets\mymod\models\block\my_block.json (懒得写就copy原版的) 这里 all 是所有的面都用的是my_block.png这个图片。
{"parent": "block/cube_all","textures": {"all": "mymod:blocks/my_block"}
}
物品Item: resources\assets\mymod\models\item\my_block.json parent直接继承上面模型文件。
{"parent": "mymod:block/my_block"
}
图片: 自行准备
运行结果:拿在手上和放置都没有问题。
总结
方块的注册和物品注册相似,方块比物品多了很多配置。这里可以参考下面的链接(版本有点旧)。这只是简单的学习,代码就不优化了,省的阅读困难。
参考
https://blog.csdn.net/lyh20000420/article/details/83660874