EntityPlayer Spawning

Discussion in 'Plugin Development' started by dlange, Oct 4, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    dlange

    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
     
  2. Offline

    boomboompower

    Look at what Citizens does.
     
  3. Offline

    dlange

    @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 :p

    EDIT: I have got it to spawn, i forgot to add the entity to the world :p but now the server crashes when it spawns?
     
    Last edited: Oct 4, 2015
  4. Offline

    boomboompower

    @dlange What is the error?

    Look at this:
     
    Last edited: Oct 5, 2015
  5. Offline

    dlange

    @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.
     
    Last edited by a moderator: Oct 5, 2015
  6. Offline

    mcdorli

    Please post the full error code, we are interested in the section after the "caused by" text
     
  7. Offline

    dlange

    @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)
     
  8. Offline

    mcdorli

    Wait, this isn't a server crash, this is a client crash, post the server log
     
  9. Offline

    dlange

    @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
     
  10. Offline

    mcdorli

    @dlange From where did you copied it?
     
  11. Offline

    dlange

    @mcdorli The log directory... And the crash report from the crash-report dir...
     
  12. Offline

    boomboompower

    @timtower can you look at this? I have no clue xD
     
    mcdorli likes this.
  13. Offline

    mcdorli

    @timtower, can you please help? I never seen a crash report like that.

    Edit: got njnja'd by @boomboompower, hell you're fast
     
  14. Offline

    timtower Administrator Administrator Moderator

    I blame bad packets.
     
  15. Offline

    dlange

    @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.
     
  16. Offline

    boomboompower

  17. Offline

    dlange

    @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 :D
    - 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 ^
     
    Last edited: Oct 5, 2015
  18. Offline

    dlange

    Bump?
     
  19. Offline

    dlange

    Last attempt to bump... :3
     
Thread Status:
Not open for further replies.

Share This Page