Java 如何设置单个实体对玩家不可见?

Java 如何设置单个实体对玩家不可见?,java,bukkit,Java,Bukkit,经过大量的研究和浪费了大量的时间,我仍然无法找到如何向玩家隐藏实体 我想做的是创建一个伪装命令。我现在已经解决了所有问题,唯一的问题是实体仍然可见,一旦静止,你就无法与任何东西进行交互,因为暴徒的hitbox挡住了去路。我想对玩家隐藏实体,以便你可以这样做。我知道玩家可以使用Player#hidePlayer(),但这不适用于实体。我尝试过使用解决方案,例如,但在遵循示例时出现了错误。(很多东西都被折旧了,所以我认为它已经过时了。我使用的是spigot1.11.2)。任何帮助都将不胜感激 PS:

经过大量的研究和浪费了大量的时间,我仍然无法找到如何向玩家隐藏实体

我想做的是创建一个伪装命令。我现在已经解决了所有问题,唯一的问题是实体仍然可见,一旦静止,你就无法与任何东西进行交互,因为暴徒的hitbox挡住了去路。我想对玩家隐藏实体,以便你可以这样做。我知道玩家可以使用Player#hidePlayer(),但这不适用于实体。我尝试过使用解决方案,例如,但在遵循示例时出现了错误。(很多东西都被折旧了,所以我认为它已经过时了。我使用的是spigot1.11.2)。任何帮助都将不胜感激


PS:如果你想知道为什么我不使用一个已经制作好的插件,那是因为它们都不是根据我的发现工作的。

要实现你想要的,你必须使用数据包来取消玩家看到的内容

我强烈推荐,将其放在您的服务器中,并在插件中使用


考虑到这一点,Bukkit用户Comphenix开发了一个用于protocollib隐藏实体的类。你可以找到它

Comphenix还提供了一个使用示例,如下所示:

    public class ExampleMod extends JavaPlugin {
    private EntityHider entityHider;

    private static final int TICKS_PER_SECOND = 20;

    @Override
    public void onEnable() {
        entityHider = new EntityHider(this, Policy.BLACKLIST);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            final Player player = (Player) sender;
            final Sheep sheep = player.getWorld().spawn(player.getLocation(), Sheep.class);

            // Show a particular entity
            entityHider.toggleEntity(player, sheep);

            getServer().getScheduler().scheduleSyncDelayedTask(this, new         Runnable() {
                @Override
                public void run() {
                    entityHider.toggleEntity(player, sheep);
                }
            }, 10 * TICKS_PER_SECOND);
        }
        return true;
    }
}

这可以使用软件包实现,我建议使用ProtocolLib。你提供的链接应该能起到指导作用,但我不确定我是否已经弄明白了。谢谢我所做的错事是从论坛线程获取代码,这已经过时了。文章中提供的要点链接已经更新。它现在工作得很好。确保用答案回答你自己的问题,确保未来的用户也能解决它!(如果你懒惰,我可以这样做:P)我用ProtocolLib来解决这个问题。