经过大量研究和浪费大量时间,我仍然不知道如何向玩家隐藏实体。
我想做的是创建一个伪装命令。我现在已经解决了所有问题,除了问题是该实体仍然可见,并且一旦静止,您就无法与任何东西交互,因为暴徒的碰撞箱挡住了。我想对玩家隐藏该实体,以便您可以执行此操作。我知道对于玩家,您可以使用 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/