Solved Giving Custom Name to An Item On Join

Discussion in 'Plugin Development' started by Sneling, Apr 15, 2014.

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

    Sneling

    Hello,

    I am doing a plugin(in french), but i can't do that when the player joins , it gives hims an item with a custom name.

    Main Class:
    Code:java
    1. package fr.sneling.item;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Material;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.block.Action;
    10. import org.bukkit.event.block.BlockBreakEvent;
    11. import org.bukkit.event.block.BlockPlaceEvent;
    12. import org.bukkit.event.inventory.InventoryClickEvent;
    13. import org.bukkit.event.player.PlayerDropItemEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.event.player.PlayerJoinEvent;
    16. import org.bukkit.inventory.ItemStack;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18.  
    19. public class MenuInv extends JavaPlugin implements Listener{
    20. private MenuBoussole menu;
    21. public void onEnable() {
    22. menu = new MenuBoussole(this);
    23. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    24. }
    25.  
    26. @EventHandler
    27. public void onPlayerInteract(PlayerInteractEvent e) {
    28. if (!(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR)) return;
    29. if(e.getPlayer().getItemInHand().getType() == Material.COMPASS) {
    30. menu.show(e.getPlayer());
    31. }
    32. }
    33.  
    34. @EventHandler
    35. public void onJoin(PlayerJoinEvent e){
    36. ItemStack itemboussole = new ItemStack(Material.COMPASS);
    37. itemboussole.getItemMeta().setDisplayName("Teleporteur Z4X - Clique droit pour l'utiliser");
    38. e.getPlayer().getInventory().clear();
    39. e.getPlayer().getInventory().addItem(itemboussole);
    40.  
    41. }
    42.  
    43. @EventHandler
    44. public void onDrop(PlayerDropItemEvent e){
    45. e.setCancelled(true);
    46. }
    47. @EventHandler
    48. public void onPlace(BlockPlaceEvent e){
    49. if(!(e.getPlayer().hasPermission("lobbyitem.build"))){
    50. e.getPlayer().sendMessage(ChatColor.RED + " Tu ne placeras pas de blocs!");
    51. e.setCancelled(true);}
    52.  
    53. }
    54. @EventHandler
    55. public void onPBreak(BlockBreakEvent e){
    56. if(!(e.getPlayer().hasPermission("lobbyitem.build"))){
    57. e.getPlayer().sendMessage(ChatColor.RED + " Tu ne casseras pas de blocs!");
    58. e.setCancelled(true);
    59. }
    60. }
    61. @EventHandler
    62. public void onInventoryClick(InventoryClickEvent e) {
    63. Player p = (Player) e.getWhoClicked();
    64. if (e.getCurrentItem().getItemMeta() == null) return;
    65. if(p.hasPermission("lobbyitem.change")) return;
    66. e.setCancelled(true);
    67. p.sendMessage(ChatColor.RED + " Tu n'as pas le droit de changer de place ces items!");
    68. }
    69.  
    70. }
    71.  


    Also, i delete it , but i think it's support chatcolor. No?
     
  2. Offline

    NonameSL

    Code:java
    1.  
    2. ItemMeta im = itemboussole.getItemMeta();
    3. im.setDisplayName(/*Supports ChatColor!*/"Teleporteur Z4X - Clique droit pour l'utiliser");
    4. itemboussole.setItemMeta(im);
    5.  
     
  3. Offline

    Sneling

    hum... it's not working
    i'm sure i did something stupid...
    Code:java
    1. @EventHandler
    2. public void onJoin(PlayerJoinEvent e){
    3. ItemStack itemboussole = new ItemStack(Material.COMPASS);
    4. ItemMeta im = itemboussole.getItemMeta();
    5. itemboussole.getItemMeta().setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD+ "Teleporteur Z4X" + ChatColor.GRAY + " - " +ChatColor.DARK_GREEN + "Clique droit pour l'utiliser");
    6. itemboussole.setItemMeta(im);
    7. e.getPlayer().getInventory().clear();
    8. e.getPlayer().getInventory().addItem(itemboussole);
    9.  
    10. }
     
  4. Offline

    agent6262

    Sneling
    Try and specify the amount of that item stack.
    Code:java
    1. ItemStack itemboussole = new ItemStack(Material.COMPASS, 1);


    Fixed possible errors in you code
    Code:java
    1. @EventHandler
    2. public void onJoin(PlayerJoinEvent e){
    3. ItemStack itemboussole = new ItemStack(Material.COMPASS);
    4. ItemMeta im = itemboussole.getItemMeta();
    5. im.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD+ "Teleporteur Z4X" + ChatColor.GRAY + " - " +ChatColor.DARK_GREEN + "Clique droit pour l'utiliser");
    6. itemboussole.setItemMeta(im);
    7. e.getPlayer().getInventory().clear();
    8. e.getPlayer().getInventory().addItem(itemboussole);
    9.  
    10. }

    tag or pm me and tell me how it goes.
     
  5. Offline

    Sneling

    agent6262 not working :/

    Code:java
    1. @EventHandler
    2. public void onJoin(PlayerJoinEvent e){
    3. ItemStack itemboussole = new ItemStack(Material.COMPASS, 1);
    4. ItemMeta meta = itemboussole.getItemMeta();
    5. itemboussole.getItemMeta().setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Teleporteur Z4X" + ChatColor.GRAY + " - " +ChatColor.DARK_GREEN + "Clique droit pour l'utiliser");
    6. itemboussole.setItemMeta(meta);
    7. e.getPlayer().getInventory().clear();
    8. e.getPlayer().getInventory().addItem(itemboussole);
    9.  
    10. }
     
  6. Offline

    agent6262

    Sneling
    oh i had this problem a while back. when a player joins the server it has to load in everything but the problem is that, this event is fired before everything is loaded in. So you are going to want to delay part of your code so everything else is loaded in first. P.S. this is just an example
    Code:java
    1. @EventHandler
    2. public void onJoin(PlayerJoinEvent e){
    3. ItemStack itemboussole = new ItemStack(Material.COMPASS, 1);
    4. ItemMeta meta = itemboussole.getItemMeta();
    5. itemboussole.getItemMeta().setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Teleporteur Z4X" + ChatColor.GRAY + " - " +ChatColor.DARK_GREEN + "Clique droit pour l'utiliser");
    6. itemboussole.setItemMeta(meta);
    7. e.getPlayer().getInventory().clear();
    8. this.getServer().getScheduler().scheduleSyncDelayedTask(this,
    9. new Runnable(){
    10. @Override
    11. public void run(){
    12. e.getPlayer().getInventory().addItem(itemboussole);
    13. }
    14. }, 10L);
    15. }

    10L is the time to wait.
     
  7. Offline

    itzrobotix

    Why did you give the item meta a variable but not use it?... Comen sense. I don't make a player variable but use e.getPlayer()
     
  8. Offline

    agent6262

    itzrobotix
    I fixed that part of his code in a previous post because It would have caused problems later on. But I guess he did not see it
     
    itzrobotix likes this.
  9. Offline

    NonameSL

    When setting the display name you do itemboussole.getItemMeta().setDisplayName() instead of meta.setDisplayName(), that way meta does not get modified.
     
  10. Offline

    coasterman10

    The getItemMeta() method returns a new copy of the existing meta, so you need to set that to a variable, change that variable, and then pass that variable to setItemMeta().
     
  11. Offline

    Konkz

    PHP:
        public static ItemStack getMyItem() {
            
    ItemStack item = new ItemStack(Material.IRON_SPADE1);
            
    ItemMeta im item.getItemMeta();
            
    im.setDisplayName(ChatColor.GREEN "My Item");
            List<
    Stringlore = new ArrayList<String>();
            
    lore.add(ChatColor.LIGHT_PURPLE "First line of lore");
            
    lore.add(ChatColor.AQUA "Second line of lore");
            
    im.setLore(lore);
            
    item.setItemMeta(im);
            return 
    item;
        }
     
        @
    EventHandler
        
    public void onJoin(PlayerJoinEvent e) {
            
    Player p e.getPlayer();
            
    getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                public 
    void run() {
                    
    p.getInventory().addItem(getMyItem());
                }
            }, 
    5L);
        }
     
    Sneling likes this.
  12. Offline

    Sneling

Thread Status:
Not open for further replies.

Share This Page