diff --git a/PlotSquared/pom.xml b/PlotSquared/pom.xml index b2efb340b..1a1db655a 100644 --- a/PlotSquared/pom.xml +++ b/PlotSquared/pom.xml @@ -8,7 +8,7 @@ UTF-8 PlotSquared - 2.11.23 + 2.11.24 PlotSquared jar diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java index f86e96ee7..777545427 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java @@ -718,6 +718,7 @@ public class PlotSquared { for (final String flag : intFlags) { FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.UnsignedIntegerValue())); } + FlagManager.addFlag(new AbstractFlag("modified-blocks", new FlagValue.IntegerValue()), true); FlagManager.addFlag(new AbstractFlag("disable-physics", new FlagValue.BooleanValue())); FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue())); FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue())); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java index 4414a483a..8503b914e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java @@ -71,6 +71,10 @@ public class FlagCmd extends SubCommand { MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag.other"); return false; } + if (args.length > 1 && FlagManager.isReserved(args[1])) { + MainUtil.sendMessage(player, C.NOT_VALID_FLAG); + return false; + } switch (args[0].toLowerCase()) { case "info": { if (!Permissions.hasPermission(player, "plots.set.flag")) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java index fe718a0dd..1fa044b8b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java @@ -106,7 +106,7 @@ public class Set extends SubCommand { } catch (final Exception e) { af = new AbstractFlag(args[1].toLowerCase()); } - if (!FlagManager.getFlags().contains(af)) { + if (!FlagManager.getFlags().contains(af) || FlagManager.isReserved(af.getKey())) { MainUtil.sendMessage(plr, C.NOT_VALID_FLAG); return false; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java index 837c8ad61..3e8b9181a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java @@ -50,8 +50,44 @@ public class FlagManager { // - Plot clear interval // - Mob cap // - customized plot composition + + private final static HashSet reserved = new HashSet<>(); + private final static HashSet flags = new HashSet<>(); + /** + * Reserve a flag so that it cannot be set by players + * @param flag + */ + public static void reserveFlag(String flag) { + reserved.add(flag); + } + + /** + * Get if a flag is reserved + * @param flag + * @return + */ + public static boolean isReserved(String flag) { + return reserved.contains(flag); + } + + /** + * Get the reserved flags + * @return + */ + public static HashSet getReservedFlags() { + return (HashSet) reserved.clone(); + } + + /** + * Unreserve a flag + * @param flag + */ + public static void unreserveFlag(String flag) { + reserved.remove(flag); + } + /** * Register an AbstractFlag with PlotSquared * @@ -60,6 +96,10 @@ public class FlagManager { * @return boolean success */ public static boolean addFlag(AbstractFlag af) { + return addFlag(af, false); + } + + public static boolean addFlag(AbstractFlag af, boolean reserved) { PlotSquared.log(C.PREFIX.s() + "&8 - Adding flag: &7" + af); for (PlotWorld plotworld : PlotSquared.getPlotWorldObjects()) { Flag flag = plotworld.DEFAULT_FLAGS.get(af.getKey()); @@ -75,7 +115,11 @@ public class FlagManager { } } } - return (getFlag(af.getKey()) == null) && flags.add(af); + if ((getFlag(af.getKey()) == null) && flags.add(af)) { + if (reserved) reserveFlag(af.getKey()); + return true; + } + return false; } public static Flag getSettingFlag(final String world, final PlotSettings settings, final String id) {