gpt4 book ai didi

java - 获取附近实体的最佳方式

转载 作者:行者123 更新时间:2023-11-30 02:51:22 24 4
gpt4 key购买 nike

我已经思考这个问题很长时间了,只是想知道是否真的有更好的方法来获取附近的实体,而不是循环遍历世界上的每个实体并测试它们的位置?

对于我正在开发的插件,我每次都使用它,但它根本没有效率。

public static List<Entity> getEntitiesAroundPoint(Location location, double radius) {
List<Entity> entities = new ArrayList<Entity>();

for (Entity entity : location.getWorld().getEntities()) {
if (entity.getWorld() != location.getWorld()) {
continue;
} else if (entity instanceof Player && ((Player) entity).getGameMode().equals(GameMode.SPECTATOR)) {
continue; //Don't want spectators
} else if (entity.getLocation().distanceSquared(location) <= radius * radius) {
entities.add(entity);
}
}
return entity;
}

我无权访问播放器对象,因此 player.getNearbyEntities() 并不是真正的选择(而且我也不知道这是否更好)。我确实想知道 location.getChunk().getEntities() 是否会更好地循环,但同样,我不知道其背后的过程。有人可以与我分享一些关于什么是有效更好的方法吗?

提前致谢。

最佳答案

getNearbyEntities 方法也可用于世界对象!

public static List<Entity> getEntitiesAroundPoint(Location location, double radius) {
return location.getWorld().getNearbyEntities(location, radius, radius, radius);
}

但请注意,“半径”实际上是长方体区域,而不是球面。

如果你想要一个球形的 ara,你必须循环当前世界中的 block /实体并检查:

if (entityLoc.distanceSqared(radius * radius) <= radius) {

关于java - 获取附近实体的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com