Minecraft Forge 物品块渲染问题

Minecraft Forge Item Block Render Issue

我遇到了物品方块渲染问题,当我放置方块时,它可以正确渲染,但是当我把它拿在手里时,它缺少了一个 texture/model。

我看到的图像在 link 中:http://i.stack.imgur.com/atq1L.png

这个原因我查了很多遍,控制台也没有报错,JSON格式化好像也没有问题,而且好像也没有问题代码。

*顺便说一下,class 块的代码不是太重要,因为它只是一个扩展 *Block.class 的 class,然后用 Material.stone

这是我的块代码 class:

package com.kraftymods.luckyblocks.init;

import com.kraftymods.luckyblocks.blocks.LuckyBlock;
import com.kraftymods.luckyblocks.blocks.itemblocks.LuckyBlockItem;
import com.kraftymods.luckyblocks.main.Reference;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class Blocks {

    public static Block luckyblock;

    public static void init(){
        luckyblock = new LuckyBlock().setUnlocalizedName("luckyblock")[enter image description here][1].setCreativeTab(CreativeTabs.tabMisc);
    }

    public static void register(){
        GameRegistry.registerBlock(luckyblock, LuckyBlockItem.class, luckyblock.getUnlocalizedName().substring(5));
    }

    public static void registerRenders(){
        registerRender(luckyblock);
    }

    private static void registerRender(Block block){
        Item item = Item.getItemFromBlock(block);
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MODID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
    }

}

这是我的 JSON 文件的代码:

块数据:

{
    "variants": {
        "normal": { "model": "luckyblocks:luckyblock" }
    }
}

块模型:

{
    "parent": "block/cube_all",
    "textures": {
        "all": "luckyblocks:blocks/luckyblock"
    }
}

物品型号:

{
    "parent": "luckyblocks:block/luckyblock",
    "display": {
        "thirdperson": {
            "rotation": [ 10, -45, 170 ],
            "translation": [ 0, 1.5, -2.75 ],
            "scale": [ 0.375, 0.375, 0.375 ]
        }
    }
}

感谢您花时间阅读本文

请创建一个 class 供客户端使用,您可以在其中注册渲染器

我有这个例子:

public final class BlockRenderRegister {
    public static void registerBlockRenderer() {
        register(BlocksLibrary.blockDarkStone);
    }
    public static void register(Block block) {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher()
                .register(Item.getItemFromBlock(block), 
                          0, 
                          new ModelResourceLocation(
                                ModHooks.MODID.toLowerCase() + ":" + BlocksLibrary.DARKSTONE, 
                                "inventory"
                                 )
                          );
    }
}

为了加载您的块,我还建议单独 class(仅用于维护目的

public class BlockLoader {
    /**
     * Loads all blocks into memory
     * and populates the BlocksLibary
     * with decent values.
     */
    public static void loadBlocks() {
        GameRegistry.registerBlock(
                BlocksLibrary.blockDarkStone = new BlockDarkStone(Material.rock),
                BlocksLibrary.DARKSTONE
                );
    }
}

我在 PreInit 事件中注册积木,以便游戏知道我的积木。

@EventHandler
public void preInit(FMLPreInitializationEvent e) {
    BlockLoader.loadBlocks();
} 

我从主 mod class 中的 FMLInitializationEvent 调用它来注册渲染器。

@EventHandler
    public void init(FMLInitializationEvent event) {
        BlockRenderRegister.registerBlockRenderer();
    }