Minecraft插件|创建NPC不起作用

问题描述 投票:0回答:1

我想用命令创建一个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并能够单击它们。

java minecraft bukkit
1个回答
1
投票

很难给出一个完整的答案,而又不确切知道您使用的是哪个库以及本教程使用的是哪个库。我假设this是您Bukkit.getServer()的源,this是您的MinecraftServer的源。

由此您可以看到,getServer()是Bukkit中的静态方法,并返回实现Server interface的类。

但是从第二个来源我们可以看到MinecraftServer实现了ICommandListener,Runnable和IMojangStatistics

由于MinecraftServer未实现Bukkit.getServer()实现的Server接口,因此编译器无法将此调用的返回值转换为MinecraftServer。

关于为什么双重getServer不可用-如果我们看一下Bukkit.getServer()返回的Server interface,我们可以看到它不包含getServer()方法,因此您无法调用它。我不能说教程是从哪里得到的。

如果您能够提供本教程的链接,我可以编辑/修改此答案以更好地适应这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.