1
0
mirror of https://e.coding.net/circlecloud/Residence.git synced 2025-11-26 22:06:07 +00:00

comeplete 1.7-1.8 all version...

Signed-off-by: 502647092 <jtb1@163.com>
This commit is contained in:
502647092
2015-09-22 16:23:55 +08:00
parent 710390b5a6
commit 2f1aee005a
11 changed files with 2223 additions and 3107 deletions

View File

@@ -32,52 +32,8 @@ import com.bekvon.bukkit.residence.text.help.InformationPager;
*/
public class ClaimedResidence {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception {
ClaimedResidence res = new ClaimedResidence();
if (root == null)
throw new Exception("Null residence!");
res.enterMessage = (String) root.get("EnterMessage");
res.leaveMessage = (String) root.get("LeaveMessage");
if (root.containsKey("StoredMoney")) {
res.bank.setStoredMoney((Integer) root.get("StoredMoney"));
}
if (root.containsKey("BlackList")) {
res.blacklist = ResidenceItemList
.load(res, (Map<String, Object>) root.get("BlackList"));
}
if (root.containsKey("IgnoreList")) {
res.ignorelist = ResidenceItemList.load(res,
(Map<String, Object>) root.get("IgnoreList"));
}
Map<String, Object> areamap = (Map<String, Object>) root.get("Areas");
res.perms = ResidencePermissions.load(res, (Map<String, Object>) root.get("Permissions"));
World world = Residence.getServ().getWorld(res.perms.getWorld());
if (world == null)
throw new Exception("Cant Find World: " + res.perms.getWorld());
for (Entry<String, Object> map : areamap.entrySet()) {
res.areas.put(map.getKey(),
CuboidArea.load((Map<String, Object>) map.getValue(), world));
}
Map<String, Object> subzonemap = (Map<String, Object>) root.get("Subzones");
for (Entry<String, Object> map : subzonemap.entrySet()) {
ClaimedResidence subres = ClaimedResidence.load((Map<String, Object>) map.getValue(),
res);
if (Residence.getConfigManager().flagsInherit()) {
subres.getPermissions().setParent(res.getPermissions());
}
res.subzones.put(map.getKey(), subres);
}
res.parent = parent;
Map tploc = (Map) root.get("TPLoc");
if (tploc != null) {
res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"),
(Integer) tploc.get("Z"));
}
return res;
}
protected ClaimedResidence parent;
protected Map<String, CuboidArea> areas;
protected Map<String, ClaimedResidence> subzones;
protected ResidencePermissions perms;
@@ -86,17 +42,8 @@ public class ClaimedResidence {
protected String enterMessage;
protected String leaveMessage;
protected ResidenceItemList ignorelist;
protected ResidenceItemList blacklist;
private ClaimedResidence() {
subzones = new HashMap<String, ClaimedResidence>();
areas = new HashMap<String, CuboidArea>();
bank = new ResidenceBank(this);
blacklist = new ResidenceItemList(this, ListType.BLACKLIST);
ignorelist = new ResidenceItemList(this, ListType.IGNORELIST);
}
public ClaimedResidence(String creationWorld) {
this("Server Land", creationWorld);
}
@@ -111,114 +58,129 @@ public class ClaimedResidence {
parent = parentResidence;
}
private ClaimedResidence() {
subzones = new HashMap<String, ClaimedResidence>();
areas = new HashMap<String, CuboidArea>();
bank = new ResidenceBank(this);
blacklist = new ResidenceItemList(this, ListType.BLACKLIST);
ignorelist = new ResidenceItemList(this, ListType.IGNORELIST);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception {
ClaimedResidence res = new ClaimedResidence();
if (root == null)
throw new Exception("Null residence!");
res.enterMessage = (String) root.get("EnterMessage");
res.leaveMessage = (String) root.get("LeaveMessage");
if (root.containsKey("StoredMoney"))
res.bank.setStoredMoney((Integer) root.get("StoredMoney"));
if (root.containsKey("BlackList"))
res.blacklist = ResidenceItemList.load(res, (Map<String, Object>) root.get("BlackList"));
if (root.containsKey("IgnoreList"))
res.ignorelist = ResidenceItemList.load(res, (Map<String, Object>) root.get("IgnoreList"));
Map<String, Object> areamap = (Map<String, Object>) root.get("Areas");
res.perms = ResidencePermissions.load(res, (Map<String, Object>) root.get("Permissions"));
World world = Residence.getServ().getWorld(res.perms.getWorld());
if (world == null)
throw new Exception("Cant Find World: " + res.perms.getWorld());
for (Entry<String, Object> map : areamap.entrySet())
res.areas.put(map.getKey(), CuboidArea.load((Map<String, Object>) map.getValue(), world));
Map<String, Object> subzonemap = (Map<String, Object>) root.get("Subzones");
for (Entry<String, Object> map : subzonemap.entrySet()) {
ClaimedResidence subres = ClaimedResidence.load((Map<String, Object>) map.getValue(), res);
if (Residence.getConfigManager().flagsInherit())
subres.getPermissions().setParent(res.getPermissions());
res.subzones.put(map.getKey(), subres);
}
res.parent = parent;
Map tploc = (Map) root.get("TPLoc");
if (tploc != null)
res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z"));
return res;
}
public boolean addArea(CuboidArea area, String name) {
return addArea(null, area, name, true);
}
public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) {
if (!Residence.validName(name)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidNameCharacters"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters"));
return false;
}
if (areas.containsKey(name)) {
if (player != null) {
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists"));
}
return false;
}
if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea()
&& this.getParent() == null) {
if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) {
boolean inside = false;
for (CuboidArea are : areas.values()) {
if (are.isAreaWithinArea(area)) {
for (CuboidArea are : areas.values())
if (are.isAreaWithinArea(area))
inside = true;
}
}
if (!inside)
return false;
}
if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaDiffWorld"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld"));
return false;
}
if (parent == null) {
String collideResidence = Residence.getResidenceManager()
.checkAreaCollision(area, this);
String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this);
if (collideResidence != null) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaCollision",
ChatColor.YELLOW + collideResidence));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence));
return false;
}
} else {
String[] szs = parent.listSubzones();
for (String sz : szs) {
ClaimedResidence res = parent.getSubzone(sz);
if (res != null && res != this) {
if (res != null && res != this)
if (res.checkCollision(area)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaSubzoneCollision",
ChatColor.YELLOW + sz));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz));
return false;
}
}
}
}
if (!resadmin && player != null) {
if (!this.perms.hasResidencePermission(player, true)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (parent != null) {
if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaNotWithinParent"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent"));
return false;
}
if (!parent.getPermissions().hasResidencePermission(player, true)
&& !parent.getPermissions().playerHas(player.getName(), "subzone", true)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("ParentNoPermission"));
if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission"));
return false;
}
}
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
if (!group.canCreateResidences() && !player.hasPermission("residence.create")) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (areas.size() >= group.getMaxPhysicalPerResidence()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaMaxPhysical"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical"));
return false;
}
if (!group.inLimits(area)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaSizeLimit"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit"));
return false;
}
if (group.getMinHeight() > area.getLowLoc().getBlockY()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaLowLimit",
ChatColor.YELLOW + String.format("%d", group.getMinHeight())));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight())));
return false;
}
if (group.getMaxHeight() < area.getHighLoc().getBlockY()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaHighLimit",
ChatColor.YELLOW + String.format("%d", group.getMaxHeight())));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight())));
return false;
}
if (parent == null && Residence.getConfigManager().enableEconomy()) {
@@ -230,10 +192,8 @@ public class ClaimedResidence {
Residence.getResidenceManager().removeChunkList(getName());
areas.put(name, area);
Residence.getResidenceManager().calculateChunks(getName());
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name));
}
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name));
return true;
}
@@ -246,40 +206,29 @@ public class ClaimedResidence {
public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) {
if (!Residence.validName(name)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidNameCharacters"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters"));
return false;
}
if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneSelectInside"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside"));
return false;
}
if (subzones.containsKey(name)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneExists",
ChatColor.YELLOW + name));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name));
return false;
}
if (!resadmin && player != null) {
if (!this.perms.hasResidencePermission(player, true)) {
if (!this.perms.playerHas(player.getName(), "subzone",
this.perms.playerHas(player.getName(), "admin", false))) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
if (!this.perms.hasResidencePermission(player, true))
if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
}
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
if (this.getZoneDepth() >= group.getMaxSubzoneDepth()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneMaxDepth"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth"));
return false;
}
}
@@ -288,11 +237,8 @@ public class ClaimedResidence {
for (Entry<String, ClaimedResidence> resEntry : set) {
ClaimedResidence res = resEntry.getValue();
if (res.checkCollision(newArea)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneCollide",
ChatColor.YELLOW + resEntry.getKey()));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey()));
return false;
}
}
@@ -311,22 +257,15 @@ public class ClaimedResidence {
newres.setEnterMessage(group.getDefaultEnterMessage());
newres.setLeaveMessage(group.getDefaultLeaveMessage());
}
if (Residence.getConfigManager().flagsInherit()) {
if (Residence.getConfigManager().flagsInherit())
newres.getPermissions().setParent(perms);
}
subzones.put(name, newres);
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SubzoneCreate",
ChatColor.YELLOW + name));
}
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name));
return true;
} else {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneCreateFail",
ChatColor.YELLOW + name));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name));
return false;
}
}
@@ -339,23 +278,21 @@ public class ClaimedResidence {
Set<String> set = areas.keySet();
for (String key : set) {
CuboidArea checkarea = areas.get(key);
if (checkarea != null) {
if (checkarea != null)
if (checkarea.checkCollision(area))
return true;
}
}
return false;
}
public boolean containsLoc(Location loc) {
Collection<CuboidArea> keys = areas.values();
for (CuboidArea key : keys) {
for (CuboidArea key : keys)
if (key.containsLoc(loc)) {
if (parent != null)
return parent.containsLoc(loc);
return true;
}
}
return false;
}
@@ -374,10 +311,9 @@ public class ClaimedResidence {
}
public CuboidArea getAreaByLoc(Location loc) {
for (CuboidArea thisarea : areas.values()) {
for (CuboidArea thisarea : areas.values())
if (thisarea.containsLoc(loc))
return thisarea;
}
return null;
}
@@ -386,10 +322,9 @@ public class ClaimedResidence {
}
public String getAreaIDbyLoc(Location loc) {
for (Entry<String, CuboidArea> area : areas.entrySet()) {
for (Entry<String, CuboidArea> area : areas.entrySet())
if (area.getValue().containsLoc(loc))
return area.getKey();
}
return null;
}
@@ -434,8 +369,7 @@ public class ClaimedResidence {
if (area == null)
return insideLoc;
Location highLoc = area.getHighLoc();
Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(),
highLoc.getBlockY(), highLoc.getBlockZ());
Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ());
boolean found = false;
int it = 0;
while (!found && it < maxIt) {
@@ -445,14 +379,12 @@ public class ClaimedResidence {
newLoc.setZ(newLoc.getBlockZ() + 1);
lowLoc = new Location(newLoc.getWorld(), newLoc.getBlockX(), 254, newLoc.getBlockZ());
newLoc.setY(255);
while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0)
&& lowLoc.getBlockY() > -126) {
while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) && lowLoc.getBlockY() > -126) {
newLoc.setY(newLoc.getY() - 1);
lowLoc.setY(lowLoc.getY() - 1);
}
if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) {
if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0)
found = true;
}
}
if (found)
return newLoc;
@@ -478,11 +410,9 @@ public class ClaimedResidence {
public ArrayList<Player> getPlayersInResidence() {
ArrayList<Player> within = new ArrayList<Player>();
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
if (this.containsLoc(player.getLocation())) {
for (Player player : Bukkit.getServer().getOnlinePlayers())
if (this.containsLoc(player.getLocation()))
within.add(player);
}
}
return within;
}
@@ -512,6 +442,8 @@ public class ClaimedResidence {
}
if (!found)
return null;
if (res == null)
return null;
ClaimedResidence subrez = res.getSubzoneByLoc(loc);
if (subrez == null)
return res;
@@ -521,11 +453,9 @@ public class ClaimedResidence {
public String[] getSubzoneList() {
ArrayList<String> zones = new ArrayList<String>();
Set<String> set = subzones.keySet();
for (String key : set) {
if (key != null) {
for (String key : set)
if (key != null)
zones.add(key);
}
}
return zones.toArray(new String[zones.size()]);
}
@@ -542,6 +472,8 @@ public class ClaimedResidence {
}
if (key == null)
return null;
if (res == null)
return null;
String subname = res.getSubzoneNameByLoc(loc);
if (subname != null)
return key + "." + subname;
@@ -569,9 +501,8 @@ public class ClaimedResidence {
public long getTotalSize() {
Collection<CuboidArea> set = areas.values();
long size = 0;
for (CuboidArea entry : set) {
for (CuboidArea entry : set)
size = size + entry.getSize();
}
return size;
}
@@ -605,34 +536,25 @@ public class ClaimedResidence {
CuboidArea a = entry.getValue();
Location h = a.getHighLoc();
Location l = a.getLowLoc();
temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED
+ entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "("
+ h.getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") "
+ ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + ","
+ l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:"
temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY()
+ "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:"
+ ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} ");
}
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"),
temp, page);
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page);
}
public void printAreaList(Player player, int page) {
ArrayList<String> temp = new ArrayList<String>();
for (String area : areas.keySet()) {
for (String area : areas.keySet())
temp.add(area);
}
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"),
temp, page);
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page);
}
public void printSubzoneList(Player player, int page) {
ArrayList<String> temp = new ArrayList<String>();
for (Entry<String, ClaimedResidence> sz : subzones.entrySet()) {
temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - "
+ Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner());
}
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp,
page);
for (Entry<String, ClaimedResidence> sz : subzones.entrySet())
temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner());
InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, page);
}
public void remove() {
@@ -647,20 +569,17 @@ public class ClaimedResidence {
if (this.getPermissions().hasResidencePermission(player, true) || resadmin) {
if (!areas.containsKey(id)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaNonExist"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist"));
return;
}
if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaRemoveLast"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaRemoveLast"));
return;
}
removeArea(id);
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRemove"));
} else {
} else
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
}
}
public void removeArea(String id) {
@@ -676,11 +595,8 @@ public class ClaimedResidence {
return false;
}
subzones.remove(name);
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SubzoneRemove",
ChatColor.YELLOW + name + ChatColor.GREEN));
}
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
return true;
}
@@ -690,38 +606,28 @@ public class ClaimedResidence {
public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) {
if (!Residence.validName(newName)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidNameCharacters"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters"));
return false;
}
if (player == null || perms.hasResidencePermission(player, true) || resadmin) {
if (areas.containsKey(newName)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaExists"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists"));
return false;
}
CuboidArea area = areas.get(oldName);
if (area == null) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaInvalidName"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaInvalidName"));
return false;
}
areas.put(newName, area);
areas.remove(oldName);
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName));
}
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName));
return true;
} else {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
}
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
}
@@ -732,40 +638,28 @@ public class ClaimedResidence {
public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) {
if (!Residence.validName(newName)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidNameCharacters"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters"));
return false;
}
ClaimedResidence res = subzones.get(oldName);
if (res == null) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidSubzone"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidSubzone"));
return false;
}
if (player != null && !res.getPermissions().hasResidencePermission(player, true)
&& !resadmin) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
}
if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (subzones.containsKey(newName)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("SubzoneExists",
ChatColor.YELLOW + newName));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName));
return false;
}
subzones.put(newName, res);
subzones.remove(oldName);
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName));
}
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName));
return true;
}
@@ -779,45 +673,33 @@ public class ClaimedResidence {
public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) {
if (!areas.containsKey(name)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaNonExist"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist"));
return false;
}
CuboidArea oldarea = areas.get(name);
if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaDiffWorld"));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld"));
return false;
}
if (parent == null) {
String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea,
this);
String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this);
if (collideResidence != null) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaCollision",
ChatColor.YELLOW + collideResidence));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence));
return false;
}
} else {
String[] szs = parent.listSubzones();
for (String sz : szs) {
ClaimedResidence res = parent.getSubzone(sz);
if (res != null && res != this) {
if (res != null && res != this)
if (res.checkCollision(newarea)) {
if (player != null) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaSubzoneCollision",
ChatColor.YELLOW + sz));
}
if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz));
return false;
}
}
}
}
// Remove subzones that are not in the area anymore
@@ -826,74 +708,56 @@ public class ClaimedResidence {
ClaimedResidence res = getSubzone(sz);
if (res != null && res != this) {
String[] areas = res.getAreaList();
for (String area : areas) {
for (String area : areas)
if (!newarea.isAreaWithinArea(res.getArea(area))) {
boolean good = false;
for (CuboidArea arae : getAreaArray()) {
if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) {
for (CuboidArea arae : getAreaArray())
if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area)))
good = true;
}
}
if (!good) {
if (!good)
res.removeArea(area);
}
}
}
if (res.getAreaArray().length == 0) {
if (res.getAreaArray().length == 0)
removeSubzone(sz);
}
}
}
if (!resadmin && player != null) {
if (!this.perms.hasResidencePermission(player, true)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (parent != null) {
if (!parent.containsLoc(newarea.getHighLoc())
|| !parent.containsLoc(newarea.getLowLoc())) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaNotWithinParent"));
if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent"));
return false;
}
if (!parent.getPermissions().hasResidencePermission(player, true)
&& !parent.getPermissions().playerHas(player.getName(), "subzone", true)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("ParentNoPermission"));
if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission"));
return false;
}
}
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
if (!group.canCreateResidences() && !player.hasPermission("residence.create")) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (!group.inLimits(newarea)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaSizeLimit"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit"));
return false;
}
if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaLowLimit",
ChatColor.YELLOW + String.format("%d", group.getMinHeight())));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight())));
return false;
}
if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("AreaHighLimit",
ChatColor.YELLOW + String.format("%d", group.getMaxHeight())));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight())));
return false;
}
if (parent == null && Residence.getConfigManager().enableEconomy()) {
int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize())
* group.getCostPerBlock());
if (chargeamount > 0) {
int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock());
if (chargeamount > 0)
if (!TransactionManager.chargeEconomyMoney(player, chargeamount))
return false;
}
}
}
@@ -913,14 +777,12 @@ public class ClaimedResidence {
root.put("StoredMoney", bank.getStoredMoney());
root.put("BlackList", blacklist.save());
root.put("IgnoreList", ignorelist.save());
for (Entry<String, CuboidArea> entry : areas.entrySet()) {
for (Entry<String, CuboidArea> entry : areas.entrySet())
areamap.put(entry.getKey(), entry.getValue().save());
}
root.put("Areas", areamap);
Map<String, Object> subzonemap = new HashMap<String, Object>();
for (Entry<String, ClaimedResidence> sz : subzones.entrySet()) {
for (Entry<String, ClaimedResidence> sz : subzones.entrySet())
subzonemap.put(sz.getKey(), sz.getValue().save());
}
root.put("Subzones", subzonemap);
root.put("Permissions", perms.save());
if (tpLoc != null) {
@@ -940,27 +802,22 @@ public class ClaimedResidence {
// player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidCharacters"));
// return;
// }
if (message != null) {
if (message.equals("")) {
if (message != null)
if (message.equals(""))
message = null;
}
}
PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(),
perms.getWorld());
PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld());
if (!group.canSetEnterLeaveMessages() && !resadmin) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("OwnerNoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission"));
return;
}
if (!perms.hasResidencePermission(player, false) && !resadmin) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
if (enter) {
if (enter)
this.setEnterMessage(message);
} else {
else
this.setLeaveMessage(message);
}
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange"));
}
@@ -982,26 +839,22 @@ public class ClaimedResidence {
return;
}
tpLoc = player.getLocation();
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SetTeleportLocation"));
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SetTeleportLocation"));
}
public void tpToResidence(Player reqPlayer, Player targetPlayer, boolean resadmin) {
if (!resadmin) {
PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer);
if (!group.hasTpAccess()) {
reqPlayer.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("TeleportDeny"));
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny"));
return;
}
if (!reqPlayer.equals(targetPlayer)) {
reqPlayer.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) {
reqPlayer.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("TeleportNoFlag"));
reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportNoFlag"));
return;
}
}
@@ -1010,8 +863,7 @@ public class ClaimedResidence {
Residence.getServ().getPluginManager().callEvent(tpevent);
if (!tpevent.isCancelled()) {
targetPlayer.teleport(tpLoc);
targetPlayer.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("TeleportSuccess"));
targetPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportSuccess"));
}
} else {
CuboidArea area = areas.values().iterator().next();
@@ -1024,8 +876,7 @@ public class ClaimedResidence {
Residence.getServ().getPluginManager().callEvent(tpevent);
if (!tpevent.isCancelled()) {
targetPlayer.teleport(targloc);
targetPlayer.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("TeleportNear"));
targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear"));
}
}
}

View File

@@ -22,7 +22,7 @@ import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
/**
*
*
* @author Administrator
*/
public class FlagPermissions {
@@ -30,83 +30,65 @@ public class FlagPermissions {
protected static ArrayList<String> validFlags = new ArrayList<String>();
protected static ArrayList<String> validPlayerFlags = new ArrayList<String>();
protected static ArrayList<String> validAreaFlags = new ArrayList<String>();
final static Map<Material, String> matUseFlagList = new EnumMap<Material, String>(
Material.class);
final static Map<Material, String> matUseFlagList = new EnumMap<Material, String>(Material.class);
protected static HashMap<String, ArrayList<String>> validFlagGroups = new HashMap<String, ArrayList<String>>();
protected Map<String, Map<String, Boolean>> playerFlags;
protected Map<String, Map<String, Boolean>> groupFlags;
protected Map<String, Boolean> cuboidFlags;
protected FlagPermissions parent;
public static void addMaterialToUseFlag(Material mat, String flag) {
matUseFlagList.put(mat, flag);
}
public static void removeMaterialFromUseFlag(Material mat) {
matUseFlagList.remove(mat);
}
public static EnumMap<Material, String> getMaterialUseFlagList() {
return (EnumMap<Material, String>) matUseFlagList;
public FlagPermissions() {
cuboidFlags = Collections.synchronizedMap(new HashMap<String, Boolean>());
playerFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
groupFlags = Collections.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
}
public static void addFlag(String flag) {
flag = flag.toLowerCase();
if (!validFlags.contains(flag)) {
if (!validFlags.contains(flag))
validFlags.add(flag);
}
if (validFlagGroups.containsKey(flag)) {
if (validFlagGroups.containsKey(flag))
validFlagGroups.remove(flag);
}
}
public static void addPlayerOrGroupOnlyFlag(String flag) {
flag = flag.toLowerCase();
if (!validPlayerFlags.contains(flag)) {
validPlayerFlags.add(flag);
}
if (validFlagGroups.containsKey(flag)) {
validFlagGroups.remove(flag);
}
}
public static void addResidenceOnlyFlag(String flag) {
flag = flag.toLowerCase();
if (!validAreaFlags.contains(flag)) {
validAreaFlags.add(flag);
}
if (validFlagGroups.containsKey(flag)) {
validFlagGroups.remove(flag);
}
}
protected static HashMap<String, ArrayList<String>> validFlagGroups = new HashMap<String, ArrayList<String>>();
public static void addFlagToFlagGroup(String group, String flag) {
if (!FlagPermissions.validFlags.contains(group)
&& !FlagPermissions.validAreaFlags.contains(group)
&& !FlagPermissions.validPlayerFlags.contains(group)) {
if (!validFlagGroups.containsKey(group)) {
if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) {
if (!validFlagGroups.containsKey(group))
validFlagGroups.put(group, new ArrayList<String>());
}
ArrayList<String> flags = validFlagGroups.get(group);
flags.add(flag);
}
}
public static void removeFlagFromFlagGroup(String group, String flag) {
if (validFlagGroups.containsKey(group)) {
ArrayList<String> flags = validFlagGroups.get(group);
flags.remove(flag);
if (flags.isEmpty()) {
validFlagGroups.remove(group);
}
}
public static void addMaterialToUseFlag(Material mat, String flag) {
matUseFlagList.put(mat, flag);
}
public static void addPlayerOrGroupOnlyFlag(String flag) {
flag = flag.toLowerCase();
if (!validPlayerFlags.contains(flag))
validPlayerFlags.add(flag);
if (validFlagGroups.containsKey(flag))
validFlagGroups.remove(flag);
}
public static void addResidenceOnlyFlag(String flag) {
flag = flag.toLowerCase();
if (!validAreaFlags.contains(flag))
validAreaFlags.add(flag);
if (validFlagGroups.containsKey(flag))
validFlagGroups.remove(flag);
}
public static boolean flagGroupExists(String group) {
return validFlagGroups.containsKey(group);
}
public static EnumMap<Material, String> getMaterialUseFlagList() {
return (EnumMap<Material, String>) matUseFlagList;
}
public static void initValidFlags() {
validAreaFlags.clear();
validPlayerFlags.clear();
@@ -187,20 +169,22 @@ public class FlagPermissions {
addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode");
addMaterialToUseFlag(Material.WORKBENCH, "table");
addMaterialToUseFlag(Material.WOODEN_DOOR, "door");
/* 1.8 Doors */
addMaterialToUseFlag(Material.SPRUCE_DOOR, "door");
addMaterialToUseFlag(Material.BIRCH_DOOR, "door");
addMaterialToUseFlag(Material.JUNGLE_DOOR, "door");
addMaterialToUseFlag(Material.ACACIA_DOOR, "door");
addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door");
/* 1.8 Fence Gates */
addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door");
addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door");
addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door");
addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door");
addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door");
if (Residence.is1_8()) {
/* 1.8 Doors */
addMaterialToUseFlag(Material.SPRUCE_DOOR, "door");
addMaterialToUseFlag(Material.BIRCH_DOOR, "door");
addMaterialToUseFlag(Material.JUNGLE_DOOR, "door");
addMaterialToUseFlag(Material.ACACIA_DOOR, "door");
addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door");
/* 1.8 Fence Gates */
addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door");
addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door");
addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door");
addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door");
addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door");
}
addMaterialToUseFlag(Material.FENCE_GATE, "door");
addMaterialToUseFlag(Material.NETHER_FENCE, "door");
@@ -229,259 +213,151 @@ public class FlagPermissions {
addMaterialToUseFlag(Material.CAKE_BLOCK, "cake");
}
public static FlagPermissions parseFromConfigNode(String name,
ConfigurationSection node) {
public static FlagPermissions load(Map<String, Object> root) throws Exception {
FlagPermissions newperms = new FlagPermissions();
return FlagPermissions.load(root, newperms);
}
public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) {
FlagPermissions list = new FlagPermissions();
Set<String> keys = node.getConfigurationSection(name).getKeys(false);
if (keys != null) {
if (keys != null)
for (String key : keys) {
boolean state = node.getBoolean(name + "." + key, false);
key = key.toLowerCase();
if (state) {
if (state)
list.setFlag(key, FlagState.TRUE);
} else {
else
list.setFlag(key, FlagState.FALSE);
}
}
}
return list;
}
public FlagPermissions() {
cuboidFlags = Collections
.synchronizedMap(new HashMap<String, Boolean>());
playerFlags = Collections
.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
groupFlags = Collections
.synchronizedMap(new HashMap<String, Map<String, Boolean>>());
public static void removeFlagFromFlagGroup(String group, String flag) {
if (validFlagGroups.containsKey(group)) {
ArrayList<String> flags = validFlagGroups.get(group);
flags.remove(flag);
if (flags.isEmpty())
validFlagGroups.remove(group);
}
}
public boolean setPlayerFlag(String player, String flag, FlagState state) {
player = player.toLowerCase();
if (!playerFlags.containsKey(player)) {
playerFlags
.put(player, Collections
.synchronizedMap(new HashMap<String, Boolean>()));
}
Map<String, Boolean> map = playerFlags.get(player);
if (state == FlagState.FALSE) {
map.put(flag, false);
} else if (state == FlagState.TRUE) {
map.put(flag, true);
} else if (state == FlagState.NEITHER) {
if (map.containsKey(flag)) {
map.remove(flag);
}
}
if (map.isEmpty()) {
playerFlags.remove(player);
}
return true;
}
public void removeAllPlayerFlags(String player) {
playerFlags.remove(player);
}
public void removeAllGroupFlags(String group) {
groupFlags.remove(group);
}
public boolean setGroupFlag(String group, String flag, FlagState state) {
group = group.toLowerCase();
if (!groupFlags.containsKey(group)) {
groupFlags
.put(group, Collections
.synchronizedMap(new HashMap<String, Boolean>()));
}
Map<String, Boolean> map = groupFlags.get(group);
if (state == FlagState.FALSE) {
map.put(flag, false);
} else if (state == FlagState.TRUE) {
map.put(flag, true);
} else if (state == FlagState.NEITHER) {
if (map.containsKey(flag)) {
map.remove(flag);
}
}
if (map.isEmpty()) {
groupFlags.remove(group);
}
return true;
}
public boolean setFlag(String flag, FlagState state) {
if (state == FlagState.FALSE) {
cuboidFlags.put(flag, false);
} else if (state == FlagState.TRUE) {
cuboidFlags.put(flag, true);
} else if (state == FlagState.NEITHER) {
if (cuboidFlags.containsKey(flag)) {
cuboidFlags.remove(flag);
}
}
return true;
}
public static enum FlagState {
TRUE, FALSE, NEITHER, INVALID
public static void removeMaterialFromUseFlag(Material mat) {
matUseFlagList.remove(mat);
}
public static FlagState stringToFlagState(String flagstate) {
if (flagstate.equalsIgnoreCase("true")
|| flagstate.equalsIgnoreCase("t")) {
if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t"))
return FlagState.TRUE;
} else if (flagstate.equalsIgnoreCase("false")
|| flagstate.equalsIgnoreCase("f")) {
else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f"))
return FlagState.FALSE;
} else if (flagstate.equalsIgnoreCase("remove")
|| flagstate.equalsIgnoreCase("r")) {
else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r"))
return FlagState.NEITHER;
} else {
else
return FlagState.INVALID;
}
@SuppressWarnings("unchecked")
protected static FlagPermissions load(Map<String, Object> root, FlagPermissions newperms) throws Exception {
newperms.playerFlags = (Map<String, Map<String, Boolean>>) root.get("PlayerFlags");
newperms.groupFlags = (Map<String, Map<String, Boolean>>) root.get("GroupFlags");
newperms.cuboidFlags = (Map<String, Boolean>) root.get("AreaFlags");
return newperms;
}
public boolean checkValidFlag(String flag, boolean globalflag) {
if (validFlags.contains(flag))
return true;
if (globalflag) {
if (validAreaFlags.contains(flag))
return true;
} else if (validPlayerFlags.contains(flag))
return true;
return false;
}
public void clearFlags() {
groupFlags.clear();
playerFlags.clear();
cuboidFlags.clear();
}
public void clearPlayersFlags(String user) {
if (playerFlags.containsKey(user))
playerFlags.remove(user);
}
public void copyUserPermissions(String fromUser, String toUser) {
fromUser = fromUser.toLowerCase();
toUser = toUser.toLowerCase();
Map<String, Boolean> get = playerFlags.get(fromUser);
if (get != null) {
Map<String, Boolean> targ = playerFlags.get(toUser);
if (targ == null) {
targ = new HashMap<String, Boolean>();
playerFlags.put(toUser, targ);
}
for (Entry<String, Boolean> entry : get.entrySet())
targ.put(entry.getKey(), entry.getValue());
}
}
public boolean playerHas(String player, String world, String flag,
boolean def) {
String group = Residence.getPermissionManager().getGroupNameByPlayer(
player, world);
return this.playerCheck(player, flag,
this.groupCheck(group, flag, this.has(flag, def)));
public FlagPermissions getParent() {
return parent;
}
public boolean groupHas(String group, String flag, boolean def) {
return this.groupCheck(group, flag, this.has(flag, def));
}
private boolean playerCheck(String player, String flag, boolean def) {
player = player.toLowerCase();
if (playerFlags.containsKey(player)) {
Map<String, Boolean> pmap = playerFlags.get(player);
if (pmap.containsKey(flag)) {
return pmap.get(flag);
}
}
if (parent != null) {
return parent.playerCheck(player, flag, def);
}
return def;
}
private boolean groupCheck(String group, String flag, boolean def) {
if (groupFlags.containsKey(group)) {
Map<String, Boolean> gmap = groupFlags.get(group);
if (gmap.containsKey(flag)) {
return gmap.get(flag);
}
}
if (parent != null) {
return parent.groupCheck(group, flag, def);
}
return def;
}
public boolean has(String flag, boolean def) {
if (cuboidFlags.containsKey(flag)) {
if (cuboidFlags.containsKey(flag))
return cuboidFlags.get(flag);
}
if (parent != null) {
if (parent != null)
return parent.has(flag, def);
}
return def;
}
public boolean isPlayerSet(String player, String flag) {
player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null) {
return false;
}
return flags.containsKey(flag);
}
public boolean inheritanceIsPlayerSet(String player, String flag) {
player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null) {
return parent == null ? false : parent.inheritanceIsPlayerSet(
player, flag);
}
return flags.containsKey(flag) ? true : parent == null ? false : parent
.inheritanceIsPlayerSet(player, flag);
}
public boolean isGroupSet(String group, String flag) {
group = group.toLowerCase();
Map<String, Boolean> flags = groupFlags.get(group);
if (flags == null) {
return false;
}
return flags.containsKey(flag);
}
public boolean inheritanceIsGroupSet(String group, String flag) {
group = group.toLowerCase();
Map<String, Boolean> flags = groupFlags.get(group);
if (flags == null) {
return parent == null ? false : parent.inheritanceIsGroupSet(group,
flag);
}
return flags.containsKey(flag) ? true : parent == null ? false : parent
.inheritanceIsGroupSet(group, flag);
if (flags == null)
return parent == null ? false : parent.inheritanceIsGroupSet(group, flag);
return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag);
}
public boolean inheritanceIsPlayerSet(String player, String flag) {
player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null)
return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag);
return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag);
}
public boolean inheritanceIsSet(String flag) {
return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag);
}
public boolean isGroupSet(String group, String flag) {
group = group.toLowerCase();
Map<String, Boolean> flags = groupFlags.get(group);
if (flags == null)
return false;
return flags.containsKey(flag);
}
public boolean isPlayerSet(String player, String flag) {
player = player.toLowerCase();
Map<String, Boolean> flags = playerFlags.get(player);
if (flags == null)
return false;
return flags.containsKey(flag);
}
public boolean isSet(String flag) {
return cuboidFlags.containsKey(flag);
}
public boolean inheritanceIsSet(String flag) {
return cuboidFlags.containsKey(flag) ? true : parent == null ? false
: parent.inheritanceIsSet(flag);
}
public boolean checkValidFlag(String flag, boolean globalflag) {
if (validFlags.contains(flag)) {
return true;
}
if (globalflag) {
if (validAreaFlags.contains(flag)) {
return true;
}
} else {
if (validPlayerFlags.contains(flag)) {
return true;
}
}
return false;
}
public Map<String, Object> save() {
Map<String, Object> root = new LinkedHashMap<String, Object>();
root.put("PlayerFlags", playerFlags);
root.put("GroupFlags", groupFlags);
root.put("AreaFlags", cuboidFlags);
return root;
}
public static FlagPermissions load(Map<String, Object> root)
throws Exception {
FlagPermissions newperms = new FlagPermissions();
return FlagPermissions.load(root, newperms);
}
@SuppressWarnings("unchecked")
protected static FlagPermissions load(Map<String, Object> root,
FlagPermissions newperms) throws Exception {
newperms.playerFlags = (Map<String, Map<String, Boolean>>) root
.get("PlayerFlags");
newperms.groupFlags = (Map<String, Map<String, Boolean>>) root
.get("GroupFlags");
newperms.cuboidFlags = (Map<String, Boolean>) root.get("AreaFlags");
return newperms;
}
public String listFlags() {
StringBuilder sbuild = new StringBuilder();
Set<Entry<String, Boolean>> set = cuboidFlags.entrySet();
@@ -491,73 +367,17 @@ public class FlagPermissions {
Entry<String, Boolean> next = it.next();
if (next.getValue()) {
sbuild.append("+").append(next.getKey());
if (it.hasNext()) {
if (it.hasNext())
sbuild.append(" ");
}
} else {
sbuild.append("-").append(next.getKey());
if (it.hasNext()) {
if (it.hasNext())
sbuild.append(" ");
}
}
}
}
if (sbuild.length() == 0) {
if (sbuild.length() == 0)
sbuild.append("none");
}
return sbuild.toString();
}
public String listPlayerFlags(String player) {
player = player.toLowerCase();
if (playerFlags.containsKey(player)) {
StringBuilder sbuild = new StringBuilder();
Map<String, Boolean> get = playerFlags.get(player);
Set<Entry<String, Boolean>> set = get.entrySet();
synchronized (get) {
Iterator<Entry<String, Boolean>> it = set.iterator();
while (it.hasNext()) {
Entry<String, Boolean> next = it.next();
if (next.getValue()) {
sbuild.append("+").append(next.getKey());
if (it.hasNext()) {
sbuild.append(" ");
}
} else {
sbuild.append("-").append(next.getKey());
if (it.hasNext()) {
sbuild.append(" ");
}
}
}
}
if (sbuild.length() == 0) {
playerFlags.remove(player);
sbuild.append("none");
}
return sbuild.toString();
} else {
return "none";
}
}
public String listOtherPlayersFlags(String player) {
player = player.toLowerCase();
StringBuilder sbuild = new StringBuilder();
Set<String> set = playerFlags.keySet();
synchronized (playerFlags) {
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String next = it.next();
if (!next.equals(player)) {
String perms = listPlayerFlags(next);
if (!perms.equals("none")) {
sbuild.append(next).append("[" + ChatColor.DARK_AQUA)
.append(perms).append(ChatColor.RED + "] ");
}
}
}
}
return sbuild.toString();
}
@@ -569,10 +389,8 @@ public class FlagPermissions {
while (it.hasNext()) {
String next = it.next();
String perms = listGroupFlags(next);
if (!perms.equals("none")) {
sbuild.append(next).append("[" + ChatColor.DARK_AQUA)
.append(perms).append(ChatColor.RED + "] ");
}
if (!perms.equals("none"))
sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] ");
}
}
return sbuild.toString();
@@ -590,14 +408,12 @@ public class FlagPermissions {
Entry<String, Boolean> next = it.next();
if (next.getValue()) {
sbuild.append("+").append(next.getKey());
if (it.hasNext()) {
if (it.hasNext())
sbuild.append(" ");
}
} else {
sbuild.append("-").append(next.getKey());
if (it.hasNext()) {
if (it.hasNext())
sbuild.append(" ");
}
}
}
}
@@ -606,59 +422,163 @@ public class FlagPermissions {
sbuild.append("none");
}
return sbuild.toString();
} else {
} else
return "none";
}
}
public void clearFlags() {
groupFlags.clear();
playerFlags.clear();
cuboidFlags.clear();
public String listOtherPlayersFlags(String player) {
player = player.toLowerCase();
StringBuilder sbuild = new StringBuilder();
Set<String> set = playerFlags.keySet();
synchronized (playerFlags) {
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String next = it.next();
if (!next.equals(player)) {
String perms = listPlayerFlags(next);
if (!perms.equals("none"))
sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] ");
}
}
}
return sbuild.toString();
}
public String listPlayerFlags(String player) {
player = player.toLowerCase();
if (playerFlags.containsKey(player)) {
StringBuilder sbuild = new StringBuilder();
Map<String, Boolean> get = playerFlags.get(player);
Set<Entry<String, Boolean>> set = get.entrySet();
synchronized (get) {
Iterator<Entry<String, Boolean>> it = set.iterator();
while (it.hasNext()) {
Entry<String, Boolean> next = it.next();
if (next.getValue()) {
sbuild.append("+").append(next.getKey());
if (it.hasNext())
sbuild.append(" ");
} else {
sbuild.append("-").append(next.getKey());
if (it.hasNext())
sbuild.append(" ");
}
}
}
if (sbuild.length() == 0) {
playerFlags.remove(player);
sbuild.append("none");
}
return sbuild.toString();
} else
return "none";
}
public boolean playerHas(String player, String world, String flag, boolean def) {
String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world);
return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def)));
}
public void printFlags(Player player) {
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Flags") + ":"
+ ChatColor.BLUE + " " + listFlags());
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Your.Flags") + ":"
+ ChatColor.GREEN + " " + listPlayerFlags(player.getName()));
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Group.Flags") + ":"
+ ChatColor.RED + " " + listGroupFlags());
player.sendMessage(ChatColor.YELLOW
+ Residence.getLanguage().getPhrase("Others.Flags") + ":"
+ ChatColor.RED + " " + listOtherPlayersFlags(player.getName()));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName()));
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags());
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName()));
}
public void copyUserPermissions(String fromUser, String toUser) {
fromUser = fromUser.toLowerCase();
toUser = toUser.toLowerCase();
Map<String, Boolean> get = playerFlags.get(fromUser);
if (get != null) {
Map<String, Boolean> targ = playerFlags.get(toUser);
if (targ == null) {
targ = new HashMap<String, Boolean>();
playerFlags.put(toUser, targ);
}
for (Entry<String, Boolean> entry : get.entrySet()) {
targ.put(entry.getKey(), entry.getValue());
}
}
public void removeAllGroupFlags(String group) {
groupFlags.remove(group);
}
public void clearPlayersFlags(String user) {
if (playerFlags.containsKey(user)) {
playerFlags.remove(user);
}
public void removeAllPlayerFlags(String player) {
playerFlags.remove(player);
}
public Map<String, Object> save() {
Map<String, Object> root = new LinkedHashMap<String, Object>();
root.put("PlayerFlags", playerFlags);
root.put("GroupFlags", groupFlags);
root.put("AreaFlags", cuboidFlags);
return root;
}
public boolean setFlag(String flag, FlagState state) {
if (state == FlagState.FALSE)
cuboidFlags.put(flag, false);
else if (state == FlagState.TRUE)
cuboidFlags.put(flag, true);
else if (state == FlagState.NEITHER)
if (cuboidFlags.containsKey(flag))
cuboidFlags.remove(flag);
return true;
}
public boolean setGroupFlag(String group, String flag, FlagState state) {
group = group.toLowerCase();
if (!groupFlags.containsKey(group))
groupFlags.put(group, Collections.synchronizedMap(new HashMap<String, Boolean>()));
Map<String, Boolean> map = groupFlags.get(group);
if (state == FlagState.FALSE)
map.put(flag, false);
else if (state == FlagState.TRUE)
map.put(flag, true);
else if (state == FlagState.NEITHER)
if (map.containsKey(flag))
map.remove(flag);
if (map.isEmpty())
groupFlags.remove(group);
return true;
}
public void setParent(FlagPermissions p) {
parent = p;
}
public FlagPermissions getParent() {
return parent;
public boolean setPlayerFlag(String player, String flag, FlagState state) {
player = player.toLowerCase();
if (!playerFlags.containsKey(player))
playerFlags.put(player, Collections.synchronizedMap(new HashMap<String, Boolean>()));
Map<String, Boolean> map = playerFlags.get(player);
if (state == FlagState.FALSE)
map.put(flag, false);
else if (state == FlagState.TRUE)
map.put(flag, true);
else if (state == FlagState.NEITHER)
if (map.containsKey(flag))
map.remove(flag);
if (map.isEmpty())
playerFlags.remove(player);
return true;
}
private boolean groupCheck(String group, String flag, boolean def) {
if (groupFlags.containsKey(group)) {
Map<String, Boolean> gmap = groupFlags.get(group);
if (gmap.containsKey(flag))
return gmap.get(flag);
}
if (parent != null)
return parent.groupCheck(group, flag, def);
return def;
}
private boolean playerCheck(String player, String flag, boolean def) {
player = player.toLowerCase();
if (playerFlags.containsKey(player)) {
Map<String, Boolean> pmap = playerFlags.get(player);
if (pmap.containsKey(flag))
return pmap.get(flag);
}
if (parent != null)
return parent.playerCheck(player, flag, def);
return def;
}
public static enum FlagState {
TRUE,
FALSE,
NEITHER,
INVALID
}
}

View File

@@ -29,12 +29,26 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager;
*/
public class ResidencePermissions extends FlagPermissions {
protected String owner;
protected String world;
protected ClaimedResidence residence;
public ResidencePermissions(ClaimedResidence res, String creator, String inworld) {
this(res);
owner = creator;
world = inworld;
}
private ResidencePermissions(ClaimedResidence res) {
residence = res;
}
public static ResidencePermissions load(ClaimedResidence res, Map<String, Object> root) throws Exception {
ResidencePermissions newperms = new ResidencePermissions(res);
newperms.owner = (String) root.get("Owner");
if (newperms.owner == null) {
if (newperms.owner == null)
newperms.owner = (String) root.get("OwnerLastKnownName");
}
if (newperms.owner == null) {
Residence.getLog().warning("发现未知所有者的领地,转换为Server Land...");
newperms.owner = "Server Land";
@@ -55,21 +69,6 @@ public class ResidencePermissions extends FlagPermissions {
return newperms;
}
protected String owner;
protected String world;
protected ClaimedResidence residence;
private ResidencePermissions(ClaimedResidence res) {
residence = res;
}
public ResidencePermissions(ClaimedResidence res, String creator, String inworld) {
this(res);
owner = creator;
world = inworld;
}
public void applyDefaultFlags() {
PermissionManager gm = Residence.getPermissionManager();
PermissionGroup group = gm.getGroup(owner, world);
@@ -77,33 +76,25 @@ public class ResidencePermissions extends FlagPermissions {
Set<Entry<String, Boolean>> dcflags = group.getDefaultCreatorFlags();
Set<Entry<String, Map<String, Boolean>>> dgflags = group.getDefaultGroupFlags();
this.applyGlobalDefaults();
for (Entry<String, Boolean> next : dflags) {
if (this.checkValidFlag(next.getKey(), true)) {
if (next.getValue()) {
for (Entry<String, Boolean> next : dflags)
if (this.checkValidFlag(next.getKey(), true))
if (next.getValue())
this.setFlag(next.getKey(), FlagState.TRUE);
} else {
else
this.setFlag(next.getKey(), FlagState.FALSE);
}
}
}
for (Entry<String, Boolean> next : dcflags) {
if (this.checkValidFlag(next.getKey(), false)) {
if (next.getValue()) {
for (Entry<String, Boolean> next : dcflags)
if (this.checkValidFlag(next.getKey(), false))
if (next.getValue())
this.setPlayerFlag(owner, next.getKey(), FlagState.TRUE);
} else {
else
this.setPlayerFlag(owner, next.getKey(), FlagState.FALSE);
}
}
}
for (Entry<String, Map<String, Boolean>> entry : dgflags) {
Map<String, Boolean> value = entry.getValue();
for (Entry<String, Boolean> flag : value.entrySet()) {
if (flag.getValue()) {
for (Entry<String, Boolean> flag : value.entrySet())
if (flag.getValue())
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE);
} else {
else
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE);
}
}
}
}
@@ -111,121 +102,65 @@ public class ResidencePermissions extends FlagPermissions {
if (this.hasResidencePermission(player, true) || resadmin) {
this.applyDefaultFlags();
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("FlagsDefault"));
} else {
} else
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("NoPermission"));
}
}
public void applyGlobalDefaults() {
this.clearFlags();
FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags();
FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags();
Map<String, FlagPermissions> gGD = Residence.getConfigManager()
.getGlobalGroupDefaultFlags();
for (Entry<String, Boolean> entry : gRD.cuboidFlags.entrySet()) {
if (entry.getValue()) {
Map<String, FlagPermissions> gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags();
for (Entry<String, Boolean> entry : gRD.cuboidFlags.entrySet())
if (entry.getValue())
this.setFlag(entry.getKey(), FlagState.TRUE);
} else {
else
this.setFlag(entry.getKey(), FlagState.FALSE);
}
}
for (Entry<String, Boolean> entry : gCD.cuboidFlags.entrySet()) {
if (entry.getValue()) {
for (Entry<String, Boolean> entry : gCD.cuboidFlags.entrySet())
if (entry.getValue())
this.setPlayerFlag(owner, entry.getKey(), FlagState.TRUE);
} else {
else
this.setPlayerFlag(owner, entry.getKey(), FlagState.FALSE);
}
}
for (Entry<String, FlagPermissions> entry : gGD.entrySet()) {
for (Entry<String, Boolean> flag : entry.getValue().cuboidFlags.entrySet()) {
if (flag.getValue()) {
for (Entry<String, FlagPermissions> entry : gGD.entrySet())
for (Entry<String, Boolean> flag : entry.getValue().cuboidFlags.entrySet())
if (flag.getValue())
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE);
} else {
else
this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE);
}
}
}
}
public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) {
if (player != null) {
if (!player.getName().equals(owner) && !resadmin) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return;
}
} else {
} else
resadmin = true;
}
PermissionGroup group = Residence.getPermissionManager().getGroup(owner, world);
for (Entry<String, Boolean> flag : list.cuboidFlags.entrySet()) {
if (group.hasFlagAccess(flag.getKey()) || resadmin) {
for (Entry<String, Boolean> flag : list.cuboidFlags.entrySet())
if (group.hasFlagAccess(flag.getKey()) || resadmin)
this.cuboidFlags.put(flag.getKey(), flag.getValue());
} else {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("FlagSetDeny",
ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
}
}
for (Entry<String, Map<String, Boolean>> plists : list.playerFlags.entrySet()) {
for (Entry<String, Boolean> flag : plists.getValue().entrySet()) {
else if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
for (Entry<String, Map<String, Boolean>> plists : list.playerFlags.entrySet())
for (Entry<String, Boolean> flag : plists.getValue().entrySet())
if (group.hasFlagAccess(flag.getKey()) || resadmin) {
if (!this.playerFlags.containsKey(plists.getKey())) {
this.playerFlags.put(plists.getKey(),
Collections.synchronizedMap(new HashMap<String, Boolean>()));
}
if (!this.playerFlags.containsKey(plists.getKey()))
this.playerFlags.put(plists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>()));
this.playerFlags.get(plists.getKey()).put(flag.getKey(), flag.getValue());
} else {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("FlagSetDeny",
ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
}
}
}
for (Entry<String, Map<String, Boolean>> glists : list.groupFlags.entrySet()) {
for (Entry<String, Boolean> flag : glists.getValue().entrySet()) {
} else if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
for (Entry<String, Map<String, Boolean>> glists : list.groupFlags.entrySet())
for (Entry<String, Boolean> flag : glists.getValue().entrySet())
if (group.hasFlagAccess(flag.getKey()) || resadmin) {
if (!this.groupFlags.containsKey(glists.getKey())) {
this.groupFlags.put(glists.getKey(),
Collections.synchronizedMap(new HashMap<String, Boolean>()));
}
if (!this.groupFlags.containsKey(glists.getKey()))
this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap<String, Boolean>()));
this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue());
} else {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("FlagSetDeny",
ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
}
}
}
if (player != null) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("PermissionsApply"));
}
}
private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) {
if (!checkValidFlag(flag, globalflag)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag"));
return false;
}
if (state == FlagState.INVALID) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidFlagState"));
return false;
}
if (!resadmin) {
if (!this.hasResidencePermission(player, false)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (!hasFlagAccess(owner, flag)) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("OwnerNoPermission"));
return false;
}
}
return true;
} else if (player != null)
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED));
if (player != null)
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("PermissionsApply"));
}
public void fixNames() {
@@ -233,9 +168,8 @@ public class ResidencePermissions extends FlagPermissions {
Iterator<Entry<String, Map<String, Boolean>>> it = playerFlags.entrySet().iterator();
while (it.hasNext()) {
String name = it.next().getKey();
if (!name.equals(name.toLowerCase())) {
if (!name.equals(name.toLowerCase()))
fixNames.add(name);
}
}
for (String name : fixNames) {
Map<String, Boolean> get = playerFlags.get(name);
@@ -254,8 +188,7 @@ public class ResidencePermissions extends FlagPermissions {
@Override
public boolean groupHas(String group, String flag, boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP,
group, def);
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden())
return fc.getOverrideValue();
@@ -264,8 +197,7 @@ public class ResidencePermissions extends FlagPermissions {
@Override
public boolean has(String flag, boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag,
FlagType.RESIDENCE, null, def);
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden())
return fc.getOverrideValue();
@@ -273,14 +205,7 @@ public class ResidencePermissions extends FlagPermissions {
}
public boolean hasApplicableFlag(String player, String flag) {
return super.inheritanceIsPlayerSet(player, flag)
|| super.inheritanceIsGroupSet(Residence.getPermissionManager()
.getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag);
}
private boolean hasFlagAccess(String player, String flag) {
PermissionGroup group = Residence.getPermissionManager().getGroup(player, world);
return group.hasFlagAccess(flag);
return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag);
}
public boolean hasResidencePermission(Player player, boolean requireOwner) {
@@ -298,8 +223,7 @@ public class ResidencePermissions extends FlagPermissions {
}
if (requireOwner)
return (owner.equalsIgnoreCase(player.getName()));
return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player
.getName()));
return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player.getName()));
}
public boolean playerHas(String player, String flag, boolean def) {
@@ -308,8 +232,7 @@ public class ResidencePermissions extends FlagPermissions {
@Override
public boolean playerHas(String player, String world, String flag, boolean def) {
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER,
player, def);
ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isOverriden())
return fc.getOverrideValue();
@@ -318,8 +241,7 @@ public class ResidencePermissions extends FlagPermissions {
public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) {
if (this.hasResidencePermission(player, false) || resadmin) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL",
ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -332,8 +254,7 @@ public class ResidencePermissions extends FlagPermissions {
public boolean removeAllPlayerFlags(Player player, String targetPlayer, boolean resadmin) {
if (this.hasResidencePermission(player, false) || resadmin) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL",
ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -357,8 +278,7 @@ public class ResidencePermissions extends FlagPermissions {
return this.setFlagGroup(player, flag, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (checkCanSetFlag(player, flag, state, true, resadmin)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag,
ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -372,8 +292,7 @@ public class ResidencePermissions extends FlagPermissions {
@Override
public boolean setFlag(String flag, FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag,
ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -384,11 +303,9 @@ public class ResidencePermissions extends FlagPermissions {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false;
for (String flag : flags) {
if (this.setFlag(player, flag, state, resadmin)) {
for (String flag : flags)
if (this.setFlag(player, flag, state, resadmin))
changed = true;
}
}
return changed;
}
return false;
@@ -398,11 +315,9 @@ public class ResidencePermissions extends FlagPermissions {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false;
for (String flag : flags) {
if (this.setGroupFlag(player, group, flag, state, resadmin)) {
for (String flag : flags)
if (this.setGroupFlag(player, group, flag, state, resadmin))
changed = true;
}
}
return changed;
}
return false;
@@ -412,11 +327,9 @@ public class ResidencePermissions extends FlagPermissions {
if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) {
ArrayList<String> flags = ResidencePermissions.validFlagGroups.get(flaggroup);
boolean changed = false;
for (String flag : flags) {
if (this.setPlayerFlag(player, target, flag, state, resadmin)) {
for (String flag : flags)
if (this.setPlayerFlag(player, target, flag, state, resadmin))
changed = true;
}
}
return changed;
}
return false;
@@ -427,31 +340,26 @@ public class ResidencePermissions extends FlagPermissions {
if (validFlagGroups.containsKey(flag))
return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (checkCanSetFlag(player, flag, state, false, resadmin)) {
if (checkCanSetFlag(player, flag, state, false, resadmin))
if (Residence.getPermissionManager().hasGroup(group)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag,
ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
if (super.setGroupFlag(group, flag, state)) {
player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("FlagSet"));
player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet"));
return true;
}
} else {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("InvalidGroup"));
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup"));
return false;
}
}
return false;
}
@Override
public boolean setGroupFlag(String group, String flag, FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag,
ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -462,9 +370,8 @@ public class ResidencePermissions extends FlagPermissions {
ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner);
Residence.getServ().getPluginManager().callEvent(ownerchange);
owner = newOwner;
if (resetFlags) {
if (resetFlags)
this.applyDefaultFlags();
}
}
public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin) {
@@ -472,8 +379,7 @@ public class ResidencePermissions extends FlagPermissions {
return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin);
FlagState state = FlagPermissions.stringToFlagState(flagstate);
if (checkCanSetFlag(player, flag, state, false, resadmin)) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag,
ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
@@ -487,11 +393,37 @@ public class ResidencePermissions extends FlagPermissions {
@Override
public boolean setPlayerFlag(String player, String flag, FlagState state) {
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag,
ResidenceFlagChangeEvent.FlagType.PLAYER, state, player);
ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player);
Residence.getServ().getPluginManager().callEvent(fc);
if (fc.isCancelled())
return false;
return super.setPlayerFlag(player, flag, state);
}
private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) {
if (!checkValidFlag(flag, globalflag)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag"));
return false;
}
if (state == FlagState.INVALID) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlagState"));
return false;
}
if (!resadmin) {
if (!this.hasResidencePermission(player, false)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
return false;
}
if (!hasFlagAccess(owner, flag)) {
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission"));
return false;
}
}
return true;
}
private boolean hasFlagAccess(String player, String flag) {
PermissionGroup group = Residence.getPermissionManager().getGroup(player, world);
return group.hasFlagAccess(flag);
}
}