Fix some region issues
This commit is contained in:
parent
ba5f37cd32
commit
345b344000
|
@ -18,6 +18,8 @@ permissions:
|
||||||
fawe.plotsquared.trusted: true
|
fawe.plotsquared.trusted: true
|
||||||
fawe.plotme:
|
fawe.plotme:
|
||||||
default: true
|
default: true
|
||||||
|
fawe.bypass.regions:
|
||||||
|
default: false
|
||||||
fawe.bypass:
|
fawe.bypass:
|
||||||
default: false
|
default: false
|
||||||
children:
|
children:
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class ExtentTraverser<T extends Extent> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public <U> U findAndGet(Class<U> clazz) {
|
public <U> U findAndGet(Class<U> clazz) {
|
||||||
ExtentTraverser<Extent> traverser = find(clazz);
|
ExtentTraverser<Extent> traverser = find((Class) clazz);
|
||||||
return (traverser != null) ? (U) traverser.get() : null;
|
return (traverser != null) ? (U) traverser.get() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ public class ExtentTraverser<T extends Extent> {
|
||||||
try {
|
try {
|
||||||
ExtentTraverser<T> value = this;
|
ExtentTraverser<T> value = this;
|
||||||
while (value != null) {
|
while (value != null) {
|
||||||
if (clazz.isInstance(value.root)) {
|
if (clazz.isAssignableFrom(value.root.getClass())) {
|
||||||
return (ExtentTraverser<U>) value;
|
return (ExtentTraverser<U>) value;
|
||||||
}
|
}
|
||||||
value = value.next();
|
value = value.next();
|
||||||
|
|
|
@ -15,9 +15,8 @@ import com.sk89q.worldedit.extent.AbstractDelegateExtent;
|
||||||
import com.sk89q.worldedit.extent.Extent;
|
import com.sk89q.worldedit.extent.Extent;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class WEManager {
|
public class WEManager {
|
||||||
|
|
||||||
|
@ -98,33 +97,37 @@ public class WEManager {
|
||||||
}
|
}
|
||||||
player.setMeta("lastMaskWorld", world);
|
player.setMeta("lastMaskWorld", world);
|
||||||
Set<FaweMask> masks = player.getMeta("lastMask");
|
Set<FaweMask> masks = player.getMeta("lastMask");
|
||||||
HashSet<Region> regions = new HashSet<>();
|
Set<Region> backupRegions = new HashSet<>();
|
||||||
|
Set<Region> regions = new HashSet<>();
|
||||||
|
|
||||||
|
|
||||||
if (masks == null) {
|
if (masks == null) {
|
||||||
masks = new HashSet<>();
|
masks = new HashSet<>();
|
||||||
} else {
|
} else {
|
||||||
|
synchronized (masks) {
|
||||||
boolean removed = false;
|
boolean removed = false;
|
||||||
if (masks.isEmpty()) {
|
if (!masks.isEmpty()) {
|
||||||
removed = true;
|
Iterator<FaweMask> iter = masks.iterator();
|
||||||
} else {
|
while (iter.hasNext()) {
|
||||||
for (FaweMask mask : masks) {
|
FaweMask mask = iter.next();
|
||||||
|
if (mask.isValid(player, type)) {
|
||||||
Region region = mask.getRegion();
|
Region region = mask.getRegion();
|
||||||
if (!region.contains(loc.x, loc.y, loc.z)) {
|
if (region.contains(loc.x, loc.y, loc.z)) {
|
||||||
removed = true;
|
|
||||||
}
|
|
||||||
if (!mask.isValid(player, type)) {
|
|
||||||
removed = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
regions.add(region);
|
regions.add(region);
|
||||||
}
|
|
||||||
}
|
|
||||||
if (removed) {
|
|
||||||
masks.clear();
|
|
||||||
regions.clear();
|
|
||||||
} else {
|
} else {
|
||||||
return regions.toArray(new Region[regions.size()]);
|
removed = true;
|
||||||
|
backupRegions.add(region);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
removed = true;
|
||||||
|
iter.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!removed) return regions.toArray(new Region[regions.size()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Set<FaweMask> tmpMasks = new HashSet<>();
|
||||||
for (final FaweMaskManager manager : managers) {
|
for (final FaweMaskManager manager : managers) {
|
||||||
if (player.hasPermission("fawe." + manager.getKey())) {
|
if (player.hasPermission("fawe." + manager.getKey())) {
|
||||||
try {
|
try {
|
||||||
|
@ -138,6 +141,12 @@ public class WEManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!tmpMasks.isEmpty()) {
|
||||||
|
masks = tmpMasks;
|
||||||
|
regions = masks.stream().map(mask -> mask.getRegion()).collect(Collectors.toSet());
|
||||||
|
} else {
|
||||||
|
regions.addAll(backupRegions);
|
||||||
|
}
|
||||||
if (!masks.isEmpty()) {
|
if (!masks.isEmpty()) {
|
||||||
player.setMeta("lastMask", masks);
|
player.setMeta("lastMask", masks);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,6 +10,8 @@ permissions:
|
||||||
fawe.plotsquared.trusted: true
|
fawe.plotsquared.trusted: true
|
||||||
fawe.plotme:
|
fawe.plotme:
|
||||||
default: true
|
default: true
|
||||||
|
fawe.bypass.regions:
|
||||||
|
default: false
|
||||||
fawe.bypass:
|
fawe.bypass:
|
||||||
default: false
|
default: false
|
||||||
children:
|
children:
|
||||||
|
|
Loading…
Reference in New Issue