我正在创建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
}
对问题进行了更多研究后,我解决了问题。
默认的super
构造函数不适用于ItemAxe。因此,必须使用辅助构造函数,在该构造函数中必须提供ToolMaterial,用于攻击破坏的浮动对象和用于攻击速度的浮动对象。就我而言,以下代码行对我有用:
super(material, material.getAttackDamage,1.0F);