Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.danielthumaniel.NPCInvis;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.craftbukkit.libs.org.apache.commons.codec.binary.Base64;
- import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
- import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
- import org.bukkit.craftbukkit.v1_15_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 com.mojang.authlib.GameProfile;
- import com.mojang.authlib.properties.Property;
- import com.mojang.authlib.properties.PropertyMap;
- import net.minecraft.server.v1_15_R1.EntityPlayer;
- import net.minecraft.server.v1_15_R1.MinecraftServer;
- import net.minecraft.server.v1_15_R1.PacketPlayOutEntityDestroy;
- import net.minecraft.server.v1_15_R1.PacketPlayOutEntityHeadRotation;
- import net.minecraft.server.v1_15_R1.PacketPlayOutNamedEntitySpawn;
- import net.minecraft.server.v1_15_R1.PacketPlayOutPlayerInfo;
- import net.minecraft.server.v1_15_R1.PlayerConnection;
- import net.minecraft.server.v1_15_R1.PlayerInteractManager;
- import net.minecraft.server.v1_15_R1.WorldServer;
- public class NPC implements Listener {
- public static List<EntityPlayer> NPC = new ArrayList<EntityPlayer>();
- public static Map<UUID, EntityPlayer> npcPlayers = new HashMap<UUID, EntityPlayer>();
- public static Map<EntityPlayer, Integer> destroyable = new HashMap<EntityPlayer, Integer>();
- public static String texture = "";
- public static void createNPC(Player player) {
- MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
- WorldServer world = ((CraftWorld) Bukkit.getWorld(player.getWorld().getName())).getHandle();
- UUID uuid = UUID.randomUUID();
- GameProfile gameProfile = new GameProfile(uuid, "me");
- EntityPlayer npc = new EntityPlayer(server, world, gameProfile, new PlayerInteractManager(world));
- Location loc = player.getLocation();
- npc.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- // Skins start
- // get npc property map and grab it's textures
- PropertyMap npcMap = gameProfile.getProperties();
- Property npcProperty = npcMap.get("textures").iterator().next();
- // get player's property map and grab it's textures
- GameProfile playerProfile = ((CraftPlayer) player).getHandle().getProfile();
- PropertyMap playerMap = playerProfile.getProperties();
- Property playerProperty = playerMap.get("textures").iterator().next();
- // decode the texture value
- String base64 = playerProperty.getValue();
- String decoded = new String(Base64.decodeBase64(base64));
- texture = decoded;
- String textureValue;
- String textureSignature;
- // remove npc's textures and apply the player's textures to it
- npcMap.remove("textures", npcProperty);
- npcMap.put("textures", new Property("textures", textureValue, textureSignature));
- // Skins end
- addNPCPacket(npc);
- NPC.add(npc);
- npcPlayers.put(player.getUniqueId(), npc);
- destroyable.put(npc, npc.getId());
- }
- public static void addNPCPacket(EntityPlayer npc) {
- for (Player player : Bukkit.getOnlinePlayers()) {
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, npc));
- connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
- connection.sendPacket(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.yaw * 256 / 360)));
- }
- }
- public static void addJoinPacket(Player player) {
- for (EntityPlayer npc : NPC) {
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, npc));
- connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
- connection.sendPacket(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.yaw * 256 / 360)));
- }
- }
- public static void destroyNPCPacket(Player player) {
- EntityPlayer npc = (EntityPlayer) npcPlayers.get(player.getUniqueId());
- PacketPlayOutEntityDestroy removeEntity = new PacketPlayOutEntityDestroy(new int[]{destroyable.get(npc)});
- for (Player p : Bukkit.getOnlinePlayers()) {
- PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
- connection.sendPacket(removeEntity);
- }
- NPC.remove(npc);
- npcPlayers.remove(player.getUniqueId());
- }
- public static void removeTabList(Player player) {
- EntityPlayer npc = (EntityPlayer) npcPlayers.get(player.getUniqueId());
- PacketPlayOutPlayerInfo removeTabList = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, npc);
- for (Player p : Bukkit.getOnlinePlayers()) {
- PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
- connection.sendPacket(removeTabList);
- }
- }
- @EventHandler
- public static void onJoin(PlayerJoinEvent event) {
- if (NPC == null)
- return;
- if (NPC.isEmpty())
- return;
- addJoinPacket(event.getPlayer());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement