传送
实体可以通过teleport和
teleportAsync API
同步或异步地瞬间传送到特定位置。
性能
如果你预计要传送到未加载的区块,建议使用teleportAsync API,
因为它避免了同步加载区块,这会给服务器的主线程带来很大压力 -
影响整体性能。
entity.teleport(location); // 同步加载区块并传送实体
entity.teleportAsync(location).thenAccept(success -> { // 异步加载区块并传送实体
// 当传送完成时运行此代码
// Future在主线程上完成,所以在这里使用API是安全的
if (success) {
// 实体传送成功!
}
});
危险
你永远不应该在主线程上调用teleportAsync Future的.get()/.join(),
因为如果你要传送到的区块未加载,它一定会导致服务器死锁。
看向
lookAt
API允许你让玩家看向某个位置或实体。
player.lookAt(
position,
LookAnchor.EYES // 玩家的眼睛将面向该位置
);
player.lookAt(
entity,
LookAnchor.EYES // 玩家的眼睛将面向该实体
LookAnchor.FEET // 玩家将面向该实体的脚部
);
传送标志
传送标志提供了一种在传送实体时可以自定义行为的方式。 这允许你做一些事情,比如使用相对标志传送玩家并能够保留乘客。
所有可用的传送标志都可以在TeleportFlag类中找到。
相对传送
相对传送玩家,防止在X、Y和Z轴上重置速度。
player.teleport(
location,
TeleportFlag.Relative.VELOCITY_X,
TeleportFlag.Relative.VELOCITY_Y,
TeleportFlag.Relative.VELOCITY_Z
);
保留乘客
使用RETAIN_PASSENGERS标志传送实体,
允许其乘客与实体一起传送。
entity.teleport(location, TeleportFlag.EntityState.RETAIN_PASSENGERS);