经过大量的研究和浪费了很多时间,我仍然无法找到如何将一个实体隐藏到一个玩家。
我要做的是创建一个伪装命令。我现在已经解决了所有问题,除了问题是实体仍然可见,并且一旦静止,你就无法与任何东西进行交互,因为暴徒的命中箱是阻碍的。我想隐藏播放器中的实体,以便您可以执行此操作。我知道玩家可以使用Player#hidePlayer(),但这不适用于实体。我尝试使用this之类的解决方案,但在遵循示例时出错了。 (很多东西都被折旧了,所以我认为它已经过时了。我正在使用Spigot 1.11.2)。非常感谢任何帮助。
PS:如果你想知道为什么我不只是使用一个已经制作的插件,那是因为它们都不是我发现的。
答案 0 :(得分:1)
要完成您想要的操作,必须使用数据包取消玩家看到的内容。
我强烈建议 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;
}
}