Adjust mask managers

- Add list of "exclusive" managers to config to aid users in having some sort of prioritisation.
 - Fixes #960 if PlotSquared is added to exclusive managers, otherwise, there's no particularly sane way of adding prioritisation without requiring a treemap be added to YAML config, or for us to decide upon it ourselves
This commit is contained in:
dordsor21
2021-09-18 03:19:27 +01:00
parent fbbb4ed8fa
commit bd95d5a86d
7 changed files with 52 additions and 36 deletions

View File

@ -125,7 +125,7 @@ public class Fawe {
// Delayed worldedit setup
TaskManager.IMP.later(() -> {
try {
WEManager.IMP.managers.addAll(Fawe.this.implementation.getMaskManagers());
WEManager.IMP.addManagers(Fawe.this.implementation.getMaskManagers());
} catch (Throwable ignored) {
}
}, 0);

View File

@ -139,7 +139,7 @@ public class FaweAPI {
* @return Set of FaweMaskManager
*/
public static Set<FaweMaskManager> getMaskManagers() {
return new HashSet<>(WEManager.IMP.managers);
return new HashSet<>(WEManager.IMP.getManagers());
}
/**
@ -176,7 +176,7 @@ public class FaweAPI {
}
public static void addMaskManager(FaweMaskManager maskMan) {
WEManager.IMP.managers.add(maskMan);
WEManager.IMP.addManager(maskMan);
}
/**

View File

@ -115,6 +115,14 @@ public class Settings extends Config {
" - OWNER = Players who own the region"
})
public String MODE = "MEMBER";
@Comment({
"List of plugin mask managers that should be exclusive. Exclusive managers are not ",
"checked for edit restrictions if another manager already allowed an edit, and further ",
"managers are not checked if an exclusive manager allows an edit.",
" - May be useful to add PlotSquared if using both P2 and WorldGuard on a server",
" - Some custom-implementations in other plugins may override this setting"
})
public List<String> EXCLUSIVE_MANAGERS = new ArrayList<>(Collections.singleton(("ExamplePlugin")));
}

View File

@ -8,20 +8,6 @@ import java.util.Locale;
public abstract class FaweMaskManager {
public enum MaskType {
OWNER,
MEMBER;
public static MaskType getDefaultMaskType() {
try {
return MaskType
.valueOf(Settings.IMP.REGION_RESTRICTIONS_OPTIONS.MODE.toUpperCase(Locale.ROOT));
} catch (Exception ignored) {
return MEMBER;
}
}
}
private final String key;
public FaweMaskManager(final String plugin) {
@ -54,7 +40,21 @@ public abstract class FaweMaskManager {
}
public boolean isExclusive() {
return false;
return Settings.IMP.REGION_RESTRICTIONS_OPTIONS.EXCLUSIVE_MANAGERS.contains(this.key);
}
public enum MaskType {
OWNER,
MEMBER;
public static MaskType getDefaultMaskType() {
try {
return MaskType
.valueOf(Settings.IMP.REGION_RESTRICTIONS_OPTIONS.MODE.toUpperCase(Locale.ROOT));
} catch (Exception ignored) {
return MEMBER;
}
}
}
}

View File

@ -19,17 +19,34 @@ import com.sk89q.worldedit.util.formatting.text.TextComponent;
import org.apache.logging.log4j.Logger;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class WEManager {
private static final Logger LOGGER = LogManagerCompat.getLogger();
public static final WEManager IMP = new WEManager();
private static final Logger LOGGER = LogManagerCompat.getLogger();
private final ArrayDeque<FaweMaskManager> managers = new ArrayDeque<>();
public final ArrayDeque<FaweMaskManager> managers = new ArrayDeque<>();
public ArrayDeque<FaweMaskManager> getManagers() {
return managers;
}
public void addManager(FaweMaskManager manager) {
if (manager.isExclusive()) {
managers.addFirst(manager);
} else {
managers.add(manager);
}
}
public void addManagers(Collection<FaweMaskManager> managers) {
for (FaweMaskManager manager : managers) {
addManager(manager);
}
}
public void cancelEditSafe(AbstractDelegateExtent parent, FaweException reason) throws FaweException {
LOGGER.warn("CancelEditSafe was hit. Please ignore this message.");
@ -102,7 +119,6 @@ public class WEManager {
masks.clear();
}
}
Set<FaweMask> tmpMasks = new HashSet<>();
for (FaweMaskManager manager : managers) {
if (player.hasPermission("fawe." + manager.getKey())) {
try {