From c419c7f89697c8c0e253dd13bc92aba6bc3c26ea Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Tue, 25 Feb 2025 23:41:25 -0500 Subject: [PATCH 1/4] Initial Commit --- .../elements/expressions/ExprRegions.java | 80 +++++++++++++++++++ .../worldguard/RegionUtils.java | 41 ++++++++-- 2 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java diff --git a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java new file mode 100644 index 0000000..6c65107 --- /dev/null +++ b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java @@ -0,0 +1,80 @@ +package org.skriptlang.skriptworldguard.elements.expressions; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.*; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.util.Kleenean; +import org.bukkit.World; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skriptworldguard.worldguard.RegionUtils; +import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Name("All Regions") +@Description("Get all regions from all worlds or of aa specific world.") +@Examples({ + "send all regions", + "set {_regions::*} to the regions in world \"world\"" +}) +@Since("INSERT VERSION") +@RequiredPlugins("WorldGuard 7") +public class ExprRegions extends SimpleExpression { + + static { + Skript.registerExpression(ExprRegions.class, WorldGuardRegion.class, ExpressionType.SIMPLE, + "(all [[of] the]|the) regions [(in|of|from) %-worlds%]"); + } + + private @Nullable Expression worlds; + + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + if (exprs[0] != null) + //noinspection unchecked + worlds = (Expression) exprs[0]; + return true; + } + + @Override + protected WorldGuardRegion @Nullable [] get(Event event) { + if (worlds == null) { + return RegionUtils.getRegions(); + } else { + World[] worlds = this.worlds.getArray(event); + if (worlds.length == 0) + return null; + List regions = new ArrayList<>(); + for (World world : worlds) { + WorldGuardRegion[] worldRegions = RegionUtils.getRegions(world); + if (worldRegions == null || worldRegions.length == 0) + continue; + regions.addAll(Arrays.stream(worldRegions).collect(Collectors.toList())); + } + return regions.toArray(new WorldGuardRegion[0]); + } + } + + @Override + public boolean isSingle() { + return false; + } + + @Override + public Class getReturnType() { + return WorldGuardRegion.class; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "all of the regions" + (worlds == null ? "" : " " + worlds.toString(event, debug)); + } + +} diff --git a/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java b/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java index b35c8f3..321357e 100644 --- a/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java +++ b/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java @@ -4,6 +4,7 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Polygonal2DRegion; +import com.sk89q.worldedit.regions.Region; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; @@ -12,6 +13,7 @@ import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.RegionContainer; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; @@ -19,9 +21,8 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; +import java.util.Map.Entry; public class RegionUtils { @@ -136,9 +137,39 @@ public static RegionContainer getRegionContainer() { * - region data for the given world has failed to load * - support for regions has been disabled */ - @Nullable - public static RegionManager getRegionManager(World world) { + public static @Nullable RegionManager getRegionManager(World world) { return WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(world)); } + /** + * Get aall regions of all worlds + * @return Array of {@link WorldGuardRegion} + */ + public static WorldGuardRegion @Nullable [] getRegions() { + return getRegions(null); + } + + /** + * Get all regions of all worlds or provide {@code world} to get all regions of that {@link World} + * @param world The {@link World} to get regions from, or {@code null} to get regions from all worlds + * @return Array of {@link WorldGuardRegion} + */ + public static WorldGuardRegion @Nullable [] getRegions(@Nullable World world) { + WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform(); + RegionContainer container = platform.getRegionContainer(); + Map managers = new HashMap<>(); + if (world == null) { + for (World world1 : Bukkit.getWorlds()) + managers.put(world1, container.get(BukkitAdapter.adapt(world1))); + } else { + managers.put(world, container.get(BukkitAdapter.adapt(world))); + } + List regions = new ArrayList<>(); + for (Entry managerEntry : managers.entrySet()) { + for (Entry regionEntry : managerEntry.getValue().getRegions().entrySet()) + regions.add(new WorldGuardRegion(managerEntry.getKey(), regionEntry.getValue())); + } + return regions.toArray(new WorldGuardRegion[0]); + } + } From d773752aecf9d08c1e2356de33d7fe5b15af564f Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Tue, 25 Feb 2025 23:46:30 -0500 Subject: [PATCH 2/4] Update src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java Co-authored-by: Shane Bee --- .../skriptworldguard/elements/expressions/ExprRegions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java index 6c65107..bf311a3 100644 --- a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java +++ b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java @@ -19,7 +19,7 @@ import java.util.stream.Collectors; @Name("All Regions") -@Description("Get all regions from all worlds or of aa specific world.") +@Description("Get all regions from all worlds or of a specific world.") @Examples({ "send all regions", "set {_regions::*} to the regions in world \"world\"" From 084bd6c1ec7fbc54fffa32fd1634ec133666dc54 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Tue, 25 Feb 2025 23:58:21 -0500 Subject: [PATCH 3/4] Update src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java Co-authored-by: Shane Bee --- .../skriptworldguard/elements/expressions/ExprRegions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java index bf311a3..90eb365 100644 --- a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java +++ b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java @@ -19,7 +19,7 @@ import java.util.stream.Collectors; @Name("All Regions") -@Description("Get all regions from all worlds or of a specific world.") +@Description("Get all regions from all worlds or from a specific world.") @Examples({ "send all regions", "set {_regions::*} to the regions in world \"world\"" From 6cf31bff53085b8061807c4506d25f15d7a4c1dc Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:24:04 -0500 Subject: [PATCH 4/4] Requested Changes --- .../elements/expressions/ExprRegions.java | 24 +++++++++---------- .../worldguard/RegionUtils.java | 5 ++-- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java index 90eb365..dbf3c19 100644 --- a/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java +++ b/src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegions.java @@ -45,21 +45,19 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override protected WorldGuardRegion @Nullable [] get(Event event) { - if (worlds == null) { + if (worlds == null) return RegionUtils.getRegions(); - } else { - World[] worlds = this.worlds.getArray(event); - if (worlds.length == 0) - return null; - List regions = new ArrayList<>(); - for (World world : worlds) { - WorldGuardRegion[] worldRegions = RegionUtils.getRegions(world); - if (worldRegions == null || worldRegions.length == 0) - continue; - regions.addAll(Arrays.stream(worldRegions).collect(Collectors.toList())); - } - return regions.toArray(new WorldGuardRegion[0]); + World[] worlds = this.worlds.getArray(event); + if (worlds.length == 0) + return null; + List regions = new ArrayList<>(); + for (World world : worlds) { + WorldGuardRegion[] worldRegions = RegionUtils.getRegions(world); + if (worldRegions == null || worldRegions.length == 0) + continue; + regions.addAll(Arrays.stream(worldRegions).collect(Collectors.toList())); } + return regions.toArray(new WorldGuardRegion[0]); } @Override diff --git a/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java b/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java index 321357e..306db84 100644 --- a/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java +++ b/src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java @@ -142,8 +142,7 @@ public static RegionContainer getRegionContainer() { } /** - * Get aall regions of all worlds - * @return Array of {@link WorldGuardRegion} + * @return All regions of all worlds */ public static WorldGuardRegion @Nullable [] getRegions() { return getRegions(null); @@ -152,7 +151,7 @@ public static RegionContainer getRegionContainer() { /** * Get all regions of all worlds or provide {@code world} to get all regions of that {@link World} * @param world The {@link World} to get regions from, or {@code null} to get regions from all worlds - * @return Array of {@link WorldGuardRegion} + * @return All regions from the world, or all worlds if {@code world} is null. */ public static WorldGuardRegion @Nullable [] getRegions(@Nullable World world) { WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform();