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
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.
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.
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.
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.
Konkz Oh. I see what you are saying. Thanks . 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.
Here PHP: ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); SkullMeta im = (SkullMeta) is.getItemMeta(); im.setOwner(bukkitPlayer.getName()); im.setDisplayName(bukkitPlayer.getName()); is.setItemMeta(im);
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."); } } } } } }
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 package me.zakarls.GUI; import java.util.logging.Logger; import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.plugin.PluginDescriptionFile;import org.bukkit.plugin.PluginManager;import org.bukkit.plugin.java.JavaPlugin; public class GUI extends JavaPlugin { public final Logger logger = Logger.getLogger("Minecraft"); @Override public void onDisable() { PluginDescriptionFile pdfFile = this.getDescription(); this.logger.info(pdfFile.getName() + " Has Been Disabled!"); } @Override public void onEnable() { PluginDescriptionFile pdfFile = this.getDescription(); this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion() + " Has Been Enabled!"); PluginManager pm = getServer().getPluginManager(); pm.registerEvents(this.ml, this); } public final MyListener ml = new MyListener(this); public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { Player player = (Player) sender; if(commandLabel.equalsIgnoreCase("staff")){ ml.show(player); } return false; }} Listener/Inventory Class: Code:java package me.zakarls.GUI; import java.util.Arrays;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.plugin.Plugin; public class MyListener implements Listener{ private Inventory inv; private ItemStack a, b, c, d, e, f, g, h, i; public MyListener(Plugin p){ inv = Bukkit.getServer().createInventory(null, 9, "Staff"); a = createItem("ZakayPvP", Arrays.asList("Owner"), Material.REDSTONE); b = createItem("QuinayPvP", Arrays.asList("Owner"), Material.NETHER_BRICK_ITEM); c = createItem("aiyera", Arrays.asList("Head-Admin"), Material.CAKE); d = createItem("outpost89not", Arrays.asList("Head-Mod"), Material.SLIME_BALL); e = createItem("CCoesBruins", Arrays.asList("Helper"), Material.COMPASS); f = createItem("SBGamers4", Arrays.asList("Helper"), Material.BEDROCK); g = createItem("xX0Epic_Life0Xx", Arrays.asList("Helper"), Material.DIAMOND_SWORD); h = createItem("Saints980", Arrays.asList("Helper"), Material.SPONGE); i = createItem("SandersDoesMC", Arrays.asList("Helper"), Material.COOKED_CHICKEN); inv.setItem(1, a); inv.setItem(2, b); inv.setItem(3, c); inv.setItem(4, d); inv.setItem(5, e); inv.setItem(6, f); inv.setItem(7, g); inv.setItem(8, h); inv.setItem(9, i); } private ItemStack createItem(String name, List<String> lore, Material material){ ItemStack is = new ItemStack(material, 1); ItemMeta im = i.getItemMeta(); im.setDisplayName(name); im.setLore(lore); is.setItemMeta(im); /////////////////////////////////////////////////// /*ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); SkullMeta im = (SkullMeta) is.getItemMeta(); im.setOwner(name); im.setDisplayName(name); im.setLore(lore); is.setItemMeta(im);*/ ///////////////////////////////////////////// /*ItemStack i = new Wool(dc).toItemStack(1); ItemMeta im = i.getItemMeta(); im.setDisplayName(name); im.setLore(Arrays.asList("Set your gamemode", "to " + name.toLowerCase() + " mode")); i.setItemMeta(im);*/ return is; } public void show(Player p){ p.openInventory(inv); } @EventHandler public void onInventoryClick(InventoryClickEvent event){ if(event.getInventory().getName().equalsIgnoreCase(inv.getName())){ event.setCancelled(true); }; /*if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Survival")){ event.setCancelled(true); event.getWhoClicked().setGameMode(GameMode.SURVIVAL); } if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Creative")){ event.setCancelled(true); event.getWhoClicked().setGameMode(GameMode.CREATIVE); } if(event.getCurrentItem().getItemMeta().getDisplayName().contains("Adventure")){ event.setCancelled(true); event.getWhoClicked().setGameMode(GameMode.ADVENTURE); }*/ }} Thanks for any help on this issue.