Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不存在类型变量的实例,因此BlockBase向BlockOre确认_Java_Minecraft_Minecraft Forge - Fatal编程技术网

Java 不存在类型变量的实例,因此BlockBase向BlockOre确认

Java 不存在类型变量的实例,因此BlockBase向BlockOre确认,java,minecraft,minecraft-forge,Java,Minecraft,Minecraft Forge,我正在关注如何创建Minecraft mods。我得到以下错误,但我没有看到任何问题。我不知道这个错误意味着什么,更重要的是,我真的不知道我在做什么,因此遵循教程 我正在使用Forge 1.11和IntelliJ IDEA 2016.3.2 IDE以及Java 1.8.0_112 SDK。 根据一些阅读,我认为这与数据类型不匹配有关,但可能是我的IDE太挑剔,或者是Java1.8SDK的问题。我真的迷路了,所以我想我会伸出手来看看是否有人愿意提供指导 错误: ModBlocks中的寄存器(T)不

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

我正在使用Forge 1.11和IntelliJ IDEA 2016.3.2 IDE以及Java 1.8.0_112 SDK。 根据一些阅读,我认为这与数据类型不匹配有关,但可能是我的IDE太挑剔,或者是Java1.8SDK的问题。我真的迷路了,所以我想我会伸出手来看看是否有人愿意提供指导

错误:

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);
    }
}
package net.maramor.tutorial.block;
导入net.minecraft.block.block;
导入net.minecraft.creativetab.creativetab;
导入net.minecraft.item.ItemBlock;
导入net.minecraftforge.fml.common.registry.GameRegistry;
/**
*马特于2016年12月28日创作。
*/
公共类模块
{
公共静态块矿;
公共静态void init()
{
矿石铜=登记(新块状矿石(“矿石铜”).setCreativeTab(CreativeTab.MATERIALS));
}
专用静态T寄存器(T块,ItemBlock ItemBlock)
{
游戏注册表。注册表(块);
GameRegistry.register(itemBlock);
if(BlockBase的块实例)
{
((BlockBase)block.registerItemModel(itemBlock);
}
返回块;
}
专用静态T寄存器(T块)
{
ItemBlock ItemBlock=新的ItemBlock(块);
setRegistryName(block.getRegistryName());
返回寄存器(块,项块);
}
}

是的,这是在MC 1.10及更高版本上实现的一种方法。基本上,你必须在游戏加载期间注册块、项目和纹理,以便在创建/加载世界时可以使用它们。

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

矿石铜=登记(新块状矿石(“矿石铜”).setCreativeTab(CreativeTab.MATERIALS))


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

我已经回滚了它;如果你有一个新问题要问,那就提出一个新问题。