NullPointerException 与滴答作响的实体 Minecraft modding 1.8

NullPointerException with a ticking entity Minecraft modding 1.8

各位程序员大家好,

我正在为 1.8 版的 Minecraft 编写 mod 并且遇到了一个讨厌的 NullPointerException 我的投掷物。在下面的代码中,EntityThrowable 使用外部 class 来获取抛出时将发生的结果,而传递的 BlockPos 来自 getBlockPos() 方法。这个位置被传递到外部 class ,在那里它被转换成 x、y 和 z 坐标。但是,每当我抛出 throwable 时,它​​都会为这些坐标抛出异常。

这个问题和什么是 NullPointerException 的问题之间的区别在于,我从 mov.getBlockPos()(来自 MovingObjectPosition)得到的 return 值是未知的. MovingObjectPosition 从随机 class 分配 BlockPos 的坐标,Throwable 的编码器得到结果。我正在使用外部 class 的结果。整数中的这些结果导致游戏因未知坐标而崩溃。如果您知道如何获得 throwable 的结束位置,将不胜感激。

代码如下:

可抛:

@Override
protected void onImpact(MovingObjectPosition mov) {
    LuckyPotionItems lpi = new LuckyPotionItems();
    EntityPlayer player = this.getThrower() instanceof EntityPlayer ? (EntityPlayer) this.getThrower() : null;
    if(!worldObj.isRemote)
    lpi.chooseUnluckyDrink(worldObj, player, mov.getBlockPos());
    this.setDead();
}

外部Class:

public void chooseUnluckyDrink(World w, EntityPlayer p, BlockPos pos){
    Random r = w.rand;
    int number = r.nextInt(13);
    int x = pos.getX();
    int y = pos.getY();
    int z = pos.getZ();

    System.out.println("Unlucky Number = " + number);

感谢您的帮助。

number = (number == null) ? "" : number; 
System.out.println("Unlucky Number = " + number);

int x = (pos.getX() == null ) ? 0 :  pos.getX();

您得到的数字为空值,这意味着 r.nextInt(13); 中没有输出,您需要修复该问题。我使用条件语句来检查数字的值,如果它为空,那么它将为数字分配一个值,然后可以打印该值。试试我的例子,这会对你有所帮助。

听起来问题可以通过检查 BlockPosEntityPlayer 是否不为空来解决。如果它们不为空,则 运行 方法。如果它们为空,只需阻止该方法成为 运行.

@Override
protected void onImpact(MovingObjectPosition mov) {
    LuckyPotionItems lpi = new LuckyPotionItems();
    EntityPlayer player = this.getThrower() instanceof EntityPlayer ? (EntityPlayer) this.getThrower() : null;
    if(mov.getBlockPos() != null && player != null) {
        if(!worldObj.isRemote)
        lpi.chooseUnluckyDrink(worldObj, player, mov.getBlockPos());
        this.setDead();
    }
}