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

标签 java bukkit

经过大量研究和浪费大量时间,我仍然不知道如何向玩家隐藏实体。

我想做的是创建一个伪装命令。我现在已经解决了所有问题,除了问题是该实体仍然可见,并且一旦静止,您就无法与任何东西交互,因为暴徒的碰撞箱挡住了。我想对玩家隐藏该实体,以便您可以执行此操作。我知道对于玩家,您可以使用 Player#hidePlayer(),但这不适用于实体。我尝试过使用诸如 this 之类的解决方案,但是在遵循示例时出现错误。 (很多东西都贬值了,所以我认为它已经过时了。我正在使用 Spigot 1.11.2)。任何帮助将非常感激。

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

最佳答案

要完成您想要的任务,您必须使用数据包来取消玩家所看到的内容。

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

<小时/>

考虑到这一点,Bukkit 用户 Comphenix 为 protocollib 开发了一个类来隐藏实体。可以找到in github .

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;
    }
}

关于java - 如何设置单个实体对玩家不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865315/

相关文章:

java - bukkit - 等待?

java - 防止伪造客户端数据Java?

java - EJB、休息、JPA NullPointerException

java - 当需要使用另一个线程时,你应该使用Java的Bukkit实现吗?

java - 在集群模式下将 Spark 从 eclipse 部署到 YARN 时出错

java - 将项目添加到 Android ListView

java - 尝试将配置文件中的文本替换为广播,并获取 'Type mismatch: cannot convert from int to String'

java - Bukkit - 从其他 @EventHandler 获取变量?

java - 将 UTC 日期转换为不同时区的日期

java - JList 上 Transferable 和 Transferhandler 的自定义删除容器