我如何获得玩家的视线

问题描述 投票:0回答:2

我正在尝试获取玩家的视线,并在最后将冰块设置为冰块,但是当我获得视线的矢量时,它将空气视为冰块并将其设置为冰块我如何排除空气? (对不起,英语不好xD)

这是我的代码

Vector lineOfSight = player.getEyeLocation().getDirection().normalize();
Block block = player.getLocation().add(lineOfSight).getBlock();
block.setType(Material.BLUE_ICE);
java minecraft bukkit
2个回答
2
投票

我不确定该代码是否在循环中,但是您可以尝试以下操作:

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);

0
投票

假设您不希望视线检查无限期地运行,这是您可以以最大距离进行的操作-您可以将其更改为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为固体。

© www.soinside.com 2019 - 2024. All rights reserved.