Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bukkit中的RayCast算法_Java_Algorithm_Bukkit_Raycasting - Fatal编程技术网

Java Bukkit中的RayCast算法

Java Bukkit中的RayCast算法,java,algorithm,bukkit,raycasting,Java,Algorithm,Bukkit,Raycasting,我一直在想,在一个Bukkit插件中是否有可能创建一个光线投射系统,我可以使用该系统,脱离矢量,创建一条光线,例如,我可以沿着它每隔这么多块召唤粒子。我没有太多的数学经验;我只上了八年级的几何课,还没学过三角。我不想使用player.getTargetBlock和player.getLineOfSight,因为它们已被弃用,getLineOfSight只给我一个块列表,我正在寻找一些东西,可以获得位置列表或类似的东西,并能够更改列表中每个位置之间的距离间隔 谢谢。我希望我能找到解决办法。我知道人

我一直在想,在一个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
  }
}