I am trying to spawn a fake player entity using EntityPlayer. This is what i have tried so far: Code: public EntityPlayer spawnNPC(Player p) { GameProfile profile = new GameProfile(UUID.randomUUID(), p.getUniqueId().toString().substring(0, 15)); MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); WorldServer wS = ((CraftWorld) p.getWorld()).getHandle(); EntityPlayer e = new EntityPlayer(server, wS, profile, new PlayerInteractManager(wS); e.noDamageTicks = 0; PacketPlayOutPlayerInfo infoPack = PacketPlayOutPlayerInfo.addPlayer(e); PacketPlayOutNamedEntitySpawn spawnPack = new PacketPlayOutNamedEntitySpawn(e); Location loc = getBehindPlayer(p); e.setPosition(loc.getX(), loc.getY(), loc.getZ()); ((CraftPlayer) p).getHandle().playerConnection.sendPacket(infoPack); ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawnPack); return e; } But the player does not appear? EDIT: I have added a check to see where the EntityPlayer is after its spawned, and it says the correct location, but still no avail
@boomboompower i'll take a look, thanks. It will take a bit so if anyone has ideas as to what i am doing wrong im still looking for that EDIT: I have got it to spawn, i forgot to add the entity to the world but now the server crashes when it spawns?
@boomboompower This is the crash report Code: ---- Minecraft Crash Report ---- Time: 10/5/15 5:46 PM Description: Exception in server tick loop java.lang.NullPointerException: Exception in server tick loop at net.minecraft.server.v1_7_R4.PlayerConnection.sendPacket(PlayerConnection.java:754) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.broadcastIncludingSelf(EntityTrackerEntry.java:280) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.b(EntityTrackerEntry.java:247) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.track(EntityTrackerEntry.java:173) at net.minecraft.server.v1_7_R4.EntityTracker.updatePlayers(EntityTracker.java:157) at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:778) at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:307) at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:638) at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:544) at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) @boomboompower Yeah but i would prefer not to use dependencies. If there are any libs you know of that are just classes ill be happy to use, but not dependencies. EDIT by Timtower: merged posts, please use the edit button instead of double posting.
@mcdorli There is none. But here is the full crash report not that its needed... Code: ---- Minecraft Crash Report ---- Time: 10/5/15 5:46 PM Description: Exception in server tick loop java.lang.NullPointerException: Exception in server tick loop at net.minecraft.server.v1_7_R4.PlayerConnection.sendPacket(PlayerConnection.java:754) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.broadcastIncludingSelf(EntityTrackerEntry.java:280) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.b(EntityTrackerEntry.java:247) at net.minecraft.server.v1_7_R4.EntityTrackerEntry.track(EntityTrackerEntry.java:173) at net.minecraft.server.v1_7_R4.EntityTracker.updatePlayers(EntityTracker.java:157) at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:778) at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:307) at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:638) at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:544) at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_60, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 829559712 bytes (791 MB) / 1029177344 bytes (981 MB) up to 1029177344 bytes (981 MB) JVM Flags: 2 total; -Xms1G -Xmx1G AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94 CraftBukkit Information: Running: CraftBukkit version git-PaperSpigot-a55c8eb (MC: 1.7.10) (Implementing API version 1.7.10-R0.1-SNAPSHOT) false Plugins: { NPCSpawn v0.1 dev.erouax.aac.Core [Erouax],} Warnings: DEFAULT Threads: { RUNNABLE DestroyJavaVM: [], RUNNABLE Netty IO #1: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), net.minecraft.util.io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:591), net.minecraft.util.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:301), net.minecraft.util.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101), java.lang.Thread.run(Unknown Source)], WAITING Reference Handler: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Unknown Source), java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)], TIMED_WAITING Spigot Metrics Thread: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], TIMED_WAITING Snooper Timer: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], RUNNABLE Thread-5: [java.io.FileOutputStream.writeBytes(Native Method), java.io.FileOutputStream.write(Unknown Source), java.io.BufferedOutputStream.flushBuffer(Unknown Source), java.io.BufferedOutputStream.flush(Unknown Source), java.io.PrintStream.write(Unknown Source), org.fusesource.jansi.AnsiOutputStream.write(AnsiOutputStream.java:82), java.io.FilterOutputStream.write(Unknown Source), java.io.PrintStream.write(Unknown Source), java.io.FilterOutputStream.write(Unknown Source), org.bukkit.craftbukkit.v1_7_R4.util.TerminalConsoleWriterThread.run(TerminalConsoleWriterThread.java:34), java.lang.Thread.run(Unknown Source)], RUNNABLE Server console handler: [org.fusesource.jansi.internal.Kernel32._getch(Native Method), org.fusesource.jansi.internal.WindowsSupport.readByte(WindowsSupport.java:46), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.readByte(WindowsTerminal.java:184), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.access$000(WindowsTerminal.java:53), org.bukkit.craftbukkit.libs.jline.WindowsTerminal$1.read(WindowsTerminal.java:151), java.io.FilterInputStream.read(Unknown Source), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader$1.read(ConsoleReader.java:167), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:267), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:204), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:995), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:1167), net.minecraft.server.v1_7_R4.ThreadCommandReader.run(ThreadCommandReader.java:32)], RUNNABLE Server thread: [java.lang.Thread.dumpThreads(Native Method), java.lang.Thread.getAllStackTraces(Unknown Source), org.bukkit.craftbukkit.v1_7_R4.CraftCrashReport.call(CraftCrashReport.java:28), net.minecraft.server.v1_7_R4.CrashReportSystemDetails.a(SourceFile:74), net.minecraft.server.v1_7_R4.CrashReport.h(CrashReport.java:45), net.minecraft.server.v1_7_R4.CrashReport.<init>(CrashReport.java:33), net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:564), net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628)], RUNNABLE File IO Thread: [java.util.zip.Deflater.deflateBytes(Native Method), java.util.zip.Deflater.deflate(Unknown Source), java.util.zip.Deflater.deflate(Unknown Source), java.util.zip.DeflaterOutputStream.deflate(Unknown Source), java.util.zip.DeflaterOutputStream.write(Unknown Source), java.io.DataOutputStream.write(Unknown Source), java.io.DataOutputStream.writeUTF(Unknown Source), java.io.DataOutputStream.writeUTF(Unknown Source), net.minecraft.server.v1_7_R4.NBTTagCompound.a(SourceFile:312), net.minecraft.server.v1_7_R4.NBTTagCompound.write(SourceFile:25), net.minecraft.server.v1_7_R4.NBTTagList.write(NBTTagList.java:28), net.minecraft.server.v1_7_R4.NBTTagCompound.a(SourceFile:314), net.minecraft.server.v1_7_R4.NBTTagCompound.write(SourceFile:25), net.minecraft.server.v1_7_R4.NBTTagCompound.a(SourceFile:314), net.minecraft.server.v1_7_R4.NBTTagCompound.write(SourceFile:25), net.minecraft.server.v1_7_R4.NBTCompressedStreamTools.a(NBTCompressedStreamTools.java:109), net.minecraft.server.v1_7_R4.NBTCompressedStreamTools.a(NBTCompressedStreamTools.java:101), net.minecraft.server.v1_7_R4.ChunkRegionLoader.a(ChunkRegionLoader.java:190), net.minecraft.server.v1_7_R4.ChunkRegionLoader.c(ChunkRegionLoader.java:178), net.minecraft.server.v1_7_R4.FileIOThread.b(SourceFile:30), net.minecraft.server.v1_7_R4.FileIOThread.run(SourceFile:23), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Server Infinisleeper: [java.lang.Thread.sleep(Native Method), net.minecraft.server.v1_7_R4.ThreadSleepForever.run(SourceFile:63)], WAITING Finalizer: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)], RUNNABLE Attach Listener: [], RUNNABLE Signal Dispatcher: [], RUNNABLE Netty IO #0: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), net.minecraft.util.io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:591), net.minecraft.util.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:301), net.minecraft.util.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Spigot Watchdog Thread: [java.lang.Thread.sleep(Native Method), org.spigotmc.WatchdogThread.run(WatchdogThread.java:92)], WAITING Chunk I/O Executor Thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)],} Recent tasks from 267-297{} Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Player Count: 1 / 100; [EntityPlayer['Erouax'/224, l='world', x=-68.16, y=62.13, z=153.74](Erouax at -68.16274464128995,62.12574326839727,153.74245642114784)] Is Modded: Definitely; Server brand changed to 'PaperSpigot' Type: Dedicated Server (map_server.txt)
@mcdorli It's a server crash. This is the log: Code: [20:23:03] [Server thread/ERROR]: Encountered an unexpected exception java.lang.NullPointerException at net.minecraft.server.v1_7_R4.PlayerConnection.sendPacket(PlayerConnection.java:754) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.EntityTrackerEntry.broadcastIncludingSelf(EntityTrackerEntry.java:280) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.EntityTrackerEntry.b(EntityTrackerEntry.java:247) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.EntityTrackerEntry.track(EntityTrackerEntry.java:173) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.EntityTracker.updatePlayers(EntityTracker.java:157) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:778) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:307) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:638) ~[Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:544) [Spigot.jar:git-PaperSpigot-a55c8eb] at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [Spigot.jar:git-PaperSpigot-a55c8eb] [20:23:03] [Server thread/ERROR]: This crash report has been saved to: C:\-snip-\crash-reports\crash-2015-10-05_20.23.03-server.txt [20:23:03] [Server thread/INFO]: Stopping server
@timtower, can you please help? I never seen a crash report like that. Edit: got njnja'd by @boomboompower, hell you're fast
@timtower When i updated it, i had changed it to just spawn a new 'custom' player class which extends EntityPlayer. It spawns it with this instead of using packets: Code: ((CraftWorld)loc.getWorld()).getHandle().addEntity(npc); Is there a better way to spawn it? I think it's the way it is spawned into the world, but i'm not too sure.
@boomboompower That's the way that made it crash. I added some debugging and it gets through the void, but then crashes. This is the code i used. Code: // FakePlayer class public FakePlayer(MinecraftServer mS, WorldServer wS, GameProfile profile, PlayerInteractManager manager) { super(mS, wS, profile, manager); this.playerConnection = new PlayerConnection(server, new NetworkManager(false), this); } public static void spawnFakePlayer(Location l) { System.out.println("FakePlayer test 1"); MinecraftServer server = MinecraftServer.getServer(); WorldServer world = ((CraftWorld)l.getWorld()).getHandle(); UUID uuid = UUID.randomUUID(); GameProfile profile = new GameProfile(uuid, "TestNPC"); PlayerInteractManager manager = new PlayerInteractManager(world); FakePlayer npc = new FakePlayer(server, world, profile, manager); npc.playerConnection = new PlayerConnection(server, new NetworkManager(false), npc); npc.setLocation(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch()); ((CraftWorld)l.getWorld()).getHandle().addEntity(npc); System.out.println("FakePlayer test"); } Code: // How i call it, the getBehindPlayer() method is fine, i have used it many times. @EventHandler public void onDmg(EntityDamageByEntityEvent e) { if (e.getDamager() instanceof Player) { FakePlayer.spawnFakePlayer(getBehindPlayer((Player) e.getDamager())); } } It gets to the 'FakePlayer test' part, but then crashes minimal ticks after (1 or 2). EDIT: I went back to using packets with an EntityHuman instance and it works a charm now - But the NPC can't be damaged? I did this: Code: npc.a(EnumGamemode.SURVIVAL); npc.noDamageTicks = 0; But it still cant be hit? If @timtower can help ^