Minecraft modding块构造错误

时间:2016-02-22 04:13:46

标签: minecraft-forge

我正在制作一个mod,我收到了一个错误(没有duh)我尝试了搜索但是我想要一个特定于我的问题的答案,因为我不是很擅长这个。我在我的块类中收到此错误。

默认构造函数未定义隐式超类构造函数Block()。必须定义显式构造函数

我不知道如何修复它。请帮助它进行项目。

阻止类:

package GDMCrocknrollkid.fandomcraft;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class BlockCbBlock extends Block {

protected BlockCbBlock(Material material) {
    super(material);
}

}

mod class:

    package GDMCrocknrollkid.fandomcraft;

    import net.minecraft.block.Block;
    import net.minecraft.item.Item;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;

    @Mod(modid = "fc", name = "Fandomcraft", version = "1.0")
    public class fandomcraft {

    public static Item itemCbIngot;
    public static Block blockCbBlock;

    @EventHandler
    public void preInit(FMLPreInitializationEvent event){
        //Item/Block initialization and registering
        //Config Handling
        itemCbIngot = new ItemCbIngot().setUnlocalizedName("ItemCbIngot").setTextureName("fc:itemCbIngot"); //item.itemCbIngot.name
        blockCbBlock = new BlockCbBlock(Material.iron);




        GameRegistry.registerItem(itemCbIngot, itemCbIngot.getUnlocalizedName().substring(5));
    }

    @EventHandler
    public void init(FMLInitializationEvent event){
        //Proxy, TileEntity, entity, GUI and Packet Registering
    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {

    }
}

1 个答案:

答案 0 :(得分:0)

此错误适用于所有java,而不仅仅是minecraft forge。请查看this以获取更多参考。这个错误有几个可能的原因。它很可能是1,但2和3可能是导致错误的因素。

  1. 你的BlockCbBlock类声明一个构造函数,它不是编译器可能提供的默认的无参数构造函数(也就是说,如果Block类没有构造函数),并且实际上是{ {1}}类使用默认构造函数,然后您无法在参数上调用Block,因为super()类使用不带参数的构造函数。因此,如果您想修改Block构造函数,那么在Block类本身内部创建自定义构造函数会更安全,更容易。

  2. 您正在尝试继承BlockCbBlock的构造函数,但是当您的类中的构造函数与Block匹配时,您已将其声明为受保护的。

  3. 如果您正在使用Eclipse,则在项目设置不正确时会出现此错误(系统配置不匹配)

  4. 可能没有直接针对此特定错误,但在不久的将来可能会导致其他错误;您正在使用注释public,但实际上您尚未声明forge事件处理程序。

  5. 由于某种原因,您实际上并未注册该块。即使您将块用作配方项,您仍需要注册

  6. 要解决潜在问题1,2和4,请尝试此操作(从here获取):

    @EventHandler

    这样,您就可以提前声明其package GDMCrocknrollkid.fandomcraft; import net.minecraft.block.Block; import net.minecraft.block.material.Material; private final String name = "BlockCbBlock"; public class BlockCbBlock extends Block { public BlockCbBlock() { super(Material.iron); GameRegistry.registerBlock(this, name); setUnlocalizedName(Reference.MODID + "_" + name); setCreativeTab(CreativeTabs.tabBlock); } public String getName() { return name; } } UnlocalizedNameMaterial。此方法可能是不必要的,但它是一个很好的预防措施,以帮助防止错误。现在,您所要做的就是声明:

    CreativeTab