diff --git a/pom.xml b/pom.xml index f121167..3fda5f4 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ placeholderapi - http://repo.extendedclip.com/content/repositories/placeholderapi/ + https://repo.extendedclip.com/content/repositories/placeholderapi/ sk89q-repo @@ -31,13 +31,13 @@ org.spigotmc spigot-api - 1.14.2-R0.1-SNAPSHOT + 1.20.4-R0.1-SNAPSHOT provided me.clip placeholderapi - LATEST + 2.11.6 provided diff --git a/src/main/java/com/extendedclip/papi/expansion/worldguard/WorldGuardExpansion.java b/src/main/java/com/extendedclip/papi/expansion/worldguard/WorldGuardExpansion.java index 10c0a4e..3bed92b 100644 --- a/src/main/java/com/extendedclip/papi/expansion/worldguard/WorldGuardExpansion.java +++ b/src/main/java/com/extendedclip/papi/expansion/worldguard/WorldGuardExpansion.java @@ -22,7 +22,6 @@ import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; @@ -30,8 +29,11 @@ import org.codemc.worldguardwrapper.WorldGuardWrapper; import org.codemc.worldguardwrapper.region.IWrappedRegion; import org.codemc.worldguardwrapper.selection.ICuboidSelection; +import org.jetbrains.annotations.NotNull; import java.util.*; +import java.util.stream.Collectors; + import static java.util.stream.Collectors.toMap; public class WorldGuardExpansion extends PlaceholderExpansion { @@ -55,7 +57,7 @@ public boolean canRegister() { } @Override - public String getName() { + public @NotNull String getName() { return NAME; } @@ -65,7 +67,7 @@ public String getName() { * @return The name of the author as a String. */ @Override - public String getAuthor() { + public @NotNull String getAuthor() { return "clip"; } @@ -75,7 +77,7 @@ public String getAuthor() { * @return The version as a String. */ @Override - public String getVersion() { + public @NotNull String getVersion() { return VERSION; } @@ -85,7 +87,7 @@ public String getVersion() { * @return "worldguard". */ @Override - public String getIdentifier() { + public @NotNull String getIdentifier() { return IDENTIFIER; } @@ -93,6 +95,14 @@ public String getIdentifier() { @Override public String onRequest(OfflinePlayer offlinePlayer, String params) { + if (params.equalsIgnoreCase("regions")) { + return String.join(", ",getRegions(offlinePlayer.getLocation())); + } + if (params.startsWith("is_in_region_")) { + List regions = getRegions(offlinePlayer.getLocation()); + return regions.contains(params.substring(13)) ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse(); + } + // Get the wrapper from input location IWrappedRegion region; ICuboidSelection selection; @@ -134,6 +144,17 @@ public String onRequest(OfflinePlayer offlinePlayer, String params) { return region.getFlags().keySet().stream().anyMatch(f -> f.getName().equalsIgnoreCase(rg[1])) ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse(); } + if (params.startsWith("region_flag_")) { + final String[] rg = params.split("region_flag_"); + if (rg.length < 1) return null; + + Optional flag = region.getFlags().keySet().stream().filter(f -> + f.getName().equalsIgnoreCase(rg[1])).map(region::getFlag).findAny().orElse(null); + if (flag == null || !flag.isPresent()) return ""; + return flag.get() instanceof Optional && ((Optional) flag.get()).isPresent() + ? String.valueOf(((Optional) flag.get()).get()) + : ""; + } // Defined as a switch statement to keep thinks clean switch (params) { @@ -141,8 +162,11 @@ public String onRequest(OfflinePlayer offlinePlayer, String params) { case "region_name": return region.getId(); // Because some people are stubborn, let's have it also provide capitalization + // lul, that's fair case "region_name_capitalized": - return Character.isLetter(region.getId().charAt(0)) ? StringUtils.capitalize(region.getId()) : region.getId(); + return Character.isLetter(region.getId().charAt(0)) + ? String.valueOf(region.getId().charAt(0)).toUpperCase() + region.getId().substring(1) + : region.getId(); case "region_owner": { // Create a set of owners Set owners = new HashSet<>(); @@ -220,6 +244,12 @@ private IWrappedRegion getRegion(Location location, int priority) { return null; } } + private List getRegions(Location location) { + return worldguard.getRegions(location) + .stream() + .map(IWrappedRegion::getId) + .collect(Collectors.toList()); + } /** * Convert a string to a location