物品登記

註冊項是從 main mod 類完成的,或者是在 preInit 期間從 main mod 類呼叫的 ModItems 類方法。

Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);

使用 item.setUnlocalizedName(item.getRegistryName().toString()); 也有一個重要原因! 它確保你的專案的未本地化名稱包含 mod ID,以避免 mod 之間的語言檔案衝突。

現在這個專案也需要一個模型,這就是 1.7.10 之後的事情變得困難的地方,這隻涉及告訴 Minecraft 要載入的紋理的名稱,並且可以在專案的建構函式中指定。

final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
    {
        public ModelResourceLocation getModelLocation(ItemStack stack)
        {
            return fullModelLocation;
        }
    });

請注意,此部分必須僅位於客戶端(即客戶端代理),因為專用伺服器上不存在許多引用的類。

註冊具有變體的專案,例如樹苗,必須使用 ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation) 以不同的方式完成,儘管它允許我們使用 Blockstate 檔案來指定我們的變體(這備選方案受歡迎 )。我們的專案不使用變體,所以我們已經完成了。