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);
中没有输出,您需要修复该问题。我使用条件语句来检查数字的值,如果它为空,那么它将为数字分配一个值,然后可以打印该值。试试我的例子,这会对你有所帮助。
听起来问题可以通过检查 BlockPos
和 EntityPlayer
是否不为空来解决。如果它们不为空,则 运行 方法。如果它们为空,只需阻止该方法成为 运行.
@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.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);
中没有输出,您需要修复该问题。我使用条件语句来检查数字的值,如果它为空,那么它将为数字分配一个值,然后可以打印该值。试试我的例子,这会对你有所帮助。
听起来问题可以通过检查 BlockPos
和 EntityPlayer
是否不为空来解决。如果它们不为空,则 运行 方法。如果它们为空,只需阻止该方法成为 运行.
@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();
}
}