Advertisement
Mo0nSw0rth

Untitled

Jan 15th, 2022
1,658
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.76 KB | None | 0 0
  1. public class Core extends JavaPlugin implements CommandExecutor {
  2.  
  3.     @Override
  4.     public void onEnable() {
  5.         getCommand("npc").setExecutor(this);
  6.     }
  7.  
  8.     @Override
  9.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  10.         if(args.length != 2) return true;
  11.         String option = args[0];
  12.         String nick = args[1];
  13.         if(option.equals("create")) {
  14.             Player p = (Player) sender;
  15.             createNPC(nick, p.getLocation());
  16.         }else{
  17.             return true;
  18.         }
  19.  
  20.         return false;
  21.     }
  22.  
  23.     public void createNPC(String name, Location loc){
  24.         MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
  25.         WorldServer nmsWorld = ((CraftWorld)Bukkit.getWorld("world")).getHandle();
  26.         GameProfile gameProfile = new GameProfile(UUID.randomUUID(), name);
  27.         String[] skin = getSkin(name);
  28.         gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1]));
  29.         EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
  30.         npc.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
  31.  
  32.         for(Player p : Bukkit.getOnlinePlayers()) {
  33.             PlayerConnection connection = ((CraftPlayer)p).getHandle().playerConnection;
  34.             connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, npc));
  35.             connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
  36.             connection.sendPacket(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.yaw * 256 / 360)));
  37.             connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, npc));
  38.         }
  39.     }
  40.  
  41.     private static String[] getSkin(String name) {
  42.         try {
  43.             URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
  44.             InputStreamReader reader = new InputStreamReader(url.openStream());
  45.             String uuid = (new JsonParser()).parse(reader).getAsJsonObject().get("id").getAsString();
  46.             URL url2 = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false");
  47.             InputStreamReader reader2 = new InputStreamReader(url2.openStream());
  48.             JsonObject property = (new JsonParser()).parse(reader2).getAsJsonObject().get("properties").getAsJsonArray().get(0).getAsJsonObject();
  49.             String texture = property.get("value").getAsString();
  50.             String signature = property.get("signature").getAsString();
  51.             return new String[] { texture, signature };
  52.         } catch (Exception e) {
  53.             return null;
  54.         }
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement