Advertisement
Guest User

Untitled

a guest
May 20th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. package de.pyario.system.main;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.entity.Player;
  7. import org.bukkit.event.EventHandler;
  8. import org.bukkit.event.HandlerList;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.inventory.InventoryClickEvent;
  11. import org.bukkit.event.inventory.InventoryCloseEvent;
  12. import org.bukkit.event.player.PlayerQuitEvent;
  13. import org.bukkit.inventory.Inventory;
  14. import org.bukkit.inventory.ItemStack;
  15. import org.bukkit.inventory.meta.ItemMeta;
  16.  
  17. import net.minecraft.server.v1_13_R2.BlockPosition;
  18. import net.minecraft.server.v1_13_R2.ChatMessage;
  19. import net.minecraft.server.v1_13_R2.ContainerAnvil;
  20. import net.minecraft.server.v1_13_R2.EntityHuman;
  21. import net.minecraft.server.v1_13_R2.EntityPlayer;
  22. import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow;
  23.  
  24.  
  25. public class AnvilGUI {
  26. private class AnvilContainer extends ContainerAnvil {
  27. public AnvilContainer(EntityHuman entity){
  28. super(entity.inventory, entity.world,new BlockPosition(0, 0, 0), entity);
  29. }
  30.  
  31. @SuppressWarnings("unused")
  32. public boolean a(EntityHuman entitHuman){
  33. return true;
  34. }
  35. }
  36.  
  37. public enum AnvilSlot {
  38. INPUT_LEFT(0),
  39. INPUT_RIGHT(1),
  40. OUTPUT(2);
  41.  
  42. private int slot;
  43.  
  44. private AnvilSlot(int slot){
  45. this.slot = slot;
  46. }
  47.  
  48. public int getSlot(){
  49. return slot;
  50. }
  51.  
  52. public static AnvilSlot bySlot(int slot){
  53. for(AnvilSlot anvilSlot : values()){
  54. if(anvilSlot.getSlot() == slot){
  55. return anvilSlot;
  56. }
  57. }
  58.  
  59. return null;
  60. }
  61. }
  62.  
  63. public class AnvilClickEvent {
  64. private AnvilSlot slot;
  65.  
  66. private String name;
  67.  
  68. private boolean close = true;
  69. private boolean destroy = true;
  70.  
  71. public AnvilClickEvent(AnvilSlot slot, String name){
  72. this.slot = slot;
  73. this.name = name;
  74. }
  75.  
  76. public AnvilSlot getSlot(){
  77. return slot;
  78. }
  79.  
  80. public String getName(){
  81. return name;
  82. }
  83.  
  84. public boolean getWillClose(){
  85. return close;
  86. }
  87.  
  88. public void setWillClose(boolean close){
  89. this.close = close;
  90. }
  91.  
  92. public boolean getWillDestroy(){
  93. return destroy;
  94. }
  95.  
  96. public void setWillDestroy(boolean destroy){
  97. this.destroy = destroy;
  98. }
  99. }
  100.  
  101. public interface AnvilClickEventHandler {
  102. public void onAnvilClick(AnvilClickEvent event);
  103. }
  104.  
  105. private Player player;
  106.  
  107. private AnvilClickEventHandler handler;
  108.  
  109. private HashMap<AnvilSlot, ItemStack> items = new HashMap<AnvilSlot, ItemStack>();
  110.  
  111. private Inventory inv;
  112.  
  113. private Listener listener;
  114.  
  115. public AnvilGUI(Player player, final AnvilClickEventHandler handler){
  116. this.player = player;
  117. this.handler = handler;
  118.  
  119. this.listener = new Listener(){
  120. @EventHandler
  121. public void onInventoryClick(InventoryClickEvent event){
  122. if(event.getWhoClicked() instanceof Player){
  123. Player clicker = (Player) event.getWhoClicked();
  124.  
  125. if(event.getInventory().equals(inv)){
  126. event.setCancelled(true);
  127.  
  128. ItemStack item = event.getCurrentItem();
  129. int slot = event.getRawSlot();
  130. String name = "";
  131.  
  132. if(item != null){
  133. if(item.hasItemMeta()){
  134. ItemMeta meta = item.getItemMeta();
  135.  
  136. if(meta.hasDisplayName()){
  137. name = meta.getDisplayName();
  138. }
  139. }
  140. }
  141.  
  142. AnvilClickEvent clickEvent = new AnvilClickEvent(AnvilSlot.bySlot(slot), name);
  143.  
  144. handler.onAnvilClick(clickEvent);
  145.  
  146. if(clickEvent.getWillClose()){
  147. event.getWhoClicked().closeInventory();
  148. }
  149.  
  150. if(clickEvent.getWillDestroy()){
  151. destroy();
  152. }
  153. }
  154. }
  155. }
  156.  
  157. @EventHandler
  158. public void onInventoryClose(InventoryCloseEvent event){
  159. if(event.getPlayer() instanceof Player){
  160. Player player = (Player) event.getPlayer();
  161. Inventory inv = event.getInventory();
  162.  
  163. if(inv.equals(AnvilGUI.this.inv)){
  164. inv.clear();
  165. destroy();
  166. }
  167. }
  168. }
  169.  
  170. @EventHandler
  171. public void onPlayerQuit(PlayerQuitEvent event){
  172. if(event.getPlayer().equals(getPlayer())){
  173. destroy();
  174. }
  175. }
  176. };
  177.  
  178. Bukkit.getPluginManager().registerEvents(listener, Main.getInstance()); //Replace with instance of main class
  179. }
  180.  
  181. public Player getPlayer(){
  182. return player;
  183. }
  184.  
  185. public void setSlot(AnvilSlot slot, ItemStack item){
  186. items.put(slot, item);
  187. }
  188.  
  189. public void open(){
  190. EntityPlayer p = ((CraftPlayer) player).getHandle();
  191.  
  192. AnvilContainer container = new AnvilContainer(p);
  193.  
  194. //Set the items to the items from the inventory given
  195. inv = container.getBukkitView().getTopInventory();
  196.  
  197. for(AnvilSlot slot : items.keySet()){
  198. inv.setItem(slot.getSlot(), items.get(slot));
  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, "minecraft:anvil", new ChatMessage("Repairing", new Object[]{}), 0));
  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