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