本帖最后由 我真护啊 于 2023-1-15 00:45 编辑 
创建实体的时候写EntityType.PLAYER就报错 如何创建一个和自己一样的实体呢
跪求大佬求解
Player player = (Player) sender;
player.getWorld().spawnEntity(player.getLocation(), EntityType.PLAYER);
[00:21:39 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'morequit' in plugin MoreQuit v1.0-SNAPSHOT
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:172) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:906) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2390) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2201) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2182) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundChatPacket.a(ServerboundChatPacket.java:6) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1427) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1404) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1397) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1375) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1257) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.lambda$spin$1(MinecraftServer.java:321) ~[purpur-1.18.2.jar:git-Purpur-1632]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.IllegalArgumentException: Cannot spawn an entity for org.bukkit.entity.Player
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.createEntity(CraftRegionAccessor.java:916) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:497) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:493) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:479) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawnEntity(CraftRegionAccessor.java:387) ~[purpur-1.18.2.jar:git-Purpur-1632]
at www.pinkmc.com.morequit.command.MainCommand.onCommand(MainCommand.java:25) ~[MoreQuit.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
... 21 more
创建实体的时候写EntityType.PLAYER就报错 如何创建一个和自己一样的实体呢
跪求大佬求解
Player player = (Player) sender;
player.getWorld().spawnEntity(player.getLocation(), EntityType.PLAYER);
[00:21:39 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'morequit' in plugin MoreQuit v1.0-SNAPSHOT
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:172) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:906) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2390) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2201) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2182) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundChatPacket.a(ServerboundChatPacket.java:6) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1427) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1404) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1397) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1375) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1257) ~[purpur-1.18.2.jar:git-Purpur-1632]
at net.minecraft.server.MinecraftServer.lambda$spin$1(MinecraftServer.java:321) ~[purpur-1.18.2.jar:git-Purpur-1632]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.IllegalArgumentException: Cannot spawn an entity for org.bukkit.entity.Player
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.createEntity(CraftRegionAccessor.java:916) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:497) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:493) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawn(CraftRegionAccessor.java:479) ~[purpur-1.18.2.jar:git-Purpur-1632]
at org.bukkit.craftbukkit.v1_18_R2.CraftRegionAccessor.spawnEntity(CraftRegionAccessor.java:387) ~[purpur-1.18.2.jar:git-Purpur-1632]
at www.pinkmc.com.morequit.command.MainCommand.onCommand(MainCommand.java:25) ~[MoreQuit.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[purpur-api-1.18.2-R0.1-SNAPSHOT.jar:?]
... 21 more
参照 Citizens 生成 NPC 的写法,直接将皮肤也覆盖在该 NPC 上即可。
名副其实 发表于 2023-1-15 02:22
参照 Citizens 生成 NPC 的写法,直接将皮肤也覆盖在该 NPC 上即可。
感谢大哥 实现了
public static void send(Player p) {
EntityPlayer ep = ((CraftPlayer) p).getHandle();
WorldServer ws = ((CraftWorld) p.getLocation().getWorld()).getHandle();
MinecraftServer mc = ep.server;
net.minecraft.server.v1_8_R3.World w = ((CraftWorld) p.getWorld()).getHandle();
PlayerInteractManager interact = new PlayerInteractManager(w);
GameProfile gp = new GameProfile(UUID.randomUUID() , "§c测试");
EntityPlayer npc = new EntityPlayer(mc, ws, gp, interact);
Location loc = p.getLocation();
PlayerConnection pc = ep.playerConnection;
npc.setPosition(loc.getX(), loc.getY(), loc.getZ());
PacketPlayOutPlayerInfo pi = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc);
PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(npc);
pc.sendPacket(pi);
pc.sendPacket(spawn);
pc.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, npc));
FakePlayer.npcs.add(npc);
hideNpcName(p , npc);
}
npc换皮肤的没研究过,这个是生成一个玩家npc,youtube有详细教程
EntityPlayer ep = ((CraftPlayer) p).getHandle();
WorldServer ws = ((CraftWorld) p.getLocation().getWorld()).getHandle();
MinecraftServer mc = ep.server;
net.minecraft.server.v1_8_R3.World w = ((CraftWorld) p.getWorld()).getHandle();
PlayerInteractManager interact = new PlayerInteractManager(w);
GameProfile gp = new GameProfile(UUID.randomUUID() , "§c测试");
EntityPlayer npc = new EntityPlayer(mc, ws, gp, interact);
Location loc = p.getLocation();
PlayerConnection pc = ep.playerConnection;
npc.setPosition(loc.getX(), loc.getY(), loc.getZ());
PacketPlayOutPlayerInfo pi = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc);
PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(npc);
pc.sendPacket(pi);
pc.sendPacket(spawn);
pc.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, npc));
FakePlayer.npcs.add(npc);
hideNpcName(p , npc);
}
npc换皮肤的没研究过,这个是生成一个玩家npc,youtube有详细教程
public static void hideNpcName(Player p , EntityPlayer npc) {
ScoreboardTeam team = new ScoreboardTeam(((CraftScoreboard) Bukkit.getScoreboardManager().getMainScoreboard()).getHandle(), p.getName());
team.setNameTagVisibility(EnumNameTagVisibility.NEVER);
for(Player pl : Bukkit.getOnlinePlayers()) {
target.add(pl.getName());
}
for(EntityPlayer npcs : FakePlayer.npcs) {
target.add(npcs.getName());
}
EntityPlayer ep = ((CraftPlayer) p).getHandle();
PlayerConnection pc = ep.playerConnection;
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, 1));
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, 0));
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, target, 3));
}
这个可加可不加,隐藏npc名字的
ScoreboardTeam team = new ScoreboardTeam(((CraftScoreboard) Bukkit.getScoreboardManager().getMainScoreboard()).getHandle(), p.getName());
team.setNameTagVisibility(EnumNameTagVisibility.NEVER);
for(Player pl : Bukkit.getOnlinePlayers()) {
target.add(pl.getName());
}
for(EntityPlayer npcs : FakePlayer.npcs) {
target.add(npcs.getName());
}
EntityPlayer ep = ((CraftPlayer) p).getHandle();
PlayerConnection pc = ep.playerConnection;
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, 1));
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, 0));
pc.sendPacket(new PacketPlayOutScoreboardTeam(team, target, 3));
}
这个可加可不加,隐藏npc名字的