物品登记
注册项是从 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 文件来指定我们的变体(这比备选方案更受欢迎 )。我们的项目不使用变体,所以我们已经完成了。