我想用命令创建一个NPC。
我已经写过:
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
if (command.getName().equalsIgnoreCase("npc")) {
if (args.length < 1) {
sender.sendMessage("§cSyntax: /npc create [name]");
return true;
}
if (args[0].equalsIgnoreCase("create")) {
if (args.length < 2) {
sender.sendMessage("§cSyntax: /npc create [name]");
return true;
}
sender.sendMessage("§4[§2Quests§4] §fNPC spawned.");
MinecraftServer ms = (MinecraftServer) Bukkit.getServer();
WorldServer ws = (WorldServer) p.getWorld();
GameProfile gp = new GameProfile(UUID.randomUUID(), "NAME");
EntityPlayer npc = new EntityPlayer(ms, ws, gp, new PlayerInteractManager(ws));
Player npcPlayer = npc.getBukkitEntity().getPlayer();
npcPlayer.setPlayerListName("");
npc.setLocation(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), p.getLocation().getYaw(), p.getLocation().getPitch());
PlayerConnection connection = ((CraftPlayer)p).getHandle().playerConnection;
connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, npc));
connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
return true;
}
if (args[0].equalsIgnoreCase("delete")) {
sender.sendMessage("§cSyntax: /npc delete");
return true;
}
}
}
return false;
}
但是这给我一个错误:
MinecraftServer ms = (MinecraftServer) Bukkit.getServer();
它说,我无法将Server转换为MinecraftServer。我的教程显示了这样的内容,并且对他有用。
他的代码是:
MinecraftServer ms = (MinecraftServer) Bukkit.getServer().getServer();
但是此双重getServer()不再可用。
EDIT1:我已经使用了spigot 1.14.4库。
我知道本教程很旧,但是我没有发现其他可以生成NPC的东西。https://www.youtube.com/watch?v=gsvFOJWECGE
我的目标是创建NPC并能够单击它们。
很难给出一个完整的答案,而又不确切知道您使用的是哪个库以及本教程使用的是哪个库。我假设this是您Bukkit.getServer()的源,this是您的MinecraftServer的源。
由此您可以看到,getServer()是Bukkit中的静态方法,并返回实现Server interface的类。
但是从第二个来源我们可以看到MinecraftServer实现了ICommandListener,Runnable和IMojangStatistics
由于MinecraftServer未实现Bukkit.getServer()实现的Server接口,因此编译器无法将此调用的返回值转换为MinecraftServer。
关于为什么双重getServer不可用-如果我们看一下Bukkit.getServer()返回的Server interface,我们可以看到它不包含getServer()方法,因此您无法调用它。我不能说教程是从哪里得到的。
如果您能够提供本教程的链接,我可以编辑/修改此答案以更好地适应这种情况。