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

问题描述 投票:0回答:1

我正在创建Minecraft 1.12.2 mod(伪造1.12.2-14.23.1.2555),我创建了一个扩展ItemAxe的新类。当我将新类实例化为变量时,该变量返回null。因此,在注册该项目时,将引发NullPointerException。在尝试将ItemAxe的扩展名更改为ItemPickaxe之后,我得出了这个结论。运行代码,它起作用了。将其改回ItemAxe,运行代码,不起作用。我创建的ItemAxe类的源代码与我也创建的ItemPickaxe类完全相同,只是在ItemAxe类中将Pickaxe替换为Ax。我知道我没有使用Forge的最新版本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”);

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

}
java class minecraft-forge
1个回答
1
投票

对问题进行了更多研究后,我解决了问题。

默认的super构造函数不适用于ItemAxe。因此,必须使用辅助构造函数,在该构造函数中必须提供ToolMaterial,用于攻击破坏的浮动对象和用于攻击速度的浮动对象。就我而言,以下代码行对我有用:

super(material, material.getAttackDamage,1.0F);
© www.soinside.com 2019 - 2024. All rights reserved.