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:
@@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user