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

实例化一个扩展ItemAxe的新类不起作用

戚俊人
2023-03-14

我正在创建一个Minecraft 1.12.2 mod(forge 1.12.2-14.23.1.2555),并创建了一个扩展ItemAxe的新类。当我将新类实例化为变量时,该变量返回null。因此,在注册该项时,会引发NullPointerException。在我尝试将ItemAxe的扩展名改为ItemAxe之后,我开始考虑这个问题。运行了代码,它成功了。将其更改回ItemAxe,运行代码,但不起作用。我创建的ItemAxe类的源代码与我创建的ItemPickaxe类完全相同,只是Pickaxe在ItemAxe类中被替换为Axe。我知道我没有使用Forge for 1.12.2的最新版本,但我使用的是这个版本,因为它在从IDE运行代码时对我更有效。有办法解决这个问题吗?我知道这是一个已知的错误。。。

资料来源:

// CustomAxe.java

public class CustomAxe extends ItemAxe {
    public CustomAxe(ToolMaterial material, String name) {
        super(material);
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
        this.setCreativeTab(CreativeTabs.TOOLS);
    }

}
// Main.java

public static Item austroneAxe;
public static ToolMaterial austrone;

@EventHandler
public void preInit(FMLPreInitializationEvent event) 
{
    austrone = EnumHelper.addToolMaterial(“austrone”, 4, 2007, 12.0F, 66.0F, 30);

    austroneAxe = new CustomAxe(austrone, “austrone_axe”);

}
java prettyprint-override">// CommonProxy.java
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
   event.getRegistry().registerAll(Main.austroneAxe); // Exception thrown here

}

共有1个答案

东门佐
2023-03-14

在进一步研究这个问题后,我解决了这个问题。

默认的超级构造函数不适用于ItemAxe。因此,您必须使用辅助构造函数,其中您必须提供工具材料、攻击伤害浮点数和攻击速度浮点数。在我的例子中,以下代码行对我有效:

super(material, material.getAttackDamage,1.0F);
 类似资料:
  • 从activity_main.xml和ClassNotFoundException中删除。我在谷歌上搜索了一下,看看在Android中扩展EditText。我做错了什么?以及扩展EditText以赋予它额外的“默认”功能的正确方法。 我花了几个小时看自己却看不见,谁能看出我哪里出了问题吗。

  • 根据Joshua Blotch的有效Java: 除非您愿意放弃面向对象抽象的好处,否则在保留compareTo契约的同时,无法使用新的值组件扩展可实例化类 你能用例子和挑战来解释以上内容吗?你能解释一下Joshua所说的“价值成分”是什么意思,以及还有哪些其他类型的成分可用吗。 这使您可以在第二类上实现您喜欢的任何方法,同时允许其客户端在需要时将第二类的实例视为第一类的实例。 你能解释一下约书亚所

  • 你好,有人知道如何发现扩展< code>ArrayBlockingQueue的类吗?例如,我想监视下面的< code>MyBufferQueue类 在属于java库的< code>ArrayBlockingQueue类中,有这样一个方法: 我遇到的问题是,当我监视类< code>MyBufferQueue时,以及在测试期间访问方法< code > ArrayBlockingQueue . put(

  • 我正在尝试慢慢地从Obj-C迁移到Swift。我的第一步是将小型、简单的方法迁移到Swift扩展,所以我决定尝试迁移但这并不起作用,因为它认为该方法是在我的Objective-C代码中的其他地方实现的。事实并非如此。 我使用的是Xcode 7.3(7D175) 以下是一些复制步骤: > 创建一个新的Obj-C项目。 创建一个新的空的Swift文件,名为。这也创建了一个桥接头文件。 添加到Bridi

  • 我试图使用wsgen生成wsdl文件。如果我的webservice类扩展另一个类,我得到一个错误,但如果我删除扩展它的工作。这是错误消息: 另外,wsgen-完整版本: 请注意,我只有在使用Java8时才会出现这个问题。但是当我使用Java7和wsgen版本时,同样的代码可以工作: 下面是更多的细节以及如何复制它:我正在使用Java8,我有三个文件: basewebservice.java: 包w

  • 我想知道是否有任何关于新动作的RL问题的研究,例如,想象一个视频游戏,随着游戏的进行,代理学习更多的技能/策略,因此有更多的可用动作可供选择,因此动作集随着时间的推移而扩展。一个相关的问题 强化学习中的状态依赖动作集 但这个问题也没有足够的答案。谢谢!