Right-Click Mob GUI Help!

Discussion in 'Plugin Development' started by Sean0402, Jul 28, 2014.

Thread Status:
Not open for further replies.
  1. Hello how do I make it so when you right click a mob a GUI pops up? I have this code so far:

    Code:java
    1. public class GUI implements Listener {
    2.  
    3. public void teleportInWord(Player player, int x, int y, int z) {
    4. player.teleport(new Location(player.getWorld(), x, y, z));
    5. }
    6.  
    7. public void openGUI(Player player){
    8. Inventory inv = Bukkit.createInventory(null, 9, ChatColor.GOLD + "Shop");
    9.  
    10. ItemStack pvpkit = new ItemStack(Material.DIAMOND_CHESTPLATE);
    11. ItemMeta pvpkitMeta = pvpkit.getItemMeta();
    12. ItemStack knightkit = new ItemStack(Material.DIAMOND_SWORD);
    13. ItemMeta knightkitMeta = knightkit.getItemMeta();
    14. ItemStack archerkit = new ItemStack(Material.BOW);
    15. ItemMeta archerkitMeta = archerkit.getItemMeta();
    16.  
    17. pvpkitMeta.setDisplayName(ChatColor.RED + "PvP Kit");
    18. pvpkit.setItemMeta(pvpkitMeta);
    19.  
    20. knightkitMeta.setDisplayName(ChatColor.GREEN + "Knight Kit");
    21. knightkit.setItemMeta(knightkitMeta);
    22.  
    23. archerkitMeta.setDisplayName(ChatColor.YELLOW + "Arhcer Kit");
    24. archerkit.setItemMeta(archerkitMeta);
    25.  
    26. inv.setItem(0, pvpkit);
    27. inv.setItem(4, knightkit);
    28. inv.setItem(8, archerkit);
    29.  
    30. player.openInventory(inv);
    31. }
    32. @EventHandler
    33. public void onPlayerInteract(PlayerInteractEvent e){
    34. Action a = e.getAction();
    35. ItemStack is = e.getItem();
    36.  
    37.  
    38. }
    39.  
    40. }
     
  2. Offline

    Deleted user

  3. Offline

    TriiZ

    You need to change the event to PlayerInteractEntityEvent. It might also be EntityInteractEntityEvent but I don't think it is. Then just get the player object and then make a mobtype object like Creeper c = (Creeper) event.getRightClicked. But obviously check if the right clicked was a creeper. Then if it was just call the openGUI method you created and maybe send the player a message.
     
  4. Offline

    GameplayJDK

    Sean0402
    Use the 'PlayerInteractEntityEvent' instead of the 'PlayerInteractEvent'.
    Should be something like this:
    Code:java
    1. if (e.getRightClicked().getType() == EntityType.WHATEVER) {
    2. openGUI(e.getPlayer());
    3. }
     
  5. GameplayJDK I done most of my code but i'm trying to make it have a shop when you right click a villager, but it isn't working.. Any help would be nice! :D

    Code:java
    1. public void teleportInWord(Player player, int x, int y, int z) {
    2. player.teleport(new Location(player.getWorld(), x, y, z));
    3. }
    4.  
    5. public void openGUI(Player player){
    6. Inventory inv = Bukkit.createInventory(null, 9, ChatColor.GOLD + "Shop");
    7.  
    8. ItemStack pvpkit = new ItemStack(Material.DIAMOND_CHESTPLATE);
    9. ItemMeta pvpkitMeta = pvpkit.getItemMeta();
    10. ItemStack knightkit = new ItemStack(Material.DIAMOND_SWORD);
    11. ItemMeta knightkitMeta = knightkit.getItemMeta();
    12.  
    13. pvpkitMeta.setDisplayName(ChatColor.RED + "PvP Kit");
    14. pvpkit.setItemMeta(pvpkitMeta);
    15.  
    16. knightkitMeta.setDisplayName(ChatColor.GREEN + "Knight Kit");
    17. knightkit.setItemMeta(knightkitMeta);
    18.  
    19.  
    20. inv.setItem(0, pvpkit);
    21. inv.setItem(4, knightkit);
    22.  
    23. player.openInventory(inv);
    24. }
    25.  
    26. @EventHandler
    27. public void onInventoryClick(InventoryClickEvent e){
    28. if(ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("Shop"))
    29. return;
    30. Player player = (Player) e.getWhoClicked();
    31. e.setCancelled(true);
    32.  
    33. if(e.getCurrentItem()== null || e.getCurrentItem().getType()==Material.AIR||e.getCurrentItem().hasItemMeta()){
    34. player.closeInventory();
    35. return;
    36. }
    37. switch(e.getCurrentItem().getType()){
    38. case DIAMOND_CHESTPLATE:
    39. teleportInWord(player, 287, 87, -56);
    40. player.sendMessage((String.format("%sTeleported To %sShop%s!", ChatColor.GOLD,ChatColor.RED,ChatColor.GOLD)));
    41. break;
    42. case DIAMOND_SWORD:
    43. teleportInWord(player, 292, 87, -56);
    44. player.sendMessage((String.format("%sTeleported To %sKit Selector%s!", ChatColor.GOLD,ChatColor.GREEN,ChatColor.GOLD)));
    45. break;
    46. default:
    47. player.closeInventory();
    48. break;
    49. }
    50. }
    51.  
    52. @EventHandler
    53. public void onPlayerJoin(PlayerJoinEvent e){
    54. e.getPlayer().getInventory().addItem(new ItemStack(Material.BLAZE_ROD));
    55. }
    56.  
    57. @EventHandler
    58. public void onPlayerInteractEntity(PlayerInteractEntityEvent e){
    59. if(e.getRightClicked().getType() == EntityType.VILLAGER){
    60. openGUI(e.getPlayer());
    61. }
    62.  
    63. }
    64.  
    65. }
     
  6. Offline

    GameplayJDK

    Sean0402 I think you would have to cancel the 'PlayerInteractEntityEvent' before opening the new inventory:
    Code:java
    1. if (!e.isCancelled()) { e.setCancelled(true); }

    I don't know if it makes any difference if you use e.getClickedItem() instead of e.getCurrentItem() in the 'InventoryClickEvent' handler..
    I think it'd easier to use a helper class like in this resource: https://forums.bukkit.org/threads/icon-menu.108342/
     
  7. GameplayJDK yeah.. Still no luck..
    Code:java
    1. @EventHandler
    2. public void onPlayerInteractEntity(PlayerInteractEntityEvent e){
    3. if (!e.isCancelled()) { e.setCancelled(true); }
    4. if(e.getRightClicked().getType() == EntityType.VILLAGER){
    5. openGUI(e.getPlayer());
    6. }
    7.  
    8. }
    9. }
     
  8. Offline

    fireblast709

    Sean0402 debug your code, is the event handler called? If not, check whether the Listener is registered.
     
    GameplayJDK likes this.
  9. Hello i'm still trying to do this since I just lost my java code but I got most of it back. How do I make it open an inventory Etc..
     
Thread Status:
Not open for further replies.

Share This Page