【问题标题】:Exception loading model for varian [block] for blockstate [state] MissingVariantException块状态 [状态] 的瓦里安 [块] 的异常加载模型 MissingVariantException
【发布时间】:2019-10-15 22:13:39
【问题描述】:

我正在尝试向游戏中添加一个每边具有不同纹理的新块,它会抛出一个错误 Exception loading model for variant。

blockstates/c_furnace.json 
{
    "variant": {
        "burn=false,facing=north": {
            "model": "compressedcobble_mod:c_furnace/c_furnace"
        },
        "burn=false,facing=east": {
            "model": "compressedcobble_mod:c_furnace/c_furnace",
            "y": 90
        },
        "burn=false,facing=south": {
            "model": "compressedcobble_mod:c_furnace/c_furnace",
            "y": 180
        },
        "burn=false,facing=west": {
            "model": "compressedcobble_mod:c_furnace/c_furnace",
            "y": 270
        },
        "burn=true,facing=north": {
            "model": "compressedcobble_mod:c_furnace/lit_c_furnace"
        },
        "burn=true,facing=east": {
            "model": "compressedcobble_mod:c_furnace/lit_c_furnace",
            "y": 90
        },
        "burn=true,facing=south": {
            "model": "compressedcobble_mod:c_furnace/lit_c_furnace",
            "y": 180
        },
        "burn=true,facing=west": {
            "model": "compressedcobble_mod:c_furnace/lit_c_furnace",
            "y": 270
        }
    }
}
blocks/c_furnace
{
    "parent": "block/orientable",
    "textures": {
        "particle": "compressedcobble_mod:blocks/c_furnace/furnace_front",
        "up": "compressedcobble_mod:blocks/c_furnace/furnace_top",
        "down": "compressedcobble_mod:blocks/c_furnace/furnace_top",
        "north": "compressedcobble_mod:blocks/c_furnace/furnace_front",
        "east": "compressedcobble_mod:blocks/c_furnace/furnace_side",
        "south": "compressedcobble_mod:blocks/c_furnace/furnace_side",
        "west": "compressedcobble_mod:blocks/c_furnace/furnace_side"
    }
}
CompressedFurnace.java 
public class CompressedFurnace extends BlockBase implements ITileEntityProvider {

    public static final PropertyDirection FACING = BlockHorizontal.FACING;
    public static final PropertyBool BURNING = PropertyBool.create("burn");

    public CompressedFurnace(String name, Material mat) 
    {
        super(name, mat);
        setUnlocalizedName(name);
        setCreativeTab(CreativeTabs.BUILDING_BLOCKS);

        setDefaultState(blockState.getBaseState().withProperty(BURNING, false).withProperty(FACING, EnumFacing.NORTH));
    }

    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune)
    {
        return Item.getItemFromBlock(ModBlocks.B_FURNACE);
    }

    @Override
    public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
    {
        return new ItemStack(ModBlocks.B_FURNACE);
    }

    @Override
    public boolean onBlockActivated(World w, BlockPos pos, IBlockState state, EntityPlayer p, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        if(!w.isRemote)
        {
            p.openGui(Main.instance, Reference.GUI_C_FURNACE, w, pos.getX(), pos.getY(), pos.getZ());
        }
        return true;
    }

    @Override
    public void onBlockAdded(World w, BlockPos pos, IBlockState state)
    {
        if(!w.isRemote)
        {
            IBlockState north = w.getBlockState(pos.north());
            IBlockState south = w.getBlockState(pos.south());
            IBlockState east = w.getBlockState(pos.east());
            IBlockState west = w.getBlockState(pos.west());

            EnumFacing face = (EnumFacing)state.getValue(FACING);

            if(face == EnumFacing.NORTH && north.isFullBlock() && !south.isFullBlock()) face = EnumFacing.SOUTH;
            else if(face == EnumFacing.SOUTH && south.isFullBlock() && !north.isFullBlock()) face = EnumFacing.NORTH;
            else if(face == EnumFacing.EAST && east.isFullBlock() && !west.isFullBlock()) face = EnumFacing.WEST;
            else if(face == EnumFacing.WEST && west.isFullBlock() && !east.isFullBlock()) face = EnumFacing.EAST;
            w.setBlockState(pos,  state.withProperty(FACING, face), 2);

        }
    }

    public static void setState(boolean active, World w, BlockPos pos)
    {
        IBlockState state = w.getBlockState(pos);
        TileEntity tile = w.getTileEntity(pos);
        if(active)
            w.setBlockState(pos, ModBlocks.B_FURNACE.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, true), 3);
        else
            w.setBlockState(pos, ModBlocks.B_FURNACE.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, false), 3);
        if(tile != null)
        {
            tile.validate();
            w.setTileEntity(pos, tile);
        }
    }

    @Override
    public TileEntity createNewTileEntity(World worldIn, int meta) 
    {
        return new TileEntityC_Furnace();
    }

    @Override
    public IBlockState getStateForPlacement(World w, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand)
    {
        return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
    }

    @Override
    public void onBlockPlacedBy(World w, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
    {
        w.setBlockState(pos, this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2);
    }

    @Override
    public EnumBlockRenderType getRenderType(IBlockState state)
    {
        return EnumBlockRenderType.MODEL;
    }

    @Override
    public IBlockState withRotation(IBlockState state, Rotation rot)
    {
        return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
    }

    @Override
    public IBlockState withMirror(IBlockState state, Mirror mirror)
    {
        return state.withRotation(mirror.toRotation((EnumFacing)state.getValue(FACING)));
    }

    @Override
    protected BlockStateContainer createBlockState()
    {
        return new BlockStateContainer(this, new IProperty[] {BURNING,FACING});
    }

    @Override
    public IBlockState getStateFromMeta(int meta)
    {
        EnumFacing facing = EnumFacing.getFront(meta);
        if(facing.getAxis() == EnumFacing.Axis.Y) facing = EnumFacing.NORTH;
            return this.getDefaultState().withProperty(FACING, facing);
    }

    @Override
    public int getMetaFromState(IBlockState state)
    {
        return ((EnumFacing)state.getValue(FACING)).getIndex();
    }

    @Override
    public void breakBlock(World w, BlockPos pos, IBlockState state)
    {
        TileEntityC_Furnace TE = (TileEntityC_Furnace) w.getTileEntity(pos);
        InventoryHelper.dropInventoryItems(w, pos, TE);
        super.breakBlock(w, pos, state);
    }
}
[04:12:11] [Client thread/ERROR] [FML]: Exception loading model for variant compressedcobble_mod:c_furnace#burn=false,facing=west for blockstate "compressedcobble_mod:c_furnace[burn=false,facing=west]"
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model compressedcobble_mod:c_furnace#burn=false,facing=west with loader VariantLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:161) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.registerVariant(ModelLoader.java:235) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadBlock(ModelBakery.java:153) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:223) ~[ModelLoader.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:150) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:560) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:422) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_171]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_171]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_171]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_171]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: net.minecraft.client.renderer.block.model.ModelBlockDefinition$MissingVariantException
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition.getVariant(ModelBlockDefinition.java:83) ~[ModelBlockDefinition.class:?]
    at net.minecraftforge.client.model.ModelLoader$VariantLoader.loadModel(ModelLoader.java:1175) ~[ModelLoader$VariantLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:157) ~[ModelLoaderRegistry.class:?]
    ... 21 more

我有其他块具有类似的命名约定,它们工作正常,但所有方面的纹理都相同。

游戏中的方块正确显示“燃烧”和“面对”状态,但没有显示纹理。

【问题讨论】:

  • 请在您的问题中包含完整的错误,MissingVariantException 有多个潜在原因,所有这些都可以在以Caused By 开头的堆栈跟踪下方找到。此外,Code Style issue #4Problematic Code #4, #10if(active)...else:删除这 4 行,改为使用 .withProperty(BURNING, active)。不是你打电话给setState 任何方式
  • 感谢堆栈跟踪,不幸的是,根据您的问题需要更多或存在更难诊断的问题。它“没有纹理”的原因是模型加载失败。不会出现模型失败并且游戏将显示正确纹理的情况。如果您将代码发布为工作 git 存储库,则可能更容易弄清楚发生了什么。

标签: java minecraft minecraft-forge


【解决方案1】:

我终于明白了这一点,并将您的代码拉入一个工作项目并查看发生了什么。因为我怀疑有一部分错误你没有包括在内,但我(我自己看到这个)不知道它只会抛出一次 real 错误,然后抛出一个无用的 MissingVariantException for 所有其他变体(你抓住了最后一个,而不是第一个,根据我之前的经验,它们都是一样的)所以我不知道该告诉你要寻找什么(但现在我知道在这种情况下会发生什么)。

这是完整的原始错误:

[09:01:45] [main/ERROR] [FML]: Exception loading blockstate for the variant harderfarming:c_furnace#burn=true,facing=west: 
java.lang.Exception: Could not load model definition for variant harderfarming:c_furnace
    at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:266) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadBlock(ModelBakery.java:121) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:221) ~[ModelLoader.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:159) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:554) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:416) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.RuntimeException: Encountered an exception when loading model definition of 'harderfarming:c_furnace' from: 'harderfarming:blockstates/c_furnace.json' in resourcepack: 'FMLFileResourcePack:HardFarming'
    at net.minecraft.client.renderer.block.model.ModelBakery.loadModelBlockDefinition(ModelBakery.java:246) ~[ModelBakery.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadMultipartMBD(ModelBakery.java:223) ~[ModelBakery.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.getModelBlockDefinition(ModelBakery.java:208) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:262) ~[ModelLoader.class:?]
    ... 20 more
Caused by: com.google.gson.JsonParseException: Neither 'variants' nor 'multipart' found
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition$Deserializer.deserialize(ModelBlockDefinition.java:155) ~[ModelBlockDefinition$Deserializer.class:?]
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition$Deserializer.deserialize(ModelBlockDefinition.java:140) ~[ModelBlockDefinition$Deserializer.class:?]
    at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69) ~[TreeTypeAdapter.class:?]
    at com.google.gson.Gson.fromJson(Gson.java:887) ~[Gson.class:?]
    at com.google.gson.Gson.fromJson(Gson.java:825) ~[Gson.class:?]
    at net.minecraftforge.client.model.BlockStateLoader.load(BlockStateLoader.java:108) ~[BlockStateLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition.parseFromReader(ModelBlockDefinition.java:42) ~[ModelBlockDefinition.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadModelBlockDefinition(ModelBakery.java:242) ~[ModelBakery.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadMultipartMBD(ModelBakery.java:223) ~[ModelBakery.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.getModelBlockDefinition(ModelBakery.java:208) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:262) ~[ModelLoader.class:?]
    ... 20 more

我当然使用了我现有的模组 ID,但这里重要的部分大约是一半:

Caused by: com.google.gson.JsonParseException: Neither 'variants' nor 'multipart' found

你的方块状态文件有误,你有一个 "variant" 属性,而你应该有一个带有 S 的 "variants"

我的建议是“学会阅读错误日志”,因为它们经常会告诉你哪里出了问题、哪里出了问题以及如何做。在这种情况下,建议通过从顶部开始并向下处理来应用,因为一个错误通常会导致另一个错误,通过修复第一个错误,您可以一次解决一大堆问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多