Add some checks for shop creation

This commit is contained in:
Len 2022-07-10 20:11:44 +02:00
parent 016b24987a
commit 44c9802349
2 changed files with 64 additions and 0 deletions

View File

@ -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";

View File

@ -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
}
}
}