diff --git a/src/main/java/ch/njol/skript/hooks/regions/classes/Region.java b/src/main/java/ch/njol/skript/hooks/regions/classes/Region.java index c87e26b89e9..05c44274782 100644 --- a/src/main/java/ch/njol/skript/hooks/regions/classes/Region.java +++ b/src/main/java/ch/njol/skript/hooks/regions/classes/Region.java @@ -26,6 +26,7 @@ import ch.njol.skript.lang.ParseContext; import ch.njol.skript.lang.VariableString; import ch.njol.skript.registrations.Classes; +import ch.njol.skript.registrations.Converters; import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -74,23 +75,7 @@ public Region parse(String s, final ParseContext context) { if (!VariableString.isQuotedCorrectly(s, quoted)) return null; s = VariableString.unquote(s, quoted); - Region r = null; - for (final World w : Bukkit.getWorlds()) { - @SuppressWarnings("null") - final Region r2 = RegionsPlugin.getRegion(w, s); - if (r2 == null) - continue; - if (r != null) { - Skript.error("Multiple regions with the name '" + s + "' exist"); - return null; - } - r = r2; - } - if (r == null) { - Skript.error("Region '" + s + "' could not be found"); - return null; - } - return r; + return Region.parse(s, true); } @Override @@ -109,6 +94,29 @@ public boolean mustSyncDeserialization() { return true; } })); + Converters.registerConverter(String.class, Region.class, s -> Region.parse(s, false)); + } + + @Nullable + private static Region parse(String s, boolean error) { + Region r = null; + for (World w : Bukkit.getWorlds()) { + Region r2 = RegionsPlugin.getRegion(w, s); + if (r2 == null) + continue; + if (r != null) { + if (error) + Skript.error("Multiple regions with the name '" + s + "' exist"); + return null; + } + r = r2; + } + if (r == null) { + if (error) + Skript.error("Region '" + s + "' could not be found"); + return null; + } + return r; } public abstract boolean contains(Location l);