Solved GUI Next Page Error

Discussion in 'Plugin Development' started by mathkot59, Feb 23, 2017.

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

    mathkot59

    Hello i have this
    But it throws an error when i go to page number 2

    at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
    Caused by: java.lang.IndexOutOfBoundsException: Index: 53, Size: 45
    at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_121]

    But if i remove this i can go to page 2

    Code:
    for (ItemStack is : items.subList(si, ei)) {
                      inventory.addItem(is);
                  }
    Sorry I'm not so good at English


    Code:
    public void createGUI(Player p) {
            if (Config.getInstance().getData().contains("Reports")) {
                ArrayList<ItemStack> items = new ArrayList<ItemStack>();
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                  ItemStack item = new ItemStack(Material.PAPER, 1);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                  List<String> lore = new ArrayList<String>();
                  lore.add("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                  lore.add("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                  lore.add("Reason: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                  lore.add("Status: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Status"));
                  meta.setLore(lore);
                  item.setItemMeta(meta);
                
                  items.add(item);
                
                  boolean next = true;
                
                  int epp = 52;
                  int si = (page - 1) * epp;
                  int ei = si + epp;
                  if (ei > items.size()) {
                      ei = items.size();
                      next = false;
                  }
                  p.sendMessage("Per Page: " + epp);
                  p.sendMessage("Page: " + page);
                  p.sendMessage("Start Index: " + si);
                  p.sendMessage("End Index: " + ei);
                  Inventory inventory = Bukkit.createInventory(null, 54, "Reports " + "Page: " + page);
                  if (next) {
                          ItemStack nextpage = new ItemStack(Material.ARROW, 1);
                            ItemMeta nextpagemeta = nextpage.getItemMeta();
                            nextpagemeta.setDisplayName("Next Page");
                          nextpage.setItemMeta(nextpagemeta);
                            inventory.setItem(53, nextpage);
                  }
                  if (page != 1) {
                          inventory.setItem(52, new ItemStack(Material.STICK));
                  }
                
                  for (ItemStack is : items.subList(si, ei)) {
                      inventory.addItem(is);
                  }
                
                  p.openInventory(inventory);
            }
            }
        }
     
  2. Offline

    Zombie_Striker

    ei is greater than the lists' side. Ei is equal to 53, when it should be 45.
     
    mathkot59 likes this.
  3. Offline

    mathkot59

    Yes but if i remove this i works
    Code:
    for (ItemStack is : items.subList(si, ei)) {
                      inventory.addItem(is);
                  }
    and when i add this

    Code:
    for (ItemStack is : items.subList(si, ei)) {
                      inventory.addItem(is);
                  }
    the end index is == 1
     
  4. Offline

    Zombie_Striker

    @mathkot59
    Its not working because you are getting a sublist, where the end index is trying to be 53. Make sure the largest index is less than the list's size.
     
    mathkot59 likes this.
  5. Offline

    mathkot59

    @Zombie_Striker
    I dont understand what im doing wrong?
    and I'm also not so good at GUI
     
  6. Offline

    timtower Administrator Administrator Moderator

    mathkot59 likes this.
  7. Offline

    MrGeneralQ

    He's using a totally different method. The only thing I can do is give him mine code but since I'm using custom classes it's hard for him to understand .

    UPDATE:

    Okay so first you need a hashMap that stores a page number their on for each player.
    so : <Player, Integer>
    collect all items in a list of ItemStack 's .

    Now get the page number and store it in a variable

    Now create a new Int variable called index.
    int amtPages = 12; // ammount of items you want for each page
    int index = thePage * amtPages - amtPages;

    now create another variable: endIndex

    int endIndex = Math.min(index+amtPages,itemList.size());

    and now the for loop:

    for (; index < endIndex; index++)
    {
    ItemStack is = itemList.get(index);
    inv.setItem(index%amtMax);

    }

    // open inventory ... done


    To change pages just change the page number in the HashMap and open the inventory again.
     
    Last edited: Feb 23, 2017
    mathkot59 likes this.
  8. Offline

    mathkot59

    How can i solve this?
    i have tried this
    Code:
    if (items.iterator().hasNext()) {
                      inventory.addItem(item);
                  }
    but i returns the same on page 1 and 2 and only shows 1 per page
    Sorry I'm not so good at English
     
  9. Offline

    MrGeneralQ

    don't use addItem. That will Add another item and you won't have control over the slots.
     
    mathkot59 likes this.
  10. Offline

    mathkot59

    How do i add the items to the inventory
    i have this
    inventory.setItem(index, what do i put here?);
     
  11. Offline

    MrGeneralQ

    There goes Your itemstack from the list
     
    mathkot59 likes this.
  12. Offline

    mathkot59

    Okay but i have an error when i go to page 2
    Code:
    [23:06:03 ERROR]: Could not pass event InventoryClickEvent to Report v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1630) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 54
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCustom$MinecraftInventory.setItem(CraftInventoryCustom.java:105) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory.setItem(CraftInventory.java:79) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at me.MathiasMC.Report.gui.ReportsGUI.createGUI(ReportsGUI.java:80) ~[?:?]
            at me.MathiasMC.Report.gui.ReportsGUI.onClick(ReportsGUI.java:139) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_121]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            ... 15 more
     
  13. Offline

    MrGeneralQ

    I gave you the code you need

    Verstuurd vanaf mijn A0001 met Tapatalk
     
    mathkot59 likes this.
  14. Offline

    mathkot59

    I still gets this error when i go to page 2
    i use your method
    Code:
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
    Caused by: java.lang.IndexOutOfBoundsException: Index: 53, Size: 45
    at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_121]

    full class
    Code:
    int page = 1;
       
       
        public void createGUI(Player p) {
            if (Config.getInstance().getData().contains("Reports")) {
                ArrayList<ItemStack> items = new ArrayList<ItemStack>();
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                  ItemStack item = new ItemStack(Material.PAPER, 1);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                  List<String> lore = new ArrayList<String>();
                  lore.add("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                  lore.add("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                  lore.add("Reason: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                  lore.add("Status: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Status"));
                  meta.setLore(lore);
                  item.setItemMeta(meta);
                 
                  items.add(item);
                 
                  Inventory inventory = Bukkit.createInventory(null, 54, "Reports " + "Page: " + page);
                  int amtPages = 52;
                  int index = page * amtPages - amtPages;
                  int endIndex = Math.min(index+amtPages,items.size());
                 
                  for (; index < endIndex; index++)
                  {
                      inventory.setItem(index, item);
                  }
                  if (page == 1) {
                      ItemStack nextpage = new ItemStack(Material.ARROW, 1);
                        ItemMeta nextpagemeta = nextpage.getItemMeta();
                        nextpagemeta.setDisplayName("Next Page");
                        nextpage.setItemMeta(nextpagemeta);
                        inventory.setItem(53, nextpage);
                  }
                 
                 
                  p.openInventory(inventory);
            }
            }
        }
       
        @EventHandler
          public void onClick(InventoryClickEvent e) {
            if (e.getCurrentItem() == null || (e.getCurrentItem().getType() == Material.AIR)) {
                return;
                }
            if (e.getCurrentItem().hasItemMeta()) {
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
            if (e.getInventory().getName().equalsIgnoreCase(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z)) {
                e.setCancelled(true);
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Delete Report")) {
                    Config.getInstance().getData().set("Reports" + "." + z, null);
                    Config.getInstance().saveData();
                    e.getWhoClicked().sendMessage("Report Deleted ID: " + z);
                    e.getWhoClicked().closeInventory();
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Go Back")) {
                    e.getWhoClicked().closeInventory();
                    Player player = (Player) e.getWhoClicked();
                    createGUI(player);
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"))) {
                    return;
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"))) {
                    return;
                }
            }
            }
            }
            if (e.getInventory().getName().equalsIgnoreCase("Reports " + "Page: " + page)) {
                if (e.getCurrentItem() == null || (e.getCurrentItem().getType() == Material.AIR)) {
                    return;
                    }
                if (e.getCurrentItem().hasItemMeta()) {
                    if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Next Page")) {
                        page = 2;
                        Player player = (Player) e.getWhoClicked();
                        player.closeInventory();
                        createGUI(player);
                    }
                for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z)) {
                    e.setCancelled(true);
                    Inventory IDMain = Bukkit.createInventory(null, 9, Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                   
                   
                    ItemStack deletereport = new ItemStack(Material.BARRIER, 1);
                    ItemMeta deletereportmeta = deletereport.getItemMeta();
                    deletereportmeta.setDisplayName("Delete Report");
                    deletereport.setItemMeta(deletereportmeta);
                    IDMain.setItem(8, deletereport);
                   
                   
                    ItemStack goback = new ItemStack(Material.SIGN, 1);
                    ItemMeta gobackmeta = goback.getItemMeta();
                    gobackmeta.setDisplayName("Go Back");
                    goback.setItemMeta(gobackmeta);
                    IDMain.setItem(7, goback);
                   
                   
                    ItemStack playerreporter = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
                    SkullMeta playerreportermeta = (SkullMeta) playerreporter.getItemMeta();
                    playerreportermeta.setOwner(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    playerreportermeta.setDisplayName("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    List<String> playerreporterlore = new ArrayList<String>();
                    Player playerreporterplayer = Bukkit.getPlayerExact(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    if (playerreporterplayer == null) {
                        playerreporterlore.add("Player is offline.");
                    } else {
                        playerreporterlore.add("Player is online.");
                    }
                    playerreportermeta.setLore(playerreporterlore);
                    playerreporter.setItemMeta(playerreportermeta);
                    IDMain.setItem(0, playerreporter);
                   
                   
                    ItemStack playerreported = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
                    SkullMeta playerreportedmeta = (SkullMeta) playerreported.getItemMeta();
                    playerreportedmeta.setOwner(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    playerreportedmeta.setDisplayName("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    List<String> playerreportedlore = new ArrayList<String>();
                    Player playerreportedplayer = Bukkit.getPlayerExact(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    if (playerreportedplayer == null) {
                        playerreportedlore.add("Player is offline.");
                    } else {
                        playerreportedlore.add("Player is online.");
                    }
                    playerreportedmeta.setLore(playerreportedlore);
                    playerreported.setItemMeta(playerreportedmeta);
                    IDMain.setItem(1, playerreported);
                   
                   
                    ItemStack message = new ItemStack(Material.PAPER, 1);
                    ItemMeta messagemeta = message.getItemMeta();
                    messagemeta.setDisplayName("Message:");
                    List<String> messagelore = new ArrayList<String>();
                    messagelore.add(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                    messagemeta.setLore(messagelore);
                    message.setItemMeta(messagemeta);
                    IDMain.setItem(4, message);
                   
                   
                    e.getWhoClicked().openInventory(IDMain);
                }
              }
            }
        }
        }
    }
     
  15. Offline

    Zombie_Striker

    @mathkot59
    you have a lot of duplicate code. Never copy and paste. If you use a series of lines over and over again (Creating itemstacks), create a method specifically for that function.
    53 is larger than the inventory's size. Remove this line, or change "53" to the size of the inventory -1.
     
    mathkot59 likes this.
  16. Offline

    Ragnarok_

    @mathkot59 I'm pretty sure Zombie_Striker said this about 2 times already, you're slot for adding items has '53' when that is over the limit for the slots. Start from 0(which is equal to 1) and count where the item would be.
    What your doing:

    Code:
    if (page == 1) {
                      ItemStack nextpage = new ItemStack(Material.ARROW, 1);
                        ItemMeta nextpagemeta = nextpage.getItemMeta();
                        nextpagemeta.setDisplayName("Next Page");
                        nextpage.setItemMeta(nextpagemeta);
                        inventory.setItem(53, nextpage);
    ^ See that? Change 53 to an existing slot.
     
  17. Offline

    mathkot59

    The next page item is showing up in the gui
    here is what happening
    https://gyazo.com/b8b6071fb5e7dc66a4b8ca358accebe8

    the error thrown
    Code:
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1630) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 54
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCustom$MinecraftInventory.setItem(CraftInventoryCustom.java:105) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory.setItem(CraftInventory.java:79) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            at me.MathiasMC.Report.gui.ReportsGUI.createGUI(ReportsGUI.java:59) ~[?:?]
            at me.MathiasMC.Report.gui.ReportsGUI.onClick(ReportsGUI.java:116) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_121]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-db6de12-18fbb24]
            ... 15 more
    full code
    Code:
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.inventory.meta.SkullMeta;
    
    import me.MathiasMC.Report.Report;
    import me.MathiasMC.Report.utils.Config;
    
    public class ReportsGUI implements Listener {
      
        static ReportsGUI instance = new ReportsGUI();
        
          public static ReportsGUI getInstance()
          {
            return instance;
          }
      
        public void createGUI(Player p) {
            if (Config.getInstance().getData().contains("Reports")) {
                ArrayList<ItemStack> items = new ArrayList<ItemStack>();
                if (!Report.instance.pageID.containsKey(p.getPlayer().getUniqueId().toString())) {
                    Report.instance.pageID.put(p.getPlayer().getUniqueId().toString(), 1);
                }
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                  ItemStack item = new ItemStack(Material.PAPER, 1);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                  List<String> lore = new ArrayList<String>();
                  lore.add("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                  lore.add("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                  lore.add("Reason: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                  lore.add("Status: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Status"));
                  meta.setLore(lore);
                  item.setItemMeta(meta);
                
                  items.add(item);
                
                  int ID = Report.instance.pageID.get(p.getPlayer().getUniqueId().toString());
                
                  Inventory inventory = Bukkit.createInventory(null, 54, "Reports " + "Page: " + Report.instance.pageID.get(p.getPlayer().getUniqueId().toString()));
                  int amtPages = 52;
                  int index = ID * amtPages - amtPages;
                  int endIndex = Math.min(index+amtPages,items.size());
                
                  for (; index < endIndex; index++)
                  {
                      inventory.setItem(index, item);
                  }
                  if (ID == 1) {
                      ItemStack nextpage = new ItemStack(Material.ARROW, 1);
                        ItemMeta nextpagemeta = nextpage.getItemMeta();
                        nextpagemeta.setDisplayName("Next Page");
                        nextpage.setItemMeta(nextpagemeta);
                        inventory.setItem(53, nextpage);
                  }
                
                
                  p.openInventory(inventory);
            }
            }
        }
      
        @EventHandler
          public void onClick(InventoryClickEvent e) {
            if (e.getCurrentItem() == null || (e.getCurrentItem().getType() == Material.AIR)) {
                return;
                }
            e.setCancelled(true);
            if (e.getCurrentItem().hasItemMeta()) {
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
            if (e.getInventory().getName().equalsIgnoreCase(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z)) {
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Delete Report")) {
                    Config.getInstance().getData().set("Reports" + "." + z, null);
                    Config.getInstance().saveData();
                    e.getWhoClicked().sendMessage("Report Deleted ID: " + z);
                    e.getWhoClicked().closeInventory();
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Go Back")) {
                    e.getWhoClicked().closeInventory();
                    Player player = (Player) e.getWhoClicked();
                    createGUI(player);
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"))) {
                    return;
                }
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"))) {
                    return;
                }
            }
            }
            }
            Player player = (Player) e.getWhoClicked();
            int ID = Report.instance.pageID.get(player.getPlayer().getUniqueId().toString());
            if (e.getInventory().getName().equalsIgnoreCase("Reports " + "Page: " + ID)) {
                if (e.getCurrentItem() == null || (e.getCurrentItem().getType() == Material.AIR)) {
                    return;
                    }
                if (e.getCurrentItem().hasItemMeta()) {
                    if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("Next Page")) {
                        int set = 2;
                        Report.instance.pageID.remove(player.getPlayer().getUniqueId().toString());
                        Report.instance.pageID.put(player.getPlayer().getUniqueId().toString(), set);
                        player.closeInventory();
                        createGUI(player);
                        player.sendMessage("ID " + Report.instance.pageID.get(player.getPlayer().getUniqueId().toString()));
                    }
                for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z)) {
                    Inventory IDMain = Bukkit.createInventory(null, 9, Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                  
                  
                    ItemStack deletereport = new ItemStack(Material.BARRIER, 1);
                    ItemMeta deletereportmeta = deletereport.getItemMeta();
                    deletereportmeta.setDisplayName("Delete Report");
                    deletereport.setItemMeta(deletereportmeta);
                    IDMain.setItem(8, deletereport);
                  
                  
                    ItemStack goback = new ItemStack(Material.SIGN, 1);
                    ItemMeta gobackmeta = goback.getItemMeta();
                    gobackmeta.setDisplayName("Go Back");
                    goback.setItemMeta(gobackmeta);
                    IDMain.setItem(7, goback);
                  
                  
                    ItemStack playerreporter = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
                    SkullMeta playerreportermeta = (SkullMeta) playerreporter.getItemMeta();
                    playerreportermeta.setOwner(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    playerreportermeta.setDisplayName("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    List<String> playerreporterlore = new ArrayList<String>();
                    Player playerreporterplayer = Bukkit.getPlayerExact(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                    if (playerreporterplayer == null) {
                        playerreporterlore.add("Player is offline.");
                    } else {
                        playerreporterlore.add("Player is online.");
                    }
                    playerreportermeta.setLore(playerreporterlore);
                    playerreporter.setItemMeta(playerreportermeta);
                    IDMain.setItem(0, playerreporter);
                  
                  
                    ItemStack playerreported = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
                    SkullMeta playerreportedmeta = (SkullMeta) playerreported.getItemMeta();
                    playerreportedmeta.setOwner(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    playerreportedmeta.setDisplayName("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    List<String> playerreportedlore = new ArrayList<String>();
                    Player playerreportedplayer = Bukkit.getPlayerExact(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                    if (playerreportedplayer == null) {
                        playerreportedlore.add("Player is offline.");
                    } else {
                        playerreportedlore.add("Player is online.");
                    }
                    playerreportedmeta.setLore(playerreportedlore);
                    playerreported.setItemMeta(playerreportedmeta);
                    IDMain.setItem(1, playerreported);
                  
                  
                    ItemStack message = new ItemStack(Material.PAPER, 1);
                    ItemMeta messagemeta = message.getItemMeta();
                    messagemeta.setDisplayName("Message:");
                    List<String> messagelore = new ArrayList<String>();
                    messagelore.add(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                    messagemeta.setLore(messagelore);
                    message.setItemMeta(messagemeta);
                    IDMain.setItem(4, message);
                  
                  
                    e.getWhoClicked().openInventory(IDMain);
                }
              }
            }
        }
        }
    }
     
  18. Offline

    Zombie_Striker

    I'm starting to feel lime I'm repeating myself. Always make sure the the index are less than the size of the inventory. Currently, when you get to the second page, index becomes equal to 52*2-52, which is 104, which is larger than 52.

    To fix this, make sure index is set to 0 instead of that value.
     
    mathkot59 likes this.
  19. Offline

    mathkot59

    if i set the index to always == 0 the items is just being copied from page 1 to page 2
    i want if page 1 is full it uses page 2 for the rest
     
    Last edited: Feb 23, 2017
  20. Offline

    Zombie_Striker

    @mathkot59
    But, the index should be independent of the page. The index should only be in change of where the item gets placed in the inventory, not what item is put there.

    Edit: The index does not have anything to do with what is put there. The variable item has nothing to do with the index, because index is created after the item. Set index to 0.
     
    mathkot59 likes this.
  21. Offline

    mathkot59

    @Zombie_Striker
    Yes! :D i works now but only one problem the if the page 1 is full and i go to page 2 the items starts from slot 45 i will have i to start in slot 1

    Here's what happens
    https://gyazo.com/56947d6d9b7e91b02c058faf619d41ae


    code
    Code:
    public void createGUI(Player p) {
            if (Config.getInstance().getData().contains("Reports")) {
                ArrayList<ItemStack> items = new ArrayList<ItemStack>();
                if (!Report.instance.pageID.containsKey(p.getPlayer().getUniqueId().toString())) {
                    Report.instance.pageID.put(p.getPlayer().getUniqueId().toString(), 1);
                }
            for (String z : Config.getInstance().getData().getConfigurationSection("Reports").getKeys(false)) {
                  ItemStack item = new ItemStack(Material.PAPER, 1);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter") + "´s report" + " ID: " + z);
                  List<String> lore = new ArrayList<String>();
                  lore.add("Reporter: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reporter"));
                  lore.add("Reported: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reported"));
                  lore.add("Reason: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Reason"));
                  lore.add("Status: " + Config.getInstance().getData().getString("Reports" + "." + z + "." + "Status"));
                  meta.setLore(lore);
                  item.setItemMeta(meta);
                
                  items.add(item);
                
                  int ID = Report.instance.pageID.get(p.getPlayer().getUniqueId().toString());
                
                  Inventory inventory = Bukkit.createInventory(null, 54, "Reports " + "Page: " + Report.instance.pageID.get(p.getPlayer().getUniqueId().toString()));
                  int amtPages = 44;
                  index = ID * amtPages - amtPages;
                  if (ID == 1) {
                      ItemStack nextpage = new ItemStack(Material.ARROW, 1);
                        ItemMeta nextpagemeta = nextpage.getItemMeta();
                        nextpagemeta.setDisplayName("Next Page");
                        nextpage.setItemMeta(nextpagemeta);
                        inventory.setItem(53, nextpage);
                  }
                  int endIndex = Math.min(index+amtPages,items.size());
                
                  for (; index < endIndex; index++)
                  {
                      inventory.setItem(index, items.get(index));
                  }
                
                
                
                  p.openInventory(inventory);
            }
        }
        }
     
  22. Offline

    MrGeneralQ

    Make it like this:


    inventory.setItem(index%amtPages, items.get(index));
     
    mathkot59 likes this.
  23. Offline

    mathkot59

    @MrGeneralQ
    @Zombie_Striker
    Thanks! :D
     
Thread Status:
Not open for further replies.

Share This Page