GUI inventory block

Discussion in 'Plugin Development' started by ThePluginMaker, Jun 25, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    ThePluginMaker

    How could i make it so in a gui called "Bar" that you can't edit your inventory?
     
  2. Offline

    Gater12

    ThePluginMaker
    InventoryClickEvent?

    Show Spoiler
    Also the code in your sig won't compile #js
     
  3. Offline

    ThePluginMaker

    For example
    Code:java
    1. package me.MineStomp;
    2.  
    3. import net.milkbowl.vault.economy.EconomyResponse;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.inventory.InventoryClickEvent;
    11. import org.bukkit.inventory.ItemStack;
    12.  
    13. public class Click
    14. implements Listener
    15. {
    16. @SuppressWarnings("deprecation")
    17. @EventHandler
    18. public void drinkSelect(InventoryClickEvent event)
    19. {
    20. final Player p = (Player)event.getWhoClicked();
    21. if (event.getInventory().getName().equalsIgnoreCase("Bar"))
    22. if (event.getSlot() == 0) {
    23. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot1"));
    24. if (r.transactionSuccess()) {
    25. final ItemStack item = event.getInventory().getItem(0);
    26. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    27. p.closeInventory();
    28. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    29. {
    30. public void run() {
    31. p.getInventory().addItem(new ItemStack[] { item });
    32. p.updateInventory();
    33. }
    34. }
    35. , 1L);
    36. } else {
    37. p.closeInventory();
    38. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    39. }
    40. } else if (event.getSlot() == 1) {
    41. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot2"));
    42. if (r.transactionSuccess()) {
    43. final ItemStack item = event.getInventory().getItem(1);
    44. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    45. p.closeInventory();
    46. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    47. {
    48. public void run() {
    49. p.getInventory().addItem(new ItemStack[] { item });
    50. p.updateInventory();
    51. }
    52. }
    53. , 1L);
    54. } else {
    55. p.closeInventory();
    56. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    57. }
    58. } else if (event.getSlot() == 2) {
    59. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot3"));
    60. if (r.transactionSuccess()) {
    61. final ItemStack item = event.getInventory().getItem(2);
    62. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    63. p.closeInventory();
    64. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    65. {
    66. public void run() {
    67. p.getInventory().addItem(new ItemStack[] { item });
    68. p.updateInventory();
    69. }
    70. }
    71. , 1L);
    72. } else {
    73. p.closeInventory();
    74. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    75. }
    76. } else if (event.getSlot() == 3) {
    77. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot4"));
    78. if (r.transactionSuccess()) {
    79. final ItemStack item = event.getInventory().getItem(3);
    80. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    81. p.closeInventory();
    82.  
    83. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    84. {
    85. public void run() {
    86. p.getInventory().addItem(new ItemStack[] { item });
    87. p.updateInventory();
    88. }
    89. }
    90. , 1L);
    91. } else {
    92. p.closeInventory();
    93. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    94. }
    95. } else if (event.getSlot() == 4) {
    96. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot5"));
    97. if (r.transactionSuccess()) {
    98. final ItemStack item = event.getInventory().getItem(4);
    99. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    100. p.closeInventory();
    101. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    102. {
    103. public void run() {
    104. p.getInventory().addItem(new ItemStack[] { item });
    105. p.updateInventory();
    106. }
    107. }
    108. , 1L);
    109. } else {
    110. p.closeInventory();
    111. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    112. }
    113. } else if (event.getSlot() == 5) {
    114. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot6"));
    115. if (r.transactionSuccess()) {
    116. final ItemStack item = event.getInventory().getItem(5);
    117. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    118. p.closeInventory();
    119. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    120. {
    121. public void run() {
    122. p.getInventory().addItem(new ItemStack[] { item });
    123. p.updateInventory();
    124. }
    125. }
    126. , 1L);
    127. } else {
    128. p.closeInventory();
    129. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    130. }
    131. } else if (event.getSlot() == 6) {
    132. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot7"));
    133. if (r.transactionSuccess()) {
    134. final ItemStack item = event.getInventory().getItem(6);
    135. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    136. p.closeInventory();
    137. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    138. {
    139. public void run() {
    140. p.getInventory().addItem(new ItemStack[] { item });
    141. p.updateInventory();
    142. }
    143. }
    144. , 1L);
    145. } else {
    146. p.closeInventory();
    147. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    148. }
    149. } else if (event.getSlot() == 7) {
    150. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot8"));
    151. if (r.transactionSuccess()) {
    152. final ItemStack item = event.getInventory().getItem(7);
    153. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    154. p.closeInventory();
    155. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    156. {
    157. public void run() {
    158. p.getInventory().addItem(new ItemStack[] { item });
    159. p.updateInventory();
    160. }
    161. }
    162. , 1L);
    163. } else {
    164. p.closeInventory();
    165. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    166. }
    167. } else if (event.getSlot() == 8) {
    168. EconomyResponse r = Main.economy.withdrawPlayer(p.getName(), Main.plugin.getConfig().getDouble("prices.slots.slot9"));
    169. if (r.transactionSuccess()) {
    170. final ItemStack item = event.getInventory().getItem(8);
    171. p.sendMessage(String.format(ChatColor.GREEN + "§lYou purchased a " + item.getItemMeta().getDisplayName() + " §a§lfor %s", new Object[] { Main.economy.format(r.amount) }));
    172. p.closeInventory();
    173. Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable()
    174. {
    175. public void run() {
    176. p.getInventory().addItem(new ItemStack[] { item });
    177. p.updateInventory();
    178. }
    179. }
    180. , 1L);
    181. } else {
    182. p.closeInventory();
    183. p.sendMessage(ChatColor.RED + "There was a problem with the transaction!");
    184. }
    185. } else {
    186. p.closeInventory();
    187. }
    188. }
    189. }


    This is my code, well for the click event, what happens is when i click for example in slot 1 in my inventory it'll buy the item 1 in my GUI, so i want it so you can't edit your inventory at all while the GUI "Bar" is open
     
  4. Offline

    Gater12

  5. Offline

    ThePluginMaker

    Gater12
    How would i cancel the event if i click in my inventory and not the GUI?
     
  6. Offline

    desht

    event.getView().getTopInventory() is the upper inventory in this case, and event.getView().getBottomInventory() is the bottom inventory (the player's inventory). So if event.getRawSlot() > event.getView().getTopInventory().getSize(), then the click must have been in the player's inventory.

    You also need to catch and handle the InventoryDragEvent, otherwise players will be able to click-drag items in their inventory. For this event, multiple slots will be returned by getRawSlots(); you should cancel the event if any of them are in the player's inventory, or perhaps just cancel the event in any case (item dragging in a shop GUI doesn't make much sense).
     
Thread Status:
Not open for further replies.

Share This Page