Advertisement
Guest User

Untitled

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