diff --git a/MCTPAudio.iml b/MCTPAudio.iml
index 88ba95d..bb5f66f 100644
--- a/MCTPAudio.iml
+++ b/MCTPAudio.iml
@@ -32,7 +32,25 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/me/mctp/MCTPAudioCmd.java b/src/me/mctp/MCTPAudioCmd.java
index 5be96dc..e06e969 100644
--- a/src/me/mctp/MCTPAudioCmd.java
+++ b/src/me/mctp/MCTPAudioCmd.java
@@ -134,7 +134,16 @@ public class MCTPAudioCmd implements CommandExecutor {
return true;
} else if (args.length == 3 && args[0].equalsIgnoreCase("setregion")) {
String regionName = args[1];
- String url = args[1];
+ String url = args[2];
+
+ Main.getPlugin().getConfig().set("Regions." + regionName, url);
+ Main.getPlugin().saveConfig();
+
+ sender.sendMessage(prefix + "De region zal vanaf nu muziek afspelen.");
+ return true;
+ } else if (args.length == 3 && args[0].equalsIgnoreCase("sethueregion")) {
+ String regionName = args[1];
+ String url = args[2];
Main.getPlugin().getConfig().set("Regions." + regionName, url);
Main.getPlugin().saveConfig();
diff --git a/src/me/mctp/Main.java b/src/me/mctp/Main.java
index b41d9f8..0edbcf3 100644
--- a/src/me/mctp/Main.java
+++ b/src/me/mctp/Main.java
@@ -2,6 +2,7 @@ package me.mctp;
import me.mctp.listener.LogoutListener;
import me.mctp.listener.WGListener;
+import me.mctp.managers.WGManager;
import me.mctp.socket.Client;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -21,6 +22,12 @@ public class Main extends JavaPlugin implements Listener {
Bukkit.getLogger().info(prefix + "loading...");
+ if (!setupPlugins()) {
+ Bukkit.getLogger().severe(String.format("[%s] Disabled due to no WorldGuard dependency found!", getDescription().getName()));
+ getServer().getPluginManager().disablePlugin(this);
+ return;
+ }
+
getConfig().addDefault("Regions.demosound", "https://audiopagina.mcthemeparks.eu/gallery/voletarium.mp3");
getConfig().options().copyDefaults(true);
saveConfig();
@@ -50,6 +57,17 @@ public class Main extends JavaPlugin implements Listener {
Bukkit.getLogger().info(prefix + "successfully disabled!");
}
+ private boolean setupPlugins() {
+ if (hasWorldGuardOnServer()) {
+ WGManager.setWorldGuard(getServer().getPluginManager().getPlugin("WorldGuard"));
+ return true;
+ }
+ return false;
+ }
+ private static boolean hasWorldGuardOnServer() {
+ return Bukkit.getPluginManager().getPlugin("WorldGuard") != null;
+ }
+
public static Plugin getPlugin() {
return pl;
}
diff --git a/src/me/mctp/listener/WGListener.java b/src/me/mctp/listener/WGListener.java
index 83baecb..6460cf7 100644
--- a/src/me/mctp/listener/WGListener.java
+++ b/src/me/mctp/listener/WGListener.java
@@ -17,6 +17,7 @@ public class WGListener implements Listener {
@EventHandler
public void onRegionEnter(RegionsEnteredEvent e) {
Set list = Main.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false);
+ Set list2 = Main.getPlugin().getConfig().getConfigurationSection("HueRegions").getKeys(false);
if (!Collections.disjoint(list, e.getRegionsNames())) {
//One element is the same -> In a region
@@ -34,11 +35,18 @@ public class WGListener implements Listener {
data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", ""));
Main.getClient().sendData(data);
}
+
+ if (!Collections.disjoint(list2, e.getRegionsNames())) {
+ //One element is the same -> In a region
+
+ //TODO Add hue support
+ }
}
@EventHandler
public void onRegionExit(RegionsLeftEvent e) {
Set list = Main.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false);
+ Set list2 = Main.getPlugin().getConfig().getConfigurationSection("HueRegions").getKeys(false);
if (!Collections.disjoint(list, e.getRegionsNames())) {
//One element is the same -> In a region
@@ -51,5 +59,11 @@ public class WGListener implements Listener {
data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", ""));
Main.getClient().sendData(data);
}
+
+ if (!Collections.disjoint(list2, e.getRegionsNames())) {
+ //One element is the same -> In a region
+
+ //TODO Add hue support
+ }
}
}
diff --git a/src/me/mctp/managers/WGManager.java b/src/me/mctp/managers/WGManager.java
new file mode 100644
index 0000000..b2a2049
--- /dev/null
+++ b/src/me/mctp/managers/WGManager.java
@@ -0,0 +1,295 @@
+package me.mctp.managers;
+
+import com.sk89q.worldedit.IncompleteRegionException;
+import com.sk89q.worldedit.LocalSession;
+import com.sk89q.worldedit.WorldEdit;
+import com.sk89q.worldedit.bukkit.BukkitAdapter;
+import com.sk89q.worldedit.bukkit.WorldEditPlugin;
+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.domains.DefaultDomain;
+import com.sk89q.worldguard.protection.ApplicableRegionSet;
+import com.sk89q.worldguard.protection.flags.Flags;
+import com.sk89q.worldguard.protection.flags.RegionGroup;
+import com.sk89q.worldguard.protection.flags.StateFlag.State;
+import com.sk89q.worldguard.protection.managers.RegionManager;
+import com.sk89q.worldguard.protection.managers.storage.StorageException;
+import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
+import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
+import com.sk89q.worldguard.protection.regions.ProtectedRegion;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.UUID;
+
+/**
+ * WorldGuard class to make the usage of WorldGuard easy. This is the 1.14.x version!
+ *
+ * Note that if you do use this in one of your projects, leave this notice.
+ * Please do credit me if you do use this in one of your projects.
+ *
+ * @author SBDeveloper [Fixed 1.13+ support]
+ */
+public class WGManager {
+
+ public static WorldGuardPlugin wgp;
+ public static WorldEditPlugin wep;
+
+ public static boolean hasWorldGuard() {
+ return wgp != null;
+ }
+
+ public static boolean hasWorldEdit() {
+ return wep != null;
+ }
+
+ public static boolean setWorldGuard(Plugin plugin) {
+ wgp = (WorldGuardPlugin) plugin;
+ return true;
+ }
+
+ public static boolean setWorldEdit(Plugin plugin) {
+ wep = (WorldEditPlugin) plugin;
+ return true;
+ }
+
+ public static ProtectedRegion createRegion(Player p, String id) throws StorageException {
+ LocalSession l = WorldEdit.getInstance().getSessionManager().get(BukkitAdapter.adapt(p));
+ Region s;
+ try {
+ s = l.getSelection(l.getSelectionWorld());
+ } catch (IncompleteRegionException e) {
+ return null;
+ }
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(p.getWorld()));
+ rm.removeRegion(id);
+ ProtectedRegion region;
+ // Detect the type of region from WorldEdit
+ if (s instanceof Polygonal2DRegion) {
+ Polygonal2DRegion polySel = (Polygonal2DRegion) s;
+ int minY = polySel.getMinimumY();
+ int maxY = polySel.getMaximumY();
+ region = new ProtectedPolygonalRegion(id, polySel.getPoints(), minY, maxY);
+ } else { /// default everything to cuboid
+ region = new ProtectedCuboidRegion(id,
+ s.getMinimumPoint(),
+ s.getMaximumPoint());
+ }
+ region.setPriority(11); /// some relatively high priority
+ region.setFlag(Flags.INTERACT, State.DENY);
+ region.setFlag(Flags.INTERACT.getRegionGroupFlag(), RegionGroup.NON_MEMBERS);
+ rm.addRegion(region);
+ rm.save();
+ return region;
+ }
+
+ public static ArrayList getRegionsIn(Location loc) {
+ ArrayList inRegions = new ArrayList<>();
+
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld()));
+
+ for (ProtectedRegion protectedRegion : rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc))) inRegions.add(protectedRegion);
+
+ return inRegions;
+ }
+
+ public static ProtectedRegion getRegionfromStringList(List str, Location loc) {
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld()));
+ ApplicableRegionSet mogreg = rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc));
+ for (ProtectedRegion mogregion : mogreg) {
+ for (String strgo : str) {
+ if(strgo.equalsIgnoreCase(mogregion.getId())) {
+ return mogregion;
+ }
+ }
+ }
+
+ //Niks gevonden!
+ return null;
+ }
+
+ public static ProtectedRegion getRegionfromString(String str, Location loc) {
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld()));
+ ApplicableRegionSet mogreg = rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc));
+ for (ProtectedRegion mogregion : mogreg) {
+ if(str.equalsIgnoreCase(mogregion.getId())) {
+ return mogregion;
+ }
+ }
+
+ //Niks gevonden!
+ return null;
+ }
+
+ public static ProtectedRegion getRegionfromStringListInWorld(List str, Location loc) {
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld()));
+ Map mp = rm.getRegions();
+ for (Entry pair : mp.entrySet()) {
+ for (String string : str) {
+ if (pair.getValue().getId().equals(string)) {
+ return pair.getValue();
+ }
+ }
+ }
+
+ //Niks gevonden!
+ return null;
+ }
+
+ public static ProtectedRegion getRegionfromStringInWorld(String str, Location loc) {
+ String strgood = str.toLowerCase();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld()));
+ Map mp = rm.getRegions();
+ return mp.get(strgood);
+ }
+
+ public static boolean isMember(Player p, ProtectedRegion region, OfflinePlayer target) {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentMembers = currentRegion.getMembers();
+ return currentMembers.contains(target.getUniqueId());
+ }
+
+ public static boolean isOwner(Player p, ProtectedRegion region, OfflinePlayer target) {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentOwners = currentRegion.getOwners();
+ return currentOwners.contains(target.getUniqueId());
+ }
+
+ public static boolean addMember(Player p, ProtectedRegion region, OfflinePlayer newmember) {
+ try {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentMembers = currentRegion.getMembers();
+ currentMembers.addPlayer(UUID.fromString(newmember.getUniqueId().toString()));
+
+ rm.save();
+
+ return true;
+ }
+ catch (StorageException e) {
+ return false;
+ }
+ }
+
+ public static boolean addOwner(Player p, ProtectedRegion region, OfflinePlayer newowner) {
+ try {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentOwners = currentRegion.getOwners();
+ currentOwners.addPlayer(UUID.fromString(newowner.getUniqueId().toString()));
+
+ rm.save();
+
+ return true;
+ }
+ catch (StorageException e) {
+ return false;
+ }
+ }
+
+ public static boolean removeMember(Player p, ProtectedRegion region, OfflinePlayer newmember) {
+ try {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentMembers = currentRegion.getMembers();
+ currentMembers.removePlayer(UUID.fromString(newmember.getUniqueId().toString()));
+
+ rm.save();
+
+ return true;
+ }
+ catch (StorageException e) {
+ return false;
+ }
+ }
+
+ public static boolean removeOwner(Player p, ProtectedRegion region, UUID newowner) {
+ try {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentOwners = currentRegion.getOwners();
+ currentOwners.removePlayer(newowner);
+
+ rm.save();
+
+ return true;
+ }
+ catch (StorageException e) {
+ return false;
+ }
+ }
+
+ public static ArrayList getMembers(Player p, ProtectedRegion region) {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentMembers = currentRegion.getMembers();
+
+ ArrayList members = new ArrayList<>();
+ for (UUID uuid : currentMembers.getUniqueIds()) {
+ OfflinePlayer member = Bukkit.getServer().getOfflinePlayer(uuid);
+ members.add(member.getName());
+ }
+ return members;
+ }
+
+ public static ArrayList getOwners(Player p, ProtectedRegion region) {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(region.getId());
+ DefaultDomain currentOwners = currentRegion.getOwners();
+
+ ArrayList owners = new ArrayList<>();
+ for (UUID uuid : currentOwners.getUniqueIds()) {
+ OfflinePlayer owner = Bukkit.getServer().getOfflinePlayer(uuid);
+ owners.add(owner.getName());
+ }
+ return owners;
+ }
+
+ public static boolean removeRegion(Player p, String name) {
+ try {
+ World w = p.getWorld();
+ RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
+
+ ProtectedRegion currentRegion = rm.getRegion(name);
+ if (currentRegion == null) {
+ return false;
+ }
+
+ rm.removeRegion(name);
+ rm.save();
+
+ return true;
+ }
+ catch (StorageException e) {
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/me/mctp/utils/SpigotPlayerSelector.java b/src/me/mctp/utils/SpigotPlayerSelector.java
index d51078b..f93ba8d 100644
--- a/src/me/mctp/utils/SpigotPlayerSelector.java
+++ b/src/me/mctp/utils/SpigotPlayerSelector.java
@@ -1,5 +1,7 @@
package me.mctp.utils;
+import com.sk89q.worldguard.protection.regions.ProtectedRegion;
+import me.mctp.managers.WGManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@@ -66,8 +68,13 @@ public class SpigotPlayerSelector {
Location standPoint = getLocation(commandSender);
if (getArgument("region").length() != 0) {
- //TODO FIX REGION SELECTOR
- throw new UnsupportedOperationException("The region argument is not supported.");
+ String regionID = getArgument("region");
+ for (Player p : Bukkit.getOnlinePlayers()) {
+ ArrayList regions = WGManager.getRegionsIn(p.getLocation());
+ if (regions.stream().anyMatch(region -> region.getId().equalsIgnoreCase(regionID))) {
+ players.add(p);
+ }
+ }
} else if (getArgument("r").length() != 0) {
int radius = Integer.parseInt(getArgument("r"));
players.addAll(Bukkit.getOnlinePlayers().stream()
diff --git a/src/plugin.yml b/src/plugin.yml
index bb3e8b3..5410f17 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -4,6 +4,7 @@ version: 1.0
api-version: 1.14
author: MaybeFromNL_SBDeveloper
description: Copyright MaybeFromNL & SBDeveloper
+depend: ['WorldGuard']
commands:
mctpaudio: