Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.fiftx.UtilPlug.Features.Beta;
- import java.lang.reflect.Field;
- import java.lang.reflect.Modifier;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- import java.util.UUID;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import me.fiftx.UtilPlug.Core;
- import me.fiftx.UtilPlug.Main.GameProfileBuilder;
- import me.fiftx.UtilPlug.Main.Plugins;
- import net.minecraft.server.v1_8_R1.EntityPlayer;
- import net.minecraft.server.v1_8_R1.EnumPlayerInfoAction;
- import net.minecraft.server.v1_8_R1.PacketPlayOutEntityDestroy;
- 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.PlayerInfoData;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
- import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.Fireball;
- import org.bukkit.entity.Player;
- import org.bukkit.event.Event.Result;
- import org.bukkit.event.block.BlockBreakEvent;
- import org.bukkit.event.block.BlockPlaceEvent;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.player.PlayerDropItemEvent;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.event.player.PlayerPickupItemEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.PlayerInventory;
- import org.bukkit.inventory.meta.SkullMeta;
- import org.bukkit.potion.PotionEffect;
- import org.bukkit.potion.PotionEffectType;
- import com.mojang.authlib.GameProfile;
- public class Herobrine {
- private static Field modifiers = getField(Field.class, "modifiers");
- private static Field playerUuidField = getField(PacketPlayOutNamedEntitySpawn.class, "b");
- private static Field actionField = getField(PacketPlayOutPlayerInfo.class, "a");
- private static Field dataField = getField(PacketPlayOutPlayerInfo.class, "b");
- private static Field nameField = getField(GameProfile.class, "name");
- private static Field getField(Class<?> clazz, String name) {
- try {
- Field field = clazz.getDeclaredField(name);
- field.setAccessible(true);
- if (Modifier.isFinal(field.getModifiers())) {
- modifiers.set(field, field.getModifiers() & ~Modifier.FINAL);
- }
- return field;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- private static PacketPlayOutPlayerInfo setInfo(PacketPlayOutPlayerInfo packet, EnumPlayerInfoAction action, PlayerInfoData... data) {
- try {
- actionField.set(packet, action);
- dataField.set(packet, Arrays.asList(data));
- } catch (Exception e) {
- e.printStackTrace();
- }
- return packet;
- }
- private static ExecutorService pool = Executors.newCachedThreadPool();
- public static boolean active = false;
- private static HashMap<UUID, GameProfile> fakes = new HashMap<>();
- public static Player playerOri;
- private static String nameOri;
- private static Location keep;
- public static boolean startHerobrine(Player p){
- if(active) return false;
- active = !active;
- playerOri = p;
- nameOri = p.getName();
- pool.execute(new Runnable() {
- @Override
- public void run(){
- try {
- GameProfile prof = GameProfileBuilder.fetch(UUID.fromString("f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2"), false);
- nameField.set(prof, "Herobrine");
- fakes.put(p.getUniqueId(), prof);
- Plugins.esse.getUser(playerOri).setGodModeEnabled(true);
- setupInterface();
- EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
- PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
- PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
- setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, entity.getProfile(), -1, null, null));
- PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
- setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString("Herobrine")[0]));
- PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
- playerUuidField.set(spawn, prof.getId());
- List<Player> players = new ArrayList<>();
- players.addAll(Bukkit.getOnlinePlayers());
- synchronized (players) {
- for (Player player : players) {
- if (player == playerOri) continue;
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(despawn);
- connection.sendPacket(removeProfile);
- }
- }
- synchronized (this) {
- wait(50L);
- }
- synchronized (players) {
- for (Player player : players) {
- if (player == playerOri) continue;
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(info);
- connection.sendPacket(spawn);
- }
- }
- keep = playerOri.getLocation();
- Bukkit.getScheduler().runTask(Core.getPlugin(Core.class), new Runnable(){
- @Override
- public void run(){
- playerOri.teleport(playerOri.getLocation().add(1000, 1000, 1000));
- }
- });
- Bukkit.getScheduler().runTaskLater(Core.getPlugin(Core.class), new Runnable(){
- @Override
- public void run(){
- playerOri.teleport(keep);
- playerOri.getWorld().refreshChunk(playerOri.getLocation().getChunk().getX(), playerOri.getLocation().getChunk().getZ());
- }
- }, 20L);
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- });
- return true;
- }
- public static boolean addPlayer(Player p){
- if(!active) return false;
- pool.execute(new Runnable() {
- @Override
- public void run(){
- try {
- GameProfile prof = GameProfileBuilder.fetch(UUID.fromString("f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2"), false);
- nameField.set(prof, "Herobrine");
- EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
- PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
- PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
- setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, entity.getProfile(), -1, null, null));
- PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
- setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, prof, entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString("Herobrine")[0]));
- PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
- playerUuidField.set(spawn, prof.getId());
- PlayerConnection connection = ((CraftPlayer) p).getHandle().playerConnection;
- connection.sendPacket(despawn);
- connection.sendPacket(removeProfile);
- synchronized (this) {
- wait(50L);
- }
- connection.sendPacket(info);
- connection.sendPacket(spawn);
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- });
- return true;
- }
- public static boolean stopHerobrine(){
- if(!active) return false;
- active = !active;
- pool.execute(new Runnable() {
- @Override
- public void run(){
- try {
- GameProfile prof = fakes.get(playerOri.getUniqueId());
- nameField.set(prof, nameOri);
- EntityPlayer entity = ((CraftPlayer) playerOri).getHandle();
- PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
- PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
- setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER, new PlayerInfoData(removeProfile, prof, -1, null, null));
- PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
- setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, new PlayerInfoData(info, entity.getProfile(), entity.ping, entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString(nameOri)[0]));
- PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
- playerUuidField.set(spawn, entity.getUniqueID());
- Plugins.esse.getUser(playerOri).setGodModeEnabled(false);
- List<Player> players = new ArrayList<>();
- players.addAll(Bukkit.getOnlinePlayers());
- synchronized (players) {
- for (Player player : players) {
- if (player == playerOri) continue;
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(despawn);
- connection.sendPacket(removeProfile);
- }
- }
- synchronized (this) {
- wait(50L);
- }
- synchronized (players) {
- for (Player player : players) {
- if (player == playerOri) continue;
- PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
- connection.sendPacket(info);
- connection.sendPacket(spawn);
- }
- }
- keep = playerOri.getLocation();
- Bukkit.getScheduler().runTask(Core.getPlugin(Core.class), new Runnable(){
- @Override
- public void run(){
- playerOri.teleport(playerOri.getLocation().add(1000, 1000, 1000));
- playerOri.getInventory().clear();
- }
- });
- Bukkit.getScheduler().runTaskLater(Core.getPlugin(Core.class), new Runnable(){
- @Override
- public void run(){
- playerOri.teleport(keep);
- playerOri.getWorld().refreshChunk(playerOri.getLocation().getChunk().getX(), playerOri.getLocation().getChunk().getZ());
- keep = null;
- fakes.clear();
- playerOri = null;
- }
- }, 20L);
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- });
- return true;
- }
- private static void setupInterface(){
- PlayerInventory i = playerOri.getInventory();
- i.clear();
- i.setItem(0, new ItemStack(Material.STICK));
- i.setItem(1, new ItemStack(Material.BLAZE_ROD));
- i.setItem(2, new ItemStack(Material.TNT));
- i.setItem(3, new ItemStack(Material.PAPER));
- i.setItem(9, new ItemStack(Material.SKULL_ITEM, 1, (short)3));
- i.setItem(27,new ItemStack(Material.ARROW));
- }
- public static void inventoryHandler(InventoryClickEvent e){
- if(e.getWhoClicked() instanceof Player){
- Player p = (Player) e.getWhoClicked();
- if(p == playerOri){
- e.setCancelled(true);
- e.setResult(Result.DENY);
- p.closeInventory();
- if(e.getInventory().getTitle() != null && e.getInventory().getTitle().equals("Herobrine Teleport")){
- if(e.getCurrentItem().getType() == Material.SKULL_ITEM){
- SkullMeta meta = (SkullMeta) e.getCurrentItem().getItemMeta();
- String name = meta.getOwner();
- if(name.equals(playerOri.getName())) return;
- p.teleport(Bukkit.getPlayerExact(name));
- }
- } else if(e.getInventory().getHolder() == playerOri){
- int slot = e.getSlot();
- switch(slot) {
- case 9:
- Inventory i = p.getServer().createInventory(null, 27, "Herobrine Teleport");
- for(Player player : Bukkit.getOnlinePlayers()){
- ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short)3);
- SkullMeta meta = (SkullMeta) skull.getItemMeta();
- meta.setOwner(player.getName());
- skull.setItemMeta(meta);
- i.addItem(skull);
- }
- p.openInventory(i);
- break;
- case 27:
- for(Entity entity : p.getNearbyEntities(20, 20, 20)){
- entity.setVelocity(entity.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(4D).setY(1.2D));
- }
- break;
- }
- }
- }
- }
- }
- public static void interactHandler(PlayerInteractEvent e){
- if(e.hasItem() && e.getPlayer() == playerOri){
- ItemStack i = e.getItem();
- Player p = e.getPlayer();
- if(i.getType() == Material.STICK){
- Set<Material> mat = new HashSet<>();
- mat.add(Material.AIR);
- Block b = p.getTargetBlock(mat, 40);
- b.getWorld().strikeLightningEffect(b.getLocation());
- } else if(i.getType() == Material.BLAZE_ROD){;
- Set<Material> mat = new HashSet<>();
- mat.add(Material.AIR);
- Block b = p.getTargetBlock(mat, 40);
- Fireball ball = (Fireball) p.launchProjectile(Fireball.class, b.getLocation().toVector().subtract(p.getLocation().toVector()).normalize());
- ball.setBounce(false);
- ball.setIsIncendiary(false);
- ball.setYield(0.0F);
- } else if(i.getType() == Material.TNT){
- p.getWorld().createExplosion(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), 5, false, false);
- } else if(i.getType() == Material.PAPER){
- if(p.hasPotionEffect(PotionEffectType.INVISIBILITY)){
- p.removePotionEffect(PotionEffectType.INVISIBILITY);
- } else {
- p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 9999999, 3, true, false), true);
- }
- }
- }
- }
- public static void dropHandler(PlayerDropItemEvent e){
- if(playerOri == e.getPlayer()) e.setCancelled(true);
- }
- public static void pickupHandler(PlayerPickupItemEvent e){
- if(playerOri == e.getPlayer()) e.setCancelled(true);
- }
- public static void placeHandler(BlockPlaceEvent e){
- if(e.getPlayer() == playerOri) e.setCancelled(true);
- }
- public static void breakHandler(BlockBreakEvent e){
- if(e.getPlayer() == playerOri) e.setCancelled(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement