Minecraft 修改块构造器错误
Posted
技术标签:
【中文标题】Minecraft 修改块构造器错误【英文标题】:Minecraft modding block constructer error 【发布时间】:2016-02-22 04:13:45 【问题描述】:我正在制作一个模组,但我遇到了一个错误(不是废话),我已经尝试搜索它,但我想要一个针对我的问题的答案,因为我不太擅长这个。我的块类中出现此错误。
默认构造函数的隐式超级构造函数 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);
模组类:
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】:此错误与所有 java 相关,而不仅仅是 minecraft forge。检查this 以获得更多参考。此错误有几个可能的原因。很可能是 1,但 2 和 3 可能是导致错误的一个因素。
-
1234563 987654323@ 类使用默认构造函数,那么您不能在争论上调用
super()
,因为 Block
类使用没有参数的构造函数。因此,如果您想修改 Block
构造函数,在 BlockCbBlock
类本身内部创建自定义构造函数会更安全、更容易。
您正在尝试继承Block
的构造函数,但您已将其声明为受保护,此时您的类中的构造函数应为public
以匹配继承的.
如果您使用的是 Eclipse,当您的项目设置不正确(系统配置不匹配)时,它可能会出现此错误
可能与此特定错误没有直接关系,但在不久的将来可能会导致其他错误;您正在使用注解 @EventHandler
,但您实际上并未声明伪造事件处理程序。
由于某种原因,您实际上并未注册该块。即使您将块用作配方项目,您仍然需要注册它
要解决潜在的问题 1、2 和 4,试试这个(从here 获得):
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
。这种方法可能是不必要的,但它是一个很好的预防措施,可以帮助防止错误。现在,您所要做的就是像这样声明它:
//You need to make your own EventHandler class. Search online for that.
FCEventHandler handler = new FCEventHandler();
@EventHandler
public void preInit(FMLPreInitializationEvent event)
//Config Handling
//event handler registry
FMLCommonHandler.instance().bus().register(handler);
MinecraftForge.EVENT_BUS.register(handler);
//the same thing can be similarly done with this if you wish
itemCbIngot = new ItemCbIngot().setUnlocalizedName("ItemCbIngot").setTextureName("fc:itemCbIngot");
blockCbBlock = new BlockCbBlock();
GameRegistry.registerItem(itemCbIngot, itemCbIngot.getUnlocalizedName().substring(5));
【讨论】:
#4 不适用。 @EventHandler 注释是 Forge 的一部分。import cpw.mods.fml.common.Mod.EventHandler
并表示 Forge Mod 生命周期事件,即 FMLPreInitializationEvent
、FMLInitializationEvent
和 FMLPostInitializationEvent
,并在任何带有 @Mod 注释的类中搜索以上是关于Minecraft 修改块构造器错误的主要内容,如果未能解决你的问题,请参考以下文章