块注册

注册块是从 main mod 类完成的,或者是在 preInit 期间从 main mod 类调用的 ModBlocks 类方法。

Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);

使用 block.setUnlocalizedName(block.getRegistryName().toString()); 也有一个重要原因! 它确保你的块(和项目)未本地化的名称包含 mod ID,以避免 mod 之间的语言文件冲突。

哦,你也想要一个项目版本,所以它也可以存在于你的库存中?这是在 1.7.10 之后单独创建的,并且如下所示:

ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);

请注意,我们将 ItemBlock 的注册表名称设置为与块相同的字符串。这就是 Forge 和匹配块与 ItemBlock 对应的方式,反之亦然。

但等等,还有更多!

你的块可能有一个项目表单,但该项目还没有模型或纹理! 模型会自动注册块,但不会注册项目。这可能只能从客户端代理调用,并不包含具有变体的块(例如羊毛或树叶)。

ModelLoader.setCustomModelResourceLocation(
    ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));

一般来说,你不需要一个 Item Model JSON 作为 Forge,而 vanilla 将会回到块的模型上,但情况并非总是如此。如果你确实发现你需要一个 Item 模型 JSON,只需将它作为块 JSON 的父级,并将其保存到 src\main\resources\assets\example\models\item\,其文件名与块的注册表名称相同。

{
    "parent": "example:block/my_block"
}