RankUp With Perms

Discussion in 'Plugin Development' started by Albkad, Feb 24, 2017.

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

    Albkad

    So I Am Making A RankUp Plugin That Will Allow People To RankUp And When Thjey Do They Will Get Different Perms. But It Just Gives Me An Error.
    Console: https://gyazo.com/d0ad98786c34e1f9a88c21023148468a
    SettingsManager Code:
    Code:
    package me.albkad.main;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map.Entry;
    
    import org.bukkit.Bukkit;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.permissions.PermissionAttachment;
    import org.bukkit.plugin.Plugin;
    
    import net.md_5.bungee.api.ChatColor;
    
    public class SettingsManager {
       
        private SettingsManager() { }
        private HashMap<String, PermissionAttachment> attachments = new HashMap<String, PermissionAttachment>();
       
        static SettingsManager instance = new SettingsManager();
       
        public static SettingsManager getInstance() {
            return instance;
        }
       
        private Plugin p;
        private FileConfiguration config;
        private File cfile;
       
       
        public void setup(Plugin p) {
            this.p = p;
           
            if (!p.getDataFolder().exists()) p.getDataFolder().mkdir();
           
            cfile = new File(p.getDataFolder(), "perms.yml");
           
            if (!cfile.exists()) {
                try { cfile.createNewFile(); }
                catch (Exception e) { e.printStackTrace(); }
            }
           
            config = YamlConfiguration.loadConfiguration(cfile);
        }
       
        public void injectPlayer(Player... pl) {
            for (Player p : pl) {
                if (attachments.get(p.getName()) == null) attachments.put(p.getName(), p.addAttachment(getPlugin()));
               
                for (Entry<String, Boolean> perm : attachments.get(p.getName()).getPermissions().entrySet()) {
                    if (getPerms(p.getName()).contains(perm.getKey())) attachments.get(p.getName()).setPermission(perm.getKey(), true);
                    else attachments.get(p.getName()).setPermission(perm.getKey(), false);
                }
            }
        }
    
        public void uninjectPlayer(Player pl) {
            if (attachments.get(pl.getName()) == null) return;
            pl.removeAttachment(attachments.get(pl.getName()));
            attachments.remove(pl.getName());
        }
       
       
        public void addPerm(String player, String perm) {
            player = player.toLowerCase();
           
            Player p = Bukkit.getServer().getPlayer(player);
           
            attachments.get(p).setPermission(perm, true);
           
            if (p != null) {
                injectPlayer(p);
                attachments.get(p.getName()).setPermission(perm, true);
            }
           
           
            List<String> perms = getPerms(player);
            perms.add(perm);
            config.set("user." + player + ".perms", perm);
           
            saveConfig();
        }
        public void removePerm(String player, String perm) {
            player = player.toLowerCase();
           
            Player p = Bukkit.getServer().getPlayer(player);
           
            if (p != null) {
                injectPlayer(p);
                attachments.get(p.getName()).setPermission(perm, false);
            }
           
            List<String> perms = getPerms(player);
            perms.remove(perm);
            config.set("user." + player + ".perms", perm);
           
            saveConfig();
        }
       
        public List<String> getPerms(String player) {
            player = player.toLowerCase();
            if (!config.contains("user." + player + ".perms")) config.set("user." + player + ".perms", new ArrayList<String>());
            return config.getStringList("user." + player + ".perms");
        }
       
       
       
       
        public FileConfiguration getConfig() {
            return config;
        }
        public void saveConfig() {
            try {
                config.save(cfile);
            }
            catch (IOException e) {
                Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could Not Save config.yml");
            }
        }
       
       
        public Plugin getPlugin() {
            return p;
        }
       
       
       
       
       
       
    
    }
    
    Main Code:
    Code:
    package me.albkad.main;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    public class Main extends JavaPlugin implements Listener {
        SettingsManager settings = SettingsManager.getInstance();
        String RankName = "RankVa";
        String RankName1 = "RankSuper";
        String RankName2 = "RankSuper";
        String RankName3= "RankSuper";
        String RankName4= "RankSuper";
        String RankName5 = "RankSuper";
        String RankName6= "RankSuper";
        String RankName7 = "RankSuper";
        List<String> Rank = new ArrayList<String>();
        List<String> Rank1 = new ArrayList<String>();
        List<String> Rank2 = new ArrayList<String>();
        List<String> Rank3 = new ArrayList<String>();
        List<String> Rank4 = new ArrayList<String>();
        List<String> Rank5 = new ArrayList<String>();
        List<String> Rank6 = new ArrayList<String>();
        List<Player> cooldown = new ArrayList<Player>();
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            SettingsManager.getInstance().setup(this);
            Bukkit.getServer().getPluginManager().registerEvents(new InjectEvents(), this);
        }
       
       
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
               
           
            if (cmd.getName().equalsIgnoreCase("rankup") && sender instanceof Player) {
                Player p = (Player) sender;
                if (!Rank1.contains(p.getName()) && Rank.contains(p.getName())) {
                    Rank1.add(p.getName());
                    SettingsManager.getInstance().addPerm(p.getName(), "nr.ranksuper");
                    Rank.remove(p.getName());
                    return true;
                }
               
            }
            if (cmd.getName().equalsIgnoreCase("setrank")) {
                Player p = (Player) sender;
                if (args.length == 0 ) {
                    p.sendMessage(ChatColor.RED + "/SetRank <player> <rank>");
                    return true;
                }
               
                if (args.length == 1 && sender instanceof Player) {
                    if (args[0].equalsIgnoreCase("RankVu")) {
                        Rank.add(p.getName());
                        return true;
                    }
                    if (args[0].equalsIgnoreCase("RankSuper")) {
                        Rank1.add(p.getName());
                        return true;
                    }
                }
                Player target = Bukkit.getServer().getPlayer(args[0]);
                if (target == null) return true;
                if (args[1].equalsIgnoreCase("RankVu")) {
                    Rank.add(target.getName());
                    return true;
                }
                if (args[1].equalsIgnoreCase("RankSuper")) {
                    Rank.add(target.getName());
                    return true;
                }
               
               
               
            }
            if (cmd.getName().equalsIgnoreCase("rank") && sender instanceof Player) {
                Player p = (Player) sender;
                if (Rank.contains(p.getName())) {
                    p.sendMessage(ChatColor.GREEN + "Your Rank Is " + RankName);
                    return true;
                }
                if (Rank1.contains(p.getName())) {
                    p.sendMessage(ChatColor.GREEN + "Your Rank Is " + RankName1);
                    return true;
                }
            }
           
            if (cmd.getName().equalsIgnoreCase("kit") && sender instanceof Player) {
                 final Player p = (Player) sender;
    
                if (args.length == 0) {
                    p.sendMessage(ChatColor.AQUA + "You Need To Specify A Kit!");
                    return true;
                }
               
                if (args.length >2) {
                    p.sendMessage(ChatColor.RED + "You Must Specify Only 1 Kit!");
                    return true;
                }
               
               
                if (args[0].equalsIgnoreCase("RankVu")) {
                    if (cooldown.contains(p)) {
                        p.sendMessage(ChatColor.RED + "You Must Wait Before Doing Your kit Again!");
                        return true;
                    }
                    p.getInventory().addItem(new ItemStack(Material.APPLE, 4));
                    p.getInventory().addItem(new ItemStack(Material.DIAMOND_PICKAXE, 1));
                    p.getInventory().addItem(new ItemStack(Material.DIAMOND_SWORD, 1));
                    p.getInventory().addItem(new ItemStack(Material.STONE, 16));
                    cooldown.add(p);
                    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                        public void run() {
                            cooldown.remove(p);
                        }
                    }, 100*20);
                }
                if (args[0].equalsIgnoreCase("RankSuper")) {
                    if (!p.hasPermission("nr.ranksuper")) {
                        p.sendMessage(ChatColor.RED + "You Are Not Allowed To Use This Kit!");
                        return true;
                    }
                   
                    if (cooldown.contains(p)) {
                        p.sendMessage(ChatColor.RED + "You Must Wait Before Doing Your kit Again!");
                        return true;
                    }
                    p.getInventory().addItem(new ItemStack(Material.DIAMOND, 16));
                    p.getInventory().addItem(new ItemStack(Material.APPLE, 4));
                    p.getInventory().addItem(new ItemStack(Material.DIAMOND_PICKAXE, 1));
                    p.getInventory().addItem(new ItemStack(Material.DIAMOND_SWORD, 1));
                    p.getInventory().addItem(new ItemStack(Material.STONE, 16));
                    cooldown.add(p);
                    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                        public void run() {
                            cooldown.remove(p);
                        }
                    }, 100*20);
                }
               
               
               
            }
            return true;
        }
       
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            if (!p.hasPlayedBefore()) {
                Rank.add(p.getName());
            }
        }
    
    }
    
     
  2. Offline

    mine-care

    The Null Pointer Exception points to line 77 of SettingsManager which if i am correct points to:

    attachments.get(p.getName()).setPermission(perm, true);
    So make sure that attachments.get(p.getName()) returns a non null value.
     
  3. Offline

    Albkad

  4. Online

    timtower Administrator Administrator Moderator

    @Albkad This is your second plugin isn't it?
    Your packages are probably the same as the previous one.
    Put the plugin name in your package and you should be good.
     
    mine-care likes this.
  5. Offline

    Albkad

Thread Status:
Not open for further replies.

Share This Page