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()); } } }
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.
@mine-care Now It Is Telling Me That Plugin Is Already Initialized And It Doesnt Load The Plugin. Console: https://gyazo.com/bff3fbb34e47c2954d7ae3e161bdce12
@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.