【问题标题】:No instance(s) of type variable(s) exist so that BlockBase confirms to BlockOre不存在类型变量的实例,因此 BlockBase 向 BlockOre 确认
【发布时间】:2016-12-29 04:59:21
【问题描述】:

我正在关注this tutorial 如何创建 Minecraft 模组。我收到以下错误,但我没有看到任何问题。我不知道这个错误是什么意思,更重要的是我真的不知道我在做什么,因此遵循教程。

我正在使用 Forge 1.11 和 IntelliJ IDEA 2016.3.2 IDE 以及 Java 1.8.0_112 SDK。 根据一些阅读,我认为这与数据类型不匹配有关,但可能只是我的 IDE 很挑剔,或者它是 Java 1.8 SDK 的东西。我真的很迷茫,所以我想伸手去看看有没有人愿意提供指导。

错误:

ModBlocks 中的寄存器 (T) 不能应用于 (net.maramor.tutorial.block.BlockBase)

原因:不存在类型变量的实例,因此 BlockBase 符合 BlockOre 推理变量 T 具有不兼容的界限: 下界:BlockBase 上界:Block、BlockOre

[BlockBase.java]

package net.maramor.tutorial.block;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemBlock;
import net.maramor.tutorial.TutorialMod;

/**
 * Created by Matt on 12/28/2016.
 */
public class BlockBase extends Block
{
    protected String name;

    public BlockBase(Material material, String name)
    {
        super(material);

        this.name = name;

        setUnlocalizedName(name);
        setRegistryName(name);
    }

    public void registerItemModel(ItemBlock itemBlock)
    {
        TutorialMod.proxy.registerItemRenderer(itemBlock,0, name);
    }

    @Override
    public BlockBase setCreativeTab(CreativeTabs tab)
    {
        super.setCreativeTab(tab);
        return this;
    }
}

[BlockOre.java]

package net.maramor.tutorial.block;

import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;

/**
 * Created by Matt on 12/28/2016.
 */
public class BlockOre extends BlockBase
{
    public BlockOre(String name)
    {
        super(Material.ROCK, name);

        setHardness(3f);
        setResistance(5f);
    }

    @Override
    public BlockBase setCreativeTab(CreativeTabs tab)
    {
        super.setCreativeTab(tab);
        return this;
    }
}

[ModBlocks.java]

package net.maramor.tutorial.block;

import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.fml.common.registry.GameRegistry;

/**
 * Created by Matt on 12/28/2016.
 */
public class ModBlocks
{
    public static BlockOre oreCopper;

    public static void init()
    {
        oreCopper = register(new BlockOre("ore_copper").setCreativeTab(CreativeTabs.MATERIALS));
    }

    private static <T extends Block> T register(T block, ItemBlock itemBlock)
    {
        GameRegistry.register(block);
        GameRegistry.register(itemBlock);

        if (block instanceof BlockBase)
        {
            ((BlockBase)block).registerItemModel(itemBlock);
        }

        return block;
    }

    private static <T extends Block> T register(T block)
    {
        ItemBlock itemBlock = new ItemBlock(block);
        itemBlock.setRegistryName(block.getRegistryName());
        return register(block, itemBlock);
    }
}

【问题讨论】:

  • 我已经回滚了;如果您有新问题要问,请提出新问题。

标签: java minecraft minecraft-forge


【解决方案1】:

是的,这是在 MC 1.10 及更高版本上执行的一种方法。基本上,您必须在游戏加载期间注册块、项目和纹理,以便在您制作/加载世界时可用。

【讨论】:

    【解决方案2】:

    T register(T block) 是类 ModBlocks 中的一个通用函数。

    oreCopper = register(new BlockOre("ore_copper").setCreativeTab(CreativeTabs.MATERIALS));

    一个 BlockBase 类型的实例被传递给函数寄存器,因此预期的返回类型也是 BlockBase。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 2022-10-18
      • 2017-12-04
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      相关资源
      最近更新 更多