diff --git a/plugin/src/main/java/com/alttd/playershops/config/Config.java b/plugin/src/main/java/com/alttd/playershops/config/Config.java index 9d8a705..fc1aea5 100644 --- a/plugin/src/main/java/com/alttd/playershops/config/Config.java +++ b/plugin/src/main/java/com/alttd/playershops/config/Config.java @@ -34,10 +34,12 @@ public class Config extends AbstractConfiguration { public static int shopLimit = 100; public static boolean usePermissionShopLimit = false; + public static String shopCreationWord = "[SHOP]"; private static void shopSettings() { String path = "shop-settings."; shopLimit = config.getInt(path + "player-shop-limit", shopLimit); usePermissionShopLimit = config.getBoolean(path + "use-permission-based-shop-limit", usePermissionShopLimit); + shopCreationWord = config.getString(path + "creation-word", shopCreationWord); } public static String shopLimitPermission = "shop.buildlimit"; diff --git a/plugin/src/main/java/com/alttd/playershops/listener/PlayerListener.java b/plugin/src/main/java/com/alttd/playershops/listener/PlayerListener.java index 40147c9..f0b3ed8 100644 --- a/plugin/src/main/java/com/alttd/playershops/listener/PlayerListener.java +++ b/plugin/src/main/java/com/alttd/playershops/listener/PlayerListener.java @@ -4,8 +4,15 @@ import com.alttd.playershops.PlayerShops; import com.alttd.playershops.api.Shop; import com.alttd.playershops.api.ShopHandler; import com.alttd.playershops.config.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Directional; +import org.bukkit.block.data.Rotatable; +import org.bukkit.block.data.type.WallSign; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -13,6 +20,7 @@ import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.permissions.PermissionAttachmentInfo; +import java.util.List; import java.util.UUID; public class PlayerListener extends EventListener { @@ -65,4 +73,58 @@ public class PlayerListener extends EventListener { if(shop.isInitialized()) event.setCancelled(true); } + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onShopCreation(SignChangeEvent event) { + Block b = event.getBlock(); + + if (!(b.getState() instanceof Sign)) + return; + + BlockFace facing; + BlockData data = b.getState().getBlockData(); + if (data instanceof WallSign) { + facing = ((Directional) data).getFacing(); + } else { + facing = ((Rotatable) data).getRotation(); + } + + Block bRelative = b.getRelative(facing.getOppositeFace()); + ShopHandler shopHandler = plugin.getShopHandler(); + + if (shopHandler.isShopMaterial(bRelative)) { + Sign signBlock = (Sign) b.getState(); + Component signLine = event.line(0); + String signLineString = PlainTextComponentSerializer.plainText().serialize(signLine); + if (!signLineString.equalsIgnoreCase(Config.shopCreationWord)) + return; + + Shop shop = shopHandler.getShop(bRelative.getLocation()); + if(shop != null) { + event.setCancelled(true); + // TODO MESSAGE: There is a shop here already. + return; + } + + Player player = event.getPlayer(); + UUID playerUUID = player.getUniqueId(); + if (!player.hasPermission("shop.create")) { + event.setCancelled(true); + // TODO MESSAGE: You don't have permission to create shops. + return; + } + + int numberOfShops = shopHandler.getShops(playerUUID).size(); + int shopLimit = shopHandler.getShopLimit(playerUUID); + + if (numberOfShops >= shopLimit) { + event.setCancelled(true); + // TODO MESSAGE: You cannot create this shop as you already have reached the limit. + return; + } + + // TODO instance shopCreationManagement + } + } + + }