From bd95d5a86d9f445e9e1bcbcaf7486a660155a1c5 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sat, 18 Sep 2021 03:19:27 +0100 Subject: [PATCH] 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 --- .../fastasyncworldedit/bukkit/FaweBukkit.java | 4 +-- .../bukkit/regions/WorldGuardFeature.java | 16 +++------- .../com/fastasyncworldedit/core/Fawe.java | 2 +- .../com/fastasyncworldedit/core/FaweAPI.java | 4 +-- .../core/configuration/Settings.java | 8 +++++ .../core/regions/FaweMaskManager.java | 30 +++++++++---------- .../core/util/WEManager.java | 24 ++++++++++++--- 7 files changed, 52 insertions(+), 36 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/FaweBukkit.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/FaweBukkit.java index 5b860b29a..b24c1065d 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/FaweBukkit.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/FaweBukkit.java @@ -304,10 +304,10 @@ public class FaweBukkit implements IFawe, Listener { return; } if (plotSquared.getClass().getPackage().toString().contains("intellectualsites")) { - WEManager.IMP.managers.add(new com.fastasyncworldedit.bukkit.regions.plotsquaredv4.PlotSquaredFeature()); + WEManager.IMP.addManager(new com.fastasyncworldedit.bukkit.regions.plotsquaredv4.PlotSquaredFeature()); LOGGER.info("Plugin 'PlotSquared' found. Using it now."); } else if (PlotSquared.get().getVersion().version[0] == 6) { - WEManager.IMP.managers.add(new com.fastasyncworldedit.bukkit.regions.plotsquared.PlotSquaredFeature()); + WEManager.IMP.addManager(new com.fastasyncworldedit.bukkit.regions.plotsquared.PlotSquaredFeature()); LOGGER.info("Plugin 'PlotSquared' found. Using it now."); } else { LOGGER.error("Incompatible version of PlotSquared found. Please use PlotSquared v6."); diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/regions/WorldGuardFeature.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/regions/WorldGuardFeature.java index a3b460e38..1a2745dc2 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/regions/WorldGuardFeature.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/regions/WorldGuardFeature.java @@ -124,20 +124,12 @@ public class WorldGuardFeature extends BukkitMaskManager implements Listener { final BlockVector3 pos1; final BlockVector3 pos2; if (myregion.getId().equals("__global__")) { - pos1 = BlockVector3.at(Integer.MIN_VALUE, 0, Integer.MIN_VALUE); - pos2 = BlockVector3.at(Integer.MAX_VALUE, 255, Integer.MAX_VALUE); + pos1 = BlockVector3.at(Integer.MIN_VALUE, wePlayer.getWorld().getMinY(), Integer.MIN_VALUE); + pos2 = BlockVector3.at(Integer.MAX_VALUE, wePlayer.getWorld().getMaxY(), Integer.MAX_VALUE); } else { if (myregion instanceof ProtectedCuboidRegion) { - pos1 = BlockVector3.at( - myregion.getMinimumPoint().getBlockX(), - myregion.getMinimumPoint().getBlockY(), - myregion.getMinimumPoint().getBlockZ() - ); - pos2 = BlockVector3.at( - myregion.getMaximumPoint().getBlockX(), - myregion.getMaximumPoint().getBlockY(), - myregion.getMaximumPoint().getBlockZ() - ); + pos1 = myregion.getMinimumPoint(); + pos2 = myregion.getMaximumPoint(); } else { return new FaweMask(adapt(myregion)) { @Override diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/Fawe.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/Fawe.java index 472c45f20..e3e0745a3 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/Fawe.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/Fawe.java @@ -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); diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/FaweAPI.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/FaweAPI.java index 56366c888..a11977439 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/FaweAPI.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/FaweAPI.java @@ -139,7 +139,7 @@ public class FaweAPI { * @return Set of FaweMaskManager */ public static Set 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); } /** diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/configuration/Settings.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/configuration/Settings.java index b035877e1..ff178608f 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/configuration/Settings.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/configuration/Settings.java @@ -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 EXCLUSIVE_MANAGERS = new ArrayList<>(Collections.singleton(("ExamplePlugin"))); } diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/regions/FaweMaskManager.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/regions/FaweMaskManager.java index 927693392..fae3aa7ea 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/regions/FaweMaskManager.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/regions/FaweMaskManager.java @@ -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; + } + } } } diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/util/WEManager.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/util/WEManager.java index 402e5bc25..6ada0275e 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/util/WEManager.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/util/WEManager.java @@ -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 managers = new ArrayDeque<>(); - public final ArrayDeque managers = new ArrayDeque<>(); + public ArrayDeque getManagers() { + return managers; + } + + public void addManager(FaweMaskManager manager) { + if (manager.isExclusive()) { + managers.addFirst(manager); + } else { + managers.add(manager); + } + } + + public void addManagers(Collection 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 tmpMasks = new HashSet<>(); for (FaweMaskManager manager : managers) { if (player.hasPermission("fawe." + manager.getKey())) { try {