mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-22 10:22:29 +00:00
Added towny support
- Players can only create shops in shop plots, not in wilderness or normal plots - Added permission "shopchest.extend.protected" - Changed permission "shopchest.extendOther" to "shopchest.extend.other" - When creating a shop on a double chest, both chests must not be protected/in a protected region - To extend a shop into a protected region (e.g. WorldGuard/Towny), you need permission (shopchest.extend.protected) - Added no-permission message for "shopchest.extend.protected"
This commit is contained in:
parent
dcd50bad33
commit
04a6d836b9
10
pom.xml
10
pom.xml
@ -46,6 +46,10 @@
|
||||
<id>sk89q-repo</id>
|
||||
<url>http://maven.sk89q.com/artifactory/repo/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>epiceric-repo</id>
|
||||
<url>http://epicericee.github.io/ShopChest/maven/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
@ -67,6 +71,12 @@
|
||||
<version>6.1.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.palmergames</groupId>
|
||||
<artifactId>Towny</artifactId>
|
||||
<version>0.91.1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<distributionManagement>
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.epiceric.shopchest;
|
||||
|
||||
import com.palmergames.bukkit.towny.Towny;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import de.epiceric.shopchest.config.Config;
|
||||
import de.epiceric.shopchest.config.Regex;
|
||||
@ -44,6 +45,7 @@ public class ShopChest extends JavaPlugin {
|
||||
private ShopUtils shopUtils;
|
||||
private FileWriter fw;
|
||||
private WorldGuardPlugin worldGuard;
|
||||
private Towny towny;
|
||||
|
||||
/**
|
||||
* @return An instance of ShopChest
|
||||
@ -137,6 +139,11 @@ public class ShopChest extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
Plugin townyPlugin = Bukkit.getServer().getPluginManager().getPlugin("Towny");
|
||||
if (townyPlugin instanceof Towny) {
|
||||
towny = (Towny) townyPlugin;
|
||||
}
|
||||
|
||||
debug("Loading utils and extras...");
|
||||
|
||||
LanguageUtils.load();
|
||||
@ -292,7 +299,7 @@ public class ShopChest extends JavaPlugin {
|
||||
getServer().getPluginManager().registerEvents(new ShopItemListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new ShopInteractListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new NotifyUpdateOnJoinListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new ChestProtectListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new ChestProtectListener(this, worldGuard), this);
|
||||
|
||||
if (!Utils.getServerVersion().equals("v1_8_R1"))
|
||||
getServer().getPluginManager().registerEvents(new BlockExplodeListener(this), this);
|
||||
@ -373,6 +380,20 @@ public class ShopChest extends JavaPlugin {
|
||||
debug("Initialized " + count + " Shops");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Whether the plugin 'Towny' is enabled
|
||||
*/
|
||||
public boolean hasTowny() {
|
||||
return towny != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return An instance of {@link Towny} or {@code null} if Towny is not enabled
|
||||
*/
|
||||
public Towny getTowny() {
|
||||
return towny;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Whether the plugin 'WorldGuard' is enabled
|
||||
*/
|
||||
|
@ -969,6 +969,7 @@ public class LanguageUtils {
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_UPDATE, langConfig.getString("message.noPermission.update", "&cYou don't have permission to check for updates.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_CONFIG, langConfig.getString("message.noPermission.config", "&cYou don't have permission to change configuration values.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_EXTEND_OTHERS, langConfig.getString("message.noPermission.extend-others", "&cYou don't have permission to extend this chest.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_PERMISSION_EXTEND_PROTECTED, langConfig.getString("message.noPermission.extend-protected", "&cYou don't have permission to extend this chest to here.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_CREATE, langConfig.getString("message.commandDescription.create", "Create a shop.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_REMOVE, langConfig.getString("message.commandDescription.remove", "Remove a shop.")));
|
||||
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_INFO, langConfig.getString("message.commandDescription.info", "Retrieve shop information.")));
|
||||
|
@ -115,6 +115,7 @@ public class LocalizedMessage {
|
||||
NO_PERMISSION_UPDATE,
|
||||
NO_PERMISSION_CONFIG,
|
||||
NO_PERMISSION_EXTEND_OTHERS,
|
||||
NO_PERMISSION_EXTEND_PROTECTED,
|
||||
COMMAND_DESC_CREATE,
|
||||
COMMAND_DESC_REMOVE,
|
||||
COMMAND_DESC_INFO,
|
||||
|
@ -1,11 +1,18 @@
|
||||
package de.epiceric.shopchest.listeners;
|
||||
|
||||
import com.palmergames.bukkit.towny.object.TownBlock;
|
||||
import com.palmergames.bukkit.towny.object.TownBlockType;
|
||||
import com.palmergames.bukkit.towny.object.TownyUniverse;
|
||||
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.language.LanguageUtils;
|
||||
import de.epiceric.shopchest.language.LocalizedMessage;
|
||||
import de.epiceric.shopchest.shop.Shop;
|
||||
import de.epiceric.shopchest.utils.Permissions;
|
||||
import de.epiceric.shopchest.utils.ShopUtils;
|
||||
import de.epiceric.shopchest.worldguard.ShopFlag;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -29,10 +36,12 @@ public class ChestProtectListener implements Listener {
|
||||
|
||||
private ShopChest plugin;
|
||||
private ShopUtils shopUtils;
|
||||
private WorldGuardPlugin worldGuard;
|
||||
|
||||
public ChestProtectListener(ShopChest plugin) {
|
||||
public ChestProtectListener(ShopChest plugin, WorldGuardPlugin worldGuard) {
|
||||
this.plugin = plugin;
|
||||
this.shopUtils = plugin.getShopUtils();
|
||||
this.worldGuard = worldGuard;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -124,20 +133,40 @@ public class ChestProtectListener implements Listener {
|
||||
|
||||
plugin.debug(String.format("%s tries to extend %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
||||
|
||||
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) || p.hasPermission(Permissions.EXTEND_OTHER)) {
|
||||
if (b.getRelative(BlockFace.UP).getType() == Material.AIR) {
|
||||
shopUtils.removeShop(shop, true);
|
||||
Shop newShop = new Shop(shop.getID(), ShopChest.getInstance(), shop.getVendor(), shop.getProduct(), shop.getLocation(), shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
||||
shopUtils.addShop(newShop, true);
|
||||
plugin.debug(String.format("%s extended %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
||||
boolean externalPluginsAllowed = true;
|
||||
|
||||
if (plugin.hasWorldGuard()) {
|
||||
RegionContainer container = worldGuard.getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
externalPluginsAllowed = query.testState(b.getLocation(), p, ShopFlag.CREATE_SHOP);
|
||||
}
|
||||
|
||||
if (plugin.hasTowny()) {
|
||||
TownBlock townBlock = TownyUniverse.getTownBlock(b.getLocation());
|
||||
externalPluginsAllowed &= (townBlock != null && townBlock.getType() == TownBlockType.COMMERCIAL);
|
||||
}
|
||||
|
||||
if (externalPluginsAllowed || p.hasPermission(Permissions.EXTEND_PROTECTED)) {
|
||||
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) || p.hasPermission(Permissions.EXTEND_OTHER)) {
|
||||
|
||||
if (b.getRelative(BlockFace.UP).getType() == Material.AIR) {
|
||||
shopUtils.removeShop(shop, true);
|
||||
Shop newShop = new Shop(shop.getID(), ShopChest.getInstance(), shop.getVendor(), shop.getProduct(), shop.getLocation(), shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
||||
shopUtils.addShop(newShop, true);
|
||||
plugin.debug(String.format("%s extended %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
||||
} else {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHEST_BLOCKED));
|
||||
}
|
||||
} else {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHEST_BLOCKED));
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_EXTEND_OTHERS));
|
||||
}
|
||||
} else {
|
||||
e.setCancelled(true);
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_EXTEND_OTHERS));
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_EXTEND_PROTECTED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package de.epiceric.shopchest.listeners;
|
||||
|
||||
import com.palmergames.bukkit.towny.object.TownBlock;
|
||||
import com.palmergames.bukkit.towny.object.TownBlockType;
|
||||
import com.palmergames.bukkit.towny.object.TownyUniverse;
|
||||
import com.sk89q.worldguard.bukkit.RegionContainer;
|
||||
import com.sk89q.worldguard.bukkit.RegionQuery;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
@ -30,6 +33,7 @@ import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.block.DoubleChest;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -41,10 +45,7 @@ import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.*;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.Potion;
|
||||
@ -82,15 +83,38 @@ public class ShopInteractListener implements Listener {
|
||||
if (ClickType.getPlayerClickType(p).getClickType() == ClickType.EnumClickType.CREATE) {
|
||||
if (!shopUtils.isShop(b.getLocation())) {
|
||||
|
||||
boolean worldGuardAllowed = true;
|
||||
boolean externalPluginsAllowed = true;
|
||||
|
||||
Location[] chestLocations = {b.getLocation(), null};
|
||||
|
||||
InventoryHolder ih = ((Chest) b.getState()).getInventory().getHolder();
|
||||
if (ih instanceof DoubleChest) {
|
||||
DoubleChest dc = (DoubleChest) ih;
|
||||
chestLocations[0] = ((Chest) dc.getLeftSide()).getLocation();
|
||||
chestLocations[1] = ((Chest) dc.getRightSide()).getLocation();
|
||||
}
|
||||
|
||||
if (plugin.hasWorldGuard()) {
|
||||
RegionContainer container = worldGuard.getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
worldGuardAllowed = query.testState(b.getLocation(), p, ShopFlag.CREATE_SHOP);
|
||||
|
||||
for (Location loc : chestLocations) {
|
||||
if (loc != null) {
|
||||
externalPluginsAllowed &= query.testState(loc, p, ShopFlag.CREATE_SHOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((e.isCancelled() || !worldGuardAllowed) && !p.hasPermission(Permissions.CREATE_PROTECTED)) {
|
||||
if (plugin.hasTowny()) {
|
||||
for (Location loc : chestLocations) {
|
||||
if (loc != null) {
|
||||
TownBlock townBlock = TownyUniverse.getTownBlock(loc);
|
||||
externalPluginsAllowed &= (townBlock != null && townBlock.getType() == TownBlockType.COMMERCIAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((e.isCancelled() || !externalPluginsAllowed) && !p.hasPermission(Permissions.CREATE_PROTECTED)) {
|
||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_CREATE_PROTECTED));
|
||||
ClickType.removePlayerClickType(p);
|
||||
plugin.debug(p.getName() + " is not allowed to create a shop on the selected chest");
|
||||
|
@ -14,6 +14,7 @@ public class Permissions {
|
||||
public static final String UPDATE = "shopchest.update";
|
||||
public static final String NO_LIMIT = "shopchest.limit.*";
|
||||
public static final String CONFIG = "shopchest.config";
|
||||
public static final String EXTEND_OTHER = "shopchest.extendOther";
|
||||
public static final String EXTEND_OTHER = "shopchest.extend.other";
|
||||
public static final String EXTEND_PROTECTED = "shopchest.extend.protected";
|
||||
|
||||
}
|
||||
|
@ -71,6 +71,7 @@ message.noPermission.reload=&cDu hast keine Berechtigung die Shops neu zu laden.
|
||||
message.noPermission.update=&cDu hast keine Berechtigung nach Aktualisierungen zu suchen.
|
||||
message.noPermission.config=&cDu hast keine Berechtigung Konfigurationswerte zu verändern.
|
||||
message.noPermission.extend-others=&cDu hast keine Berechtigung diesen Shop zu erweitern.
|
||||
message.noPermission.extend-protected=&cDu hast keine Berechtigung diesen Shop nach hier zu erweitern.
|
||||
message.commandDescription.create=Erstelle einen Shop.
|
||||
message.commandDescription.remove=Entferne einen Shop.
|
||||
message.commandDescription.info=Rufe Informationen über den Shop ab.
|
||||
|
@ -247,6 +247,9 @@ 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).
|
||||
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'.
|
||||
message.commandDescription.create=Create a shop.
|
||||
|
||||
|
@ -5,7 +5,7 @@ main: de.epiceric.shopchest.ShopChest
|
||||
version: ${project.version}
|
||||
author: EpicEric
|
||||
website: ${project.url}
|
||||
softdepend: [WorldGuard]
|
||||
softdepend: [WorldGuard, Towny]
|
||||
depend: [Vault]
|
||||
|
||||
permissions:
|
||||
@ -13,6 +13,8 @@ permissions:
|
||||
description: Gives access to all ShopChest permissions.
|
||||
children:
|
||||
shopchest.create: true
|
||||
shopchest.create.admin: true
|
||||
shopchest.create.protected: true
|
||||
shopchest.removeOther: true
|
||||
shopchest.buy: true
|
||||
shopchest.openOther: true
|
||||
@ -21,6 +23,8 @@ permissions:
|
||||
shopchest.update: true
|
||||
shopchest.limit.*: true
|
||||
shopchest.config: true
|
||||
shopchest.extend.other: true
|
||||
shopchest.extend.protected: true
|
||||
shopchest.create:
|
||||
description: Allows you to create a shop.
|
||||
default: true
|
||||
@ -30,7 +34,7 @@ permissions:
|
||||
shopchest.create: true
|
||||
default: op
|
||||
shopchest.create.protected:
|
||||
description: Allows you to create a shop on a protected chest.
|
||||
description: Allows you to create a shop on a protected chest or in a protected region.
|
||||
children:
|
||||
shopchest.create: true
|
||||
default: op
|
||||
@ -60,6 +64,9 @@ permissions:
|
||||
shopchest.config:
|
||||
description: Allows you to change configuration values per command.
|
||||
default: op
|
||||
shopchest.extendOther:
|
||||
shopchest.extend.other:
|
||||
description: Allows you to extend other players' shops.
|
||||
default: op
|
||||
shopchest.extend.protected:
|
||||
description: Allows you to extend shops into a protected region.
|
||||
default: op
|
||||
|
Loading…
Reference in New Issue
Block a user