Advertisement
Guest User

Untitled

a guest
May 1st, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. package me.ghost.API;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.util.List;
  5.  
  6. import org.bukkit.Bukkit;
  7. import org.bukkit.command.CommandSender;
  8. import org.bukkit.command.ConsoleCommandSender;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.permissions.Permissible;
  11. import org.bukkit.permissions.PermissibleBase;
  12.  
  13. public class PermissionsInjector {
  14. @SuppressWarnings({ "unchecked", "rawtypes" })
  15. public static org.bukkit.permissions.Permissible inject(CommandSender sender, org.bukkit.permissions.Permissible newpermissible) {
  16. try {
  17. Field perm = getPermField(sender);
  18. if (perm == null) {
  19. return null;
  20. }
  21. perm.setAccessible(true);
  22. org.bukkit.permissions.Permissible oldpermissible = (org.bukkit.permissions.Permissible) perm.get(sender);
  23. if (newpermissible instanceof PermissibleBase) {
  24. // copy attachments
  25. Field attachments = PermissibleBase.class.getDeclaredField("attachments");
  26. attachments.setAccessible(true);
  27. ((List) attachments.get(newpermissible)).addAll((List) attachments.get(oldpermissible));
  28. }
  29.  
  30. // inject permissible
  31. perm.set(sender, newpermissible);
  32. return oldpermissible;
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. return null;
  37. }
  38.  
  39. public static org.bukkit.permissions.Permissible uninject(CommandSender sender) {
  40. try {
  41. Field perm = getPermField(sender);
  42. if (perm == null) {
  43. return null;
  44. }
  45. perm.setAccessible(true);
  46. org.bukkit.permissions.Permissible permissible = (org.bukkit.permissions.Permissible) perm.get(sender);
  47. if (permissible instanceof Permissible) {
  48. perm.set(sender, ((Permissible) permissible));
  49. return (Permissible) permissible;
  50. }
  51.  
  52. return null;
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. return null;
  57. }
  58.  
  59. public static org.bukkit.permissions.PermissibleBase getPermissible(CommandSender sender) {
  60. try {
  61. Field perm = getPermField(sender);
  62. if (perm == null) {
  63. return null;
  64. }
  65. perm.setAccessible(true);
  66. PermissibleBase permissible = (PermissibleBase) perm.get(sender);
  67.  
  68. return permissible;
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. }
  72. return null;
  73. }
  74.  
  75. private static Field getPermField(CommandSender sender) {
  76. Field perm = null;
  77. try {
  78. if (sender instanceof Player) {
  79. perm = Class.forName(getVersionedClassName("entity.CraftHumanEntity")).getDeclaredField("perm");
  80. } else if (sender instanceof ConsoleCommandSender) {
  81. perm = Class.forName(getVersionedClassName("command.ServerCommandSender")).getDeclaredField("perm");
  82. }
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }
  86. return perm;
  87. }
  88.  
  89. private static String getVersionedClassName(String classname) {
  90. String version;
  91.  
  92. @SuppressWarnings("rawtypes")
  93. Class serverClass = Bukkit.getServer().getClass();
  94. if (!serverClass.getSimpleName().equals("CraftServer")) {
  95. return null;
  96. } else if (serverClass.getName().equals("org.bukkit.craftbukkit.CraftServer")) {
  97. version = ".";
  98. } else {
  99. version = serverClass.getName().substring("org.bukkit.craftbukkit".length());
  100. version = version.substring(0, version.length() - "CraftServer".length());
  101. }
  102.  
  103. return "org.bukkit.craftbukkit" + version + classname;
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement