Solved How to tell if user clicks top or bottom inventory?

Discussion in 'Plugin Development' started by Laserhog, Nov 24, 2012.

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

    Laserhog

    Hi,
    I've recently been playing around with the Inventory parts of the API and have run into what looks like a little problem where the "InventoryClickEvent" doesn't tell me if they are clicking on the top or bottom part of the inventory, which I have found both have the same numbering sequence (as in the top inventory isn't simply a count up after the slots in the bottom inventory).
    If anyone has some tips or tricks on how to deal with this, or simply wants to point out something I'm overlooking, please do, I welcome it.
     
  2. Offline

    Tzeentchful

    Can't you just do an if statement for the slot id?
    eg:

    Code:
    if(slot >= 28){
    //top
    }else{
    //bottom
    }
     
  3. Offline

    Laserhog

    No.
    Like I said, the top inventory doesn't continue counting up, it simply goes from 0 - (whatever size i make it), as does the bottom inventory, 0 - 26.

    Tzeentchful
    Ok, I believe I have it. All i had to do was use .getRawSlot() instead of .getSlot(). Derp.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 30, 2016
  4. Offline

    Brian_Entei

    I recently came up with the following, which works beautifully:

    Code:java
    1. public String whatInventoryWasClicked(org.bukkit.inventory.InventoryView view, int slot, int rawSlot) {
    2. String rtrn = "UNDETERMINED_" + view.getTopInventory().getType().name() + "_SIZE_" + view.getTopInventory().getSize();
    3. org.bukkit.inventory.Inventory topInv = view.getTopInventory();
    4. //org.bukkit.inventory.Inventory bottomInv = view.getBottomInventory();
    5. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.ANVIL)) {
    6. if(rawSlot >= 0 && rawSlot <= 2) {//Top anvil slots
    7. rtrn = "ANVIL_" + rawSlot;
    8. } else if(rawSlot >= 3 && rawSlot <= 29) {//Inventory
    9. rtrn = "BOTTOM_" + slot;
    10. } else if(rawSlot >= 30 && rawSlot <= 38) {//Hotbar
    11. rtrn = "HOTBAR_" + slot;
    12. }
    13. }
    14. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.BEACON)) {
    15. if(rawSlot == 0) {//Beacon slot
    16. rtrn = "BEACON_" + rawSlot;
    17. } else if(rawSlot >= 1 && rawSlot <= 27) {//Inventory
    18. rtrn = "BOTTOM_" + slot;
    19. } else if(rawSlot >= 28 && rawSlot <= 36) {//Hotbar
    20. rtrn = "HOTBAR_" + slot;
    21. }
    22. }
    23. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.BREWING)) {
    24. if(rawSlot >= 0 && rawSlot <= 3) {//Top brewing slots
    25. rtrn = "BREWING_" + rawSlot;
    26. } else if(rawSlot >= 4 && rawSlot <= 30) {//Inventory
    27. rtrn = "BOTTOM_" + slot;
    28. } else if(rawSlot >= 31 && rawSlot <= 39) {//Hotbar
    29. rtrn = "HOTBAR_" + slot;
    30. }
    31. }
    32. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.CHEST)) {
    33. if(topInv.getSize() == 2) {//Horse inventory(Why didn't they just make another type?)
    34. if(rawSlot >= 0 && rawSlot <= 1) {//Top horse slots
    35. rtrn = "HORSE_" + rawSlot;
    36. } else if(rawSlot >= 2 && rawSlot <= 28) {//Inventory
    37. rtrn = "BOTTOM_" + slot;
    38. } else if(rawSlot >= 29 && rawSlot <= 37) {//Hotbar
    39. rtrn = "HOTBAR_" + slot;
    40. }
    41. } else if(topInv.getSize() == 9) {
    42. if(rawSlot >= 0 && rawSlot <= 8) {//Top chest slots
    43. rtrn = "CHEST_" + rawSlot;
    44. } else if(rawSlot >= 9 && rawSlot <= 35) {//Inventory
    45. rtrn = "BOTTOM_" + slot;
    46. } else if(rawSlot >= 36 && rawSlot <= 44) {//Hotbar
    47. rtrn = "HOTBAR_" + slot;
    48. }
    49. } else if(topInv.getSize() == 18) {
    50. if(rawSlot >= 0 && rawSlot <= 17) {//Top chest slots
    51. rtrn = "CHEST_" + rawSlot;
    52. } else if(rawSlot >= 18 && rawSlot <= 44) {//Inventory
    53. rtrn = "BOTTOM_" + slot;
    54. } else if(rawSlot >= 45 && rawSlot <= 53) {//Hotbar
    55. rtrn = "HOTBAR_" + slot;
    56. }
    57. } else if(topInv.getSize() == 27) {
    58. if(rawSlot >= 0 && rawSlot <= 26) {//Top chest slots
    59. rtrn = "CHEST_" + rawSlot;
    60. } else if(rawSlot >= 27 && rawSlot <= 53) {//Inventory
    61. rtrn = "BOTTOM_" + slot;
    62. } else if(rawSlot >= 54 && rawSlot <= 62) {//Hotbar
    63. rtrn = "HOTBAR_" + slot;
    64. }
    65. } else if(topInv.getSize() == 36) {
    66. if(rawSlot >= 0 && rawSlot <= 35) {//Top chest slots
    67. rtrn = "CHEST_" + rawSlot;
    68. } else if(rawSlot >= 36 && rawSlot <= 62) {//Inventory
    69. rtrn = "BOTTOM_" + slot;
    70. } else if(rawSlot >= 63 && rawSlot <= 71) {//Hotbar
    71. rtrn = "HOTBAR_" + slot;
    72. }
    73. } else if(topInv.getSize() == 45) {
    74. if(rawSlot >= 0 && rawSlot <= 44) {//Top chest slots
    75. rtrn = "CHEST_" + rawSlot;
    76. } else if(rawSlot >= 45 && rawSlot <= 71) {//Inventory
    77. rtrn = "BOTTOM_" + slot;
    78. } else if(rawSlot >= 72 && rawSlot <= 80) {//Hotbar
    79. rtrn = "HOTBAR_" + slot;
    80. }
    81. } else if(topInv.getSize() == 54) {
    82. if(rawSlot >= 0 && rawSlot <= 53) {//Top chest slots
    83. rtrn = "CHEST_" + rawSlot;
    84. } else if(rawSlot >= 54 && rawSlot <= 80) {//Inventory
    85. rtrn = "BOTTOM_" + slot;
    86. } else if(rawSlot >= 81 && rawSlot <= 89) {//Hotbar
    87. rtrn = "HOTBAR_" + slot;
    88. }
    89. }
    90. }
    91. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.CRAFTING)) {
    92. if(rawSlot >= 0 && rawSlot <= 4) {//Top crafting slots
    93. rtrn = "CRAFTING_" + rawSlot;
    94. } else if(rawSlot >= 9 && rawSlot <= 35) {//Inventory
    95. rtrn = "BOTTOM_" + slot;
    96. } else if(rawSlot >= 36 && rawSlot <= 44) {//Hotbar
    97. rtrn = "HOTBAR_" + slot;
    98. } else if(rawSlot >= 5 && rawSlot <= 8) {//Armour
    99. rtrn = "ARMOUR_" + (rawSlot == 5 ? "HELMET" : (rawSlot == 6 ? "CHESTPLATE" : (rawSlot == 7 ? "LEGGINGS" : (rawSlot == 8 ? "BOOTS" : "UNKNOWN"))));
    100. }
    101. }
    102. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.CREATIVE)) {//Not needed, covered by InventoryType.PLAYER
    103. /*if(rawSlot >= && rawSlot <= ) {//Top creative slots
    104. rtrn = "_" + rawSlot;
    105. } else if(rawSlot >= && rawSlot <= ) {//Inventory
    106. rtrn = "BOTTOM_" + slot;
    107. } else if(rawSlot >= && rawSlot <= ) {//Hotbar
    108. rtrn = "HOTBAR_" + slot;
    109. }*/
    110. }
    111. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.DISPENSER)) {
    112. if(rawSlot >= 0 && rawSlot <= 8) {//Top dispenser slots
    113. rtrn = "DISPENSER_" + rawSlot;
    114. } else if(rawSlot >= 9 && rawSlot <= 35) {//Inventory
    115. rtrn = "BOTTOM_" + slot;
    116. } else if(rawSlot >= 36 && rawSlot <= 44) {//Hotbar
    117. rtrn = "HOTBAR_" + slot;
    118. }
    119. }
    120. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.DROPPER)) {
    121. if(rawSlot >= 0 && rawSlot <= 8) {//Top dropper slots
    122. rtrn = "DROPPER_" + rawSlot;
    123. } else if(rawSlot >= 9 && rawSlot <= 35) {//Inventory
    124. rtrn = "BOTTOM_" + slot;
    125. } else if(rawSlot >= 36 && rawSlot <= 44) {//Hotbar
    126. rtrn = "HOTBAR_" + slot;
    127. }
    128. }
    129. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.ENCHANTING)) {
    130. if(rawSlot == 0) {//Enchanting slot
    131. rtrn = "ENCHANTING_" + rawSlot;
    132. } else if(rawSlot >= 1 && rawSlot <= 27) {//Inventory
    133. rtrn = "BOTTOM_" + slot;
    134. } else if(rawSlot >= 28 && rawSlot <= 36) {//Hotbar
    135. rtrn = "HOTBAR_" + slot;
    136. }
    137. }
    138. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.ENDER_CHEST)) {
    139. if(rawSlot >= 0 && rawSlot <= 26) {//Top ender chest slots
    140. rtrn = "ENDERCHEST_" + rawSlot;
    141. } else if(rawSlot >= 27 && rawSlot <= 53) {//Inventory
    142. rtrn = "BOTTOM_" + slot;
    143. } else if(rawSlot >= 54 && rawSlot <= 62) {//Hotbar
    144. rtrn = "HOTBAR_" + slot;
    145. }
    146. }
    147. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.FURNACE)) {
    148. if(rawSlot >= 0 && rawSlot <= 2) {//Top furnace slots
    149. rtrn = "FURNACE_" + rawSlot;
    150. } else if(rawSlot >= 3 && rawSlot <= 29) {//Inventory
    151. rtrn = "BOTTOM_" + slot;
    152. } else if(rawSlot >= 30 && rawSlot <= 38) {//Hotbar
    153. rtrn = "HOTBAR_" + slot;
    154. }
    155. }
    156. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.HOPPER)) {
    157. if(rawSlot >= 0 && rawSlot <= 4) {//Top hopper slots
    158. rtrn = "HOPPER_" + rawSlot;
    159. } else if(rawSlot >= 5 && rawSlot <= 31) {//Inventory
    160. rtrn = "BOTTOM_" + slot;
    161. } else if(rawSlot >= 32 && rawSlot <= 40) {//Hotbar
    162. rtrn = "HOTBAR_" + slot;
    163. }
    164. }
    165. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.MERCHANT)) {
    166. if(rawSlot >= 0 && rawSlot <= 2) {//Top villager slots
    167. rtrn = "MERCHANT_" + rawSlot;
    168. } else if(rawSlot >= 3 && rawSlot <= 29) {//Inventory
    169. rtrn = "BOTTOM_" + slot;
    170. } else if(rawSlot >= 30 && rawSlot <= 38) {//Hotbar
    171. rtrn = "HOTBAR_" + slot;
    172. }
    173. }
    174. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.PLAYER)) {
    175. if(rawSlot >= 0 && rawSlot <= 26) {//Top Player slots
    176. rtrn = "PLAYER_" + rawSlot;
    177. } else if(rawSlot >= 27 && rawSlot <= 53) {//Inventory
    178. rtrn = "BOTTOM_" + slot;
    179. } else if(rawSlot >= 54 && rawSlot <= 62) {//Hotbar
    180. rtrn = "HOTBAR_" + slot;
    181. }
    182. }
    183. if(topInv.getType().equals(org.bukkit.event.inventory.InventoryType.WORKBENCH)) {
    184. if(rawSlot >= 0 && rawSlot <= 9) {//Top crafting slots
    185. rtrn = "WORKBENCH_" + rawSlot;
    186. } else if(rawSlot >= 10 && rawSlot <= 36) {//Inventory
    187. rtrn = "BOTTOM_" + slot;
    188. } else if(rawSlot >= 37 && rawSlot <= 45) {//Hotbar
    189. rtrn = "HOTBAR_" + slot;
    190. }
    191. }
    192. return rtrn;
    193. }
     
Thread Status:
Not open for further replies.

Share This Page