Gui Help.

Discussion in 'Plugin Development' started by zakarls, May 31, 2014.

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

    zakarls

    I would really like help in knowing how to make a GUI. This has always been of interest to me but I have no clue how to do it. Any help would be appreciated. Thanks
     
  2. Offline

    bangman

    Do you mean an Inventory GUI?
     
  3. Offline

    zakarls

    bangman
    Yeah. Where it looks sort of like a chest or inventory but it shows custom items and you cant edit the placement of them.
     
  4. Offline

    bangman

    Ah, well the basics are:
    You can grab an instance of Inventory with Bukkit.createInventory(null, <InventorySlots>, "Inventory Title");
    The amount of slots must a be a multiple of 9, so can be: 9, 18, 27 ect.....

    To edit what is in the inventory you can simply setContents(); of the inventory with an ItemStack array and modify the appearance of these items by editing their ItemMeta.

    To finish, you can openInventory(your inventory instance) on any player to display your fancy GUI!

    Edit: This tutorial also looks fairly helpful :)

    Also, you should create an ArrayList with players that have the inventory open and listen for InventoryClickEvent to catch when they click on something and cancel the event

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 1, 2016
    es359 likes this.
  5. Offline

    Konkz

    Um? Why an ArrayList? On inventory click event check what inventory they have open.
     
  6. Offline

    zakarls

    Konkz
    He means that when they open the gui it adds them to an array list so they cant edit the gui. Then when they close it they are removed from the array list.
     
  7. Offline

    Konkz

    Code:
    public void onInvClick(InventoryClickEvent event) {
    Player bukkitPlayer = (Player) event.getWhoClicked();
     
    if (bukkitPlayer.getInventory().getName().equals(myInv.getName()) {
    event.setCancelled(true);
    }
    }
    
    Like I said, check what inventory is open and if it's one you don't want players to edit things in gui, cancel it.
     
  8. Offline

    zakarls

    Konkz
    Oh. I see what you are saying. Thanks :p . I will try that

    Konkz and bangman
    How would I display a certain players head in one of the inventory slots. I know id have to edit like the itemmeta or something but idk how. Thanks :)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 1, 2016
  9. Offline

    Konkz

    If nobody helps yiu by tomorrow then I will as I'm too lazy and tired to write it up on my phone.
     
  10. Offline

    zakarls

    Konkz
    Ok. Thanks a lot
     
  11. Offline

    Konkz

    Here
    PHP:
                ItemStack is = new ItemStack(Material.SKULL_ITEM1, (short3);
                
    SkullMeta im = (SkullMetais.getItemMeta();
                
    im.setOwner(bukkitPlayer.getName());
                
    im.setDisplayName(bukkitPlayer.getName());
                
    is.setItemMeta(im);
     
  12. Offline

    fireblast709

  13. Offline

    zakarls

  14. Offline

    gamemster2468

    Here's some code from my project :

    Inventory Class


    Code:
    public static Inventory getCompassInv() {
    Inventory inv = Bukkit.createInventory(null, 9, "Game Menu - Pick a game!");
     
    {
    ItemStack item = new ItemStack(Material.BOW, 1);
    ItemMeta meta = item.getItemMeta();
    meta.setDisplayName("§6Survival Games");
    List<String> lore = new ArrayList<String>();
    lore.add("§7Hunger games, but in minecraft");
    meta.setLore(lore);
    item.setItemMeta(meta);
    inv.setItem(1, item);
    }
     
    return inv;
    }

    ClickedItem Class :


    Code:
    @EventHandler
    public void onClick(InventoryClickEvent event)
    {
    if(event.getInventory().getTitle().equalsIgnoreCase("Game Menu - Pick a game!"))
    {
    if(event.getCurrentItem() != null && event.getCurrentItem().getType() != null)
    {
    event.setCancelled(true);
    Player p = (Player) event.getWhoClicked();
    if(event.getCurrentItem().hasItemMeta() && event.getCurrentItem().getItemMeta().hasDisplayName())
    {
     
    event.setCancelled(true);
     
    ItemStack clicked = event.getCurrentItem();
    if (clicked!=null){
    if (event.getCurrentItem().getItemMeta().getDisplayName().contains("§6Survival Games")){
    p.sendMessage("Survival Games is closed.");
    }
    }
    }
    }
    }
    }
     
  15. Offline

    zakarls

    So I've coded a gui, yet it does not seem to work. Can anyone help me with finding the problem.
    (Note: I'm not 100% sure that the problem is where I create the inventory. It could be somewhere else)
    Main Class:
    Code:java
    1. package me.zakarls.GUI;
    2.  
    3. import java.util.logging.Logger;
    4.  
    5.  
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.plugin.PluginDescriptionFile;
    10. import org.bukkit.plugin.PluginManager;
    11. import org.bukkit.plugin.java.JavaPlugin;
    12.  
    13. public class GUI extends JavaPlugin {
    14. public final Logger logger = Logger.getLogger("Minecraft");
    15.  
    16. @Override
    17. public void onDisable() {
    18. PluginDescriptionFile pdfFile = this.getDescription();
    19. this.logger.info(pdfFile.getName() + " Has Been Disabled!");
    20. }
    21.  
    22. @Override
    23. public void onEnable() {
    24. PluginDescriptionFile pdfFile = this.getDescription();
    25. this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion()
    26. + " Has Been Enabled!");
    27. PluginManager pm = getServer().getPluginManager();
    28. pm.registerEvents(this.ml, this);
    29. }
    30. public final MyListener ml = new MyListener(this);
    31.  
    32.  
    33. public boolean onCommand(CommandSender sender, Command cmd,
    34. String commandLabel, String[] args) {
    35. Player player = (Player) sender;
    36. if(commandLabel.equalsIgnoreCase("staff")){
    37. ml.show(player);
    38. }
    39.  
    40.  
    41.  
    42.  
    43. return false;
    44. }
    45. }

    Listener/Inventory Class:
    Code:java
    1. package me.zakarls.GUI;
    2.  
    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.inventory.Inventory;
    13. import org.bukkit.inventory.ItemStack;
    14. import org.bukkit.inventory.meta.ItemMeta;
    15. import org.bukkit.plugin.Plugin;
    16.  
    17. public class MyListener implements Listener{
    18.  
    19.  
    20. private Inventory inv;
    21. private ItemStack a, b, c, d, e, f, g, h, i;
    22.  
    23. public MyListener(Plugin p){
    24. inv = Bukkit.getServer().createInventory(null, 9, "Staff");
    25.  
    26. a = createItem("ZakayPvP", Arrays.asList("Owner"), Material.REDSTONE);
    27. b = createItem("QuinayPvP", Arrays.asList("Owner"), Material.NETHER_BRICK_ITEM);
    28. c = createItem("aiyera", Arrays.asList("Head-Admin"), Material.CAKE);
    29. d = createItem("outpost89not", Arrays.asList("Head-Mod"), Material.SLIME_BALL);
    30. e = createItem("CCoesBruins", Arrays.asList("Helper"), Material.COMPASS);
    31. f = createItem("SBGamers4", Arrays.asList("Helper"), Material.BEDROCK);
    32. g = createItem("xX0Epic_Life0Xx", Arrays.asList("Helper"), Material.DIAMOND_SWORD);
    33. h = createItem("Saints980", Arrays.asList("Helper"), Material.SPONGE);
    34. i = createItem("SandersDoesMC", Arrays.asList("Helper"), Material.COOKED_CHICKEN);
    35.  
    36.  
    37. inv.setItem(1, a);
    38. inv.setItem(2, b);
    39. inv.setItem(3, c);
    40. inv.setItem(4, d);
    41. inv.setItem(5, e);
    42. inv.setItem(6, f);
    43. inv.setItem(7, g);
    44. inv.setItem(8, h);
    45. inv.setItem(9, i);
    46.  
    47. }
    48.  
    49. private ItemStack createItem(String name, List<String> lore, Material material){
    50. ItemStack is = new ItemStack(material, 1);
    51. ItemMeta im = i.getItemMeta();
    52. im.setDisplayName(name);
    53. im.setLore(lore);
    54. is.setItemMeta(im);
    55. ///////////////////////////////////////////////////
    56. /*ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
    57.   SkullMeta im = (SkullMeta) is.getItemMeta();
    58.   im.setOwner(name);
    59.   im.setDisplayName(name);
    60.   im.setLore(lore);
    61.   is.setItemMeta(im);*/
    62. /////////////////////////////////////////////
    63. /*ItemStack i = new Wool(dc).toItemStack(1);
    64.   ItemMeta im = i.getItemMeta();
    65.   im.setDisplayName(name);
    66.   im.setLore(Arrays.asList("Set your gamemode", "to " + name.toLowerCase() + " mode"));
    67.   i.setItemMeta(im);*/
    68. return is;
    69. }
    70. public void show(Player p){
    71. p.openInventory(inv);
    72. }
    73.  
    74. @EventHandler
    75. public void onInventoryClick(InventoryClickEvent event){
    76. if(event.getInventory().getName().equalsIgnoreCase(inv.getName())){
    77. event.setCancelled(true);
    78. };
    79. /*if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Survival")){
    80.   event.setCancelled(true);
    81.   event.getWhoClicked().setGameMode(GameMode.SURVIVAL);
    82.   }
    83.   if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Creative")){
    84.   event.setCancelled(true);
    85.   event.getWhoClicked().setGameMode(GameMode.CREATIVE);
    86.   }
    87.   if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Adventure")){
    88.   event.setCancelled(true);
    89.   event.getWhoClicked().setGameMode(GameMode.ADVENTURE);
    90.   }*/
    91. }
    92. }
    93.  

    Thanks for any help on this issue.
     
Thread Status:
Not open for further replies.

Share This Page