Advertisement
Guest User

Spawn ItemFrame (WITH REFLECTION)

a guest
Jul 27th, 2014
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.96 KB | None | 0 0
  1.     private static String mcPackage = null;
  2.     private static Class classItemFrame = null;
  3.     private static Constructor constructor = null;
  4.     private static Method worldGetHandle = null;
  5.     private static Method worldAddEntity = null;
  6.     private static Method itemFrameGetBukkitEntity = null;
  7.     public static ItemFrame spawnItemFrame(Location loc, BlockFace bf) throws Exception {
  8.         int side = 0;
  9.         if(bf == BlockFace.SOUTH) {
  10.             side = 0;
  11.         } else if(bf == BlockFace.WEST) {
  12.             side = 1;
  13.         } else if(bf == BlockFace.NORTH) {
  14.             side = 2;
  15.         } else if(bf == BlockFace.EAST) {
  16.             side = 3;
  17.         }
  18.         World w = loc.getWorld();
  19.        
  20.         // CACHE CRAFTWORLD METHOD
  21.         if(worldGetHandle == null) worldGetHandle = w.getClass().getMethod("getHandle");
  22.        
  23.         // GET NMS WORLD
  24.         Object mcWorld = worldGetHandle.invoke(w);
  25.        
  26.         // CACHE NMS ELEMENTS
  27.         if(mcPackage == null) mcPackage = mcWorld.getClass().getPackage().getName();
  28.         if(classItemFrame == null) classItemFrame = Class.forName(mcPackage + ".EntityItemFrame");
  29.         if(worldAddEntity == null) worldAddEntity = mcWorld.getClass().getMethod("addEntity", classItemFrame.getSuperclass().getSuperclass());
  30.         if(itemFrameGetBukkitEntity == null) itemFrameGetBukkitEntity = classItemFrame.getMethod("getBukkitEntity");
  31.         if(constructor == null) constructor = classItemFrame.getConstructor(mcWorld.getClass().getSuperclass(), int.class, int.class, int.class, int.class);
  32.        
  33.         // CREATE A NEW ITEMFRAME
  34.         Object mcItemFrame = constructor.newInstance(mcWorld, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), side);
  35.         // ADDS THE ITEMFRAME TO THE WORLD
  36.         worldAddEntity.invoke(mcWorld, mcItemFrame);
  37.         // FINALLY, RETURNS THE BUKKIT ITEMFRAME
  38.         return (ItemFrame)classItemFrame.getMethod("getBukkitEntity").invoke(mcItemFrame);
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement