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)); } }
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?
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); } } }