mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-12-25 18:47:44 +01:00
yet another fix for state flag fallback
This commit is contained in:
parent
83c6c9c743
commit
79b937e8d2
@ -27,7 +27,6 @@
|
|||||||
import com.sk89q.worldguard.protection.regions.flags.RegionFlag.State;
|
import com.sk89q.worldguard.protection.regions.flags.RegionFlag.State;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a setFlag of regions and their rules as applied to one point.
|
* Represents a setFlag of regions and their rules as applied to one point.
|
||||||
*
|
*
|
||||||
@ -46,10 +45,10 @@ public class ApplicableRegionSet {
|
|||||||
* @param regions
|
* @param regions
|
||||||
* @param global
|
* @param global
|
||||||
*/
|
*/
|
||||||
public ApplicableRegionSet(List<ProtectedRegion> applicable, GlobalFlags global) {
|
public ApplicableRegionSet(List<ProtectedRegion> applicable, GlobalFlags global) {
|
||||||
this.applicable = applicable;
|
this.applicable = applicable;
|
||||||
this.global = global;
|
this.global = global;
|
||||||
|
|
||||||
determineAffectedRegion();
|
determineAffectedRegion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +59,12 @@ public ApplicableRegionSet(List<ProtectedRegion> applicable, GlobalFlags global
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean canBuild(LocalPlayer player) {
|
public boolean canBuild(LocalPlayer player) {
|
||||||
return isStateFlagAllowed(FlagType.BUILD, global.canBuild, player);
|
|
||||||
|
if (!this.isAnyRegionAffected()) {
|
||||||
|
return global.canBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getStateFlag(FlagType.BUILD, true).getValue(State.DENY) == State.ALLOW || isMember(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,35 +74,41 @@ public boolean canBuild(LocalPlayer player) {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean isStateFlagAllowed(FlagType type) {
|
public boolean isStateFlagAllowed(FlagType type) {
|
||||||
|
|
||||||
return isStateFlagAllowed(type, global.getDefaultValue(type));
|
return isStateFlagAllowed(type, global.getDefaultValue(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStateFlagAllowed(FlagType type, boolean def) {
|
public boolean isStateFlagAllowed(FlagType type, boolean def) {
|
||||||
|
|
||||||
if(!this.isAnyRegionAffected())
|
if (!this.isAnyRegionAffected()) {
|
||||||
{
|
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
State defState = def ? State.ALLOW : State.DENY;
|
||||||
return getStateFlag(type, true).getValue(State.DENY) == State.ALLOW;
|
return getStateFlag(type, true).getValue(defState) == State.ALLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStateFlagAllowed(FlagType type, LocalPlayer player) {
|
public boolean isStateFlagAllowed(FlagType type, LocalPlayer player) {
|
||||||
|
|
||||||
|
if (type == FlagType.BUILD) {
|
||||||
|
return canBuild(player);
|
||||||
|
}
|
||||||
return isStateFlagAllowed(type, global.getDefaultValue(type), player);
|
return isStateFlagAllowed(type, global.getDefaultValue(type), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStateFlagAllowed(FlagType type, boolean def, LocalPlayer player) {
|
public boolean isStateFlagAllowed(FlagType type, boolean def, LocalPlayer player) {
|
||||||
|
|
||||||
if(!this.isAnyRegionAffected())
|
if (type == FlagType.BUILD) {
|
||||||
{
|
return canBuild(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.isAnyRegionAffected()) {
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
return getStateFlag(type, true).getValue(State.DENY) == State.ALLOW || this.isMember(player);
|
State defState = def ? State.ALLOW : State.DENY;
|
||||||
|
return getStateFlag(type, true).getValue(defState) == State.ALLOW || this.isMember(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private RegionFlag getFlag(FlagType type, Boolean inherit) {
|
private RegionFlag getFlag(FlagType type, Boolean inherit) {
|
||||||
|
|
||||||
ProtectedRegion region = affectedRegion;
|
ProtectedRegion region = affectedRegion;
|
||||||
@ -122,7 +132,7 @@ private RegionFlag getFlag(FlagType type, Boolean inherit) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BooleanRegionFlag getBooleanFlag(FlagType type, boolean inherit) {
|
public BooleanRegionFlag getBooleanFlag(FlagType type, boolean inherit) {
|
||||||
|
|
||||||
RegionFlag flag = this.getFlag(type, inherit);
|
RegionFlag flag = this.getFlag(type, inherit);
|
||||||
|
|
||||||
@ -144,7 +154,7 @@ public StateRegionFlag getStateFlag(FlagType type, boolean inherit) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntegerRegionFlag getIntegerFlag(FlagType type, boolean inherit) {
|
public IntegerRegionFlag getIntegerFlag(FlagType type, boolean inherit) {
|
||||||
|
|
||||||
RegionFlag flag = this.getFlag(type, inherit);
|
RegionFlag flag = this.getFlag(type, inherit);
|
||||||
|
|
||||||
@ -199,12 +209,10 @@ public LocationRegionFlag getLocationFlag(FlagType type, boolean inherit) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAnyRegionAffected()
|
public boolean isAnyRegionAffected() {
|
||||||
{
|
|
||||||
return this.applicable.size() > 0;
|
return this.applicable.size() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines the region with the hightest priority that is not a parent.
|
* Determines the region with the hightest priority that is not a parent.
|
||||||
*
|
*
|
||||||
@ -223,9 +231,7 @@ private void determineAffectedRegion() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isOwner(LocalPlayer player) {
|
||||||
|
|
||||||
public boolean isOwner(LocalPlayer player) {
|
|
||||||
return affectedRegion != null ? affectedRegion.isOwner(player) : false;
|
return affectedRegion != null ? affectedRegion.isOwner(player) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,15 +246,12 @@ public boolean isMember(LocalPlayer player) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getAffectedRegionId() {
|
public String getAffectedRegionId() {
|
||||||
return affectedRegion != null ? affectedRegion.getId() : "";
|
return affectedRegion != null ? affectedRegion.getId() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAffectedRegionPriority() {
|
public int getAffectedRegionPriority() {
|
||||||
return affectedRegion != null ? affectedRegion.getPriority() : 0;
|
return affectedRegion != null ? affectedRegion.getPriority() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks to see if a flag is permitted.
|
* Checks to see if a flag is permitted.
|
||||||
*
|
*
|
||||||
@ -333,8 +336,6 @@ private boolean isStateFlagAllowed(String flag, boolean def, LocalPlayer player)
|
|||||||
|| (player != null && needsClear.size() == 0);
|
|| (player != null && needsClear.size() == 0);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear a region's parents for isStateFlagAllowed().
|
* Clear a region's parents for isStateFlagAllowed().
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user