aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main/java/com')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java19
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java9
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/SoundUtils.java40
8 files changed, 85 insertions, 19 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java
index 51a36dc4..ab6013bc 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java
@@ -68,14 +68,17 @@ public class CancelQMenu implements QMenu {
}
@Override
- public void handleClick(InventoryClickEvent event, MenuController controller) {
+ public boolean handleClick(InventoryClickEvent event, MenuController controller) {
if (event.getSlot() == 10 || event.getSlot() == 11 || event.getSlot() == 12) {
controller.openMenu(event.getWhoClicked(), superMenu, 1);
+ return true;
} else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) {
if (owner.cancelQuest(quest)) {
event.getWhoClicked().closeInventory();
+ return true;
}
}
+ return false;
}
public QMenu getSuperMenu() {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java
index a31352f3..6d1993b6 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java
@@ -149,12 +149,14 @@ public class CategoryQMenu implements QMenu {
}
@Override
- public void handleClick(InventoryClickEvent event, MenuController controller) {
+ public boolean handleClick(InventoryClickEvent event, MenuController controller) {
if (pagePrevLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage - 1);
+ return true;
} else if (pageNextLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage + 1);
+ return true;
} else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) {
MenuElement element = menuElements.get(event.getSlot() + ((currentPage - 1) * pageSize));
@@ -164,8 +166,11 @@ public class CategoryQMenu implements QMenu {
if (plugin.getMenuController().openQuestCategory(owner,
plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()), questQMenu) != 0) {
event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage());
+ } else {
+ return true;
}
}
}
+ return false;
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java
index aeb543d6..c4a7a54b 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java
@@ -1,6 +1,7 @@
package com.leonardobishop.quests.bukkit.menu;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.util.SoundUtils;
import com.leonardobishop.quests.common.player.QPlayer;
import com.leonardobishop.quests.common.quest.Category;
import com.leonardobishop.quests.common.quest.Quest;
@@ -29,6 +30,8 @@ public class MenuController implements Listener {
}
public void openMenu(HumanEntity player, QMenu qMenu, int page) {
+ SoundUtils.playSoundForPlayer((Player) player, plugin.getQuestsConfig().getString("options.sounds.gui.open"));
+// Bukkit.getScheduler().runTaskLater(plugin, () -> SoundUtils.playSoundForPlayer((Player) player, plugin.getQuestsConfig().getString("options.sounds.gui.open")), 1L);
player.openInventory(qMenu.toInventory(page));
tracker.put(player.getUniqueId(), qMenu);
}
@@ -41,15 +44,19 @@ public class MenuController implements Listener {
@EventHandler
private void onClick(InventoryClickEvent event) {
// check if the player has a quest menu open
- if (tracker.containsKey(event.getWhoClicked().getUniqueId())) {
+ Player player = (Player) event.getWhoClicked();
+ if (tracker.containsKey(player.getUniqueId())) {
event.setCancelled(true);
if (event.getClickedInventory() == null)
return; //The player clicked outside the inventory
if (event.getClickedInventory().getType() == InventoryType.PLAYER)
return; //The clicked inventory is a player inventory type
- QMenu qMenu = tracker.get(event.getWhoClicked().getUniqueId());
- qMenu.handleClick(event, this);
+ QMenu qMenu = tracker.get(player.getUniqueId());
+ if (qMenu.handleClick(event, this)) {
+ SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.gui.interact"));
+// Bukkit.getScheduler().runTaskLater(plugin, () -> SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.gui.interact")), 1L);
+ }
}
}
@@ -132,7 +139,7 @@ public class MenuController implements Listener {
}
categoryQMenu.populate(questMenus);
- plugin.getMenuController().openMenu(player, categoryQMenu, 1);
+ openMenu(player, categoryQMenu, 1);
} else {
QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, "", null);
List<Quest> quests = new ArrayList<>();
@@ -142,7 +149,7 @@ public class MenuController implements Listener {
questQMenu.populate(quests);
questQMenu.setBackButtonEnabled(false);
- plugin.getMenuController().openMenu(player, questQMenu, 1);
+ openMenu(player, questQMenu, 1);
}
}
// } else {
@@ -170,7 +177,7 @@ public class MenuController implements Listener {
}
startedQMenu.populate(quests);
- plugin.getMenuController().openMenu(player, startedQMenu, 1);
+ openMenu(player, startedQMenu, 1);
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java
index 0e3c9f78..898041f3 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java
@@ -8,6 +8,6 @@ public interface QMenu {
QPlayer getOwner();
Inventory toInventory(int page);
- void handleClick(InventoryClickEvent event, MenuController controller);
+ boolean handleClick(InventoryClickEvent event, MenuController controller);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java
index 98cd649b..c61bb6e2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java
@@ -207,35 +207,39 @@ public class QuestQMenu implements QMenu {
}
@Override
- public void handleClick(InventoryClickEvent event, MenuController controller) {
+ public boolean handleClick(InventoryClickEvent event, MenuController controller) {
//TODO maybe redo this maybe
if (pagePrevLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage - 1);
-
+ return true;
} else if (pageNextLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage + 1);
-
+ return true;
} else if (config.getBoolean("options.categories-enabled") && backButtonLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), superMenu, 1);
-
+ return true;
} else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) {
MenuElement menuElement = menuElements.get(event.getSlot() + ((currentPage - 1) * pageSize));
if (menuElement instanceof QuestMenuElement) {
QuestMenuElement questMenuElement = (QuestMenuElement) menuElement;
Quest quest = plugin.getQuestManager().getQuestById(questMenuElement.getQuestId());
if (event.getClick() == ClickType.LEFT) {
- if (config.getBoolean("options.quest-autostart")) return;
+ if (config.getBoolean("options.quest-autostart")) return false;
if (owner.startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
}
+ return true;
} else if (event.getClick() == ClickType.MIDDLE && config.getBoolean("options.quest-autostart")) {
MenuUtils.handleMiddleClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ return true;
} else if (event.getClick() == ClickType.RIGHT && config.getBoolean("options.allow-quest-cancel")
&& owner.hasStartedQuest(quest)) {
MenuUtils.handleRightClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ return true;
}
}
}
+ return false;
}
public boolean isBackButtonEnabled() {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java
index 8171ac19..7d05294e 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java
@@ -152,13 +152,13 @@ public class StartedQMenu implements QMenu {
}
@Override
- public void handleClick(InventoryClickEvent event, MenuController controller) {
+ public boolean handleClick(InventoryClickEvent event, MenuController controller) {
if (pagePrevLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage - 1);
-
+ return true;
} else if (pageNextLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage + 1);
-
+ return true;
} else if (event.getSlot() < pageSize && slotsToQuestIds.containsKey(event.getSlot() + ((currentPage) - 1) * pageSize)) {
// repeat from above
@@ -166,10 +166,13 @@ public class StartedQMenu implements QMenu {
Quest quest = plugin.getQuestManager().getQuestById(questid);
if (event.getClick() == ClickType.MIDDLE && config.getBoolean("options.allow-quest-track")) {
MenuUtils.handleMiddleClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ return true;
} else if (event.getClick() == ClickType.RIGHT && config.getBoolean("options.allow-quest-cancel")
&& owner.hasStartedQuest(quest)) {
MenuUtils.handleRightClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ return true;
}
}
+ return false;
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
index d9e39424..b538c209 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
@@ -11,6 +11,7 @@ import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack;
import com.leonardobishop.quests.bukkit.util.Format;
import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.bukkit.util.SoundUtils;
import com.leonardobishop.quests.bukkit.util.chat.Chat;
import com.leonardobishop.quests.common.enums.QuestStartResult;
import com.leonardobishop.quests.common.player.QPlayer;
@@ -40,7 +41,6 @@ public class NormalQuestController implements QuestController {
this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
List<Quest> autoStartQuestCache = new ArrayList<>();
- List<Quest> nonAutoStartQuestCache = new ArrayList<>();
for (Quest quest : plugin.getQuestManager().getQuests().values()) {
if (quest.isAutoStartEnabled()) autoStartQuestCache.add(quest);
}
@@ -122,6 +122,7 @@ public class NormalQuestController implements QuestController {
for (String s : quest.getStartString()) {
player.sendMessage(Chat.color(s));
}
+ SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-start"));
}
for (Task task : quest.getTasks()) {
try {
@@ -217,6 +218,7 @@ public class NormalQuestController implements QuestController {
for (String s : quest.getRewardString()) {
player.sendMessage(Chat.color(s));
}
+ SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-complete"));
}
if ((config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack") && !(quest.isRepeatable() && !quest.isCooldownEnabled()))
|| (!config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack"))) {
@@ -264,8 +266,10 @@ public class NormalQuestController implements QuestController {
PlayerCancelQuestEvent questCancelEvent = new PlayerCancelQuestEvent(player, qPlayer, questProgress, questCancelMessage);
Bukkit.getPluginManager().callEvent(questCancelEvent);
// PlayerCancelQuestEvent -- end
- if (questCancelEvent.getQuestCancelMessage() != null)
+ if (questCancelEvent.getQuestCancelMessage() != null) {
player.sendMessage(questCancelEvent.getQuestCancelMessage());
+ }
+ SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-cancel"));
}
return true;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/SoundUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/SoundUtils.java
new file mode 100644
index 00000000..8eacd5d4
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/SoundUtils.java
@@ -0,0 +1,40 @@
+package com.leonardobishop.quests.bukkit.util;
+
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+
+import java.util.regex.Pattern;
+
+public class SoundUtils {
+
+ /**
+ * Play a sound to a player
+ *
+ * @param soundString the sound string as formatted by a user in the config, e.g ENTITY_PLAYER_LEVELUP:2:3
+ */
+ public static void playSoundForPlayer(Player player, String soundString) {
+ if (soundString == null || soundString.isEmpty()) return;
+
+ String[] parts = soundString.split(Pattern.quote(":"));
+ float pitch = 1;
+ float volume = 3;
+ try {
+ switch (parts.length) {
+ case 3:
+ volume = Float.parseFloat(parts[2]);
+ case 2:
+ pitch = Float.parseFloat(parts[1]);
+ }
+ } catch (NumberFormatException ignored) { }
+
+ Sound sound;
+ try {
+ sound = Sound.valueOf(parts[0]);
+ } catch (IllegalArgumentException ex) {
+ return;
+ }
+
+ player.playSound(player.getLocation(), sound, volume, pitch);
+ }
+
+}