How to create Multiple Pages!

Discussion in 'Plugin Development' started by nflug, Aug 7, 2015.

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

    nflug

    Hey Guys,

    My Idea was to create Multiple Inventory Pages with a back and previous Button
    And add in the Inventory Items with a List<List> and if its full there will be a previous button for the next page

    Anyone knows how to to that?
     
  2. Offline

    AcePilot10

  3. Offline

    nflug

    But I need unlimited Inventorys :/

    I found this but I dont know how it works :/
    Show Spoiler

    private static HashMap<Integer, Inventory> pages;
    private static HashMap<Player, Integer> insideMenu = new HashMap();

    public static void load()
    {
    pages = new HashMap();

    int s = cValue.default_menu_size;
    if (s % 9 != 0)
    {
    Console.warn("Invalid inventory-size for icJukeBox menu!");
    Console.warn("Illegal size: " + s + " ! - Size must be devidable by 9!");
    Console.warn("Using default-size set by plugin ...");
    s = cValue.dv.default_menu_size;
    }
    if (s < 18)
    {
    Console.warn("Invalid inventory-size for icJukeBox menu!");
    Console.warn("Illegal size: " + s + " ! - Size must be at least 18!");
    Console.warn("Using default-size set by plugin ...");
    s = cValue.dv.default_menu_size;
    }
    int dpi = s - 9;
    int ds = Manager.list.size();
    int r = ds % dpi;
    int pages = (ds - r) / dpi + 1;

    ArrayList<lSong> list = new ArrayList(Manager.list);
    for (int cp = 1; cp <= pages; cp++)
    {
    String t = cValue.string.menu_title;
    t = t.replaceAll("#CURRENT", cp);
    t = t.replaceAll("#TOTAL", pages);
    Inventory inv = Bukkit.createInventory(null, s, t);
    if (cp != 1) {
    inv.setItem(0, cValue.menu_page_backward);
    }
    if (cp != pages) {
    inv.setItem(1, cValue.menu_page_forward);
    }
    inv.setItem(3, cValue.menu_music_radio);
    inv.setItem(4, cValue.menu_music_shuffle);
    inv.setItem(5, cValue.menu_music_random);
    inv.setItem(7, cValue.menu_music_disable);
    inv.setItem(8, cValue.menu_page_close);

    int sa = (cp - 1) * dpi;
    int ea = cp * dpi;
    int cs = 9;
    if (ea > list.size()) {
    ea = list.size();
    }
    for (int x = sa; x < ea; x++)
    {
    ItemStack i = ((lSong)list.get(x)).getMenuItem();
    i.setAmount(cs - 8);
    inv.setItem(cs, i);
    cs++;
    }
    pages.put(Integer.valueOf(cp), inv);
    }
    }

    public static void open(Player player, int page)
    {
    if (!pages.containsKey(Integer.valueOf(page)))
    {
    player.openInventory((Inventory)pages.get(Integer.valueOf(1)));
    insideMenu.put(player, Integer.valueOf(page));
    }
    else
    {
    player.openInventory((Inventory)pages.get(Integer.valueOf(page)));
    insideMenu.put(player, Integer.valueOf(page));
    }
    }

    public static void open(Player player)
    {
    open(player, 1);
    }

    public static Integer getCurrentPage(Player player)
    {
    if (!isInsideMenu(player)) {
    return null;
    }
    return (Integer)insideMenu.get(player);
    }

    public static boolean isInsideMenu(Player player)
    {
    return insideMenu.containsKey(player);
    }

    public static void close(Player player)
    {
    insideMenu.remove(player);
    }


    <Edited by bwfcwalshy: Merged posts, please use the edit button rather than double posting.>
     
    Last edited by a moderator: Aug 7, 2015
  4. Save inventories for each player in files. Using a tree map will not work because the inventories will be lost when the plugin is disabled. Create a section for each player (use their UUID), then set an ID of some sort that can be used to identify the inventory- a number, string, etc. When the player runs a command, just pull up the inventory based on what they put in the command arguments. Also add a way for admins to check a player's stored inventories for obvious security reasons.
     
  5. Offline

    mine-care

    Umm... it is a moderator's job to merge consecutive posts when they are not for bumping that can be done every 24 hours. So as an answer, nothing is wrong with him. It is his job.

    As an aswer to your thread, i would go with @AcePilot10 's solution... It sounds simple. The only con is that if you plan on having a massive ammount of inventories loaded, then you will be consuming a lot of ram. So mabe you ened to develop a loading system to load the nessesary inventories only.
     
Thread Status:
Not open for further replies.

Share This Page