GhostSkyV9
如题,比如说,我悬挂物贴上去的朝向是东面,那么,我要如何获取到它东面指定范围内的方块集合呢

‮tcejorPoiK
BlockFace#getDirection() 获取方块朝向向量。
Location#add(Vector vec) 将坐标加上指定向量。

然后套一层for来循环获取坐标对应的方块就行了

GhostSkyV9
‮tcejorPoiK 发表于 2022-6-10 20:49
BlockFace#getDirection() 获取方块朝向向量。
Location#add(Vector vec) 将坐标加上指定向量。

他这个add,是只增加朝向那个方向的坐标嘛

GhostSkyV9
‮tcejorPoiK 发表于 2022-6-10 20:49
BlockFace#getDirection() 获取方块朝向向量。
Location#add(Vector vec) 将坐标加上指定向量。

为什么我获取完他这个输出的坐标是这样的,不是应该获取的是我悬挂物朝向前面的两格嘛

qewefdwefer
不知道啊.

‮tcejorPoiK
GhostSkyV9 发表于 2022-6-10 22:13
为什么我获取完他这个输出的坐标是这样的,不是应该获取的是我悬挂物朝向前面的两格嘛
...

final Block block = event.getBlock();
final Vector vec = event#getBlockFace().getDirection();

block.getLocation().add(vec).getBlock(); 获取方块朝向前一格的方块
block.getLocation().add(vec.multiply(10)).getBlock(); 获取方块朝向前10格的方块

GhostSkyV9
‮tcejorPoiK 发表于 2022-6-10 22:48
final Block block = event.getBlock();
final Vector vec = event#getBlockFace().getDirection();

这只是获取到单个的,如果要获取到往前10格内的所有方块呢

‮tcejorPoiK
本帖最后由 ‮tcejorPoiK 于 2022-6-11 14:02 编辑
GhostSkyV9 发表于 2022-6-10 23:22
这只是获取到单个的,如果要获取到往前10格内的所有方块呢

外层套个for

var loc = block.getLocation();
var list = new ArrayList<>();
for (循环10次) {
    list.add(loc.add(vec).getBlock());
}

GhostSkyV9
本帖最后由 GhostSkyV9 于 2022-6-11 19:03 编辑
‮tcejorPoiK 发表于 2022-6-11 14:00
外层套个for

var loc = block.getLocation();

这循环不对吧,循环十次,这获取到的都是同一个方块吧,我的写法是这样的,不知道逻辑上对不对

‮tcejorPoiK
GhostSkyV9 发表于 2022-6-11 19:00
这循环不对吧,循环十次,这获取到的都是同一个方块吧,我的写法是这样的,不知道逻辑上对不对 ...

没学过kt,但是粗略的看你写的应该是对的,可以去试试。

Location#add(Vector vec) 这个方法改变的是此Location自身,所以我的那个for是没问题的。

GhostSkyV9
‮tcejorPoiK 发表于 2022-6-11 19:11
没学过kt,但是粗略的看你写的应该是对的,可以去试试。

Location#add(Vector vec) 这个方法改变的是此L ...

不知道是不是我对这个add方法有误解
不clone的话,它是不是在原有的基础上add,就比如
(0,0,0),我add一次,(10,0,10),再add一次(20,0,20)
这样叠加下去是不是就不止十格了

‮tcejorPoiK
GhostSkyV9 发表于 2022-6-13 13:01
不知道是不是我对这个add方法有误解
不clone的话,它是不是在原有的基础上add,就比如
(0,0,0),我add一次 ...

是的,add就是改变自身,Location的绝大部分方法都是如此,所以才有clone()方法来使自身不改变。

GhostSkyV9
‮tcejorPoiK 发表于 2022-6-13 13:08
是的,add就是改变自身,Location的绝大部分方法都是如此,所以才有clone()方法来使自身不改变。 ...

那还有什么更好的解决办法吗

FrankHan2004
GhostSkyV9 发表于 2022-6-14 13:29
那还有什么更好的解决办法吗

生成射线?https://hub.spigotmc.org/javadoc ... RayTraceResult.html