mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-09 20:21:07 +00:00
Added WorldGuard support
Might contain issues, as it's not tested extensively
This commit is contained in:
parent
dbf809ea5b
commit
ff406abf2d
9
pom.xml
9
pom.xml
@ -42,6 +42,10 @@
|
|||||||
<id>vault-repo</id>
|
<id>vault-repo</id>
|
||||||
<url>http://nexus.hc.to/content/repositories/pub_releases/</url>
|
<url>http://nexus.hc.to/content/repositories/pub_releases/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>sk89q-repo</id>
|
||||||
|
<url>http://maven.sk89q.com/artifactory/repo/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@ -57,6 +61,11 @@
|
|||||||
<version>1.6</version>
|
<version>1.6</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sk89q</groupId>
|
||||||
|
<artifactId>worldguard</artifactId>
|
||||||
|
<version>6.1.1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package de.epiceric.shopchest;
|
package de.epiceric.shopchest;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
import com.sk89q.worldguard.protection.managers.storage.StorageException;
|
||||||
import de.epiceric.shopchest.config.Config;
|
import de.epiceric.shopchest.config.Config;
|
||||||
import de.epiceric.shopchest.config.Regex;
|
import de.epiceric.shopchest.config.Regex;
|
||||||
import de.epiceric.shopchest.event.ShopReloadEvent;
|
import de.epiceric.shopchest.event.ShopReloadEvent;
|
||||||
@ -19,10 +21,13 @@ import de.epiceric.shopchest.utils.ShopUtils;
|
|||||||
import de.epiceric.shopchest.utils.UpdateChecker;
|
import de.epiceric.shopchest.utils.UpdateChecker;
|
||||||
import de.epiceric.shopchest.utils.UpdateChecker.UpdateCheckerResult;
|
import de.epiceric.shopchest.utils.UpdateChecker.UpdateCheckerResult;
|
||||||
import de.epiceric.shopchest.utils.Utils;
|
import de.epiceric.shopchest.utils.Utils;
|
||||||
|
import de.epiceric.shopchest.worldguard.ShopFlag;
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
@ -45,6 +50,7 @@ public class ShopChest extends JavaPlugin {
|
|||||||
private ShopUtils shopUtils;
|
private ShopUtils shopUtils;
|
||||||
private File debugLogFile;
|
private File debugLogFile;
|
||||||
private FileWriter fw;
|
private FileWriter fw;
|
||||||
|
private WorldGuardPlugin worldGuard;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return An instance of ShopChest
|
* @return An instance of ShopChest
|
||||||
@ -138,6 +144,23 @@ public class ShopChest extends JavaPlugin {
|
|||||||
getLogger().warning("Plugin may still work, but more errors are expected!");
|
getLogger().warning("Plugin may still work, but more errors are expected!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Plugin worldGuardPlugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
|
||||||
|
if (worldGuardPlugin instanceof WorldGuardPlugin) {
|
||||||
|
worldGuard = (WorldGuardPlugin) worldGuardPlugin;
|
||||||
|
ShopFlag.init();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Reload WorldGuard regions, so that custom flags are applied
|
||||||
|
for (World world : getServer().getWorlds()) {
|
||||||
|
worldGuard.getRegionManager(world).load();
|
||||||
|
}
|
||||||
|
} catch (StorageException e) {
|
||||||
|
getLogger().severe("Failed to reload WorldGuard region manager. WorldGuard support will probably not work!");
|
||||||
|
debug("Failed to load WorldGuard region manager");
|
||||||
|
debug(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug("Loading utils and extras...");
|
debug("Loading utils and extras...");
|
||||||
|
|
||||||
LanguageUtils.load();
|
LanguageUtils.load();
|
||||||
@ -298,6 +321,9 @@ public class ShopChest extends JavaPlugin {
|
|||||||
if (!Utils.getServerVersion().equals("v1_8_R1"))
|
if (!Utils.getServerVersion().equals("v1_8_R1"))
|
||||||
getServer().getPluginManager().registerEvents(new BlockExplodeListener(this), this);
|
getServer().getPluginManager().registerEvents(new BlockExplodeListener(this), this);
|
||||||
|
|
||||||
|
if (hasWorldGuard())
|
||||||
|
getServer().getPluginManager().registerEvents(new WorldGuardListener(this), this);
|
||||||
|
|
||||||
initializeShops();
|
initializeShops();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,6 +395,20 @@ public class ShopChest extends JavaPlugin {
|
|||||||
debug("Initialized " + count + " Shops");
|
debug("Initialized " + count + " Shops");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Whether the plugin 'WorldGuard' is enabled
|
||||||
|
*/
|
||||||
|
public boolean hasWorldGuard() {
|
||||||
|
return worldGuard != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return An instance of {@link WorldGuardPlugin} or {@code null} if WorldGuard is not enabled
|
||||||
|
*/
|
||||||
|
public WorldGuardPlugin getWorldGuard() {
|
||||||
|
return worldGuard;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return ShopChest's {@link ShopUtils} containing some important methods
|
* @return ShopChest's {@link ShopUtils} containing some important methods
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
package de.epiceric.shopchest.listeners;
|
package de.epiceric.shopchest.listeners;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.bukkit.RegionContainer;
|
||||||
|
import com.sk89q.worldguard.bukkit.RegionQuery;
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import de.epiceric.shopchest.ShopChest;
|
import de.epiceric.shopchest.ShopChest;
|
||||||
import de.epiceric.shopchest.config.Config;
|
import de.epiceric.shopchest.config.Config;
|
||||||
import de.epiceric.shopchest.config.Regex;
|
import de.epiceric.shopchest.config.Regex;
|
||||||
@ -15,6 +19,7 @@ import de.epiceric.shopchest.sql.Database;
|
|||||||
import de.epiceric.shopchest.utils.ClickType;
|
import de.epiceric.shopchest.utils.ClickType;
|
||||||
import de.epiceric.shopchest.utils.ShopUtils;
|
import de.epiceric.shopchest.utils.ShopUtils;
|
||||||
import de.epiceric.shopchest.utils.Utils;
|
import de.epiceric.shopchest.utils.Utils;
|
||||||
|
import de.epiceric.shopchest.worldguard.ShopFlag;
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import net.milkbowl.vault.economy.EconomyResponse;
|
import net.milkbowl.vault.economy.EconomyResponse;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
@ -49,6 +54,7 @@ public class ShopInteractListener implements Listener {
|
|||||||
private Database database;
|
private Database database;
|
||||||
private ShopUtils shopUtils;
|
private ShopUtils shopUtils;
|
||||||
private Config config;
|
private Config config;
|
||||||
|
private WorldGuardPlugin worldGuard;
|
||||||
|
|
||||||
public ShopInteractListener(ShopChest plugin) {
|
public ShopInteractListener(ShopChest plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -57,6 +63,7 @@ public class ShopInteractListener implements Listener {
|
|||||||
this.database = plugin.getShopDatabase();
|
this.database = plugin.getShopDatabase();
|
||||||
this.shopUtils = plugin.getShopUtils();
|
this.shopUtils = plugin.getShopUtils();
|
||||||
this.config = plugin.getShopChestConfig();
|
this.config = plugin.getShopChestConfig();
|
||||||
|
this.worldGuard = plugin.getWorldGuard();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -70,10 +77,20 @@ public class ShopInteractListener implements Listener {
|
|||||||
if (ClickType.getPlayerClickType(p) != null) {
|
if (ClickType.getPlayerClickType(p) != null) {
|
||||||
if (ClickType.getPlayerClickType(p).getClickType() == ClickType.EnumClickType.CREATE) {
|
if (ClickType.getPlayerClickType(p).getClickType() == ClickType.EnumClickType.CREATE) {
|
||||||
if (!shopUtils.isShop(b.getLocation())) {
|
if (!shopUtils.isShop(b.getLocation())) {
|
||||||
if (e.isCancelled() && !perm.has(p, "shopchest.create.protected")) {
|
|
||||||
|
boolean worldGuardAllowed = true;
|
||||||
|
|
||||||
|
if (plugin.hasWorldGuard()) {
|
||||||
|
RegionContainer container = worldGuard.getRegionContainer();
|
||||||
|
RegionQuery query = container.createQuery();
|
||||||
|
worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.CREATE_SHOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((e.isCancelled() || !worldGuardAllowed) && !perm.has(p, "shopchest.create.protected")) {
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_CREATE_PROTECTED));
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_CREATE_PROTECTED));
|
||||||
ClickType.removePlayerClickType(p);
|
ClickType.removePlayerClickType(p);
|
||||||
plugin.debug(p.getName() + " is not allowed to create a shop on the selected chest");
|
plugin.debug(p.getName() + " is not allowed to create a shop on the selected chest");
|
||||||
|
e.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,19 +198,41 @@ public class ShopInteractListener implements Listener {
|
|||||||
plugin.debug(p.getName() + " wants to buy");
|
plugin.debug(p.getName() + " wants to buy");
|
||||||
if (shop.getBuyPrice() > 0) {
|
if (shop.getBuyPrice() > 0) {
|
||||||
if (perm.has(p, "shopchest.buy")) {
|
if (perm.has(p, "shopchest.buy")) {
|
||||||
|
boolean worldGuardAllowed = true;
|
||||||
|
|
||||||
if (shop.getShopType() == ShopType.ADMIN) {
|
if (shop.getShopType() == ShopType.ADMIN) {
|
||||||
buy(p, shop);
|
if (plugin.hasWorldGuard()) {
|
||||||
} else {
|
RegionContainer container = worldGuard.getRegionContainer();
|
||||||
Chest c = (Chest) b.getState();
|
RegionQuery query = container.createQuery();
|
||||||
if (Utils.getAmount(c.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
|
worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.USE_ADMIN_SHOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (worldGuardAllowed) {
|
||||||
buy(p, shop);
|
buy(p, shop);
|
||||||
} else {
|
} else {
|
||||||
if (config.auto_calculate_item_amount && Utils.getAmount(c.getInventory(), shop.getProduct()) > 0) {
|
plugin.debug(p.getName() + " doesn't have worldguard permission");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (plugin.hasWorldGuard()) {
|
||||||
|
RegionContainer container = worldGuard.getRegionContainer();
|
||||||
|
RegionQuery query = container.createQuery();
|
||||||
|
worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.USE_SHOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (worldGuardAllowed) {
|
||||||
|
Chest c = (Chest) b.getState();
|
||||||
|
if (Utils.getAmount(c.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
|
||||||
buy(p, shop);
|
buy(p, shop);
|
||||||
} else {
|
} else {
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.OUT_OF_STOCK));
|
if (config.auto_calculate_item_amount && Utils.getAmount(c.getInventory(), shop.getProduct()) > 0) {
|
||||||
plugin.debug("Shop is out of stock");
|
buy(p, shop);
|
||||||
|
} else {
|
||||||
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.OUT_OF_STOCK));
|
||||||
|
plugin.debug("Shop is out of stock");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
plugin.debug(p.getName() + " doesn't have worldguard permission");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -226,15 +265,29 @@ public class ShopInteractListener implements Listener {
|
|||||||
plugin.debug(p.getName() + " wants to sell");
|
plugin.debug(p.getName() + " wants to sell");
|
||||||
if (shop.getSellPrice() > 0) {
|
if (shop.getSellPrice() > 0) {
|
||||||
if (perm.has(p, "shopchest.sell")) {
|
if (perm.has(p, "shopchest.sell")) {
|
||||||
if (Utils.getAmount(p.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
|
boolean worldGuardAllowed = true;
|
||||||
sell(p, shop);
|
|
||||||
} else {
|
if (plugin.hasWorldGuard()) {
|
||||||
if (config.auto_calculate_item_amount && Utils.getAmount(p.getInventory(), shop.getProduct()) > 0) {
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (worldGuardAllowed) {
|
||||||
|
if (Utils.getAmount(p.getInventory(), shop.getProduct()) >= shop.getProduct().getAmount()) {
|
||||||
sell(p, shop);
|
sell(p, shop);
|
||||||
} else {
|
} else {
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NOT_ENOUGH_ITEMS));
|
if (config.auto_calculate_item_amount && Utils.getAmount(p.getInventory(), shop.getProduct()) > 0) {
|
||||||
plugin.debug(p.getName() + " doesn't have enough items");
|
sell(p, shop);
|
||||||
|
} else {
|
||||||
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NOT_ENOUGH_ITEMS));
|
||||||
|
plugin.debug(p.getName() + " doesn't have enough items");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
plugin.debug(p.getName() + " doesn't have worldguard permission");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_SELL));
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_SELL));
|
||||||
|
@ -0,0 +1,112 @@
|
|||||||
|
package de.epiceric.shopchest.listeners;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
|
import com.sk89q.worldguard.bukkit.RegionContainer;
|
||||||
|
import com.sk89q.worldguard.bukkit.RegionQuery;
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent;
|
||||||
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
|
import de.epiceric.shopchest.ShopChest;
|
||||||
|
import de.epiceric.shopchest.shop.Shop;
|
||||||
|
import de.epiceric.shopchest.utils.ClickType;
|
||||||
|
import de.epiceric.shopchest.worldguard.ShopFlag;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
|
public class WorldGuardListener implements Listener {
|
||||||
|
|
||||||
|
private ShopChest plugin;
|
||||||
|
private WorldGuardPlugin worldGuard;
|
||||||
|
|
||||||
|
public WorldGuardListener(ShopChest plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.worldGuard = plugin.getWorldGuard();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean isAllowed(UseBlockEvent event, Location location, Action action) {
|
||||||
|
Player p = event.getCause().getFirstPlayer();
|
||||||
|
|
||||||
|
LocalPlayer localPlayer = worldGuard.wrapPlayer(p);
|
||||||
|
RegionContainer container = worldGuard.getRegionContainer();
|
||||||
|
RegionQuery query = container.createQuery();
|
||||||
|
|
||||||
|
if (action == Action.RIGHT_CLICK_BLOCK) {
|
||||||
|
|
||||||
|
if (ClickType.getPlayerClickType(p) != null) {
|
||||||
|
|
||||||
|
switch (ClickType.getPlayerClickType(p).getClickType()) {
|
||||||
|
|
||||||
|
case CREATE:
|
||||||
|
return query.testState(location, localPlayer, ShopFlag.CREATE_SHOP);
|
||||||
|
case REMOVE:
|
||||||
|
case INFO:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (plugin.getShopUtils().isShop(location)) {
|
||||||
|
Shop shop = plugin.getShopUtils().getShop(location);
|
||||||
|
|
||||||
|
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) && shop.getShopType() != Shop.ShopType.ADMIN) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shop.getVendor().getUniqueId().equals(p.getUniqueId()) && p.isSneaking()) {
|
||||||
|
return p.hasPermission("shopchest.openOther");
|
||||||
|
}
|
||||||
|
|
||||||
|
StateFlag flag = (shop.getShopType() == Shop.ShopType.NORMAL ? ShopFlag.USE_SHOP : ShopFlag.USE_ADMIN_SHOP);
|
||||||
|
|
||||||
|
return query.testState(location, localPlayer, flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (action == Action.LEFT_CLICK_BLOCK) {
|
||||||
|
if (plugin.getShopUtils().isShop(location)) {
|
||||||
|
Shop shop = plugin.getShopUtils().getShop(location);
|
||||||
|
|
||||||
|
StateFlag flag = (shop.getShopType() == Shop.ShopType.NORMAL ? ShopFlag.USE_SHOP : ShopFlag.USE_ADMIN_SHOP);
|
||||||
|
|
||||||
|
return query.testState(location, localPlayer, flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
|
public void onUseBlock(UseBlockEvent event) {
|
||||||
|
if (event.getCause().getFirstPlayer() == null) return;
|
||||||
|
|
||||||
|
if (event.getOriginalEvent() instanceof PlayerInteractEvent) {
|
||||||
|
PlayerInteractEvent orig = (PlayerInteractEvent) event.getOriginalEvent();
|
||||||
|
|
||||||
|
if (orig.hasBlock()) {
|
||||||
|
Material type = orig.getClickedBlock().getType();
|
||||||
|
if (type == Material.CHEST || type == Material.TRAPPED_CHEST) {
|
||||||
|
if (isAllowed(event, orig.getClickedBlock().getLocation(), orig.getAction())) {
|
||||||
|
event.setAllowed(true);
|
||||||
|
orig.setCancelled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (event.getOriginalEvent() instanceof InventoryOpenEvent) {
|
||||||
|
InventoryOpenEvent orig = (InventoryOpenEvent) event.getOriginalEvent();
|
||||||
|
|
||||||
|
if (orig.getInventory().getType() == InventoryType.CHEST) {
|
||||||
|
if (isAllowed(event, orig.getInventory().getLocation(), Action.RIGHT_CLICK_BLOCK)) {
|
||||||
|
event.setAllowed(true);
|
||||||
|
orig.setCancelled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/main/java/de/epiceric/shopchest/worldguard/ShopFlag.java
Normal file
46
src/main/java/de/epiceric/shopchest/worldguard/ShopFlag.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package de.epiceric.shopchest.worldguard;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
|
public class ShopFlag {
|
||||||
|
|
||||||
|
private static Flag<?>[] customFlagList;
|
||||||
|
|
||||||
|
public static final StateFlag CREATE_SHOP;
|
||||||
|
public static final StateFlag USE_SHOP;
|
||||||
|
public static final StateFlag USE_ADMIN_SHOP;
|
||||||
|
|
||||||
|
static {
|
||||||
|
CREATE_SHOP = new StateFlag("create-shop", false);
|
||||||
|
USE_SHOP = new StateFlag("use-shop", false);
|
||||||
|
USE_ADMIN_SHOP = new StateFlag("use-admin-shop", false);
|
||||||
|
|
||||||
|
customFlagList = new Flag[] {CREATE_SHOP, USE_SHOP, USE_ADMIN_SHOP};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
// Add custom flags to WorldGuard's flag list
|
||||||
|
try {
|
||||||
|
Field flagListField = DefaultFlag.class.getField("flagsList");
|
||||||
|
|
||||||
|
Flag<?>[] flags = new Flag[DefaultFlag.flagsList.length + customFlagList.length];
|
||||||
|
System.arraycopy(DefaultFlag.flagsList, 0, flags, 0, DefaultFlag.flagsList.length);
|
||||||
|
System.arraycopy(customFlagList, 0, flags, DefaultFlag.flagsList.length, customFlagList.length);
|
||||||
|
|
||||||
|
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
||||||
|
modifiersField.setAccessible(true);
|
||||||
|
modifiersField.setInt(flagListField, flagListField.getModifiers() & ~Modifier.FINAL);
|
||||||
|
|
||||||
|
flagListField.set(null, flags);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -5,6 +5,7 @@ main: de.epiceric.shopchest.ShopChest
|
|||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
author: EpicEric
|
author: EpicEric
|
||||||
website: ${project.url}
|
website: ${project.url}
|
||||||
|
softdepend: [WorldGuard]
|
||||||
depend: [Vault]
|
depend: [Vault]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@ -55,7 +56,7 @@ permissions:
|
|||||||
description: Allows you to check for updates.
|
description: Allows you to check for updates.
|
||||||
default: op
|
default: op
|
||||||
shopchest.limit.*:
|
shopchest.limit.*:
|
||||||
default: op
|
default: true
|
||||||
shopchest.config:
|
shopchest.config:
|
||||||
description: Allows you to change configuration values per command.
|
description: Allows you to change configuration values per command.
|
||||||
default: op
|
default: op
|
||||||
|
Loading…
Reference in New Issue
Block a user