Custom inventory is not player specific.

Discussion in 'Plugin Development' started by wasabii, Aug 28, 2014.

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

    wasabii

    I have a problem with creating a custom gui inventory.

    The goal of this plugin is to allow a player, if they have sufficient money, to purchase kit upgrades.

    Currently when player 1 purchases a kit upgrade, player 2 does not receive an upgrade change in the config,yml, which is correct. However, the red Stained_Clay of player 2 does change to green (unlocked state) even though they did not purchase the upgrade and player 1 purchased it.

    What am I doing wrong? Thanks

    Code:java
    1. public class MenuInv extends JavaPlugin implements Listener {
    2.  
    3. public HashMap<String, Inventory> components = new HashMap<String, Inventory>();
    4.  
    5. private Inventory invUpgradesKnight;
    6.  
    7. private ItemStack upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.RED.getData());
    8. private ItemStack upgradeKnight_2 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.RED.getData());
    9. private ItemStack upgradeKnight_3 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.RED.getData());
    10. private ItemStack upgradeKnight_4 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.RED.getData());
    11. private ItemStack upgradeKnight_5 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.RED.getData());
    12.  
    13. public void onEnable()
    14. {
    15. saveDefaultConfig();
    16. saveConfig();
    17.  
    18. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    19. }
    20.  
    21. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
    22. {
    23.  
    24. if (!(sender instanceof Player)) {
    25. sender.sendMessage(ChatColor.RED + "This plugin is for players only.");
    26. return true;
    27. }
    28.  
    29. Player p = (Player) sender;
    30.  
    31. if (cmd.getName().equalsIgnoreCase("kit")) {
    32. InitializeAll(p.getPlayer());
    33. ShowInvUpgradesKnight(p.getPlayer());
    34. return true;
    35. }
    36. return true;
    37. }
    38.  
    39. public void onJoin(PlayerJoinEvent e)
    40. {
    41. Player p = e.getPlayer();
    42.  
    43. if (this.getConfig().getString(p.getUniqueId().toString()) != null) return;
    44.  
    45. this.getConfig().set(p.getUniqueId().toString(), "Knight:0");
    46.  
    47. saveConfig();
    48. }
    49.  
    50. @EventHandler
    51. public void onInventoryOpen(InventoryOpenEvent e)
    52. {
    53. Player p = (Player) e.getPlayer();
    54.  
    55. //add the player to the hashmap
    56. components.put(p.getName(), p.getInventory());
    57. }
    58.  
    59. @EventHandler
    60. public void onInventoryClose(InventoryCloseEvent e)
    61. {
    62. Player p = (Player) e.getPlayer();
    63.  
    64. if(components.containsKey(p.getName()))
    65. {
    66. //if player is in the hashmap remove them
    67. components.remove(p.getName());
    68. }
    69. }
    70.  
    71. public void InitializeInv(Player p)
    72. {
    73. invUpgradesKnight = Bukkit.createInventory(p, InventoryType.CHEST, "§a§lKnight Upgrades");
    74.  
    75. invUpgradesKnight.setItem(11, upgradeKnight_1.clone());
    76. invUpgradesKnight.setItem(12, upgradeKnight_2.clone());
    77. invUpgradesKnight.setItem(13, upgradeKnight_3.clone());
    78. invUpgradesKnight.setItem(14, upgradeKnight_4.clone());
    79. invUpgradesKnight.setItem(15, upgradeKnight_5.clone());
    80. }
    81.  
    82. @EventHandler
    83. public void OnInventoryClick(InventoryClickEvent e)
    84. {
    85. if(e.getInventory().getName().equalsIgnoreCase(invUpgradesKnight.getName()))
    86. {
    87. if(e.getCurrentItem().getType() == Material.STAINED_CLAY)
    88. {
    89. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Upgrade 2"))
    90. {
    91. PurchaseUpgrade(p.getPlayer(), 0, "Knight", 1);
    92.  
    93. p.sendMessage("§a§lSuccessfully purchased Knight Kit Upgrade 2");
    94. }
    95. }
    96. }
    97. }
    98.  
    99. public void ShowInvUpgradesKnight(Player p)
    100. {
    101. String[] playerKitLevels = this.getConfig().getString(p.getUniqueId().toString()).split(","); //get player's kit levels in an array
    102.  
    103. if(playerKitLevels[0].substring(7).contains("1"))
    104. {
    105. upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData()); //set color to green
    106. SetName(upgradeKnight_1, "§1§lUpgrade §b§l1 §1§l- §a§lUNLOCKED");
    107. invUpgradesKnight.setItem(11, upgradeKnight_1);
    108. }
    109. if(playerKitLevels[0].substring(7).contains("2"))
    110. {
    111. upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    112. SetName(upgradeKnight_1, "§1§lUpgrade §b§l1 §1§l- §a§lUNLOCKED");
    113. invUpgradesKnight.setItem(11, upgradeKnight_1);
    114.  
    115. upgradeKnight_2 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    116. SetName(upgradeKnight_2, "§1§lUpgrade §b§l2 §1§l- §a§lUNLOCKED");
    117. invUpgradesKnight.setItem(12, upgradeKnight_2);
    118.  
    119. SetName(upgradeKnight_3, "§1§lUpgrade §b§l3");
    120. invUpgradesKnight.setItem(13, upgradeKnight_3);
    121. }
    122. if(playerKitLevels[0].substring(7).contains("3"))
    123. {
    124. upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    125. SetName(upgradeKnight_1, "§1§lUpgrade §b§l1 §1§l- §a§lUNLOCKED");
    126. invUpgradesKnight.setItem(11, upgradeKnight_1);
    127.  
    128. upgradeKnight_2 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    129. SetName(upgradeKnight_2, "§1§lUpgrade §b§l2 §1§l- §a§lUNLOCKED");
    130. invUpgradesKnight.setItem(12, upgradeKnight_2);
    131.  
    132. upgradeKnight_3 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    133. SetName(upgradeKnight_3, "§1§lUpgrade §b§l3 §1§l- §a§lUNLOCKED");
    134. invUpgradesKnight.setItem(13, upgradeKnight_3);
    135.  
    136. SetName(upgradeKnight_4, "§1§lUpgrade §b§l4");
    137. invUpgradesKnight.setItem(14, upgradeKnight_4);
    138. }
    139. if(playerKitLevels[0].substring(7).contains("4"))
    140. {
    141. upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    142. SetName(upgradeKnight_1, "§1§lUpgrade §b§l1 §1§l- §a§lUNLOCKED");
    143. invUpgradesKnight.setItem(11, upgradeKnight_1);
    144.  
    145. upgradeKnight_2 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    146. SetName(upgradeKnight_2, "§1§lUpgrade §b§l2 §1§l- §a§lUNLOCKED");
    147. invUpgradesKnight.setItem(12, upgradeKnight_2);
    148.  
    149. upgradeKnight_3 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    150. SetName(upgradeKnight_3, "§1§lUpgrade §b§l3 §1§l- §a§lUNLOCKED");
    151. invUpgradesKnight.setItem(13, upgradeKnight_3);
    152.  
    153. upgradeKnight_4 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    154. SetName(upgradeKnight_4, "§1§lUpgrade §b§l4 §1§l- §a§lUNLOCKED");
    155. invUpgradesKnight.setItem(14, upgradeKnight_4);
    156.  
    157. SetName(upgradeKnight_5, "§1§lUpgrade §b§l5");
    158. invUpgradesKnight.setItem(15, upgradeKnight_5);
    159. }
    160. if(playerKitLevels[0].substring(7).contains("5"))
    161. {
    162. upgradeKnight_1 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    163. SetName(upgradeKnight_1, "§1§lUpgrade §b§l1 §1§l- §a§lUNLOCKED");
    164. invUpgradesKnight.setItem(11, upgradeKnight_1);
    165.  
    166. upgradeKnight_2 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    167. SetName(upgradeKnight_2, "§1§lUpgrade §b§l2 §1§l- §a§lUNLOCKED");
    168. invUpgradesKnight.setItem(12, upgradeKnight_2);
    169.  
    170. upgradeKnight_3 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    171. SetName(upgradeKnight_3, "§1§lUpgrade §b§l3 §1§l- §a§lUNLOCKED");
    172. invUpgradesKnight.setItem(13, upgradeKnight_3);
    173.  
    174. upgradeKnight_4 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    175. SetName(upgradeKnight_4, "§1§lUpgrade §b§l4 §1§l- §a§lUNLOCKED");
    176. invUpgradesKnight.setItem(14, upgradeKnight_4);
    177.  
    178. upgradeKnight_5 = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.GREEN.getData());
    179. SetName(upgradeKnight_5, "§1§lUpgrade §b§l5 §1§l- §a§lUNLOCKED");
    180. invUpgradesKnight.setItem(15, upgradeKnight_5);
    181. }
    182.  
    183.  
    184. components.put(p.getName(), invUpgradesKnight);
    185. p.openInventory(components.get(p.getName()));
    186. }
    187.  
    188. public void PurchaseUpgrade(Player p, int kitType, String kitName, int kitLevel)
    189. {
    190. String[] playerKitLevels = this.getConfig().getString(p.getUniqueId().toString()).split(",");
    191.  
    192. playerKitLevels[kitType] = kitName + ":" + kitLevel;
    193.  
    194. //rebuild the string
    195. StringBuilder str = new StringBuilder();
    196.  
    197. for(int i = 0; i < playerKitLevels.length; i++)
    198. {
    199. str.append(playerKitLevels[i] + ",");
    200. }
    201.  
    202. this.getConfig().set(p.getUniqueId().toString(), str.toString());
    203.  
    204. saveConfig();
    205.  
    206. p.closeInventory();
    207. }
    208. }
    209. [I][/I][/i]
     
  2. Offline

    TeeePeee

    On lines 75-79, you've got to make sure you add a unique ItemStack to each inventory. So take each item you're adding a clone it. (ItemStack#clone()). Now if only we could clone humans...
     
    AlphaRLee and Niknea like this.
  3. Offline

    wasabii


    Okay I changed it to, but the problem still occurs.

    Code:java
    1. invUpgradesKnight.setItem(11, upgradeKnight_1.clone());
    2. invUpgradesKnight.setItem(12, upgradeKnight_2.clone());
    3. invUpgradesKnight.setItem(13, upgradeKnight_3.clone());
    4. invUpgradesKnight.setItem(14, upgradeKnight_4.clone());
    5. invUpgradesKnight.setItem(15, upgradeKnight_5.clone());
     
  4. Offline

    Niknea

    TeeePeee @Wasabii's account hasn't reached 10 posts, so he would like me to post his answer.

    Okay I changed it to, but the problem still occurs.
    PHP:
            invUpgradesKnight.setItem(11upgradeKnight_1.clone());
            
    invUpgradesKnight.setItem(12upgradeKnight_2.clone());
            
    invUpgradesKnight.setItem(13upgradeKnight_3.clone());
            
    invUpgradesKnight.setItem(14upgradeKnight_4.clone());
            
    invUpgradesKnight.setItem(15upgradeKnight_5.clone());
     
  5. Offline

    TeeePeee

    Niknea
    Oh sorry, didn't notice line 105. You'll have to change this to set the actual ItemStack in the inventory.
     
  6. Offline

    wasabii

    TeeePeee
    What do I change line 105 to? I don't really understand what you mean.
     
  7. Offline

    Niknea

    TeeePeee whatya mean? Mind showing an example?
     
Thread Status:
Not open for further replies.

Share This Page