【发布时间】:2022-06-11 04:32:48
【问题描述】:
我正在尝试设置实体的边界框(碰撞框)。我正在使用 Mojang 映射的 NMS 来制作我的自定义实体,我注意到有一个 setBoundingBox 方法,它使用 AABB(不管是什么)。我尝试通过放置块位置来制作 AABB 对象或其他任何东西,但它不起作用。这是我需要更改边界框或碰撞框吗?如果是这样,我该怎么做?
AABB 类的构造函数:
public AABB(double var0, double var2, double var4, double var6, double var8, double var10) {
this.minX = Math.min(var0, var6);
this.minY = Math.min(var2, var8);
this.minZ = Math.min(var4, var10);
this.maxX = Math.max(var0, var6);
this.maxY = Math.max(var2, var8);
this.maxZ = Math.max(var4, var10);
}
public AABB(BlockPos var0) {
this((double)var0.getX(), (double)var0.getY(), (double)var0.getZ(), (double)(var0.getX() + 1), (double)(var0.getY() + 1), (double)(var0.getZ() + 1));
}
public AABB(BlockPos var0, BlockPos var1) {
this((double)var0.getX(), (double)var0.getY(), (double)var0.getZ(), (double)var1.getX(), (double)var1.getY(), (double)var1.getZ());
}
public AABB(Vec3 var0, Vec3 var1) {
this(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z);
}
完整的实体类:
public class Ghostie extends Chicken {
public Ghostie(Location loc) {
super(EntityType.CHICKEN, ((CraftWorld) loc.getWorld()).getHandle());
this.setPos(loc.getX(), loc.getY(), loc.getZ());
this.setBoundingBox(new AABB(new BlockPos(1, 1, 1), new BlockPos(5, 5, 5)));
this.setHealth(40); // 40
this.goalSelector.addGoal(0, new FloatGoal(this));
}
}
【问题讨论】:
-
设置
AABB(轴对齐边界框)将是在 NMS 中设置相对基本的边界框碰撞的一种方式,但您需要确保 AABB 描述了边界框(除非 NMS 多年来发生了变化)。你为盒子使用了什么值,你目前的实际代码是什么? (包括它作为文本/代码块,而不是作为图像) -
很抱歉让您久等了,但我真的很忙。我试过
this.setBoundingBox(new AABB(new BlockPos(1, 1, 1), new BlockPos(5, 5, 5))); -
这将形成一个 4x4x4 立方体的边界框,我认为它比您的实体大得多。但是,如果我没记错
AABB需要Vector3d或整数参数,您不能简单地将随机类传递给它。显示AABB类的方法签名,以及您当前为自定义实体尝试的代码。 -
好吧,
this.setBoundingBox(new AABB(new BlockPos(1, 1, 1), new BlockPos(5, 5, 5)));只是想看看它是否可行。我将您要求的其他内容添加到主要问题中
标签: java plugins minecraft bukkit spigot