当前位置: 首页 > 知识库问答 >
问题:

Minecraft modding块构造器错误

宰父宾实
2023-03-14

我正在做一个mod,我得到了一个错误(不是的),我已经试着搜索它,但我想要一个具体的问题的答案,因为我不是很擅长这一点。我在我的块类中得到了这个错误。

未为默认构造函数定义隐式超级构造函数块()。必须定义显式构造函数

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个答案

鄢英毅
2023-03-14

这个错误适用于所有的java,而不仅仅是minecraft Forge。检查这个以获得更多的参考。这个错误有几个可能的原因。最有可能是1,但2和3可能是导致错误的因素。

>

  • BlockCbBlock类声明的构造函数不是编译器将提供的默认的、无参数的构造函数(也就是说,如果Block类没有构造函数),而且,如果实际上Block类使用的是默认构造函数,那么您不能在争论中调用super(),因为Block类使用的构造函数没有参数。因此,如果您想修改block构造函数,那么在blockcblock类本身中创建一个自定义的construcotr将更加安全和容易。

    您试图继承的构造函数,但您已将其声明为受保护的,而类中的构造函数应为public以与继承的构造函数匹配。

    如果您正在使用Eclipse,当您的项目设置不正确(系统配置不匹配)时,它可能会出现此错误

    可能不是直接实现到这个特定的错误,而是在不久的将来其他错误的可能原因;您正在使用注释@EventHandler,但实际上并没有声明forge事件处理程序

    出于某种原因,您实际上并没有注册该块。即使您将该块用作食谱项,您仍然需要注册它

    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;
        }
    }
    

    这样,您将提前声明其unlocalizedNameMaterialCreativetab。这种方法可能是不必要的,但它是一种很好的预防措施,有助于防止错误。现在,您所要做的就是这样声明:

    //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));
    }
    

  •  类似资料:
    • 问题内容: 我创建了一个显示聊天消息的函数,遵循了教程,并且查看了Firebase列表适配器的文档,但是无论我做什么,都会出现此错误: 这是我的代码: 问题答案: 从FirebaseUI 3.0+版本中隐含以下内容 删除此: 您需要添加以下内容: 是您对列表适配器示例进行的查询: 更多信息在这里: 使用FirebaseUI填充ListView

    • 简介 在 Swoft 中,数据库查询构造器为创建和执行数据库查询提供了一个方便的接口,它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。 Swoft 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。 你可以使用 DB::table('table') 得到一个 Builder 对象,也可以使用 Builder:

    • 简介 Hyperf 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。 Hyperf 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。 这里只提供一部分常用的教程,具体教程可以到 Laravel 官网查看。 Laravel Query Builde

    • 在面向对象编程中,构造器是一个当新建对象的内存被分配后,用来初始化该对象的一个特殊函数。在Javascript中几乎所有的东西都是对象,我们经常会对对象的构造器十分感兴趣。 对象构造器是被用来创建特殊类型的对象的,首先它要准备使用的对象,其次在对象初次被创建时,通过接收参数,构造器要用来对成员的属性和方法进行赋值。 对象创建 下面是我们创建对象的三种基本方式: // 下面的每一种都会创建一个新的对

    • Imagine that we want to create an object that is composed of multiple parts and the composition needs to be done step by step. The object is not complete unless all its parts are fully created. That's

    • 问题内容: 我有以下课程: 在我的应用程序上下文中,我有: 问题是服务器启动时出现以下错误: 看到错误,我尝试添加不同的属性,但是没有运气。我最终得到了这样的东西: 而且我仍然遇到相同的错误。 我尝试将相同的构造函数添加到子类中,并为每个子类调用适当的参数,这似乎可以解决问题。但是,我不想在所有子实例中都添加相同的构造函数,而不必使用父类维护它们。 Spring是否有某种原因无法调用继承的构造函数