Java NullPointerException带有勾选实体Minecraft modding 1.8

Java NullPointerException带有勾选实体Minecraft modding 1.8,java,minecraft,minecraft-forge,Java,Minecraft,Minecraft Forge,大家好,程序员们 我正在为1.8版的Minecraft编写一个mod,遇到了一个讨厌的NullPointerException和我的throwable。在下面的代码中,EntityThrowable使用一个外部类来获取抛出时将发生的事情的结果,BlockPos通过getBlockPos()方法传递。这个位置被传递到外部类,在那里它被转换为x、y和z坐标。但是,每当我抛出抛出这个throwable时,它都会抛出这些坐标的异常 这个问题与什么是NullPointerException的问题之间的区别

大家好,程序员们

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

这个问题与什么是NullPointerException的问题之间的区别在于,我从
mov.getBlockPos()
(从
movingObject位置
)获取的内容的返回值未知。
MovingObjectPosition
从一个随机类中分配BlockPos的坐标,而Throwable的编码器则得到结果。我正在使用外部类的结果。ints中的这些结果导致游戏因未知坐标而崩溃。如果您有任何想法,如何获得最终位置的一次性,这将不胜感激

代码如下:

可丢弃:

@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();
}
外层舱:

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)中没有输出您需要修复该问题。我使用一个条件语句来检查number的值,如果它为null,那么它将为number赋值,然后可以打印出来。请尝试我的示例,这将对您有所帮助。

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

@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();
    }
}

可能重复的“否”,它不会撞击随机零件。代码在分配整数时崩溃。您需要研究
blackPos ex:getX()和getY()
的getter方法,因为抛出器可能是EntityPlayerMP或EntityPlayerSP(我没有任何实体抛出这些抛出器或抛出器),我怀疑这是否有效,但我会尝试。@TechGamer27我知道,在这种情况下,您还想检查
BlockPos
是否为空,我已更新了我的答案以包含该值。我将回答此问题:-)始终检查您的空值,不要相信任何东西。有时,代码将由另一个mod提供,他只是懒洋洋地提供一个null,因为这样它就可以工作,或者它在服务器/客户端上运行,并且东西也变成null。投票给@Flibio