Advertisement
Guest User

Untitled

a guest
May 26th, 2015
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.51 KB | None | 0 0
  1. package me.fiftx.UtilPlug.Features.Beta;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Modifier;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.HashMap;
  8. import java.util.HashSet;
  9. import java.util.List;
  10. import java.util.Set;
  11. import java.util.UUID;
  12. import java.util.concurrent.ExecutorService;
  13. import java.util.concurrent.Executors;
  14.  
  15. import me.fiftx.UtilPlug.Core;
  16. import me.fiftx.UtilPlug.Main.GameProfileBuilder;
  17. import me.fiftx.UtilPlug.Main.Plugins;
  18. import net.minecraft.server.v1_8_R1.EntityPlayer;
  19. import net.minecraft.server.v1_8_R1.EnumPlayerInfoAction;
  20. import net.minecraft.server.v1_8_R1.PacketPlayOutEntityDestroy;
  21. import net.minecraft.server.v1_8_R1.PacketPlayOutNamedEntitySpawn;
  22. import net.minecraft.server.v1_8_R1.PacketPlayOutPlayerInfo;
  23. import net.minecraft.server.v1_8_R1.PlayerConnection;
  24. import net.minecraft.server.v1_8_R1.PlayerInfoData;
  25.  
  26. import org.bukkit.Bukkit;
  27. import org.bukkit.Location;
  28. import org.bukkit.Material;
  29. import org.bukkit.block.Block;
  30. import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
  31. import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage;
  32. import org.bukkit.entity.Entity;
  33. import org.bukkit.entity.Fireball;
  34. import org.bukkit.entity.Player;
  35. import org.bukkit.event.Event.Result;
  36. import org.bukkit.event.block.BlockBreakEvent;
  37. import org.bukkit.event.block.BlockPlaceEvent;
  38. import org.bukkit.event.inventory.InventoryClickEvent;
  39. import org.bukkit.event.player.PlayerDropItemEvent;
  40. import org.bukkit.event.player.PlayerInteractEvent;
  41. import org.bukkit.event.player.PlayerPickupItemEvent;
  42. import org.bukkit.inventory.Inventory;
  43. import org.bukkit.inventory.ItemStack;
  44. import org.bukkit.inventory.PlayerInventory;
  45. import org.bukkit.inventory.meta.SkullMeta;
  46. import org.bukkit.potion.PotionEffect;
  47. import org.bukkit.potion.PotionEffectType;
  48.  
  49. import com.mojang.authlib.GameProfile;
  50.  
  51. public class Herobrine {
  52.  
  53.     private static Field modifiers = getField(Field.class, "modifiers");
  54.     private static Field playerUuidField = getField(PacketPlayOutNamedEntitySpawn.class, "b");
  55.     private static Field actionField = getField(PacketPlayOutPlayerInfo.class, "a");
  56.     private static Field dataField = getField(PacketPlayOutPlayerInfo.class, "b");
  57.     private static Field nameField = getField(GameProfile.class, "name");
  58.     private static Field getField(Class<?> clazz, String name) {
  59.        try {
  60.           Field field = clazz.getDeclaredField(name);
  61.           field.setAccessible(true);
  62.          
  63.           if (Modifier.isFinal(field.getModifiers())) {
  64.              modifiers.set(field, field.getModifiers() & ~Modifier.FINAL);
  65.           }
  66.          
  67.           return field;
  68.        } catch (Exception e) {
  69.           e.printStackTrace();
  70.        }
  71.        return null;
  72.     }
  73.     private static PacketPlayOutPlayerInfo setInfo(PacketPlayOutPlayerInfo packet, EnumPlayerInfoAction action, PlayerInfoData... data) {
  74.         try {
  75.             actionField.set(packet, action);
  76.             dataField.set(packet, Arrays.asList(data));
  77.         } catch (Exception e) {
  78.             e.printStackTrace();
  79.         }
  80.         return packet;
  81.     }
  82.     private static ExecutorService pool = Executors.newCachedThreadPool();
  83.     public static boolean active = false;
  84.    
  85.     private static HashMap<UUID, GameProfile> fakes = new HashMap<>();
  86.     public static Player playerOri;
  87.     private static String nameOri;
  88.     private static Location keep;
  89.    
  90.     public static boolean startHerobrine(Player p){
  91.         if(active) return false;
  92.         active = !active;
  93.         playerOri = p;
  94.         nameOri = p.getName();
  95.         pool.execute(new Runnable() {
  96.             @Override
  97.             public void run(){
  98.                 try {
  99.                     GameProfile prof = GameProfileBuilder.fetch(UUID.fromString("f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2"), false);
  100.                     nameField.set(prof, "Herobrine");
  101.                    
  102.                     fakes.put(p.getUniqueId(), prof);
  103.                    
  104.                     Plugins.esse.getUser(playerOri).setGodModeEnabled(true);
  105.                    
  106.                     setupInterface();
  107.                    
  108.                     EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
  109.                    
  110.                     PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  111.                    
  112.                     PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
  113.                     setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, entity.getProfile(), -1, null, null));
  114.                    
  115.                     PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  116.                     setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString("Herobrine")[0]));
  117.                    
  118.                     PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
  119.                     playerUuidField.set(spawn, prof.getId());
  120.                    
  121.                     List<Player> players = new ArrayList<>();
  122.                     players.addAll(Bukkit.getOnlinePlayers());
  123.                     synchronized (players) {
  124.                        for (Player player : players) {
  125.                           if (player == playerOri) continue;
  126.                          
  127.                           PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  128.                          
  129.                           connection.sendPacket(despawn);
  130.                           connection.sendPacket(removeProfile);
  131.                        }
  132.                     }
  133.                    
  134.                     synchronized (this) {
  135.                            wait(50L);                  
  136.                         }
  137.                         synchronized (players) {
  138.                            for (Player player : players) {
  139.                               if (player == playerOri) continue;
  140.                              
  141.                               PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  142.                              
  143.                               connection.sendPacket(info);
  144.                               connection.sendPacket(spawn);
  145.                            }
  146.                         }
  147.                     keep = playerOri.getLocation();
  148.                     Bukkit.getScheduler().runTask(Core.getPlugin(Core.class), new Runnable(){
  149.                         @Override
  150.                         public void run(){
  151.                             playerOri.teleport(playerOri.getLocation().add(1000, 1000, 1000));
  152.                         }
  153.                     });
  154.                     Bukkit.getScheduler().runTaskLater(Core.getPlugin(Core.class), new Runnable(){
  155.                         @Override
  156.                         public void run(){
  157.                             playerOri.teleport(keep);
  158.                             playerOri.getWorld().refreshChunk(playerOri.getLocation().getChunk().getX(), playerOri.getLocation().getChunk().getZ());
  159.                         }
  160.                     }, 20L);
  161.                 } catch(Exception e){
  162.                     e.printStackTrace();
  163.                 }
  164.             }
  165.         });
  166.         return true;
  167.     }
  168.     public static boolean addPlayer(Player p){
  169.         if(!active) return false;
  170.  
  171.         pool.execute(new Runnable() {
  172.             @Override
  173.             public void run(){
  174.                 try {
  175.                     GameProfile prof = GameProfileBuilder.fetch(UUID.fromString("f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2"), false);
  176.                     nameField.set(prof, "Herobrine");
  177.                    
  178.                     EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
  179.                    
  180.                     PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  181.                    
  182.                     PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
  183.                     setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, entity.getProfile(), -1, null, null));
  184.                    
  185.                     PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  186.                     setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString("Herobrine")[0]));
  187.                    
  188.                     PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
  189.                     playerUuidField.set(spawn, prof.getId());
  190.                    
  191.                     PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
  192.                          
  193.                     connection.sendPacket(despawn);
  194.                     connection.sendPacket(removeProfile);
  195.                    
  196.                     synchronized (this) {
  197.                            wait(50L);                  
  198.                         }
  199.                              
  200.                         connection.sendPacket(info);
  201.                         connection.sendPacket(spawn);                          
  202.                 } catch(Exception e){
  203.                     e.printStackTrace();
  204.                 }
  205.             }
  206.         });
  207.         return true;
  208.     }
  209.    
  210.     public static boolean stopHerobrine(){
  211.         if(!active) return false;
  212.         active = !active;
  213.         pool.execute(new Runnable() {
  214.             @Override
  215.             public void run(){
  216.                 try {
  217.                     GameProfile prof = fakes.get(playerOri.getUniqueId());
  218.                     nameField.set(prof, nameOri);
  219.                     EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
  220.                    
  221.                    
  222.                     PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  223.                    
  224.                     PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
  225.                     setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, prof, -1, null, null));
  226.                    
  227.                     PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  228.                     setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, entity.getProfile(), entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString(nameOri)[0]));
  229.                    
  230.                     PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
  231.                     playerUuidField.set(spawn, entity.getUniqueID());
  232.                    
  233.                     Plugins.esse.getUser(playerOri).setGodModeEnabled(false);
  234.                    
  235.                     List<Player> players = new ArrayList<>();
  236.                     players.addAll(Bukkit.getOnlinePlayers());
  237.                     synchronized (players) {
  238.                        for (Player player : players) {
  239.                           if (player == playerOri) continue;
  240.                          
  241.                           PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  242.                          
  243.                           connection.sendPacket(despawn);
  244.                           connection.sendPacket(removeProfile);
  245.                        }
  246.                     }
  247.                    
  248.                     synchronized (this) {
  249.                            wait(50L);                  
  250.                         }
  251.                         synchronized (players) {
  252.                            for (Player player : players) {
  253.                               if (player == playerOri) continue;
  254.                              
  255.                               PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
  256.                              
  257.                               connection.sendPacket(info);
  258.                               connection.sendPacket(spawn);
  259.                            }
  260.                         }
  261.                         keep = playerOri.getLocation();
  262.                         Bukkit.getScheduler().runTask(Core.getPlugin(Core.class), new Runnable(){
  263.                             @Override
  264.                             public void run(){
  265.                                 playerOri.teleport(playerOri.getLocation().add(1000, 1000, 1000));
  266.                                 playerOri.getInventory().clear();
  267.                             }
  268.                         });
  269.                         Bukkit.getScheduler().runTaskLater(Core.getPlugin(Core.class), new Runnable(){
  270.                             @Override
  271.                             public void run(){
  272.                                 playerOri.teleport(keep);
  273.                                 playerOri.getWorld().refreshChunk(playerOri.getLocation().getChunk().getX(), playerOri.getLocation().getChunk().getZ());
  274.                                 keep = null;
  275.                                 fakes.clear();
  276.                                 playerOri = null;
  277.                             }
  278.                         }, 20L);
  279.                 } catch(Exception e){
  280.                     e.printStackTrace();
  281.                 }
  282.             }
  283.         });
  284.         return true;
  285.     }
  286.  
  287.     private static void setupInterface(){
  288.         PlayerInventory i = playerOri.getInventory();
  289.         i.clear();
  290.         i.setItem(0, new ItemStack(Material.STICK));
  291.         i.setItem(1, new ItemStack(Material.BLAZE_ROD));
  292.         i.setItem(2, new ItemStack(Material.TNT));
  293.         i.setItem(3, new ItemStack(Material.PAPER));
  294.         i.setItem(9, new ItemStack(Material.SKULL_ITEM, 1, (short)3));
  295.         i.setItem(27,new ItemStack(Material.ARROW));
  296.     }
  297.    
  298.     public static void inventoryHandler(InventoryClickEvent e){
  299.         if(e.getWhoClicked() instanceof Player){
  300.             Player p = (Player) e.getWhoClicked();
  301.             if(p == playerOri){
  302.                 e.setCancelled(true);
  303.                 e.setResult(Result.DENY);
  304.                 p.closeInventory();
  305.                 if(e.getInventory().getTitle() != null && e.getInventory().getTitle().equals("Herobrine Teleport")){
  306.                     if(e.getCurrentItem().getType() == Material.SKULL_ITEM){
  307.                         SkullMeta meta = (SkullMeta) e.getCurrentItem().getItemMeta();
  308.                         String name = meta.getOwner();
  309.                         if(name.equals(playerOri.getName())) return;
  310.                         p.teleport(Bukkit.getPlayerExact(name));
  311.                     }
  312.                 } else if(e.getInventory().getHolder() == playerOri){
  313.                     int slot = e.getSlot();
  314.                     switch(slot) {
  315.                         case 9:
  316.                             Inventory i = p.getServer().createInventory(null, 27, "Herobrine Teleport");
  317.                             for(Player player : Bukkit.getOnlinePlayers()){
  318.                                 ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short)3);
  319.                                 SkullMeta meta = (SkullMeta) skull.getItemMeta();
  320.                                 meta.setOwner(player.getName());
  321.                                 skull.setItemMeta(meta);
  322.                                 i.addItem(skull);
  323.                             }
  324.                             p.openInventory(i);
  325.                             break;
  326.                         case 27:
  327.                             for(Entity entity : p.getNearbyEntities(20, 20, 20)){
  328.                                 entity.setVelocity(entity.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(4D).setY(1.2D));
  329.                             }
  330.                             break;
  331.                     }
  332.                 }
  333.             }
  334.         }
  335.     }
  336.     public static void interactHandler(PlayerInteractEvent e){
  337.         if(e.hasItem() && e.getPlayer() == playerOri){
  338.             ItemStack i = e.getItem();
  339.             Player p = e.getPlayer();
  340.             if(i.getType() == Material.STICK){
  341.                 Set<Material> mat = new HashSet<>();
  342.                 mat.add(Material.AIR);
  343.                 Block b = p.getTargetBlock(mat, 40);
  344.                 b.getWorld().strikeLightningEffect(b.getLocation());
  345.             } else if(i.getType() == Material.BLAZE_ROD){;
  346.                 Set<Material> mat = new HashSet<>();
  347.                 mat.add(Material.AIR);
  348.                 Block b = p.getTargetBlock(mat, 40);
  349.                 Fireball ball = (Fireball) p.launchProjectile(Fireball.class, b.getLocation().toVector().subtract(p.getLocation().toVector()).normalize());
  350.                 ball.setBounce(false);
  351.                 ball.setIsIncendiary(false);
  352.                 ball.setYield(0.0F);
  353.             } else if(i.getType() == Material.TNT){
  354.                 p.getWorld().createExplosion(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), 5, false, false);
  355.             } else if(i.getType() == Material.PAPER){
  356.                 if(p.hasPotionEffect(PotionEffectType.INVISIBILITY)){
  357.                     p.removePotionEffect(PotionEffectType.INVISIBILITY);
  358.                 } else {
  359.                     p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 9999999, 3, true, false), true);
  360.                 }
  361.             }
  362.         }
  363.     }
  364.     public static void dropHandler(PlayerDropItemEvent e){
  365.         if(playerOri == e.getPlayer()) e.setCancelled(true);
  366.     }
  367.     public static void pickupHandler(PlayerPickupItemEvent e){
  368.         if(playerOri == e.getPlayer()) e.setCancelled(true);
  369.     }
  370.     public static void placeHandler(BlockPlaceEvent e){
  371.         if(e.getPlayer() == playerOri) e.setCancelled(true);
  372.     }
  373.     public static void breakHandler(BlockBreakEvent e){
  374.         if(e.getPlayer() == playerOri) e.setCancelled(true);
  375.     }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement