NPC Help

Discussion in 'Plugin Development' started by plisov, Aug 11, 2015.

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

    plisov

    Hi, so I recently created a plugin that creates an npc. At first I only wanted the npc to show up for the specific player that created the npc. But now I've decided I want the npc to be displayed to everyone on the server. I do not know how to do that. Here is what I have so far
    Code:
    package me.plisov.npc;
    
    import java.util.UUID;
    
    import net.minecraft.server.v1_8_R1.EntityPlayer;
    import net.minecraft.server.v1_8_R1.EnumPlayerInfoAction;
    import net.minecraft.server.v1_8_R1.MinecraftServer;
    import net.minecraft.server.v1_8_R1.PacketPlayOutNamedEntitySpawn;
    import net.minecraft.server.v1_8_R1.PacketPlayOutPlayerInfo;
    import net.minecraft.server.v1_8_R1.PlayerConnection;
    import net.minecraft.server.v1_8_R1.PlayerInteractManager;
    import net.minecraft.server.v1_8_R1.WorldServer;
    
    import org.bukkit.Bukkit;
    import org.bukkit.craftbukkit.v1_8_R1.CraftServer;
    import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
    import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.mojang.authlib.GameProfile;
    
    public class NPC extends JavaPlugin implements Listener {
           
            private EntityPlayer npc;
           
            @Override
            public void onEnable() {
                    Bukkit.getServer().getPluginManager().registerEvents(this, this);
                   
                    MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
                    WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
                    npc = new EntityPlayer(nmsServer, nmsWorld, new GameProfile(UUID.fromString("5ab83cd7-895e-43f1-a826-05e3f14db946"), "plisov"), new PlayerInteractManager(nmsWorld));
            }
           
            @EventHandler
            public void onPlayerJoin(PlayerJoinEvent e) {
                Player player = (Player) e.getPlayer();
                    npc.setLocation(e.getPlayer().getLocation().getX(), e.getPlayer().getLocation().getY(), e.getPlayer().getLocation().getZ(), 0, 0);
                    npc.setHealth(20);
                    npc.setOnFire(10);
                    PlayerConnection connection = ((CraftPlayer) e.getPlayer()).getHandle().playerConnection;
                    connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
                    connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
            }
    }
    
     
  2. Offline

    Cycryl

    you gotta send them a packet.
    (oh boy we're gonna be here for a while)
    i would do:
    Code:
    PacketPlayOutNamedEntitySpawn packet = new PacketPlayerOutNamedEntitySpawn(npc);
    for(Player p : Bukkit.getOnlinePlayers()){
      ((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet).
    }
    pls work maybe?
     
  3. Offline

    plisov

    Alright so I tried to replace my old packet with this new one ^^. The entity or npc in this case does not spawn.
    Updated Code
    Code:
    package me.plisov.npc;
    
    import java.util.UUID;
    
    import net.minecraft.server.v1_8_R1.EntityPlayer;
    import net.minecraft.server.v1_8_R1.MinecraftServer;
    import net.minecraft.server.v1_8_R1.PacketPlayOutNamedEntitySpawn;
    import net.minecraft.server.v1_8_R1.PlayerInteractManager;
    import net.minecraft.server.v1_8_R1.WorldServer;
    
    import org.bukkit.Bukkit;
    import org.bukkit.craftbukkit.v1_8_R1.CraftServer;
    import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
    import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.mojang.authlib.GameProfile;
    
    public class NPC extends JavaPlugin implements Listener {
           
            private EntityPlayer npc;
           
            @Override
            public void onEnable() {
                    Bukkit.getServer().getPluginManager().registerEvents(this, this);
                   
                    MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
                    WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
                    npc = new EntityPlayer(nmsServer, nmsWorld, new GameProfile(UUID.fromString("5ab83cd7-895e-43f1-a826-05e3f14db946"), "plisov"), new PlayerInteractManager(nmsWorld));
            }
           
            @SuppressWarnings("deprecation")
            @EventHandler
            public void onPlayerJoin(PlayerJoinEvent e) {
                Player player = (Player) e.getPlayer();
                    npc.setLocation(e.getPlayer().getLocation().getX(), e.getPlayer().getLocation().getY(), e.getPlayer().getLocation().getZ(), 0, 0);
                    npc.setHealth(20);
                    npc.setOnFire(10);
                    PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn(npc);
                    for(Player p : Bukkit.getOnlinePlayers()){
                      ((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet);
                    }
            }
    }
    
     
Thread Status:
Not open for further replies.

Share This Page