Hello编程员,
我正在为1.8中的Minecraft编写一个mod并且遇到了一个令人讨厌的NullPointerException
与我的throwable。在下面的代码中,EntityThrowable
使用外部类来获取抛出时将发生的结果,并且BlockPos
传递的结果来自getBlockPos()
方法。该位置被传递到外部类,在那里它转换为x,y和z坐标。但是,每当我抛出throwable时,它都会抛出这些坐标的异常。
这个问题与什么是NullPointerException的问题之间的区别在于我从mov.getBlockPos()
(来自MovingObjectPosition
)获得的返回值是未知的。 MovingObjectPosition
从随机类中分配BlockPos的坐标,Throwable的编码器获得结果。我正在使用外部类的结果。这些结果导致游戏因未知的坐标而崩溃。如果您对如何获得throwable的最终位置有任何了解,那将不胜感激。
以下是代码:
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();
}
外类:
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);
感谢您的帮助。
答案 0 :(得分:1)
听起来问题可以通过检查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();
}
}
答案 1 :(得分:0)
number = (number == null) ? "" : number;
System.out.println("Unlucky Number = " + number);
int x = (pos.getX() == null ) ? 0 : pos.getX();
您将获得该数字的空值,这意味着您需要修复r.nextInt(13);
中的输出。我使用条件语句来检查数字的值,如果它为null,那么它将为数字赋值,然后可以打印。尝试我的例子,这会对你有帮助。