diff --git a/pom.xml b/pom.xml
index d9405ab..b3d1ace 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,6 +114,10 @@
sk89q-repo
http://maven.sk89q.com/artifactory/repo/
+
+ athion-reop
+ http://ci.athion.net/job/PlotSquared/ws/mvn/
+
@@ -152,6 +156,12 @@
5.2
provided
+
+ com.plotsquared
+ plotsquared-api
+ latest
+ provided
+
diff --git a/src/main/java/de/epiceric/shopchest/ShopChest.java b/src/main/java/de/epiceric/shopchest/ShopChest.java
index 1fa45cc..2fe8550 100644
--- a/src/main/java/de/epiceric/shopchest/ShopChest.java
+++ b/src/main/java/de/epiceric/shopchest/ShopChest.java
@@ -1,10 +1,12 @@
package de.epiceric.shopchest;
+import com.intellectualcrafters.plot.PS;
import com.palmergames.bukkit.towny.Towny;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import de.epiceric.shopchest.config.Config;
import de.epiceric.shopchest.config.Regex;
import de.epiceric.shopchest.event.ShopReloadEvent;
+import de.epiceric.shopchest.external.PlotSquaredShopFlag;
import de.epiceric.shopchest.language.LanguageUtils;
import de.epiceric.shopchest.language.LocalizedMessage;
import de.epiceric.shopchest.listeners.*;
@@ -16,7 +18,7 @@ import de.epiceric.shopchest.sql.MySQL;
import de.epiceric.shopchest.sql.SQLite;
import de.epiceric.shopchest.utils.*;
import de.epiceric.shopchest.utils.UpdateChecker.UpdateCheckerResult;
-import de.epiceric.shopchest.worldguard.ShopFlag;
+import de.epiceric.shopchest.external.WorldGuardShopFlag;
import fr.xephi.authme.AuthMe;
import net.milkbowl.vault.economy.Economy;
import org.bstats.Metrics;
@@ -30,7 +32,6 @@ import org.bukkit.scheduler.BukkitRunnable;
import java.io.*;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
@@ -100,7 +101,7 @@ public class ShopChest extends JavaPlugin {
Plugin worldGuardPlugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
if (worldGuardPlugin instanceof WorldGuardPlugin) {
worldGuard = (WorldGuardPlugin) worldGuardPlugin;
- ShopFlag.init(this, true);
+ WorldGuardShopFlag.register(this, true);
}
}
@@ -138,8 +139,8 @@ public class ShopChest extends JavaPlugin {
getLogger().warning("Plugin may still work, but more errors are expected!");
}
- if (worldGuard != null && !ShopFlag.isLoaded()) {
- ShopFlag.init(this, false);
+ if (worldGuard != null && !WorldGuardShopFlag.isLoaded()) {
+ WorldGuardShopFlag.register(this, false);
try {
// Reload WorldGuard regions, so that custom flags are applied
@@ -163,6 +164,10 @@ public class ShopChest extends JavaPlugin {
authMe = (AuthMe) authMePlugin;
}
+ if (hasPlotSquared()) {
+ new PlotSquaredShopFlag().register(this);
+ }
+
debug("Loading utils and extras...");
LanguageUtils.load();
@@ -427,6 +432,13 @@ public class ShopChest extends JavaPlugin {
this.updater = updater;
}
+ /**
+ * @return Whether the plugin 'PlotSquared' is enabled
+ */
+ public boolean hasPlotSquared() {
+ return getServer().getPluginManager().getPlugin("PlotSquared") != null;
+ }
+
/**
* @return Whether the plugin 'AuthMe' is enabled
*/
diff --git a/src/main/java/de/epiceric/shopchest/config/Config.java b/src/main/java/de/epiceric/shopchest/config/Config.java
index d3a6852..9f61a10 100644
--- a/src/main/java/de/epiceric/shopchest/config/Config.java
+++ b/src/main/java/de/epiceric/shopchest/config/Config.java
@@ -104,6 +104,9 @@ public class Config {
/** Whether AuthMe integration should be enabled **/
public boolean enable_authme_integration;
+ /** Whether PlotSquared integration should be enabled **/
+ public boolean enable_plotsquared_integration;
+
/** Whether the vendor of the shop should get messages about buys and sells **/
public boolean enable_vendor_messages;
@@ -342,6 +345,7 @@ public class Config {
enable_worldguard_integration = plugin.getConfig().getBoolean("enable-worldguard-integration");
enable_towny_integration = plugin.getConfig().getBoolean("enable-towny-integration");
enable_authme_integration = plugin.getConfig().getBoolean("enable-authme-integration");
+ enable_plotsquared_integration = plugin.getConfig().getBoolean("enable-plotsquared-integration");
enable_vendor_messages = plugin.getConfig().getBoolean("enable-vendor-messages");
explosion_protection = plugin.getConfig().getBoolean("explosion-protection");
only_show_shops_in_sight = plugin.getConfig().getBoolean("only-show-shops-in-sight");
diff --git a/src/main/java/de/epiceric/shopchest/external/PlotSquaredShopFlag.java b/src/main/java/de/epiceric/shopchest/external/PlotSquaredShopFlag.java
new file mode 100644
index 0000000..32ea5fd
--- /dev/null
+++ b/src/main/java/de/epiceric/shopchest/external/PlotSquaredShopFlag.java
@@ -0,0 +1,87 @@
+package de.epiceric.shopchest.external;
+
+import com.intellectualcrafters.plot.flag.Flag;
+import com.intellectualcrafters.plot.flag.Flags;
+import de.epiceric.shopchest.ShopChest;
+
+import java.util.Locale;
+
+public class PlotSquaredShopFlag {
+
+ private static boolean registered = false;
+
+ public enum Group {
+ OWNERS, MEMBERS, TRUSTED, EVERYONE, NONE
+ }
+
+ public static Flag CREATE_SHOP;
+ public static Flag USE_SHOP;
+ public static Flag USE_ADMIN_SHOP;
+
+ private GroupFlag createShop = new GroupFlag("create-shop");
+ private GroupFlag useShop = new GroupFlag("use-shop");
+ private GroupFlag useAdminShop = new GroupFlag("use-admin-shop");
+
+ public void register(ShopChest plugin) {
+ if (registered) return;
+
+ CREATE_SHOP = createShop;
+ USE_SHOP = useShop;
+ USE_ADMIN_SHOP = useAdminShop;
+
+ Flags.registerFlag(createShop);
+ Flags.registerFlag(useShop);
+ Flags.registerFlag(useAdminShop);
+ registered = true;
+
+ plugin.debug("Registered custom PlotSquared flags");
+ }
+
+ public class GroupFlag extends Flag {
+
+ public GroupFlag(String name) {
+ super(name);
+ }
+
+ @Override
+ public String valueToString(Object value) {
+ return String.valueOf(value);
+ }
+
+ @Override
+ public Group parseValue(String s) {
+ String val = s.toLowerCase(Locale.ENGLISH);
+
+ switch (val) {
+ case "owners":
+ case "owner":
+ return Group.OWNERS;
+ case "members":
+ case "member":
+ case "helpers":
+ case "helper":
+ return Group.MEMBERS;
+ case "trusted":
+ return Group.TRUSTED;
+ case "everyone":
+ case "all":
+ return Group.EVERYONE;
+ case "deny":
+ case "false":
+ case "no":
+ case "0":
+ case "none":
+ case "noone":
+ return Group.NONE;
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getValueDescription() {
+ return "Flag value must be a group: 'owner' , 'members', 'trusted', 'everyone' or 'none'";
+ }
+ }
+
+}
diff --git a/src/main/java/de/epiceric/shopchest/worldguard/ShopFlag.java b/src/main/java/de/epiceric/shopchest/external/WorldGuardShopFlag.java
similarity index 96%
rename from src/main/java/de/epiceric/shopchest/worldguard/ShopFlag.java
rename to src/main/java/de/epiceric/shopchest/external/WorldGuardShopFlag.java
index d646dde..db92c1d 100644
--- a/src/main/java/de/epiceric/shopchest/worldguard/ShopFlag.java
+++ b/src/main/java/de/epiceric/shopchest/external/WorldGuardShopFlag.java
@@ -1,4 +1,4 @@
-package de.epiceric.shopchest.worldguard;
+package de.epiceric.shopchest.external;
import com.google.common.collect.Lists;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
@@ -9,7 +9,7 @@ import de.epiceric.shopchest.ShopChest;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
-public class ShopFlag {
+public class WorldGuardShopFlag {
private static Flag>[] customFlagList;
private static boolean loaded = false;
@@ -30,7 +30,7 @@ public class ShopFlag {
return loaded;
}
- public static void init(final ShopChest plugin, boolean onLoad) {
+ public static void register(final ShopChest plugin, boolean onLoad) {
String worldGuardVersion = plugin.getWorldGuard().getDescription().getVersion();
int majorVersion = 0;
diff --git a/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java b/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java
index 9a6f1bb..6c97829 100644
--- a/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java
+++ b/src/main/java/de/epiceric/shopchest/language/LanguageUtils.java
@@ -978,8 +978,8 @@ public class LanguageUtils {
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_OPEN_OTHERS, langConfig.getString("message.noPermission.open-others", "&cYou don't have permission to open this chest.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_BUY, langConfig.getString("message.noPermission.buy", "&cYou don't have permission to buy something.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_SELL, langConfig.getString("message.noPermission.sell", "&cYou don't have permission to sell something.")));
- messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_WG_BUY, langConfig.getString("message.noPermission.worldguard-buy", "&cYou don't have permission to buy something here.")));
- messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_WG_SELL, langConfig.getString("message.noPermission.worldguard-sell", "&cYou don't have permission to sell something here.")));
+ messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_BUY_HERE, langConfig.getString("message.noPermission.buy-here", "&cYou don't have permission to buy something here.")));
+ messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_SELL_HERE, langConfig.getString("message.noPermission.sell-here", "&cYou don't have permission to sell something here.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_REMOVE_OTHERS, langConfig.getString("message.noPermission.remove-others", "&cYou don't have permission to remove this shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_REMOVE_ADMIN, langConfig.getString("message.noPermission.remove-admin", "&cYou don't have permission to remove an admin shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_RELOAD, langConfig.getString("message.noPermission.reload", "&cYou don't have permission to reload the shops.")));
diff --git a/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java b/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java
index c184da9..9270051 100644
--- a/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java
+++ b/src/main/java/de/epiceric/shopchest/language/LocalizedMessage.java
@@ -113,8 +113,8 @@ public class LocalizedMessage {
NO_PERMISSION_OPEN_OTHERS,
NO_PERMISSION_BUY,
NO_PERMISSION_SELL,
- NO_PERMISSION_WG_BUY,
- NO_PERMISSION_WG_SELL,
+ NO_PERMISSION_BUY_HERE,
+ NO_PERMISSION_SELL_HERE,
NO_PERMISSION_REMOVE_OTHERS,
NO_PERMISSION_REMOVE_ADMIN,
NO_PERMISSION_RELOAD,
diff --git a/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java b/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java
index 2989db8..e0ef056 100644
--- a/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java
+++ b/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java
@@ -7,6 +7,7 @@ import com.sk89q.worldguard.bukkit.RegionContainer;
import com.sk89q.worldguard.bukkit.RegionQuery;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import de.epiceric.shopchest.ShopChest;
+import de.epiceric.shopchest.external.PlotSquaredShopFlag;
import de.epiceric.shopchest.language.LanguageUtils;
import de.epiceric.shopchest.language.LocalizedMessage;
import de.epiceric.shopchest.nms.Hologram;
@@ -14,7 +15,7 @@ import de.epiceric.shopchest.shop.Shop;
import de.epiceric.shopchest.utils.Permissions;
import de.epiceric.shopchest.utils.ShopUtils;
import de.epiceric.shopchest.utils.Utils;
-import de.epiceric.shopchest.worldguard.ShopFlag;
+import de.epiceric.shopchest.external.WorldGuardShopFlag;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -34,11 +35,8 @@ import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
public class ChestProtectListener implements Listener {
@@ -153,7 +151,7 @@ public class ChestProtectListener implements Listener {
if (plugin.hasWorldGuard() && plugin.getShopChestConfig().enable_worldguard_integration) {
RegionContainer container = worldGuard.getRegionContainer();
RegionQuery query = container.createQuery();
- externalPluginsAllowed = query.testState(b.getLocation(), p, ShopFlag.CREATE_SHOP);
+ externalPluginsAllowed = query.testState(b.getLocation(), p, WorldGuardShopFlag.CREATE_SHOP);
}
if (plugin.hasTowny() && plugin.getShopChestConfig().enable_towny_integration) {
@@ -161,6 +159,13 @@ public class ChestProtectListener implements Listener {
externalPluginsAllowed &= (townBlock != null && townBlock.getType() == TownBlockType.COMMERCIAL);
}
+ if (plugin.hasPlotSquared() && plugin.getShopChestConfig().enable_plotsquared_integration) {
+ com.intellectualcrafters.plot.object.Location loc =
+ new com.intellectualcrafters.plot.object.Location(b.getWorld().getName(), b.getX(), b.getY(), b.getZ());
+
+ externalPluginsAllowed &= Utils.isFlagAllowedOnPlot(loc.getOwnedPlot(), PlotSquaredShopFlag.CREATE_SHOP, p);
+ }
+
if (externalPluginsAllowed || p.hasPermission(Permissions.EXTEND_PROTECTED)) {
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) || p.hasPermission(Permissions.EXTEND_OTHER)) {
diff --git a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java
index fa5c0ee..33f8d37 100644
--- a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java
+++ b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java
@@ -1,5 +1,7 @@
package de.epiceric.shopchest.listeners;
+import com.intellectualcrafters.plot.flag.Flag;
+import com.intellectualcrafters.plot.object.Plot;
import com.palmergames.bukkit.towny.object.TownBlock;
import com.palmergames.bukkit.towny.object.TownBlockType;
import com.palmergames.bukkit.towny.object.TownyUniverse;
@@ -11,6 +13,8 @@ import de.epiceric.shopchest.ShopChest;
import de.epiceric.shopchest.config.Config;
import de.epiceric.shopchest.config.Regex;
import de.epiceric.shopchest.event.*;
+import de.epiceric.shopchest.external.PlotSquaredShopFlag;
+import de.epiceric.shopchest.external.WorldGuardShopFlag;
import de.epiceric.shopchest.language.LanguageUtils;
import de.epiceric.shopchest.language.LocalizedMessage;
import de.epiceric.shopchest.nms.Hologram;
@@ -21,7 +25,6 @@ import de.epiceric.shopchest.utils.ClickType;
import de.epiceric.shopchest.utils.Permissions;
import de.epiceric.shopchest.utils.ShopUtils;
import de.epiceric.shopchest.utils.Utils;
-import de.epiceric.shopchest.worldguard.ShopFlag;
import fr.xephi.authme.AuthMe;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
@@ -111,7 +114,7 @@ public class ShopInteractListener implements Listener {
for (Location loc : chestLocations) {
if (loc != null) {
- externalPluginsAllowed &= query.testState(loc, p, ShopFlag.CREATE_SHOP);
+ externalPluginsAllowed &= query.testState(loc, p, WorldGuardShopFlag.CREATE_SHOP);
}
}
}
@@ -125,6 +128,19 @@ public class ShopInteractListener implements Listener {
}
}
+ if (plugin.hasPlotSquared() && config.enable_plotsquared_integration) {
+ for (Location loc : chestLocations) {
+ if (loc != null) {
+ com.intellectualcrafters.plot.object.Location plotLocation = new com.intellectualcrafters.plot.object.Location(
+ loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+
+ Plot plot = plotLocation.getOwnedPlot();
+ externalPluginsAllowed &= Utils.isFlagAllowedOnPlot(plot, PlotSquaredShopFlag.CREATE_SHOP, p);
+ }
+ }
+
+ }
+
if ((e.isCancelled() || !externalPluginsAllowed) && !p.hasPermission(Permissions.CREATE_PROTECTED)) {
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_CREATE_PROTECTED));
ClickType.removePlayerClickType(p);
@@ -259,29 +275,34 @@ public class ShopInteractListener implements Listener {
if (shop.getBuyPrice() > 0) {
if (p.hasPermission(Permissions.BUY)) {
- boolean worldGuardAllowed = true;
+ boolean externalPluginsAllowed = true;
+
+ if (plugin.hasPlotSquared() && config.enable_plotsquared_integration) {
+ com.intellectualcrafters.plot.object.Location plotLocation =
+ new com.intellectualcrafters.plot.object.Location(b.getWorld().getName(), b.getX(), b.getY(), b.getZ());
+
+ Plot plot = plotLocation.getOwnedPlot();
+ Flag flag = (shop.getShopType() == Shop.ShopType.ADMIN ? PlotSquaredShopFlag.USE_ADMIN_SHOP : PlotSquaredShopFlag.USE_SHOP);
+
+ externalPluginsAllowed &= Utils.isFlagAllowedOnPlot(plot, flag, p);
+ }
+
+ if (plugin.hasWorldGuard() && config.enable_worldguard_integration) {
+ StateFlag flag = (shop.getShopType() == ShopType.ADMIN ? WorldGuardShopFlag.USE_ADMIN_SHOP : WorldGuardShopFlag.USE_SHOP);
+ RegionContainer container = worldGuard.getRegionContainer();
+ RegionQuery query = container.createQuery();
+ externalPluginsAllowed &= query.testState(b.getLocation(), p, flag);
+ }
if (shop.getShopType() == ShopType.ADMIN) {
- if (plugin.hasWorldGuard() && config.enable_worldguard_integration) {
- RegionContainer container = worldGuard.getRegionContainer();
- RegionQuery query = container.createQuery();
- worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.USE_ADMIN_SHOP);
- }
-
- if (worldGuardAllowed || p.hasPermission(Permissions.WORLDGUARD_BYPASS)) {
+ if (externalPluginsAllowed || p.hasPermission(Permissions.BYPASS_EXTERNAL_PLUGIN)) {
buy(p, shop, p.isSneaking());
} else {
- plugin.debug(p.getName() + " doesn't have worldguard permission");
- p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_WG_BUY));
+ plugin.debug(p.getName() + " doesn't have external plugin's permission");
+ p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_BUY_HERE));
}
} else {
- if (plugin.hasWorldGuard() && config.enable_worldguard_integration) {
- RegionContainer container = worldGuard.getRegionContainer();
- RegionQuery query = container.createQuery();
- worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.USE_SHOP);
- }
-
- if (worldGuardAllowed || p.hasPermission(Permissions.WORLDGUARD_BYPASS)) {
+ if (externalPluginsAllowed || p.hasPermission(Permissions.BYPASS_EXTERNAL_PLUGIN)) {
Chest c = (Chest) b.getState();
if (Utils.getAmount(c.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
buy(p, shop, p.isSneaking());
@@ -299,8 +320,8 @@ public class ShopInteractListener implements Listener {
}
}
} else {
- plugin.debug(p.getName() + " doesn't have worldguard permission");
- p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_WG_BUY));
+ plugin.debug(p.getName() + " doesn't have external plugin's permission");
+ p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_BUY_HERE));
}
}
} else {
@@ -321,17 +342,27 @@ public class ShopInteractListener implements Listener {
if (shop.getSellPrice() > 0) {
if (p.hasPermission(Permissions.SELL)) {
- boolean worldGuardAllowed = true;
+ boolean externalPluginsAllowed = true;
+
+ if (plugin.hasPlotSquared() && config.enable_plotsquared_integration) {
+ com.intellectualcrafters.plot.object.Location plotLocation =
+ new com.intellectualcrafters.plot.object.Location(b.getWorld().getName(), b.getX(), b.getY(), b.getZ());
+
+ Plot plot = plotLocation.getOwnedPlot();
+ Flag flag = (shop.getShopType() == Shop.ShopType.ADMIN ? PlotSquaredShopFlag.USE_ADMIN_SHOP : PlotSquaredShopFlag.USE_SHOP);
+
+ externalPluginsAllowed &= Utils.isFlagAllowedOnPlot(plot, flag, p);
+ }
if (plugin.hasWorldGuard() && config.enable_worldguard_integration) {
RegionContainer container = worldGuard.getRegionContainer();
RegionQuery query = container.createQuery();
- StateFlag flag = (shop.getShopType() == ShopType.ADMIN ? ShopFlag.USE_ADMIN_SHOP : ShopFlag.USE_SHOP);
- worldGuardAllowed = query.testState(b.getLocation(), p, flag);
+ StateFlag flag = (shop.getShopType() == ShopType.ADMIN ? WorldGuardShopFlag.USE_ADMIN_SHOP : WorldGuardShopFlag.USE_SHOP);
+ externalPluginsAllowed &= query.testState(b.getLocation(), p, flag);
}
- if (worldGuardAllowed || p.hasPermission(Permissions.WORLDGUARD_BYPASS)) {
+ if (externalPluginsAllowed || p.hasPermission(Permissions.BYPASS_EXTERNAL_PLUGIN)) {
if (Utils.getAmount(p.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
sell(p, shop, p.isSneaking() && !Utils.hasAxeInHand(p));
} else {
@@ -343,8 +374,8 @@ public class ShopInteractListener implements Listener {
}
}
} else {
- plugin.debug(p.getName() + " doesn't have worldguard permission");
- p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_WG_SELL));
+ plugin.debug(p.getName() + " doesn't have external plugin's permission");
+ p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_SELL_HERE));
}
} else {
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_SELL));
diff --git a/src/main/java/de/epiceric/shopchest/listeners/WorldGuardListener.java b/src/main/java/de/epiceric/shopchest/listeners/WorldGuardListener.java
index 55c6a7f..68db8e2 100644
--- a/src/main/java/de/epiceric/shopchest/listeners/WorldGuardListener.java
+++ b/src/main/java/de/epiceric/shopchest/listeners/WorldGuardListener.java
@@ -13,7 +13,7 @@ import de.epiceric.shopchest.nms.Hologram;
import de.epiceric.shopchest.shop.Shop;
import de.epiceric.shopchest.utils.ClickType;
import de.epiceric.shopchest.utils.Permissions;
-import de.epiceric.shopchest.worldguard.ShopFlag;
+import de.epiceric.shopchest.external.WorldGuardShopFlag;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Chest;
@@ -60,14 +60,14 @@ public class WorldGuardListener implements Listener {
if (ClickType.getPlayerClickType(player) != null) {
switch (ClickType.getPlayerClickType(player).getClickType()) {
case CREATE:
- return query.testState(location, localPlayer, ShopFlag.CREATE_SHOP);
+ return query.testState(location, localPlayer, WorldGuardShopFlag.CREATE_SHOP);
case REMOVE:
case INFO:
return true;
}
} else {
if (shop != null) {
- StateFlag flag = (shop.getShopType() == Shop.ShopType.NORMAL ? ShopFlag.USE_SHOP : ShopFlag.USE_ADMIN_SHOP);
+ StateFlag flag = (shop.getShopType() == Shop.ShopType.NORMAL ? WorldGuardShopFlag.USE_SHOP : WorldGuardShopFlag.USE_ADMIN_SHOP);
return query.testState(location, localPlayer, flag);
}
diff --git a/src/main/java/de/epiceric/shopchest/utils/Permissions.java b/src/main/java/de/epiceric/shopchest/utils/Permissions.java
index 41143f6..ba1fa20 100644
--- a/src/main/java/de/epiceric/shopchest/utils/Permissions.java
+++ b/src/main/java/de/epiceric/shopchest/utils/Permissions.java
@@ -17,6 +17,6 @@ public class Permissions {
public static final String CONFIG = "shopchest.config";
public static final String EXTEND_OTHER = "shopchest.extend.other";
public static final String EXTEND_PROTECTED = "shopchest.extend.protected";
- public static final String WORLDGUARD_BYPASS = "shopchest.worldguard.bypass";
+ public static final String BYPASS_EXTERNAL_PLUGIN = "shopchest.external.bypass";
}
diff --git a/src/main/java/de/epiceric/shopchest/utils/Utils.java b/src/main/java/de/epiceric/shopchest/utils/Utils.java
index ff2c59e..a871857 100644
--- a/src/main/java/de/epiceric/shopchest/utils/Utils.java
+++ b/src/main/java/de/epiceric/shopchest/utils/Utils.java
@@ -1,7 +1,11 @@
package de.epiceric.shopchest.utils;
+import com.intellectualcrafters.plot.flag.Flag;
+import com.intellectualcrafters.plot.object.Plot;
import de.epiceric.shopchest.ShopChest;
+import de.epiceric.shopchest.external.PlotSquaredShopFlag;
import de.epiceric.shopchest.nms.CustomBookMeta;
+import de.epiceric.shopchest.shop.Shop;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
@@ -234,6 +238,38 @@ public class Utils {
return item != null && axes.contains(item.getType());
}
+ /**
+ * Check if a flag is allowed for a player on a plot from PlotSquared
+ * @param plot Plot from PlotSquared
+ * @param flag Flag to check
+ * @param p Player to check
+ * @return Whether the flag is allowed for the player
+ */
+ public static boolean isFlagAllowedOnPlot(Plot plot, Flag flag, Player p) {
+ if (flag != null) {
+ Object o = plot.getFlag(flag, PlotSquaredShopFlag.Group.NONE);
+
+ if (o instanceof PlotSquaredShopFlag.Group) {
+ PlotSquaredShopFlag.Group group = (PlotSquaredShopFlag.Group) o;
+
+ switch (group) {
+ case OWNERS:
+ return plot.getOwners().contains(p.getUniqueId());
+ case TRUSTED:
+ return plot.getOwners().contains(p.getUniqueId()) || plot.getTrusted().contains(p.getUniqueId());
+ case MEMBERS:
+ return plot.getOwners().contains(p.getUniqueId()) || plot.getTrusted().contains(p.getUniqueId()) || plot.getMembers().contains(p.getUniqueId());
+ case EVERYONE:
+ return true;
+ case NONE:
+ return false;
+ }
+ }
+ }
+
+ return false;
+ }
+
/**
* @param className Name of the class
* @return Class in {@code net.minecraft.server.[VERSION]} package with the specified name or {@code null} if the class was not found
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 17e5cb4..09272dc 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -45,6 +45,10 @@ enable-towny-integration: true
# Of course, this only works if AuthMe is installed
enable-authme-integration: true
+# Set whether PlotSquared integration should be enabled
+# Of course, this only works if AuthMe is installed
+enable-plotsquared-integration: true
+
# Set whether the vendor of a shop should get messages when players
# buy or sell something from/to his shop or if his shop is out of stock
enable-vendor-messages: true
diff --git a/src/main/resources/lang/de_DE.lang b/src/main/resources/lang/de_DE.lang
index cf7ade0..55706c7 100644
--- a/src/main/resources/lang/de_DE.lang
+++ b/src/main/resources/lang/de_DE.lang
@@ -69,8 +69,8 @@ message.noPermission.create-protected=&cDu hast keine Berechtigung hier einen Sh
message.noPermission.open-others=&cDu hast keine Berechtigung diesen Shop zu öffnen.
message.noPermission.buy=&cDu hast keine Berechtigung etwas zu kaufen.
message.noPermission.sell=&cDu hast keine Berechtigung etwas zu verkaufen.
-message.noPermission.worldguard-buy=&cDu hast keine Berechtigung hier etwas zu kaufen.
-message.noPermission.worldguard-sell=&cDu hast keine Berechtigung hier etwas zu verkaufen.
+message.noPermission.buy-here=&cDu hast keine Berechtigung hier etwas zu kaufen.
+message.noPermission.sell-here=&cDu hast keine Berechtigung hier etwas zu verkaufen.
message.noPermission.remove-others=&cDu hast keine Berechtigung diesen Shop zu entfernen.
message.noPermission.remove-admin=&cDu hast keine Berechtigung einen Admin Shop zu entfernen.
message.noPermission.reload=&cDu hast keine Berechtigung die Shops neu zu laden.
diff --git a/src/main/resources/lang/en_US.lang b/src/main/resources/lang/en_US.lang
index 7c136a5..44d8f10 100644
--- a/src/main/resources/lang/en_US.lang
+++ b/src/main/resources/lang/en_US.lang
@@ -245,11 +245,11 @@ message.noPermission.buy=&cYou don't have permission to buy something.
# Set the message when a not permitted player tries to sell something.
message.noPermission.sell=&cYou don't have permission to sell something.
-# Set the message when a player tries to buy something in a WorldGuard region that denied shop use.
-message.noPermission.worldguard-buy=&cYou don't have permission to buy something here.
+# Set the message when a player tries to buy something in a region/plot that denied shop use.
+message.noPermission.buy-here=&cYou don't have permission to buy something here.
-# Set the message when a player tries to sell something in a WorldGuard region that denied shop use.
-message.noPermission.worldguard-sell=&cYou don't have permission to sell something here.
+# Set the message when a player tries to sell something in a region/plot region that denied shop use.
+message.noPermission.sell-here=&cYou don't have permission to sell something here.
# Set the message when a not permitted player tries to remove another player's shop.
message.noPermission.remove-others=&cYou don't have permission to remove this shop.
@@ -269,7 +269,7 @@ message.noPermission.config=&cYou don't have permission to change configuration
# Set the message when a not permitted player tries to extend another player's shop's chest.
message.noPermission.extend-others=&cYou don't have permission to extend this chest.
-# Set the message when a not permitted player tries to extend a chest into a protected region (e.g. WorldGuard/Towny).
+# Set the message when a not permitted player tries to extend a chest into a protected region/plot (e.g. WorldGuard/Towny).
message.noPermission.extend-protected=&cYou don't have permission to extend this chest to here.
# Set the command description message for '/shop create' when you type '/shop'.
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 257acf0..835e92d 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -5,7 +5,7 @@ main: de.epiceric.shopchest.ShopChest
version: ${project.version}
author: EpicEric
website: ${project.url}
-softdepend: [WorldGuard, Towny]
+softdepend: [WorldGuard, Towny, PlotSquared]
depend: [Vault]
permissions:
@@ -26,7 +26,7 @@ permissions:
shopchest.config: true
shopchest.extend.other: true
shopchest.extend.protected: true
- shopchest.worldguard.bypass: true
+ shopchest.external.bypass: true
shopchest.create:
description: Allows you to create a shop.
default: true
@@ -75,6 +75,6 @@ permissions:
shopchest.extend.protected:
description: Allows you to extend shops into a protected region.
default: op
- shopchest.worlguard.bypass:
- description: Allows you to to use shops in WorldGuard regions that deny shop use.
+ shopchest.external.bypass:
+ description: Allows you to to use shops regions/plots that deny shop use.
default: op