让实体有几个乘客

尼古拉·厄茨(Nicola Uetz)

我正在编程一个观众模式插件,但是我有一个问题。

我试图让观众与玩家互动,那么他应该成为其中的一员。

但是按照我的实现,只有一个玩家可以骑另一人。如何让两个观众骑同一位球员?

@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
    Player p = e.getPlayer();
    if(plugin.spectating.contains(p)) {
        if(e.getRightClicked() instanceof Player) {
            Player target = (Player) e.getRightClicked();
            if(plugin.alive.contains(target)) {
                target.setPassenger(p);
            }
        }
    }
}

编辑:我的意思是Bukkit / Spigot 1.7

阿德里安的儿子

使用相对较新的香草旁观者游戏模式,您不必使旁观者成为目标玩家或实体的乘客。如果观众处于游戏模式#3(GameMode.SPECTATOR),则可以player.setSpectatorTarget(Entity entity)使观众的视图跟随目标的视图(我假设这是您提到的服务器所实现的)。除非您希望旁观者保持在不同的游戏模式下进行观看,否则这应该很好地进行,因为使用内置的旁观者游戏模式,多个玩家可以同时旁观同一实体。

在没有内置旁观者游戏模式的Bukkit的早期版本中,您仍然可以让多个玩家通过向客户端发送“伪造”数据包来告知玩家附加到指定的实体来旁观一个实体。由于服务器只能正式跟踪每个实体的一名乘客,因此它不会知道其他行为类似的其他客户端/玩家,就像他们是该实体的乘客一样,这可能会导致奇怪的行为。您需要跟踪所有旁听者和他们在服务器端旁观的实体,并自行处理注销等操作(当旁观者重新登录后,它们将不再附加到该实体)。这是一种将播放器附加到实体的方法,尽管仅在播放器的客户端上。

public static void setFakePassenger(Player spectator, Entity target) {
    EntityPlayer nmsSpectator = ((CraftPlayer) spectator).getHandle();
    PacketPlayOutAttachEntity attachPacket = new PacketPlayOutAttachEntity(0, nmsSpectator, ((CraftEntity) target).getHandle()); // The packet that tells a client to attach to an entity
    nmsSpectator.playerConnection.sendPacket(attachPacket); // Send packet to client
    // spectators is a HashMap<UUID, Entity> so that we can keep track of which players are spectating which entities
    spectators.put(spectator.getUniqueId(), target);
}

有了这个hack,其他玩家也不会看到观众移动了(只要他们完全看不见他们就看不见了),而且我无法实现允许观众使用常规移位键(不过其他方法也可以)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与一个特定实体具有一对多关系的几个实体

来自分类Dev

有什么方法可以正确生成几个模式的JPA实体吗?

来自分类Dev

为什么我只要求几个时,graphql java查询实体中的所有字段?

来自分类Dev

如何在Datomic中查找具有以下几个属性之一的实体

来自分类Dev

乘客桌子上有很多冗余

来自分类Dev

我有几个vim?

来自分类Dev

403禁止在带有Nginx的Rails应用上使用,乘客

来自分类Dev

乘客以除根URL以外的所有URL开头

来自分类Dev

没有 PNR 的 SABRE 乘客详细信息 PNR

来自分类Dev

在 Firebase 和 Android Studio 中检索司机的乘客请求节点内的所有乘客 ID(用户 ID)

来自分类Dev

GSON有几个已知的类

来自分类Dev

Android ListView有几个项目

来自分类Dev

此配置有几个URL?

来自分类Dev

GSON有几个已知的类

来自分类Dev

.exe 有几个可能的条目

来自分类Dev

为几个实体创建表单symfony2.3(最佳实践)

来自分类Dev

乘客相撞

来自分类Dev

乘客安装时出现转换错误。对nginx模块有影响吗?

来自分类Dev

nginx,乘客仅显示根页面,所有其他路线均失败

来自分类Dev

Phusion乘客处理具有多个RVM红宝石的多个项目的问题

来自分类Dev

实体框架添加所有子实体

来自分类Dev

创建引用现有实体的实体

来自分类Dev

在多个进程中有几个iFrame?

来自分类Dev

有几个间隔切片?

来自分类Dev

如何检查有几个道具的React孩子?

来自分类Dev

一次有几个FileOutputStreams?

来自分类Dev

具有几个可选参数的路线

来自分类Dev

我对python scraper有几个问题

来自分类Dev

我有几个驱动器?