From cc24669c0c617f14a0bea5de5dda390ddb9edef6 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 3 Nov 2018 21:44:02 +0100 Subject: [PATCH] Allow refund for shop creation price Only refunded if shop is removed by vendor via command or by breaking the chest. No refund will be given if shop is removed automatically or by another player. Closes #222 --- .../java/de/epiceric/shopchest/config/Config.java | 6 ++++++ .../shopchest/listeners/ChestProtectListener.java | 15 +++++++++++++++ .../shopchest/listeners/ShopInteractListener.java | 10 ++++++++++ src/main/resources/config.yml | 10 ++++++++++ 4 files changed, 41 insertions(+) diff --git a/src/main/java/de/epiceric/shopchest/config/Config.java b/src/main/java/de/epiceric/shopchest/config/Config.java index 2a3174a..f3f2a13 100644 --- a/src/main/java/de/epiceric/shopchest/config/Config.java +++ b/src/main/java/de/epiceric/shopchest/config/Config.java @@ -141,6 +141,11 @@ public class Config { **/ public static boolean confirmShopping; + /** + * Whether the shop creation price should be refunded at removal. + */ + public static boolean refundShopCreation; + /** *

Whether the update checker should run on start and notify players on join.

* The command is not affected by this setting and will continue to check for updates. @@ -480,6 +485,7 @@ public class Config { hopperProtection = plugin.getConfig().getBoolean("hopper-protection"); explosionProtection = plugin.getConfig().getBoolean("explosion-protection"); confirmShopping = plugin.getConfig().getBoolean("confirm-shopping"); + refundShopCreation = plugin.getConfig().getBoolean("refund-shop-creation"); enableUpdateChecker = plugin.getConfig().getBoolean("enable-update-checker"); enableHologramInteraction = plugin.getConfig().getBoolean("enable-hologram-interaction"); enableDebugLog = plugin.getConfig().getBoolean("enable-debug-log"); diff --git a/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java b/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java index b42b36f..c35e671 100644 --- a/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java +++ b/src/main/java/de/epiceric/shopchest/listeners/ChestProtectListener.java @@ -8,16 +8,21 @@ import com.wasteofplastic.askyblock.ASkyBlockAPI; import com.wasteofplastic.askyblock.Island; import de.epiceric.shopchest.ShopChest; import de.epiceric.shopchest.config.Config; +import de.epiceric.shopchest.config.Placeholder; import de.epiceric.shopchest.external.PlotSquaredShopFlag; import de.epiceric.shopchest.language.LanguageUtils; import de.epiceric.shopchest.language.Message; +import de.epiceric.shopchest.language.Replacement; import de.epiceric.shopchest.nms.Hologram; import de.epiceric.shopchest.shop.Shop; +import de.epiceric.shopchest.shop.Shop.ShopType; import de.epiceric.shopchest.utils.Callback; import de.epiceric.shopchest.utils.Permissions; import de.epiceric.shopchest.utils.ShopUtils; import de.epiceric.shopchest.utils.Utils; import me.ryanhamshire.GriefPrevention.Claim; +import net.milkbowl.vault.economy.EconomyResponse; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -71,6 +76,16 @@ public class ChestProtectListener implements Listener { } }); } else { + if (p.getUniqueId().equals(shop.getVendor().getUniqueId())) { + double creationPrice = shop.getShopType() == ShopType.ADMIN ? Config.shopCreationPriceAdmin : Config.shopCreationPriceNormal; + EconomyResponse r = plugin.getEconomy().withdrawPlayer(p, shop.getLocation().getWorld().getName(), creationPrice); + if (!r.transactionSuccess()) { + plugin.debug("Economy transaction failed: " + r.errorMessage); + p.sendMessage(LanguageUtils.getMessage(Message.ERROR_OCCURRED, + new Replacement(Placeholder.ERROR, r.errorMessage))); + } + } + shopUtils.removeShop(shop, true); plugin.debug(String.format("%s broke %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID())); p.sendMessage(LanguageUtils.getMessage(Message.SHOP_REMOVED)); diff --git a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java index effce06..d137740 100644 --- a/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java +++ b/src/main/java/de/epiceric/shopchest/listeners/ShopInteractListener.java @@ -773,6 +773,16 @@ public class ShopInteractListener implements Listener { return; } + if (executor.getUniqueId().equals(shop.getVendor().getUniqueId())) { + double creationPrice = shop.getShopType() == ShopType.ADMIN ? Config.shopCreationPriceAdmin : Config.shopCreationPriceNormal; + EconomyResponse r = plugin.getEconomy().withdrawPlayer(executor, shop.getLocation().getWorld().getName(), creationPrice); + if (!r.transactionSuccess()) { + plugin.debug("Economy transaction failed: " + r.errorMessage); + executor.sendMessage(LanguageUtils.getMessage(Message.ERROR_OCCURRED, + new Replacement(Placeholder.ERROR, r.errorMessage))); + } + } + shopUtils.removeShop(shop, true); plugin.debug("Removed shop (#" + shop.getID() + ")"); executor.sendMessage(LanguageUtils.getMessage(Message.SHOP_REMOVED)); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b871a2b..2502735 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -24,6 +24,16 @@ shop-info-item: "STICK" # in order to prevent accidental purchases or sells. confirm-shopping: false +# Set whether the shop creation price should be refunded +# when the shop is removed. +# This only applies when the creator of the shop removes it himself +# by command or by breaking it. +# No refund will be given for automatic shop removals or when +# the shop is removed by another player. +# If enabled, the currently set creation price will be refunded, +# not the one that was paid at creation. +refund-shop-creation: false + # Set whether the plugin will check for updates on server start # and notify permitted players on join. # The command is not affected by this setting and will continue to