Advertisement
Guest User

1.16.x Corpse Code

a guest
Aug 9th, 2021
2,904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.76 KB | None | 0 0
  1. package me.codedred.downed.utils;
  2.  
  3. import com.mojang.authlib.GameProfile;
  4. import com.mojang.authlib.properties.Property;
  5. import com.mojang.datafixers.util.Pair;
  6. import net.minecraft.server.v1_16_R3.*;
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.Location;
  9. import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
  10. import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
  11. import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
  12. import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
  13. import org.bukkit.craftbukkit.v1_16_R3.scoreboard.CraftScoreboard;
  14. import org.bukkit.entity.Player;
  15.  
  16. import java.lang.reflect.Field;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19.  
  20. public class NPCUtil {
  21.  
  22.     public static void spawnNPC(Player player) {
  23.         EntityPlayer craftPlayer = ((CraftPlayer)player).getHandle();
  24.  
  25.         // NPC textures
  26.         Property textures = (Property) craftPlayer.getProfile().getProperties().get("textures").toArray()[0];
  27.         GameProfile gameProfile = new GameProfile(player.getUniqueId(), player.getName());
  28.         gameProfile.getProperties().put("textures", new Property("textures", textures.getValue(), textures.getSignature()));
  29.  
  30.  
  31.  
  32.         // Creating the NPC
  33.         EntityPlayer entityPlayer = new EntityPlayer(
  34.                 ((CraftServer) Bukkit.getServer()).getServer(),
  35.                 ((CraftWorld) player.getWorld()).getHandle(), gameProfile,
  36.                 new PlayerInteractManager(((CraftWorld) player.getWorld()).getHandle()));
  37.         entityPlayer.setPosition(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ());
  38.  
  39.         Location bed = player.getLocation().add(1, 0, 0);
  40.         entityPlayer.e(new BlockPosition(bed.getX(), bed.getY(), bed.getZ()));
  41.  
  42.  
  43.  
  44.         // NPC nametag
  45.         ScoreboardTeam team = new ScoreboardTeam(((CraftScoreboard) Bukkit.getScoreboardManager().getMainScoreboard()).getHandle(),
  46.                 player.getName());
  47.         team.setNameTagVisibility(ScoreboardTeamBase.EnumNameTagVisibility.NEVER);
  48.         ArrayList<String> playerToAdd = new ArrayList<>();
  49.  
  50.         playerToAdd.add(entityPlayer.getName()); //Add the fake player so this player will not have a nametag
  51.         PacketPlayOutScoreboardTeam scoreboard1 = new PacketPlayOutScoreboardTeam(team, 1);
  52.         PacketPlayOutScoreboardTeam scoreboard0 = new PacketPlayOutScoreboardTeam(team, 0);
  53.         PacketPlayOutScoreboardTeam scoreboard3 = new PacketPlayOutScoreboardTeam(team, playerToAdd, 3);
  54.  
  55.  
  56.         // Pose and overlays
  57.         DataWatcher watcher = entityPlayer.getDataWatcher();
  58.         try {
  59.             byte b = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40; // each of the overlays (cape, jacket, sleeves, pants, hat)
  60.             watcher.set(DataWatcherRegistry.a.a(16), b); // To find value use wiki.vg
  61.  
  62.             Field poseField = Entity.class.getDeclaredField("POSE");
  63.             poseField.setAccessible(true);
  64.             DataWatcherObject<EntityPose> POSE = (DataWatcherObject<EntityPose>) poseField.get(null);
  65.             watcher.set(POSE, EntityPose.SLEEPING);
  66.         } catch (Exception ignored) {
  67.  
  68.         }
  69.         PacketPlayOutEntity.PacketPlayOutRelEntityMove move = new PacketPlayOutEntity.PacketPlayOutRelEntityMove(
  70.                 entityPlayer.getId(), (byte) 0, (byte) ((player.getLocation()
  71.                 .getY() - 1.7 - player.getLocation().getY()) * 32),
  72.                 (byte) 0, false);
  73.  
  74.  
  75.  
  76.         // Equipment
  77.         List<Pair<EnumItemSlot, ItemStack>> equipmentList = new ArrayList<>();
  78.         equipmentList.add(new Pair<>(EnumItemSlot.HEAD, CraftItemStack.asNMSCopy(player.getInventory().getHelmet())));
  79.         equipmentList.add(new Pair<>(EnumItemSlot.CHEST, CraftItemStack.asNMSCopy(player.getInventory().getChestplate())));
  80.         equipmentList.add(new Pair<>(EnumItemSlot.LEGS, CraftItemStack.asNMSCopy(player.getInventory().getLeggings())));
  81.         equipmentList.add(new Pair<>(EnumItemSlot.FEET, CraftItemStack.asNMSCopy(player.getInventory().getBoots())));
  82.  
  83.         PacketPlayOutEntityEquipment equipment = new PacketPlayOutEntityEquipment(entityPlayer.getId(), equipmentList);
  84.  
  85.  
  86.  
  87.         // Sending packets
  88.         for (Player on : Bukkit.getOnlinePlayers()) {
  89.             PlayerConnection p = ((CraftPlayer) on).getHandle().playerConnection;
  90.             p.sendPacket(new PacketPlayOutNamedEntitySpawn(entityPlayer));
  91.             p.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer));
  92.             p.sendPacket(scoreboard1);
  93.             p.sendPacket(scoreboard0);
  94.             p.sendPacket(scoreboard3);
  95.             p.sendPacket(equipment);
  96.             p.sendPacket(new PacketPlayOutEntityMetadata(entityPlayer.getId(), watcher, false));
  97.             p.sendPacket(move);
  98.         }
  99.  
  100.     }
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement