Java Bukkit中的RayCast算法
我一直在想,在一个Bukkit插件中是否有可能创建一个光线投射系统,我可以使用该系统,脱离矢量,创建一条光线,例如,我可以沿着它每隔这么多块召唤粒子。我没有太多的数学经验;我只上了八年级的几何课,还没学过三角。我不想使用player.getTargetBlock和player.getLineOfSight,因为它们已被弃用,getLineOfSight只给我一个块列表,我正在寻找一些东西,可以获得位置列表或类似的东西,并能够更改列表中每个位置之间的距离间隔Java Bukkit中的RayCast算法,java,algorithm,bukkit,raycasting,Java,Algorithm,Bukkit,Raycasting,我一直在想,在一个Bukkit插件中是否有可能创建一个光线投射系统,我可以使用该系统,脱离矢量,创建一条光线,例如,我可以沿着它每隔这么多块召唤粒子。我没有太多的数学经验;我只上了八年级的几何课,还没学过三角。我不想使用player.getTargetBlock和player.getLineOfSight,因为它们已被弃用,getLineOfSight只给我一个块列表,我正在寻找一些东西,可以获得位置列表或类似的东西,并能够更改列表中每个位置之间的距离间隔 谢谢。我希望我能找到解决办法。我知道人
谢谢。我希望我能找到解决办法。我知道人们以前做过,但当我搜索RayCast算法时,它主要为我提供了编写类似末日的游戏引擎的方法。要迭代抛出的块,可以使用块迭代器:
看来我找到了一个解决办法,如果你想知道的话,给你。这是一个测试插件,所以,为了测试,我添加了一个/vec命令来检查你的向量,而/shot命令则发射一个粒子。args是/shot[光线长度][块中粒子之间的空间]。长度不能是小数点,可能会有一些代码更改,但粒子之间的空间可以。要在实体块处停止粒子,我只需在lastParticle.getBlock.getType.isSolid为false时中断循环
另外,我使用了DarkBladeee12的ParticleEffect库,我可以只使用Effect类,但它只有几个效果。Yo,我记得我在Bukkit上工作时,直到Mojang崩溃!如果我理解正确,你希望能够找到玩家正在走的路径,并在他们前面用粒子实体制作一种向量路径。。。?
LivingEntity from;//set this to the living entity (or player) that you would like to send the particles from
int distance;//set this to the distance, in blocks, that you would like the particles to go
BlockIterator blocksToAdd = new BlockIterator(from.getEyeLocation(), 1, distance);
while(blocksToAdd.hasNext()){
Location loc = blocksToAdd.next().getLocation();
if(!loc.getBlock().getType().isSolid()){
//stop playing particles if the next block is not solid
break;
}
else{
//play the particle here using the location loc
}
}