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

comeplete 1.7-1.8 all version...

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

View File

@@ -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);
}
}