Skip to content

Instantly share code, notes, and snippets.

@avighnash
Created April 28, 2016 01:08
Show Gist options
  • Save avighnash/1c4459fa17da59ae2c2385dc6fc10510 to your computer and use it in GitHub Desktop.
Save avighnash/1c4459fa17da59ae2c2385dc6fc10510 to your computer and use it in GitHub Desktop.
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;
}
}
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>]");
}
}
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