我正在制作一个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) {
}
}
答案 0 :(得分:0)
此错误适用于所有java,而不仅仅是minecraft forge。请查看this以获取更多参考。这个错误有几个可能的原因。它很可能是1,但2和3可能是导致错误的因素。
你的BlockCbBlock类声明一个构造函数,它不是编译器可能提供的默认的无参数构造函数(也就是说,如果Block类没有构造函数),并且实际上是{ {1}}类使用默认构造函数,然后您无法在参数上调用Block
,因为super()
类使用不带参数的构造函数。因此,如果您想修改Block
构造函数,那么在Block
类本身内部创建自定义构造函数会更安全,更容易。
您正在尝试继承BlockCbBlock
的构造函数,但是当您的类中的构造函数与Block
匹配时,您已将其声明为受保护的。
如果您正在使用Eclipse,则在项目设置不正确时会出现此错误(系统配置不匹配)
可能没有直接针对此特定错误,但在不久的将来可能会导致其他错误;您正在使用注释public
,但实际上您尚未声明forge事件处理程序。
由于某种原因,您实际上并未注册该块。即使您将块用作配方项,您仍需要注册
要解决潜在问题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;
}
}
,UnlocalizedName
和Material
。此方法可能是不必要的,但它是一个很好的预防措施,以帮助防止错误。现在,您所要做的就是声明:
CreativeTab