我正在尝试获取玩家的视线,并在最后将冰块设置为冰块,但是当我获得视线的矢量时,它将空气视为冰块并将其设置为冰块我如何排除空气? (对不起,英语不好xD)
这是我的代码
Vector lineOfSight = player.getEyeLocation().getDirection().normalize();
Block block = player.getLocation().add(lineOfSight).getBlock();
block.setType(Material.BLUE_ICE);
我不确定该代码是否在循环中,但是您可以尝试以下操作:
if(!block.getType().equals(Material.AIR)) // I am not sure about the actual enum declaration of air, but your IDE will suggest it.
block.setType(Material.BLUE_ICE);
假设您不希望视线检查无限期地运行,这是您可以以最大距离进行的操作-您可以将其更改为while循环,但我不建议这样做。
Vector lineOfSight = player.getEyeLocation().getDirection().normalize();
double maxDistance = 40;
Block finalBlock = null;
for(double i = 0; i < maxDistance; ++i){
Block block = player.getEyeLocation().add(lineOfSight.clone().multiply(i)).getBlock();
if(!block.getType().isSolid())
continue;
finalBlock = block;
break;
}
if(finalBlock != null)
finalBlock.setType(Material.ICE);
简而言之,这将沿着玩家的视线迭代直到指定的距离。如果在任何时候找到一个实心块,则循环会中断并将该块设置为ICE
。如果需要,您可以更改isSolid()
条件以专门检查AIR
,因为这将不起作用。例如WATER
为固体。