塊註冊

註冊塊是從 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"
}