diff --git a/api/src/main/java/me/pikamug/quests/config/ConfigSettings.java b/api/src/main/java/me/pikamug/quests/config/ConfigSettings.java index a05f18494..fd9ee4393 100644 --- a/api/src/main/java/me/pikamug/quests/config/ConfigSettings.java +++ b/api/src/main/java/me/pikamug/quests/config/ConfigSettings.java @@ -51,6 +51,8 @@ public interface ConfigSettings { void setEffect(final String effect); String getRedoEffect(); void setRedoEffect(final String redoEffect); + boolean canPreventExploit(); + void setPreventExploit(final boolean preventExploit); boolean canShowCompletedObjs(); void setShowCompletedObjs(final boolean showCompletedObjs); boolean canShowQuestReqs(); diff --git a/core/src/main/java/me/pikamug/quests/config/BukkitConfigSettings.java b/core/src/main/java/me/pikamug/quests/config/BukkitConfigSettings.java index 6f2f31f43..b69a39f2c 100644 --- a/core/src/main/java/me/pikamug/quests/config/BukkitConfigSettings.java +++ b/core/src/main/java/me/pikamug/quests/config/BukkitConfigSettings.java @@ -40,6 +40,7 @@ public class BukkitConfigSettings implements ConfigSettings { private boolean npcEffects = true; private String effect = "note"; private String redoEffect = "angry_villager"; + private boolean preventExploit; private boolean showCompletedObjs = true; private boolean showQuestReqs = true; private boolean showQuestTitles = true; @@ -174,6 +175,12 @@ public class BukkitConfigSettings implements ConfigSettings { public void setRedoEffect(final String redoEffect) { this.redoEffect = redoEffect; } + public boolean canPreventExploit() { + return preventExploit; + } + public void setPreventExploit(final boolean preventExploit) { + this.preventExploit = preventExploit; + } public boolean canShowCompletedObjs() { return showCompletedObjs; } @@ -264,6 +271,7 @@ public class BukkitConfigSettings implements ConfigSettings { npcEffects = config.getBoolean("npc-effects.enabled", true); effect = config.getString("npc-effects.new-quest", "note"); redoEffect = config.getString("npc-effects.redo-quest", "angry_villager"); + preventExploit = config.getBoolean("prevent-exploit", true); showCompletedObjs = config.getBoolean("show-completed-objectives", true); showQuestReqs = config.getBoolean("show-requirements", true); showQuestTitles = config.getBoolean("show-titles", true); diff --git a/core/src/main/java/me/pikamug/quests/listeners/BukkitItemListener.java b/core/src/main/java/me/pikamug/quests/listeners/BukkitItemListener.java index 79be83a0f..2639cb33a 100644 --- a/core/src/main/java/me/pikamug/quests/listeners/BukkitItemListener.java +++ b/core/src/main/java/me/pikamug/quests/listeners/BukkitItemListener.java @@ -66,12 +66,14 @@ public class BukkitItemListener implements Listener { } if (quester.getCurrentQuests().containsKey(quest) && quester.getCurrentStage(quest).containsObjective(type)) { - if (craftedItem.getMaxStackSize() == 0 || (BukkitInventoryUtil.getEmptySlots(player) - < craftedItem.getAmount() / craftedItem.getMaxStackSize())) { - BukkitActionBarProvider.sendActionBar(player, ChatColor.RED + BukkitLang.get(player, - "inventoryFull")); - event.setCancelled(true); - return; + if (plugin.getConfigSettings().canPreventExploit()) { + if (craftedItem.getMaxStackSize() == 0 || (BukkitInventoryUtil.getEmptySlots(player) + < craftedItem.getAmount() / craftedItem.getMaxStackSize())) { + BukkitActionBarProvider.sendActionBar(player, ChatColor.RED + BukkitLang.get(player, + "inventoryFull")); + event.setCancelled(true); + return; + } } quester.craftItem(quest, craftedItem); } @@ -178,6 +180,9 @@ public class BukkitItemListener implements Listener { if (event.isCancelled()) { return; } + if (!plugin.getConfigSettings().canPreventExploit()) { + return; + } if (event.getWhoClicked() instanceof Player) { if (event.getInventory().getType() == InventoryType.BREWING) { final Quester quester = plugin.getQuester(event.getWhoClicked().getUniqueId()); @@ -193,6 +198,9 @@ public class BukkitItemListener implements Listener { } public boolean isAllowedBrewingAction(final InventoryClickEvent event) { + if (!plugin.getConfigSettings().canPreventExploit()) { + return true; + } final int slot = event.getRawSlot(); final InventoryAction action = event.getAction(); // Prevent shift-click into Brewing Stand diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 65037f1c5..b7169e53f 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -19,6 +19,7 @@ npc-effects: enabled: true new-quest: note redo-quest: heart +prevent-exploit: true show-completed-objectives: true show-requirements: true show-titles: true