From e49906fc75105b613416b8b75a94bcc7a599ac03 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Wed, 31 Aug 2022 10:08:06 +0200 Subject: [PATCH] Prevent players from breaking shops while they are conversing, Fixes #7 --- .../alttd/playershops/config/MessageConfig.java | 2 ++ .../alttd/playershops/listener/ShopListener.java | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alttd/playershops/config/MessageConfig.java b/src/main/java/com/alttd/playershops/config/MessageConfig.java index dfcb5f3..66f6f79 100644 --- a/src/main/java/com/alttd/playershops/config/MessageConfig.java +++ b/src/main/java/com/alttd/playershops/config/MessageConfig.java @@ -23,10 +23,12 @@ public class MessageConfig extends AbstractConfiguration { public static String SHOP_ALREADY_EXISTS = "This block is already a Shop"; public static String NO_SHOP_CREATE_PERMISSION = "You don't have permission to create shops."; public static String SHOP_LIMIT_REACHED = "You cannot create this shop as you already have reached the limit ()."; + public static String BREAK_SHOP_WHILE_CONVERSING = "You can not break shop signs while editing them."; void loadErrorMessages() { SHOP_ALREADY_EXISTS = getString("errors.shop-already-exists", SHOP_ALREADY_EXISTS); NO_SHOP_CREATE_PERMISSION = getString("errors.no-shop-create-permission", NO_SHOP_CREATE_PERMISSION); SHOP_LIMIT_REACHED = getString("errors.shop-limit-reached", SHOP_LIMIT_REACHED); + BREAK_SHOP_WHILE_CONVERSING = getString("errors.break-shop-while-conversing", BREAK_SHOP_WHILE_CONVERSING); } } diff --git a/src/main/java/com/alttd/playershops/listener/ShopListener.java b/src/main/java/com/alttd/playershops/listener/ShopListener.java index e6f1d47..e011a35 100644 --- a/src/main/java/com/alttd/playershops/listener/ShopListener.java +++ b/src/main/java/com/alttd/playershops/listener/ShopListener.java @@ -1,6 +1,7 @@ package com.alttd.playershops.listener; import com.alttd.playershops.PlayerShops; +import com.alttd.playershops.config.MessageConfig; import com.alttd.playershops.handler.ShopHandler; import com.alttd.playershops.shop.PlayerShop; import org.bukkit.Location; @@ -14,6 +15,7 @@ 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; import org.bukkit.event.block.BlockBreakEvent; @@ -99,8 +101,9 @@ public class ShopListener extends EventListener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onSignBlockBreak(BlockBreakEvent event) { - if(!this.isRegistered) + if (!this.isRegistered) return; + // this is going to be heavy, add a cache shopsignlocation <-> Shop? Block block = event.getBlock(); @@ -120,7 +123,14 @@ public class ShopListener extends EventListener { if (shop == null) return; - if (!shopHandler.canPlayerBreakShop(event.getPlayer(), shop)) { + Player player = event.getPlayer(); + if (!shopHandler.canPlayerBreakShop(player, shop)) { + event.setCancelled(true); + return; + } + + if (player.isConversing()) { // TODO enhance method to check if the conversation is about this shop + player.sendMiniMessage(MessageConfig.BREAK_SHOP_WHILE_CONVERSING, null); event.setCancelled(true); return; }