mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2025-02-03 14:01:56 +01:00
Have membership override BUILD=DENY like in WG 5.
This commit is contained in:
parent
40ceb3d0b8
commit
0852fc0d65
@ -274,6 +274,11 @@ public <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
public <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
checkNotNull(flag);
|
||||
|
||||
// Check to see whether we have a subject if this is BUILD
|
||||
if (flag == DefaultFlag.BUILD && subject == null) {
|
||||
throw new NullPointerException("The BUILD flag is handled in a special fashion and requires a non-null subject parameter");
|
||||
}
|
||||
|
||||
int minimumPriority = Integer.MIN_VALUE;
|
||||
|
||||
// Say there are two regions in one location: CHILD and PARENT (CHILD
|
||||
@ -317,10 +322,11 @@ public <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag
|
||||
}
|
||||
|
||||
V value = getEffectiveFlag(region, flag, subject);
|
||||
int priority = getPriority(region);
|
||||
|
||||
if (value != null) {
|
||||
if (!ignoredRegions.contains(region)) {
|
||||
minimumPriority = getPriority(region);
|
||||
minimumPriority = priority;
|
||||
|
||||
ignoreValuesOfParents(consideredValues, ignoredRegions, region);
|
||||
consideredValues.put(region, value);
|
||||
@ -332,13 +338,17 @@ public <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The BUILD flag (of lower priorities) can be overridden if
|
||||
// this region has members... this check is here due to legacy
|
||||
// reasons
|
||||
if (priority != minimumPriority && flag == DefaultFlag.BUILD
|
||||
&& getEffectiveFlag(region, DefaultFlag.PASSTHROUGH, subject) != State.ALLOW) {
|
||||
minimumPriority = getPriority(region);
|
||||
}
|
||||
}
|
||||
|
||||
if (flag == DefaultFlag.BUILD && consideredValues.isEmpty()) {
|
||||
if (subject == null) {
|
||||
throw new NullPointerException("The BUILD flag is handled in a special fashion and requires a non-null subject parameter");
|
||||
}
|
||||
|
||||
switch (getMembership(subject)) {
|
||||
case FAIL:
|
||||
return ImmutableList.of();
|
||||
|
@ -410,7 +410,7 @@ public void testPriorityDisjointBuildDenyFlagAndMembership() {
|
||||
region.getOwners().addPlayer(member);
|
||||
|
||||
ApplicableRegionSet set = mock.getApplicableSet();
|
||||
assertFalse(set.canBuild(member));
|
||||
assertTrue(set.canBuild(member));
|
||||
assertFalse(set.canBuild(nonMember));
|
||||
}
|
||||
|
||||
@ -543,7 +543,7 @@ public void testGlobalRegionBuildFlagDenyWithRegion() {
|
||||
region.getOwners().addPlayer(member);
|
||||
|
||||
ApplicableRegionSet set = mock.getApplicableSet();
|
||||
assertFalse(set.canBuild(member));
|
||||
assertTrue(set.canBuild(member));
|
||||
assertFalse(set.canBuild(nonMember));
|
||||
}
|
||||
|
||||
|
@ -900,10 +900,11 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembershipAn
|
||||
region.getMembers().addPlayer(memberBoth);
|
||||
|
||||
FlagValueCalculator result = mock.getFlagCalculator();
|
||||
assertThat(result.queryValue(globalMember, DefaultFlag.BUILD), is(State.DENY));
|
||||
assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.DENY));
|
||||
assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.DENY));
|
||||
assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.DENY));
|
||||
// Inconsistent due to legacy reasons
|
||||
assertThat(result.queryValue(globalMember, DefaultFlag.BUILD), is((State) null));
|
||||
assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null));
|
||||
assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null));
|
||||
assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
Reference in New Issue
Block a user