Array out of bounds error

Discussion in 'Plugin Development' started by GhostHack, Mar 19, 2014.

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

    GhostHack

    I am making my own donation plugin everything worked fine until i decided i wanted to add a gui when someone types /buy just to show a few of the perks and the cost then give them a link in the chat to the website page with all the information but i got this error

    Error Code
    Code:java
    1. [21:40:54 ERROR]: Could not pass event InventoryClickEvent to CCDonator v5.5
    2. org.bukkit.event.EventException
    3. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    4. va:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    5. at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    6. a:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    7. at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    8. ava:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    9. at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    10. ava:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    11. at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    12. :1351) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    13. at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.a(SourceFile:32)
    14. [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    15. at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.handle(SourceFil
    16. e:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    17. at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    18. ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    19. at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    20. tbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    21. at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    22. 55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    23. at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    24. 50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    25. at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    26. 45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    27. at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    28. :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    29. at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    30. 17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    31. Caused by: java.lang.ArrayIndexOutOfBoundsException: -999
    32. at com.cheapcoders.donator.listener.IconMenu$Row.<init>(IconMenu.java:11
    33. 1) ~[?:?]
    34. at com.cheapcoders.donator.listener.IconMenu.getRowFromSlot(IconMenu.jav
    35. a:92) ~[?:?]
    36. at com.cheapcoders.donator.listener.IconMenu.onInventoryClick(IconMenu.j
    37. ava:74) ~[?:?]
    38. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    39. _51]
    40. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
    41. _51]
    42. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    43. .7.0_51]
    44. at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
    45. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    46. va:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-15-g2f3dbd3-b2995jnks]
    47. ... 13 more
    48. [21:41:18 INFO]: GhostHacks lost connection: Internal Exception: java.io.IOExcep
    49. tion: An existing connection was forcibly closed by the remote host


    Here is my IconMenu class

    Code:java
    1. package com.cheapcoders.donator.listener;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    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.server.PluginDisableEvent;
    14. import org.bukkit.inventory.Inventory;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.meta.ItemMeta;
    17.  
    18. public class IconMenu implements Listener {
    19.  
    20. private String name;
    21. private String itemers;
    22. private int size;
    23. private onClick click;
    24. List<String> viewing = new ArrayList<String>();
    25.  
    26. private ItemStack[] items;
    27.  
    28. public IconMenu(String name, int size, onClick click) {
    29. this.name = name;
    30. this.size = size * 9;
    31. items = new ItemStack[this.size];
    32. this.click = click;
    33. Bukkit.getPluginManager().registerEvents(this, Bukkit.getPluginManager().getPlugins()[0]);
    34. }
    35.  
    36. @EventHandler
    37. public void onPluginDisable(PluginDisableEvent event) {
    38. for (Player p : this.getViewers())
    39. close(p);
    40. }
    41.  
    42. public IconMenu open(Player p) {
    43. p.openInventory(getInventory(p));
    44. viewing.add(p.getName());
    45. return this;
    46. }
    47.  
    48. private Inventory getInventory(Player p) {
    49. Inventory inv = Bukkit.createInventory(p, size, name);
    50. for (int i = 0; i < items.length; i++)
    51. if (items[i] != null)
    52. inv.setItem(i, items[i]);
    53. return inv;
    54. }
    55.  
    56. public IconMenu close(Player p) {
    57. if (p.getOpenInventory().getTitle().equals(name))
    58. p.closeInventory();
    59. return this;
    60. }
    61.  
    62. public List<Player> getViewers() {
    63. List<Player> viewers = new ArrayList<Player>();
    64. for (String s : viewing)
    65. viewers.add(Bukkit.getPlayer(s));
    66. return viewers;
    67. }
    68.  
    69. @EventHandler
    70. public void onInventoryClick(InventoryClickEvent event) {
    71. if (viewing.contains(event.getWhoClicked().getName())) {
    72. event.setCancelled(true);
    73. Player p = (Player) event.getWhoClicked();
    74. Row row = getRowFromSlot(event.getSlot());
    75. if (!click.click(p, this, row, event.getSlot() - row.getRow() * 9, event.getCurrentItem(), itemers))
    76. close(p);
    77. }
    78. }
    79.  
    80. @EventHandler
    81. public void onInventoryClose(InventoryCloseEvent event) {
    82. if (viewing.contains(event.getPlayer().getName()))
    83. viewing.remove(event.getPlayer().getName());
    84. }
    85.  
    86. public IconMenu addButton(Row row, int position, ItemStack item, String name, String... lore) {
    87. items[row.getRow() * 9 + position] = getItem(item, name, lore);
    88. return this;
    89. }
    90.  
    91. public Row getRowFromSlot(int slot) {
    92. return new Row(slot / 9, items);
    93. }
    94.  
    95. public Row getRow(int row) {
    96. return new Row(row, items);
    97. }
    98.  
    99. public interface onClick {
    100. public abstract boolean click(Player clicker, IconMenu menu, Row row, int slot, ItemStack item, String itemers);
    101. }
    102.  
    103. public class Row {
    104. private ItemStack[] rowItems = new ItemStack[9];
    105. int row;
    106.  
    107. public Row(int row, ItemStack[] items) {
    108. this.row = row;
    109. int j = 0;
    110. for (int i = (row * 9); i < (row * 9) + 9; i++) {
    111. rowItems[j] = items[i];
    112. j++;
    113. }
    114. }
    115.  
    116. public ItemStack[] getRowItems() {
    117. return rowItems;
    118. }
    119.  
    120. public ItemStack getRowItem(int item) {
    121. return rowItems[item] == null ? new ItemStack(Material.AIR) : rowItems[item];
    122. }
    123.  
    124. public int getRow() {
    125. return row;
    126. }
    127. }
    128.  
    129. private ItemStack getItem(ItemStack item, String name, String... lore) {
    130. ItemMeta im = item.getItemMeta();
    131. im.setDisplayName(name);
    132. im.setLore(Arrays.asList(lore));
    133. item.setItemMeta(im);
    134. return item;
    135. }
    136.  
    137. }[/i][/i][/i]


    If anyone can help Id really appreciate it Thanks
     
  2. Offline

    xXSniperzzXx_SD

    GhostHack Any idea why it would be trying to get: rowItems[-999]
    in this code:
    Code:java
    1. for (int i = (row * 9); i < (row * 9) + 9; i++) {
    2. rowItems[j] = items; //<---- This Line
    3. j++;
    4. }
     
  3. Offline

    GhostHack

    xXSniperzzXx_SD No i do not until i added in the InventoryClickEvent it all worked fine until you clicked a block then it gave me an error for not handling the click
    Click event code

    Code:java
    1. private void onivClick(final InventoryClickEvent a){
    2. Player p = univplayer.getPlayer();
    3. if(a.getClick().equals(Material.STONE)){
    4. p.sendMessage("§2[§bC§cC §2Donator] This is the "+getConfig().getString("ServerName")+" "+getConfig().getString("Ranks.rank1")+" Rank Please go to "+getConfig().getString("ranks.link1"));
    5. }
    6. }
     
  4. Offline

    xXSniperzzXx_SD

  5. Offline

    GhostHack

Thread Status:
Not open for further replies.

Share This Page