Advertisement
Guest User

Untitled

a guest
Sep 20th, 2014
1,186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.53 KB | None | 0 0
  1. package me.kingingo.plugin;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import net.minecraft.server.v1_7_R4.ContainerAnvil;
  6. import net.minecraft.server.v1_7_R4.EntityHuman;
  7. import net.minecraft.server.v1_7_R4.EntityPlayer;
  8. import net.minecraft.server.v1_7_R4.PacketPlayOutOpenWindow;
  9.  
  10. import org.bukkit.Bukkit;
  11. import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
  12. import org.bukkit.entity.Player;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.HandlerList;
  15. import org.bukkit.event.Listener;
  16. import org.bukkit.event.inventory.InventoryClickEvent;
  17. import org.bukkit.event.inventory.InventoryCloseEvent;
  18. import org.bukkit.event.player.PlayerQuitEvent;
  19. import org.bukkit.inventory.Inventory;
  20. import org.bukkit.inventory.ItemStack;
  21. import org.bukkit.inventory.meta.ItemMeta;
  22. import org.bukkit.plugin.java.JavaPlugin;
  23.  
  24. public class AnvilGUI {
  25. private class AnvilContainer extends ContainerAnvil {
  26. public AnvilContainer(EntityHuman entity){
  27. super(entity.inventory, entity.world, 0, 0, 0, entity);
  28. }
  29.  
  30. @Override
  31. public boolean a(EntityHuman entityhuman){
  32. return true;
  33. }
  34. }
  35.  
  36. public enum AnvilSlot {
  37. INPUT_LEFT(0),
  38. INPUT_RIGHT(1),
  39. OUTPUT(2);
  40.  
  41. private int slot;
  42.  
  43. private AnvilSlot(int slot){
  44. this.slot = slot;
  45. }
  46.  
  47. public int getSlot(){
  48. return slot;
  49. }
  50.  
  51. public static AnvilSlot bySlot(int slot){
  52. for(AnvilSlot anvilSlot : values()){
  53. if(anvilSlot.getSlot() == slot){
  54. return anvilSlot;
  55. }
  56. }
  57.  
  58. return null;
  59. }
  60. }
  61.  
  62. public class AnvilClickEvent {
  63. private AnvilSlot slot;
  64.  
  65. private String name;
  66.  
  67. private boolean close = true;
  68. private boolean destroy = true;
  69.  
  70. public AnvilClickEvent(AnvilSlot slot, String name){
  71. this.slot = slot;
  72. this.name = name;
  73. }
  74.  
  75. public AnvilSlot getSlot(){
  76. return slot;
  77. }
  78.  
  79. public String getName(){
  80. return name;
  81. }
  82.  
  83. public boolean getWillClose(){
  84. return close;
  85. }
  86.  
  87. public void setWillClose(boolean close){
  88. this.close = close;
  89. }
  90.  
  91. public boolean getWillDestroy(){
  92. return destroy;
  93. }
  94.  
  95. public void setWillDestroy(boolean destroy){
  96. this.destroy = destroy;
  97. }
  98. }
  99.  
  100. public interface AnvilClickEventHandler {
  101. public void onAnvilClick(AnvilClickEvent event);
  102. }
  103.  
  104. private Player player;
  105.  
  106. private AnvilClickEventHandler handler;
  107.  
  108. private HashMap<AnvilSlot, ItemStack> items = new HashMap<AnvilSlot, ItemStack>();
  109.  
  110. private Inventory inv;
  111.  
  112. private Listener listener;
  113.  
  114. public AnvilGUI(Player player, final AnvilClickEventHandler handler,JavaPlugin plugin){
  115. this.player = player;
  116. this.handler = handler;
  117.  
  118. this.listener = new Listener(){
  119. @EventHandler
  120. public void onInventoryClick(InventoryClickEvent event){
  121. if(event.getWhoClicked() instanceof Player){
  122. Player clicker = (Player) event.getWhoClicked();
  123.  
  124. if(event.getInventory().equals(inv)){
  125. event.setCancelled(true);
  126.  
  127. ItemStack item = event.getCurrentItem();
  128. int slot = event.getRawSlot();
  129. String name = "";
  130.  
  131. if(item != null){
  132. if(item.hasItemMeta()){
  133. ItemMeta meta = item.getItemMeta();
  134.  
  135. if(meta.hasDisplayName()){
  136. name = meta.getDisplayName();
  137. }
  138. }
  139. }
  140.  
  141. AnvilClickEvent clickEvent = new AnvilClickEvent(AnvilSlot.bySlot(slot), name);
  142.  
  143. handler.onAnvilClick(clickEvent);
  144.  
  145. if(clickEvent.getWillClose()){
  146. event.getWhoClicked().closeInventory();
  147. }
  148.  
  149. if(clickEvent.getWillDestroy()){
  150. destroy();
  151. }
  152. }
  153. }
  154. }
  155.  
  156. @EventHandler
  157. public void onInventoryClose(InventoryCloseEvent event){
  158. if(event.getPlayer() instanceof Player){
  159. Player player = (Player) event.getPlayer();
  160. Inventory inv = event.getInventory();
  161.  
  162. if(inv.equals(AnvilGUI.this.inv)){
  163. inv.clear();
  164. destroy();
  165. }
  166. }
  167. }
  168.  
  169. @EventHandler
  170. public void onPlayerQuit(PlayerQuitEvent event){
  171. if(event.getPlayer().equals(getPlayer())){
  172. destroy();
  173. }
  174. }
  175. };
  176.  
  177. Bukkit.getPluginManager().registerEvents(listener, plugin); //Replace with instance of main class
  178. }
  179.  
  180. public Player getPlayer(){
  181. return player;
  182. }
  183.  
  184. public void setSlot(AnvilSlot slot, ItemStack item){
  185. items.put(slot, item);
  186. }
  187.  
  188. public void open(){
  189. EntityPlayer p = ((CraftPlayer) player).getHandle();
  190.  
  191. AnvilContainer container = new AnvilContainer(p);
  192.  
  193. //Set the items to the items from the inventory given
  194. inv = container.getBukkitView().getTopInventory();
  195.  
  196. for(AnvilSlot slot : items.keySet()){
  197. inv.setItem(slot.getSlot(), items.get(slot));
  198. }
  199.  
  200.  
  201. //Counter stuff that the game uses to keep track of inventories
  202. int c = p.nextContainerCounter();
  203.  
  204. //Send the packet
  205. p.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, 8, "Repairing", 9, true));
  206.  
  207. //Set their active container to the container
  208. p.activeContainer = container;
  209.  
  210. //Set their active container window id to that counter stuff
  211. p.activeContainer.windowId = c;
  212.  
  213. //Add the slot listener
  214. p.activeContainer.addSlotListener(p);
  215. }
  216.  
  217. public void destroy(){
  218. player = null;
  219. handler = null;
  220. items = null;
  221.  
  222. HandlerList.unregisterAll(listener);
  223.  
  224. listener = null;
  225. }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement