Created
April 28, 2016 01:08
-
-
Save avighnash/1c4459fa17da59ae2c2385dc6fc10510 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package us.universalpvp.pp.managers; | |
import java.util.ArrayList; | |
import org.bukkit.Bukkit; | |
import org.bukkit.configuration.ConfigurationSection; | |
import org.bukkit.entity.Player; | |
public class Groups { | |
private String name; | |
private ArrayList<String> perms; | |
public Groups(String name) { | |
this.name = name; | |
ConfigurationSection s = PermissionsManager.getInstance().getGroupSection(name); | |
if (!s.contains("perms")) | |
s.set("perms", new ArrayList<String>()); | |
this.perms = new ArrayList<String>(s.getStringList("perms")); | |
} | |
public String getName() { | |
return name; | |
} | |
public boolean hasPerm(String perm) { | |
return perms.contains(perm); | |
} | |
public void addPerm(String perm) { | |
perms.add(perm); | |
PermissionsManager.getInstance().getGroupSection(name).set("perms", perms); | |
PermissionsManager.getInstance().save(); | |
for (Player players : Bukkit.getOnlinePlayers()) { | |
PermissionsManager.getInstance().injectPlayer(players); | |
} | |
} | |
public void removePerm(String perm) { | |
perms.remove(perm); | |
PermissionsManager.getInstance().getGroupSection(name).set("perms", perms); | |
PermissionsManager.getInstance().save(); | |
for (Player players : Bukkit.getOnlinePlayers()) { | |
PermissionsManager.getInstance().injectPlayer(players); | |
} | |
} | |
public ArrayList<String> getPerms() { | |
return perms; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package us.universalpvp.pp.cmds; | |
import org.bukkit.ChatColor; | |
import org.bukkit.command.CommandSender; | |
import us.universalpvp.pp.managers.PermissionsManager; | |
public class GroupCmd extends PermsCommand { | |
public void run(CommandSender sender, String[] args) { | |
if (args.length == 0) { | |
sender.sendMessage(ChatColor.RED + "Please specify a group."); | |
return; | |
} | |
String g = args[0]; | |
if (args.length < 2) { | |
if (PermissionsManager.getInstance().getGroup(g) != null) { | |
if (PermissionsManager.getInstance().getGroup(g).getPerms().size() == 0) { | |
sender.sendMessage(ChatColor.GREEN + "No permissions for " + g); | |
return; | |
} | |
for (String perm : PermissionsManager.getInstance().getGroup(g).getPerms()) { | |
sender.sendMessage(ChatColor.BLUE + perm); | |
return; | |
} | |
} else { | |
sender.sendMessage( | |
ChatColor.RED + "Group " + ChatColor.YELLOW + g + ChatColor.RED + " does not exist!"); | |
sender.sendMessage(ChatColor.GREEN + "Syntax to create a group is: " + "/perms group <group> create"); | |
} | |
} else { | |
if (args[1].equalsIgnoreCase("create")) { | |
PermissionsManager.getInstance().createGroup(g); | |
sender.sendMessage(ChatColor.GREEN + "Created group " + g + "!"); | |
return; | |
} else if (args[1].equalsIgnoreCase("delete")) { | |
if (args.length < 3) { | |
sender.sendMessage(ChatColor.RED + "Please specify a group name!"); | |
return; | |
} else { | |
PermissionsManager.getInstance().removeGroup(null, g); | |
sender.sendMessage(ChatColor.BLUE + "Removed group " + g); | |
return; | |
} | |
} else if (args[1].equalsIgnoreCase("addperm")) { | |
PermissionsManager.getInstance().getGroup(g).addPerm(args[2]); | |
sender.sendMessage(ChatColor.GREEN + "Added " + args[2] + " to group " + g); | |
return; | |
} else if (args[1].equalsIgnoreCase("removeperm")) { | |
PermissionsManager.getInstance().getGroup(g).removePerm(args[2]); | |
sender.sendMessage(ChatColor.BLUE + "Removed " + args[2] + " from group " + g); | |
return; | |
} | |
} | |
} | |
public GroupCmd() { | |
super("group", "[<name | list>] [<create | delete | addperm | removeperm> <perm>]"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package us.universalpvp.pp.managers; | |
import java.io.File; | |
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.ConfigurationSection; | |
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; | |
public class PermissionsManager { | |
private PermissionsManager() { | |
} | |
private static PermissionsManager instance = new PermissionsManager(); | |
public static PermissionsManager getInstance() { | |
return instance; | |
} | |
private Plugin p; | |
private FileConfiguration config; | |
private File cfile; | |
private HashMap<String, PermissionAttachment> attachments = new HashMap<String, PermissionAttachment>(); | |
private ArrayList<Groups> groups = new ArrayList<>(); | |
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); | |
if (!config.contains("groups")) | |
config.createSection("groups"); | |
setupGroups(); | |
} | |
public void addPerm(String player, String perm) { | |
player = player.toLowerCase(); | |
Player p = Bukkit.getServer().getPlayer(player); | |
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); | |
save(); | |
} | |
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); | |
save(); | |
} | |
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 void addGroup(String player, String g) { | |
player = player.toLowerCase(); | |
List<String> groups = getGroups(player); | |
groups.add(g); | |
config.set("user." + player + ".groups", groups); | |
save(); | |
Player p = Bukkit.getServer().getPlayer(player); | |
if (p != null) { | |
injectPlayer(p); | |
} | |
} | |
public void removeGroup(String player, String g) { | |
player = player.toLowerCase(); | |
List<String> groups = getGroups(player); | |
groups.remove(g); | |
config.set("user." + player + ".groups", groups); | |
save(); | |
Player p = Bukkit.getServer().getPlayer(player); | |
if (p != null) { | |
injectPlayer(p); | |
} | |
} | |
public List<String> getGroups(String player) { | |
player = player.toLowerCase(); | |
if (!config.contains("user." + player + ".groups")) | |
config.set("user." + player + ".groups", new ArrayList<String>()); | |
return config.getStringList("user." + player + ".groups"); | |
} | |
public void createGroup(String group) { | |
config.getConfigurationSection("groups").set(group + ".perms", new ArrayList<String>()); | |
save(); | |
setupGroups(); | |
} | |
private void setupGroups() { | |
groups.clear(); | |
for (String groupName : config.getConfigurationSection("groups").getKeys(false)) { | |
groups.add(new Groups(groupName)); | |
} | |
} | |
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); | |
} | |
if (!config.contains("user." + p.getName().toLowerCase() + ".groups")) | |
config.set("user." + p.getName().toLowerCase() + ".groups", new ArrayList<String>()); | |
for (String gName : config.getStringList("user." + p.getName().toLowerCase() + ".groups")) { | |
for (Groups g : groups) { | |
if (g.getName().equals(gName)) { | |
for (String perm : g.getPerms()) { | |
System.out.println("Injecting " + perm + " from " + gName); | |
attachments.get(p.getName()).setPermission(perm, true); | |
} | |
} | |
} | |
} | |
} | |
} | |
public void uninjectPlayer(Player pl) { | |
if (attachments.get(pl.getName()) == null) | |
return; | |
pl.removeAttachment(attachments.get(pl.getName())); | |
attachments.remove(pl.getName()); | |
} | |
public Groups getGroup(String name) { | |
for (Groups g : groups) { | |
if (g.getName().equals(name)) | |
return g; | |
} | |
return null; | |
} | |
public ConfigurationSection getGroupSection(String name) { | |
return config.getConfigurationSection("groups." + name); | |
} | |
public void save() { | |
try { | |
config.save(cfile); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
public Plugin getPlugin() { | |
return p; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment