Open a Book by right-clicking it in a inventory

Discussion in 'Plugin Development' started by Wbjpen, Sep 12, 2013.

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

    Wbjpen

    So I have a Inventory Menu set up, and there's a written book with text in it. Is there a way I can have it open up when it is right or left-clicked in it's container inventory?

    Here is the class

    Code:java
    1. public class Menu implements Listener {
    2.  
    3. private Inventory inv;
    4. private ItemStack c, s, a;
    5.  
    6.  
    7. public Menu(Plugin p) {
    8. inv = Bukkit.getServer().createInventory(null, 9, ChatColor.DARK_GRAY+" |- "+ChatColor.RED+"Character Menu"+ChatColor.DARK_GRAY+" -|");
    9. c = createMagicItem(ChatColor.BLUE + "Magic");
    10. s = createSkillsItem(ChatColor.GREEN + "Skills");
    11. a = createStatsBook(ChatColor.RED + "Stats");
    12.  
    13. inv.setItem(3, c);
    14. inv.setItem(4, s);
    15. inv.setItem(5, a);//Adds book to menu
    16.  
    17. Bukkit.getServer().getPluginManager().registerEvents(this, p);
    18. }
    19.  
    20. private ItemStack createStatsBook(String name) {//Makes the book
    21. ItemStack bookItem = new ItemStack(Material.WRITTEN_BOOK, 1);
    22. BookMeta metaData = (BookMeta) bookItem.getItemMeta();
    23. metaData.setTitle(name);
    24. metaData.setAuthor(ChatColor.LIGHT_PURPLE+"No one");
    25. metaData.addPage("Text!", "More Text!");
    26.  
    27. bookItem.setItemMeta(metaData);
    28. return bookItem;
    29. }
    30.  
    31. private ItemStack createMagicItem(String name) {
    32. ItemStack i = new ItemStack(Material.BLAZE_POWDER);
    33. ItemMeta im = i.getItemMeta();
    34. im.setDisplayName(name);
    35. i.setItemMeta(im);
    36. return i;
    37. }
    38. private ItemStack createSkillsItem(String name) {
    39. ItemStack i = new ItemStack(Material.BOW);
    40. ItemMeta im = i.getItemMeta();
    41. im.setDisplayName(name);
    42. i.setItemMeta(im);
    43. return i;
    44. }
    45. private ItemStack createStatsItem(String name) {
    46. ItemStack i = new ItemStack(Material.SIGN);
    47. ItemMeta im = i.getItemMeta();
    48. im.setDisplayName(name);
    49. i.setItemMeta(im);
    50. return i;
    51. }
    52.  
    53.  
    54. public void show(Player p) {
    55. p.openInventory(inv);
    56. }
    57.  
    58. @EventHandler
    59. public void onInventoryClick(InventoryClickEvent e) {
    60. if (!e.getInventory().getName().equalsIgnoreCase(inv.getName())) return;
    61. if (e.getCurrentItem().getItemMeta() == null) return;
    62. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Magic")) {
    63. e.setCancelled(true);
    64. e.getWhoClicked().setGameMode(GameMode.CREATIVE);
    65. e.getWhoClicked().closeInventory();
    66. }
    67. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Skills")) {
    68. e.setCancelled(true);
    69. e.getWhoClicked().setGameMode(GameMode.SURVIVAL);
    70. e.getWhoClicked().closeInventory();
    71. }
    72. if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Stats")) {
    73. e.setCancelled(true);
    74. e.getWhoClicked().setGameMode(GameMode.ADVENTURE);
    75. e.getWhoClicked().closeInventory();
    76. }
    77. }
    78. }
     
  2. Offline

    Wbjpen

    I thought it would be possible if the server could find the book somewhere. Thanks for letting me know.
     
  3. Offline

    tommycake50

    No, its client sided,
    The client just requests the books content.
     
Thread Status:
Not open for further replies.

Share This Page