Registering NPC Traits Properly?

Discussion in 'Plugin Development' started by Rockinredross867, May 14, 2015.

Thread Status:
Not open for further replies.
  1. I am getting yet another error on this library. It is saying that I am not registering the trait properly.

    Here is where I'm creating the NPC
    Code:
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(args[0].equalsIgnoreCase("ParkourStartVillager") && sender instanceof Player) {
                Player player = (Player) sender;
                if(args.length == 1) {
                    createNewNPC(EntityType.VILLAGER, "Parkour Challenge", ParkourStartTrait.getInstance(), player);
                } else {
                    player.sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TheNest" + ChatColor.GOLD + "]" + ChatColor.RED + " Please specify a command.");
                }
            } else if(args[0].equalsIgnoreCase("ParkourEndVillager") && sender instanceof Player) {
                Player player = (Player) sender;
                if(args.length == 1) {
                    createNewNPC(EntityType.VILLAGER, "All Done With Parkour", ParkourEndTrait.getInstance(), player);
                } else {
                    player.sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TheNest" + ChatColor.GOLD + "]" + ChatColor.RED + " Please specify a command.");
                }
                }
            return false;
        }
      
        private void createNewNPC(EntityType entity, String name, Trait trait, Player player) {
            NPCRegistry registry = CitizensAPI.getNPCRegistry();
            NPC npc = registry.createNPC(entity, name);
            npc.spawn(player.getLocation());
            npc.addTrait(trait);
        }
    One Of My Traits
    Code:
    package com.Gadgets.traits;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import net.citizensnpcs.api.event.NPCClickEvent;
    import net.citizensnpcs.api.trait.Trait;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    
    import com.Gadgets.main.Economy;
    import com.Gadgets.main.Gadgets;
    
    public class ParkourStartTrait extends Trait{
     
     public List<Player> tagged = new ArrayList<Player>();
    
     public static ParkourStartTrait instance;
     private Economy eco;
      Gadgets plugin = null;
     
     public ParkourStartTrait() {
     super("ParkourStartTrait");
     plugin = (Gadgets) Bukkit.getServer().getPluginManager().getPlugin("TheNestHubGadgets");
     }
     
     public static ParkourStartTrait getInstance() {
     return instance;
     }
     
     @EventHandler
     public void onClicked(NPCClickEvent event) {
     Player player = event.getClicker();
     if(!tagged.contains(player) && (event.getNPC() == this.getNPC())) {
     tagged.add(player);
     player.sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TheNest" + ChatColor.GOLD + "]" + ChatColor.GREEN.toString() + ChatColor.BOLD + "Parkour challenge has been activated!");
     } else if(tagged.contains(player)){
     tagged.remove(player);
     player.sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TheNest" + ChatColor.GOLD + "]" + ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + "You won " + ChatColor.GOLD.toString() + ChatColor.BOLD + "100" + ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + " Coins!");
     eco.setPlayerBalance(player, 100);
     }
     }
     
     @Override
     public void onAttach() {
     plugin.getServer().getLogger().info(npc.getName() + "has been assigned ParkourStartTrait!");
     }
     
    }
    
    Another one of my traits

    Code:
    package com.Gadgets.traits;
    
    import net.citizensnpcs.api.event.NPCClickEvent;
    import net.citizensnpcs.api.trait.Trait;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    
    import com.Gadgets.main.Gadgets;
    
    public class ParkourEndTrait extends Trait{
     
     Gadgets plugin = null;
     public static ParkourEndTrait instance;
     
     public ParkourEndTrait() {
     super("ParkourEndTrait");
     plugin = (Gadgets) Bukkit.getServer().getPluginManager().getPlugin("TheNestHubGadgets");
     }
     
     public static ParkourEndTrait getInstance() {
     return instance;
     }
     
     @EventHandler
     public void onClicked(NPCClickEvent event) {
     Player player = event.getClicker();
     if(ParkourStartTrait.getInstance().tagged.contains(player) && (event.getNPC() == this.getNPC())) {
     player.sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TheNest" + ChatColor.GOLD + "]" + ChatColor.GREEN.toString() + ChatColor.BOLD + "Parkour challenge has been completed! Go to the villager labeled 'Parkour Challenge' to collect your prize.");
     }
     }
     
     @Override
     public void onAttach() {
     plugin.getServer().getLogger().info(npc.getName() + "has been assigned ParkourEndTrait!");
     }
    
    }
    
    
    Here is my main class file

    Code:
    @Override
        public void onEnable() {
            instance = this;
            createConfig();
            getLogger().info("Plugin is enabling");
            Commands cmd = new Commands();
            getCommand("TheNest").setExecutor(cmd);
            Bukkit.getServer().getPluginManager().registerEvents(new DoubleJump(), getInstance());
            Bukkit.getServer().getPluginManager().registerEvents(new OnInteract(), getInstance());
            Bukkit.getServer().getPluginManager().registerEvents(new OnJoin(), getInstance());
              if(getServer().getPluginManager().getPlugin("Citizens") == null || getServer().getPluginManager().getPlugin("Citizens").isEnabled() == false) {
                    getLogger().log(Level.SEVERE, "Citizens 2.0 not found or not enabled");
                    getServer().getPluginManager().disablePlugin(this);
                    return;
                }
              CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParkourStartTrait.class).withName("ParkourStartTrait"));
              CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParkourEndTrait.class).withName("ParkourEndTrait"));
        }
    The Error I have been getting

    Error (open)
    [15:10:06] [Server thread/ERROR]: [Citizens] Cannot register a null trait. Was it registered properly?
     
    Last edited: May 17, 2015
  2. Offline

    Agentleader1

    You should've mentioned that you are implementing the Citizens API.

    At best, just look at their wiki page or something. They are guaranteed to have something that lets you look at the code and register an object. Worst case scenario, just look at their source code.
     
  3. I have looked up their wiki page and found nothing useful. Plus I am registering the trait exactly how they owner said to, but I probably misread something. It also is pretty obvious that I am using the citizens2 library, so I thought I didn't need to state that. I also am still looking for an answer.
     
  4. Offline

    Agentleader1

    @Rockinredross867 Make sure to tahg me next time.

    Look at eclipse, and locate the implemented library. Identify it correctly to the current Citizens Plugin.
     
  5. Could I get any help?
     
Thread Status:
Not open for further replies.

Share This Page