From 20281648c24776c3f7679d097cb0810507715c32 Mon Sep 17 00:00:00 2001 From: Sarah Date: Fri, 5 May 2017 23:02:15 +0200 Subject: [PATCH] Add Quest triggers, add a Repository, add Spreadsheet parsing, and add menus. --- .../src/mineplex/core/quests/Quest.java | 41 +- .../mineplex/core/quests/QuestClientData.java | 39 +- .../mineplex/core/quests/QuestManager.java | 156 ++++++- .../core/quests/command/OpenGuiCommand.java | 28 ++ .../quests/repository/QuestRepository.java | 80 +++- .../core/quests/shop/BuyQuestButton.java | 67 +++ .../mineplex/core/quests/shop/QuestPage.java | 132 ++++++ .../mineplex/core/quests/shop/QuestSale.java | 25 ++ .../mineplex/core/quests/shop/QuestShop.java | 34 ++ .../quests/shop/RedeemDeclineQuestButton.java | 85 ++++ .../database/tables/AccountQuest.java | 190 ++++----- .../tables/records/AccountQuestRecord.java | 380 +++++++++--------- .../src/mineplex/hub/HubManager.java | 22 +- .../nautilus/game/arcade/ArcadeManager.java | 10 +- .../src/nautilus/game/arcade/game/Game.java | 24 ++ .../arcade/quest/CollectQuestTracker.java | 43 ++ .../game/arcade/quest/KillQuestTracker.java | 39 ++ .../game/arcade/quest/QuestTracker.java | 74 ++++ .../game/arcade/quest/WinQuestTracker.java | 37 ++ .../googlesheets/SpreadsheetType.java | 2 + 20 files changed, 1207 insertions(+), 301 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/command/OpenGuiCommand.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/shop/BuyQuestButton.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestPage.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestSale.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestShop.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/quests/shop/RedeemDeclineQuestButton.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/KillQuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/WinQuestTracker.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/Quest.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/Quest.java index 7557e2baf..fe5237cc6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/Quest.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/Quest.java @@ -9,6 +9,8 @@ import mineplex.core.game.GameDisplay; */ public class Quest { + private static final Object _progressLock = new Object(); + private int _questID; private String _questName; @@ -89,24 +91,57 @@ public class Quest return _statToComplete; } + public int getProgress() + { + return _current; + } + public void setProgress(int progress) { _current = progress; } + public void increment(int value) + { + synchronized (_progressLock) + { + _current += value; + } + } + public void increment() { - _current++; + synchronized (_progressLock) + { + _current++; + } + } + + public void decrement(int value) + { + synchronized (_progressLock) + { + _current -= value; + } } public void decrement() { - _current--; + synchronized (_progressLock) + { + _current--; + } } public boolean isCompleted() { - return _current == _statToComplete; + return _current >= _statToComplete; + } + + @Override + public Quest clone() + { + return new Quest(_questID, _questName, _questTask, _questCost, _questReward, _rarity, _game, _trigger, _item, _statToComplete); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestClientData.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestClientData.java index 1f7809dd8..6d9aba667 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestClientData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestClientData.java @@ -1,6 +1,6 @@ package mineplex.core.quests; -import org.bukkit.entity.Player; +import java.util.ArrayList; /** * QuestClientData @@ -9,10 +9,41 @@ import org.bukkit.entity.Player; */ public class QuestClientData { + private ArrayList _quests = new ArrayList<>(); - public QuestClientData(Player player) + public void addQuest(Quest quest) { - + _quests.add(quest); + } + + public ArrayList getQuests() + { + return _quests; + } + + public boolean hasQuest(Quest quest) + { + for (Quest other : _quests) + { + if (other.getID() == quest.getID()) + return true; + } + return false; + } + + public Quest getQuest(int id) + { + for (Quest quest : _quests) + { + if (quest.getID() == id) + return quest; + } + return null; + } + + public void removeQuest(int id) + { + Quest toRemove = getQuest(id); + _quests.remove(toRemove); } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestManager.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestManager.java index 9da8eaae2..239b9e149 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/QuestManager.java @@ -1,8 +1,24 @@ package mineplex.core.quests; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import java.util.UUID; +import org.apache.commons.lang3.tuple.Triple; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + import mineplex.core.MiniClientPlugin; +import mineplex.core.account.CoreClient; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.UtilTime; +import mineplex.core.donation.DonationManager; +import mineplex.core.game.GameDisplay; +import mineplex.core.google.GoogleSheetsManager; +import mineplex.core.quests.command.OpenGuiCommand; +import mineplex.core.quests.repository.QuestRepository; /** * QuestManager @@ -11,16 +27,154 @@ import mineplex.core.MiniClientPlugin; */ public class QuestManager extends MiniClientPlugin { + private static final String GOOGLE_SHEET = "QUESTS_SHEET"; + private static final String GOOGLE_TABLE = "Quests"; + + private QuestRepository _repository; + private GoogleSheetsManager _sheetsManager; + private CoreClientManager _clients; + private DonationManager _donationManager; + + public ArrayList _availableQuests; public QuestManager() { super("Quest Manager"); + + _repository = new QuestRepository(); + _sheetsManager = require(GoogleSheetsManager.class); + _clients = require(CoreClientManager.class); + _availableQuests = new ArrayList<>(); + + setupQuests(); + } + + @Override + public void addCommands() + { + addCommand(new OpenGuiCommand(this)); + } + + public void setupQuests() + { + _availableQuests.clear(); + Map>> sheet = _sheetsManager.getSheetData(GOOGLE_SHEET); + List> table = new ArrayList<>(); + for (String key : sheet.keySet()) + { + if (key.equalsIgnoreCase(GOOGLE_TABLE)) + table = sheet.get(key); + } + + int size = table.size(); + + for (int i = 1; i < size; i++) + { + String name = table.get(i).get(0); + String task = table.get(i).get(1); + String game = table.get(i).get(2); + String cost = table.get(i).get(3); + String reward = table.get(i).get(4); + String trigger = table.get(i).get(5); + String statcompletion = table.get(i).get(6); + String item = table.get(i).get(7); + String rarity = table.get(i).get(8); + + _availableQuests.add(new Quest(i, name, task, + Integer.parseInt(cost), + Integer.parseInt(reward), + QuestRarity.getByName(rarity), + GameDisplay.matchName(game), + TriggerType.getByName(trigger), + item, + Integer.parseInt(statcompletion))); + } + } + + @EventHandler + public void playerJoin(PlayerJoinEvent event) + { + QuestClientData data = Get(event.getPlayer()); + for (Triple triple : _repository.getQuests(_clients.Get(event.getPlayer()))) + { + int id = triple.getLeft(); + int value = triple.getMiddle(); + long time = triple.getRight(); + + if (value == -1) + continue; + + if (!UtilTime.elapsed(time, 1000*60*60*24)) + continue; + + for (Quest quest : _availableQuests) + { + if (quest.getID() == id) + { + Quest clone = quest.clone(); + clone.setProgress(value); + data.addQuest(clone); + } + } + } + } + + public Quest getQuestByID(int id) + { + for (Quest quest : _availableQuests) + { + if (quest.getID() == id) + return quest; + } + return null; + } + + public void addNewQuest(Player player, Quest quest) + { + Quest clone = quest.clone(); + clone.setProgress(0); + Get(player).addQuest(clone); + + _repository.addNew(_clients.Get(player), quest); + } + + public void resetQuest(Player player, Quest quest, boolean completed) + { + Get(player).removeQuest(quest.getID()); + + _repository.resetQuest(_clients.Get(player), quest, completed); + } + + public void incrementQuest(CoreClient client, Quest quest, int value) + { + quest.increment(value); + _repository.incrementQuest(client, quest); + } + + public int[] getCurrentQuests() + { + return new int[]{2, 4}; } + public CoreClientManager getClients() + { + return _clients; + } + + public DonationManager getDonations() + { + return _donationManager; + } + @Override protected QuestClientData addPlayer(UUID uuid) { - return null; + return new QuestClientData(); + } + + public ArrayList getAvailableQuests() + { + return _availableQuests; } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/command/OpenGuiCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/OpenGuiCommand.java new file mode 100644 index 000000000..7daeb4b4f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/OpenGuiCommand.java @@ -0,0 +1,28 @@ +package mineplex.core.quests.command; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.quests.QuestManager; +import mineplex.core.quests.shop.QuestShop; + +/** + * OpenGuiCommand + * + * @author xXVevzZXx + */ +public class OpenGuiCommand extends CommandBase +{ + public OpenGuiCommand(QuestManager plugin) + { + super(plugin, Rank.ALL, "Quests"); + } + + @Override + public void Execute(Player caller, String[] args) + { + new QuestShop(Plugin, Plugin.getClients(), Plugin.getDonations()).attemptShopOpen(caller); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java index faaa1077a..324feb381 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java @@ -1,5 +1,14 @@ package mineplex.core.quests.repository; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.apache.commons.lang3.tuple.Triple; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClient; +import mineplex.core.quests.Quest; import mineplex.serverdata.database.DBPool; import mineplex.serverdata.database.RepositoryBase; @@ -10,10 +19,79 @@ import mineplex.serverdata.database.RepositoryBase; */ public class QuestRepository extends RepositoryBase { - + private HashMap>> _db; + public QuestRepository() { super(DBPool.getAccount()); + + _db = new HashMap<>(); + } + + public void player(Player player) + { + for (String string : _db.keySet()) + { + if (string.equalsIgnoreCase(player.getUniqueId().toString())) + return; + } + _db.put(player.getUniqueId().toString(), new ArrayList<>()); + } + + public ArrayList> getQuests(CoreClient client) + { + player(client.GetPlayer()); +// ArrayList> list = new ArrayList<>(); +// for (int i = 2; i <= 3; i++) +// { +// list.add(Triple.of(i, UtilMath.r(10) + 1, System.currentTimeMillis() - (1000*60*60*48))); +// } +// return list; + return _db.get(client.GetPlayer().getUniqueId().toString()); + } + + public void resetQuest(CoreClient client, Quest quest, boolean completed) + { + player(client.GetPlayer()); + Triple toAdd = null; + ArrayList> liste = _db.get(client.GetPlayer().getUniqueId().toString()); + Iterator> iterator = liste.iterator(); + while (iterator.hasNext()) + { + Triple triple = iterator.next(); + if (triple.getLeft() == quest.getID()) + { + toAdd = Triple.of(triple.getLeft(), -1, (completed ? System.currentTimeMillis() : (long) 0)); + iterator.remove(); + } + } + if (toAdd != null) + _db.get(client.GetPlayer().getUniqueId().toString()).add(toAdd); + } + + public void addNew(CoreClient client, Quest quest) + { + player(client.GetPlayer()); + _db.get(client.GetPlayer().getUniqueId().toString()).add(Triple.of(quest.getID(), 0, (long) 0)); + } + + public void incrementQuest(CoreClient client, Quest quest) + { + player(client.GetPlayer()); + Triple toAdd = null; + ArrayList> liste = _db.get(client.GetPlayer().getUniqueId().toString()); + Iterator> iterator = liste.iterator(); + while (iterator.hasNext()) + { + Triple triple = iterator.next(); + if (triple.getLeft() == quest.getID()) + { + toAdd = Triple.of(triple.getLeft(), triple.getMiddle() + 1, triple.getRight()); + iterator.remove(); + } + } + if (toAdd != null) + _db.get(client.GetPlayer().getUniqueId().toString()).add(toAdd); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/BuyQuestButton.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/BuyQuestButton.java new file mode 100644 index 000000000..27053ee37 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/BuyQuestButton.java @@ -0,0 +1,67 @@ +package mineplex.core.quests.shop; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.currency.GlobalCurrency; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.quests.Quest; +import mineplex.core.quests.QuestManager; +import mineplex.core.recharge.Recharge; +import mineplex.core.shop.confirmation.ConfirmationPage; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.SalesPackageBase; +import mineplex.core.shop.item.SalesPackageProcessor; + +/** + * BuyQuestButton + * + * @author xXVevzZXx + */ +public class BuyQuestButton implements IButton +{ + private QuestManager _questManager; + + private QuestPage _page; + + private Quest _quest; + + public BuyQuestButton(QuestManager questManager, QuestPage page, Quest quest) + { + _questManager = questManager; + _quest = quest; + _page = page; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + if (!Recharge.Instance.use(player, "Buy Quest", 1000, false, false)) + { + return; + } + + if (_questManager.Get(player).hasQuest(_quest)) + { + UtilPlayer.message(player, F.main("Quest", "You already own that Quest!")); + return; + } + + SalesPackageBase salesPackage = new QuestSale(_quest.getName(), Material.PAPER, _quest.getCost()); + _page.getShop().openPageForPlayer(player, new ConfirmationPage<>(player, _page, new SalesPackageProcessor(player, GlobalCurrency.GEM, salesPackage, _page.getDonationManager(), () -> + { + _questManager.addNewQuest(player, _quest); + + player.closeInventory(); + + QuestPage page = new QuestPage(_page.getPlugin(), _page.getQuestShop(), _page.getClientManager(), _page.getDonationManager(), player); + _page.getQuestShop().openPageForPlayer(player, page); + + }), salesPackage.buildIcon())); + + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestPage.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestPage.java new file mode 100644 index 000000000..208810b8a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestPage.java @@ -0,0 +1,132 @@ +package mineplex.core.quests.shop; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.quests.Quest; +import mineplex.core.quests.QuestManager; +import mineplex.core.shop.page.ShopPageBase; + +/** + * QuestPage + * + * @author xXVevzZXx + */ +public class QuestPage extends ShopPageBase +{ + + public QuestPage(QuestManager plugin, QuestShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Quest Page", player); + + buildPage(); + } + + @Override + protected void buildPage() + { + int i = 0; + while (i < 9) + { + setItem(i, ItemStackFactory.Instance.CreateStack(Material.STAINED_GLASS_PANE, DyeColor.BLACK.getData())); + i++; + } + + { + int currentSlot = 4; + int diff = 0; + boolean forward = true; + for (int questID : getQuestShop().getQuestManager().getCurrentQuests()) + { + if (forward) + { + currentSlot += diff; + } + else + { + currentSlot -= diff; + } + diff++; + forward = !forward; + + Quest quest = _shop.getQuestManager().getQuestByID(questID); + + ItemStack item = new ItemStack(Material.PAPER); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + quest.getName()); + meta.setLore(Arrays.asList( + ChatColor.YELLOW + quest.getTask(), + "", + ChatColor.GREEN + "Cost: " + quest.getCost() + " Gems", + ChatColor.AQUA + "Reward: " + quest.getReward() + " Shards", + "", + quest.getRarity().getColor() + "" + ChatColor.BOLD + quest.getRarity().toString(), + "", + ChatColor.GREEN + "Click to buy Quest!" + )); + item.setItemMeta(meta); + + addButton(i + currentSlot, item, new BuyQuestButton(_plugin, this, quest)); + } + } + i = 9*2; + while (i < (9*3)) + { + setItem(i, ItemStackFactory.Instance.CreateStack(Material.STAINED_GLASS_PANE, DyeColor.BLACK.getData())); + i++; + } + i = 9*4; + + { + int currentSlot = 4; + int diff = 0; + boolean forward = true; + for (Quest quest : _shop.getQuestManager().Get(_player).getQuests()) + { + if (forward) + { + currentSlot += diff; + } + else + { + currentSlot -= diff; + } + diff++; + forward = !forward; + + ItemStack item = new ItemStack(Material.PAPER); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + quest.getName()); + meta.setLore(Arrays.asList( + ChatColor.YELLOW + quest.getTask(), + "", + ChatColor.AQUA + "Reward: " + quest.getReward() + " Shards", + "", + quest.getRarity().getColor() + "" + ChatColor.BOLD + quest.getRarity().toString(), + "", + ChatColor.YELLOW + "Progress: " + (quest.isCompleted() ? ChatColor.GREEN + "Completed!" : quest.getProgress() + "/" + quest.getStatToComplete()), + "", + (quest.isCompleted() ? ChatColor.GREEN + "Left Click to Complete" : ChatColor.RED + "Right Shift Click to cancell") + )); + item.setItemMeta(meta); + + addButton(i + currentSlot, item, new RedeemDeclineQuestButton(_donationManager, _plugin, this, quest)); + } + } + } + + public QuestShop getQuestShop() + { + return _shop; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestSale.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestSale.java new file mode 100644 index 000000000..dfb266baa --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestSale.java @@ -0,0 +1,25 @@ +package mineplex.core.quests.shop; + +import org.bukkit.Material; + +import mineplex.core.common.currency.GlobalCurrency; +import mineplex.core.shop.item.SalesPackageBase; + +/** + * QuestSale + * + * @author xXVevzZXx + */ +public class QuestSale extends SalesPackageBase +{ + + public QuestSale(String name, Material mat, int cost) + { + super(name, mat, (byte) 0, new String[] {}, cost); + + KnownPackage = false; + OneTimePurchaseOnly = false; + CurrencyCostMap.clear(); + CurrencyCostMap.put(GlobalCurrency.GEM, cost); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestShop.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestShop.java new file mode 100644 index 000000000..10219c8b5 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/QuestShop.java @@ -0,0 +1,34 @@ +package mineplex.core.quests.shop; + +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.quests.QuestManager; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.page.ShopPageBase; + +/** + * QuestShop + * + * @author xXVevzZXx + */ +public class QuestShop extends ShopBase +{ + public QuestShop(QuestManager plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super(plugin, clientManager, donationManager, "Quest Shop"); + } + + @Override + protected ShopPageBase> buildPagesFor(Player player) + { + return new QuestPage(getPlugin(), this, getClientManager(), getDonationManager(), player); + } + + public QuestManager getQuestManager() + { + return getPlugin(); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/RedeemDeclineQuestButton.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/RedeemDeclineQuestButton.java new file mode 100644 index 000000000..a33c2f3e4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/shop/RedeemDeclineQuestButton.java @@ -0,0 +1,85 @@ +package mineplex.core.quests.shop; + +import javax.jws.Oneway; + +import net.md_5.bungee.api.ChatColor; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.currency.GlobalCurrency; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.donation.DonationManager; +import mineplex.core.quests.Quest; +import mineplex.core.quests.QuestManager; +import mineplex.core.recharge.Recharge; +import mineplex.core.shop.item.IButton; + +/** + * RedeemDeclineQuest + * + * @author xXVevzZXx + */ +public class RedeemDeclineQuestButton implements IButton +{ + private QuestManager _questManager; + private DonationManager _donations; + + private QuestPage _page; + + private Quest _quest; + + public RedeemDeclineQuestButton(DonationManager donations, QuestManager questManager, QuestPage page, Quest quest) + { + _questManager = questManager; + _donations = donations; + _quest = quest; + _page = page; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + if (!Recharge.Instance.use(player, "Decline Quest", 1000, false, false)) + { + return; + } + + if (!_questManager.Get(player).hasQuest(_quest)) + { + UtilPlayer.message(player, F.main("Quest", "You dont own that Quest!")); + return; + } + + if (clickType == ClickType.SHIFT_RIGHT) + { + if (_quest.isCompleted()) + { + UtilPlayer.message(player, F.main("Quest", "You can't cancell a completed Quest!")); + return; + } + _questManager.resetQuest(player, _quest, false); + UtilPlayer.message(player, F.main("Quest", "You have cancelled that Quest!")); + } + + if (clickType == ClickType.LEFT) + { + if (!_quest.isCompleted()) + { + UtilPlayer.message(player, F.main("Quest", "You havent completed that Quest yet!")); + return; + } + _questManager.resetQuest(player, _quest, true); + _donations.rewardCurrency(GlobalCurrency.TREASURE_SHARD, player, "Completed Quest: " + _quest.getID(), _quest.getReward()); + UtilPlayer.message(player, F.main("Quest", "You have recieved " + ChatColor.AQUA + _quest.getReward() + " Shards " + ChatColor.GRAY + "for completing a Quest!")); + } + + if (clickType == ClickType.LEFT || clickType == ClickType.SHIFT_RIGHT) + { + QuestPage page = new QuestPage(_page.getPlugin(), _page.getQuestShop(), _page.getClientManager(), _page.getDonationManager(), player); + _page.getQuestShop().openPageForPlayer(player, page); + } + + } +} diff --git a/Plugins/Mineplex.Database/src/mineplex/database/tables/AccountQuest.java b/Plugins/Mineplex.Database/src/mineplex/database/tables/AccountQuest.java index e2794b6a1..a5e501bd3 100644 --- a/Plugins/Mineplex.Database/src/mineplex/database/tables/AccountQuest.java +++ b/Plugins/Mineplex.Database/src/mineplex/database/tables/AccountQuest.java @@ -13,102 +13,102 @@ import org.jooq.impl.TableImpl; comments = "This class is generated by jOOQ" ) @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class AccountQuest extends TableImpl implements java.io.Serializable, java.lang.Cloneable +public class AccountQuest //extends TableImpl implements java.io.Serializable, java.lang.Cloneable { - /** - * - */ - private static final long serialVersionUID = -8158716179851336044L; - - /** - * The reference instance of Account.accountStat - */ - public static final mineplex.database.tables.AccountStat accountStat = new mineplex.database.tables.AccountStat(); - - /** - * The class holding records for this type - */ - @Override - public java.lang.Class getRecordType() { - return mineplex.database.tables.records.AccountQuestRecord.class; - } - - /** - * The column Account.accountStat.accountId. - */ - public final org.jooq.TableField accountId = createField("accountId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * The column Account.accountStat.statId. - */ - public final org.jooq.TableField statId = createField("statId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * The column Account.accountStat.value. - */ - public final org.jooq.TableField value = createField("value", org.jooq.impl.SQLDataType.BIGINTUNSIGNED.defaulted(true), this, ""); - - /** - * Create a Account.accountStat table reference - */ - public AccountQuest() - { - super("accountquest", null); - } - - /** - * Create an aliased Account.accountStat table reference - */ - public AccountQuest(java.lang.String alias) { - this(alias, mineplex.database.tables.AccountQuest.accountStat); - } - - private AccountQuest(java.lang.String alias, org.jooq.Table aliased) { - this(alias, aliased, null); - } - - private AccountQuest(java.lang.String alias, org.jooq.Table aliased, org.jooq.Field[] parameters) { - super(alias, mineplex.database.Account.Account, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.UniqueKey getPrimaryKey() { - return mineplex.database.Keys.KEY_accountStat_PRIMARY; - } - - /** - * {@inheritDoc} - */ - @Override - public java.util.List> getKeys() { - return java.util.Arrays.>asList(mineplex.database.Keys.KEY_accountStat_PRIMARY); - } - - /** - * {@inheritDoc} - */ - @Override - public java.util.List> getReferences() { - return java.util.Arrays.>asList(mineplex.database.Keys.accountStat_account, mineplex.database.Keys.accountStat_stat); - } - - /** - * {@inheritDoc} - */ - @Override - public mineplex.database.tables.AccountStat as(java.lang.String alias) { - return new mineplex.database.tables.AccountStat(alias, this); - } - - /** - * Rename this table - */ - public mineplex.database.tables.AccountStat rename(java.lang.String name) { - return new mineplex.database.tables.AccountStat(name, null); - } +// /** +// * +// */ +// private static final long serialVersionUID = -8158716179851336044L; +// +// /** +// * The reference instance of Account.accountStat +// */ +// public static final mineplex.database.tables.AccountStat accountStat = new mineplex.database.tables.AccountStat(); +// +// /** +// * The class holding records for this type +// */ +// @Override +// public java.lang.Class getRecordType() { +// return mineplex.database.tables.records.AccountQuestRecord.class; +// } +// +// /** +// * The column Account.accountStat.accountId. +// */ +// public final org.jooq.TableField accountId = createField("accountId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); +// +// /** +// * The column Account.accountStat.statId. +// */ +// public final org.jooq.TableField statId = createField("statId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); +// +// /** +// * The column Account.accountStat.value. +// */ +// public final org.jooq.TableField value = createField("value", org.jooq.impl.SQLDataType.BIGINTUNSIGNED.defaulted(true), this, ""); +// +// /** +// * Create a Account.accountStat table reference +// */ +// public AccountQuest() +// { +// super("accountquest", null); +// } +// +// /** +// * Create an aliased Account.accountStat table reference +// */ +// public AccountQuest(java.lang.String alias) { +// this(alias, mineplex.database.tables.AccountQuest.accountStat); +// } +// +// private AccountQuest(java.lang.String alias, org.jooq.Table aliased) { +// this(alias, aliased, null); +// } +// +// private AccountQuest(java.lang.String alias, org.jooq.Table aliased, org.jooq.Field[] parameters) { +// super(alias, mineplex.database.Account.Account, aliased, parameters, ""); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.UniqueKey getPrimaryKey() { +// return mineplex.database.Keys.KEY_accountStat_PRIMARY; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public java.util.List> getKeys() { +// return java.util.Arrays.>asList(mineplex.database.Keys.KEY_accountStat_PRIMARY); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public java.util.List> getReferences() { +// return java.util.Arrays.>asList(mineplex.database.Keys.accountStat_account, mineplex.database.Keys.accountStat_stat); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public mineplex.database.tables.AccountStat as(java.lang.String alias) { +// return new mineplex.database.tables.AccountStat(alias, this); +// } +// +// /** +// * Rename this table +// */ +// public mineplex.database.tables.AccountStat rename(java.lang.String name) { +// return new mineplex.database.tables.AccountStat(name, null); +// } } diff --git a/Plugins/Mineplex.Database/src/mineplex/database/tables/records/AccountQuestRecord.java b/Plugins/Mineplex.Database/src/mineplex/database/tables/records/AccountQuestRecord.java index c707a42c7..8b1926b2e 100644 --- a/Plugins/Mineplex.Database/src/mineplex/database/tables/records/AccountQuestRecord.java +++ b/Plugins/Mineplex.Database/src/mineplex/database/tables/records/AccountQuestRecord.java @@ -7,196 +7,196 @@ import org.jooq.Table; * * @author xXVevzZXx */ -public class AccountQuestRecord extends org.jooq.impl.UpdatableRecordImpl implements java.io.Serializable, java.lang.Cloneable, org.jooq.Record3 +public class AccountQuestRecord //extends org.jooq.impl.UpdatableRecordImpl implements java.io.Serializable, java.lang.Cloneable, org.jooq.Record3 { - - /** - * - */ - private static final long serialVersionUID = 5171965369180094201L; - - public AccountQuestRecord(Table table) - { - super(table); - } - - /** - * Setter for Account.accountStat.accountId. - */ - public void setAccountId(java.lang.Integer value) { - setValue(0, value); - } - - /** - * Getter for Account.accountStat.accountId. - */ - public java.lang.Integer getAccountId() { - return (java.lang.Integer) getValue(0); - } - - /** - * Setter for Account.accountStat.statId. - */ - public void setStatId(java.lang.Integer value) { - setValue(1, value); - } - - /** - * Getter for Account.accountStat.statId. - */ - public java.lang.Integer getStatId() { - return (java.lang.Integer) getValue(1); - } - - /** - * Setter for Account.accountStat.value. - */ - public void setValue(org.jooq.types.ULong value) { - setValue(2, value); - } - - /** - * Getter for Account.accountStat.value. - */ - public org.jooq.types.ULong getValue() { - return (org.jooq.types.ULong) getValue(2); - } - - // ------------------------------------------------------------------------- - // Primary key information - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Record2 key() { - return (org.jooq.Record2) super.key(); - } - - // ------------------------------------------------------------------------- - // Record3 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Row3 fieldsRow() { - return (org.jooq.Row3) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Row3 valuesRow() { - return (org.jooq.Row3) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Field field1() { - return mineplex.database.tables.AccountStat.accountStat.accountId; - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Field field2() { - return mineplex.database.tables.AccountStat.accountStat.statId; - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.Field field3() { - return mineplex.database.tables.AccountStat.accountStat.value; - } - - /** - * {@inheritDoc} - */ - @Override - public java.lang.Integer value1() { - return getAccountId(); - } - - /** - * {@inheritDoc} - */ - @Override - public java.lang.Integer value2() { - return getStatId(); - } - - /** - * {@inheritDoc} - */ - @Override - public org.jooq.types.ULong value3() { - return getValue(); - } - - /** - * {@inheritDoc} - */ - @Override - public AccountStatRecord value1(java.lang.Integer value) { - setAccountId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AccountStatRecord value2(java.lang.Integer value) { - setStatId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AccountStatRecord value3(org.jooq.types.ULong value) { - setValue(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AccountStatRecord values(java.lang.Integer value1, java.lang.Integer value2, org.jooq.types.ULong value3) { - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached AccountStatRecord - */ - public AccountStatRecord() { - super(mineplex.database.tables.AccountStat.accountStat); - } - - /** - * Create a detached, initialised AccountStatRecord - */ - public AccountStatRecord(java.lang.Integer accountId, java.lang.Integer statId, org.jooq.types.ULong value) { - super(mineplex.database.tables.AccountStat.accountStat); - - setValue(0, accountId); - setValue(1, statId); - setValue(2, value); - } +// +// /** +// * +// */ +// private static final long serialVersionUID = 5171965369180094201L; +// +// public AccountQuestRecord(Table table) +// { +// super(table); +// } +// +// /** +// * Setter for Account.accountStat.accountId. +// */ +// public void setAccountId(java.lang.Integer value) { +// setValue(0, value); +// } +// +// /** +// * Getter for Account.accountStat.accountId. +// */ +// public java.lang.Integer getAccountId() { +// return (java.lang.Integer) getValue(0); +// } +// +// /** +// * Setter for Account.accountStat.statId. +// */ +// public void setStatId(java.lang.Integer value) { +// setValue(1, value); +// } +// +// /** +// * Getter for Account.accountStat.statId. +// */ +// public java.lang.Integer getStatId() { +// return (java.lang.Integer) getValue(1); +// } +// +// /** +// * Setter for Account.accountStat.value. +// */ +// public void setValue(org.jooq.types.ULong value) { +// setValue(2, value); +// } +// +// /** +// * Getter for Account.accountStat.value. +// */ +// public org.jooq.types.ULong getValue() { +// return (org.jooq.types.ULong) getValue(2); +// } +// +// // ------------------------------------------------------------------------- +// // Primary key information +// // ------------------------------------------------------------------------- +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Record2 key() { +// return (org.jooq.Record2) super.key(); +// } +// +// // ------------------------------------------------------------------------- +// // Record3 type implementation +// // ------------------------------------------------------------------------- +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Row3 fieldsRow() { +// return (org.jooq.Row3) super.fieldsRow(); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Row3 valuesRow() { +// return (org.jooq.Row3) super.valuesRow(); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Field field1() { +// return mineplex.database.tables.AccountStat.accountStat.accountId; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Field field2() { +// return mineplex.database.tables.AccountStat.accountStat.statId; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.Field field3() { +// return mineplex.database.tables.AccountStat.accountStat.value; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public java.lang.Integer value1() { +// return getAccountId(); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public java.lang.Integer value2() { +// return getStatId(); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public org.jooq.types.ULong value3() { +// return getValue(); +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public AccountStatRecord value1(java.lang.Integer value) { +// setAccountId(value); +// return this; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public AccountStatRecord value2(java.lang.Integer value) { +// setStatId(value); +// return this; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public AccountStatRecord value3(org.jooq.types.ULong value) { +// setValue(value); +// return this; +// } +// +// /** +// * {@inheritDoc} +// */ +// @Override +// public AccountStatRecord values(java.lang.Integer value1, java.lang.Integer value2, org.jooq.types.ULong value3) { +// return this; +// } +// +// // ------------------------------------------------------------------------- +// // Constructors +// // ------------------------------------------------------------------------- +// +// /** +// * Create a detached AccountStatRecord +// */ +// public AccountStatRecord() { +// super(mineplex.database.tables.AccountStat.accountStat); +// } +// +// /** +// * Create a detached, initialised AccountStatRecord +// */ +// public AccountStatRecord(java.lang.Integer accountId, java.lang.Integer statId, org.jooq.types.ULong value) { +// super(mineplex.database.tables.AccountStat.accountStat); +// +// setValue(0, accountId); +// setValue(1, statId); +// setValue(2, value); +// } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 1e7dfd060..dd2f94aef 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -4,6 +4,13 @@ import java.util.HashMap; import java.util.Iterator; import java.util.UUID; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.HoverEvent.Action; +import net.md_5.bungee.api.chat.TextComponent; +import net.minecraft.server.v1_8_R3.EntityInsentient; +import net.minecraft.server.v1_8_R3.EntityPlayer; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -96,6 +103,7 @@ import mineplex.core.preferences.Preference; import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; import mineplex.core.punish.Punish; +import mineplex.core.quests.QuestManager; import mineplex.core.scoreboard.MineplexScoreboard; import mineplex.core.scoreboard.ScoreboardManager; import mineplex.core.stats.StatsManager; @@ -131,12 +139,6 @@ import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.condition.ConditionManager; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.HoverEvent.Action; -import net.md_5.bungee.api.chat.TextComponent; -import net.minecraft.server.v1_8_R3.EntityInsentient; -import net.minecraft.server.v1_8_R3.EntityPlayer; public class HubManager extends MiniClientPlugin implements IChatMessageFormatter { @@ -175,6 +177,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess // private HalloweenSpookinessManager _halloweenManager; // private TrickOrTreatManager _trickOrTreatManager; private MavericksManager _mavericksManager; + private QuestManager _questManager; private final TwoFactorAuth _twofactor = Managers.require(TwoFactorAuth.class); private HologramManager _hologramManager; @@ -288,6 +291,8 @@ public class HubManager extends MiniClientPlugin implements IChatMess _hologramManager = hologramManager; new EasterEggHunt(plugin, _clientManager); + + _questManager = new QuestManager(); ScoreboardManager scoreboardManager = new ScoreboardManager(plugin) { @@ -1024,4 +1029,9 @@ public class HubManager extends MiniClientPlugin implements IChatMess { return _jumpManager; } + + public QuestManager getQuestManager() + { + return _questManager; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index af4d8cea5..c15f4d3fa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -94,6 +94,7 @@ import mineplex.core.preferences.PreferencesManager; import mineplex.core.progression.KitProgressionManager; import mineplex.core.projectile.ProjectileManager; import mineplex.core.punish.Punish; +import mineplex.core.quests.QuestManager; import mineplex.core.rankGiveaway.eternal.EternalGiveawayManager; import mineplex.core.rankGiveaway.titangiveaway.TitanGiveawayManager; import mineplex.core.resourcepack.ResourcePackManager; @@ -233,7 +234,8 @@ public class ArcadeManager extends MiniPlugin implements IRelation private ScoreboardManager _scoreboardManager; private NextBestGameManager _nextBestGameManager; private TrackManager _trackManager; - + private QuestManager _questManager; + private IncognitoManager _incognitoManager; private TaskManager _taskManager; @@ -389,6 +391,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation _kitProgressionManager = new KitProgressionManager(getPlugin(), donationManager, clientManager); _progressionKitManager = new ProgressingKitManager(this); _serverUptimeManager = new ServerUptimeManager(this); + _questManager = new QuestManager(); if (GetHost() != null && !GetHost().isEmpty() && !GetHost().startsWith("COM-")) { @@ -2063,4 +2066,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation { return this._titles; } + + public QuestManager getQuestManager() + { + return _questManager; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 89fe831d5..f4d15da89 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -101,6 +101,10 @@ import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.ProgressingKit; import nautilus.game.arcade.managers.chat.ChatStatData; import nautilus.game.arcade.managers.lobby.LobbyManager; +import nautilus.game.arcade.quest.CollectQuestTracker; +import nautilus.game.arcade.quest.KillQuestTracker; +import nautilus.game.arcade.quest.QuestTracker; +import nautilus.game.arcade.quest.WinQuestTracker; import nautilus.game.arcade.scoreboard.GameScoreboard; import nautilus.game.arcade.stats.AssistsStatTracker; import nautilus.game.arcade.stats.DamageDealtStatTracker; @@ -343,6 +347,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public int EloStart = 1000; public boolean CanAddStats = true; + public boolean CanProgressQuests = true; public boolean CanGiveLoot = true; public boolean HideTeamSheep = false; @@ -378,6 +383,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed private NautHashMap _deadBodiesExpire = new NautHashMap(); private final Set> _statTrackers = new HashSet<>(); + private final Set _questTrackers = new HashSet<>(); private NautHashMap _teamReqs = new NautHashMap(); public WinEffectManager WinEffectManager = new WinEffectManager(); @@ -450,6 +456,9 @@ public abstract class Game extends ListenerComponent implements Lifetimed registerStatTrackers(new KillsStatTracker(this), new DeathsStatTracker(this), new AssistsStatTracker(this), new ExperienceStatTracker(this), new WinStatTracker(this), new LoseStatTracker(this), new DamageDealtStatTracker( this), new DamageTakenStatTracker(this), new GamesPlayedStatTracker(this)); + + // Quest Trackers + registerQuestTrackers(new WinQuestTracker(this), new KillQuestTracker(this), new CollectQuestTracker(this)); Manager.getResourcePackManager().setResourcePack(gameType.getResourcePackUrls(this), gameType.isEnforceResourcePack(this)); @@ -1773,6 +1782,20 @@ public abstract class Game extends ListenerComponent implements Lifetimed { return _statTrackers; } + + public void registerQuestTrackers(QuestTracker... questTrackers) + { + for (QuestTracker tracker : questTrackers) + { + if (_questTrackers.add(tracker)) + Bukkit.getPluginManager().registerEvents(tracker, Manager.getPlugin()); + } + } + + public Collection getQuestTrackers() + { + return _questTrackers; + } @EventHandler public void onHangingBreak(HangingBreakEvent event) @@ -2360,6 +2383,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed Managers.get(AntiHack.class).resetIgnoredChecks(); getLifetime().end(); getStatTrackers().forEach(HandlerList::unregisterAll); + getQuestTrackers().forEach(HandlerList::unregisterAll); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java new file mode 100644 index 000000000..cf8b584f8 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java @@ -0,0 +1,43 @@ +package nautilus.game.arcade.quest; + +import java.util.ArrayList; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; + +/** + * CollectQuestTracker + * + * @author xXVevzZXx + */ +public class CollectQuestTracker extends QuestTracker +{ + private ArrayList _alreadyCounted; + + public CollectQuestTracker(Game game) + { + super(game, TriggerType.COLLECT); + + _alreadyCounted = new ArrayList<>(); + } + + @EventHandler + public void collectItem(InventoryClickEvent event) + { + if (event.getClickedInventory() instanceof PlayerInventory) + return; + + System.out.println(event.getCurrentItem().getType().toString()); + _alreadyCounted.add(event.getCurrentItem()); + + incrementQuests((Player) event.getWhoClicked(), event.getCurrentItem().getType().toString(), 1); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/KillQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/KillQuestTracker.java new file mode 100644 index 000000000..b4e82c4dc --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/KillQuestTracker.java @@ -0,0 +1,39 @@ +package nautilus.game.arcade.quest; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; + +/** + * WInQuestTracker + * + * @author xXVevzZXx + */ +public class KillQuestTracker extends QuestTracker +{ + + public KillQuestTracker(Game game) + { + super(game, TriggerType.WIN); + } + + @EventHandler + public void onKil(EntityDamageByEntityEvent event) + { + if (!(event.getDamager() instanceof Player)) + return; + + if (!(event.getEntity() instanceof Player)) + return; + + if (((Player) event.getEntity()).getHealth() > 0) + return; + + incrementQuests((Player) event.getDamager(), 1); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java new file mode 100644 index 000000000..c6ec9d2d1 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java @@ -0,0 +1,74 @@ +package nautilus.game.arcade.quest; + +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +import mineplex.core.game.GameDisplay; +import mineplex.core.quests.Quest; +import mineplex.core.quests.QuestClientData; +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; + +/** + * QuestTracker + * + * @author xXVevzZXx + */ +public class QuestTracker implements Listener +{ + private Game _game; + private TriggerType _trigger; + + public QuestTracker(Game game, TriggerType type) + { + _game = game; + _trigger = type; + } + + public Game getGame() + { + return _game; + } + + public boolean canProgressQuests() + { + return getGame().CanProgressQuests; + } + + public void incrementQuests(Player player, int value) + { + incrementQuests(player, "", value); + } + + public void incrementQuests(Player player, String item, int value) + { + if (canProgressQuests()) + { + for (Quest quest : getGame().getArcadeManager().getQuestManager().getAvailableQuests()) + { + if (getGame().GetType().getDisplay() != quest.getGame()) + continue; + + if (quest.getTrigger() != _trigger) + continue; + + if (!quest.getItem().equalsIgnoreCase(item)) + continue; + + QuestClientData data = _game.getArcadeManager().getQuestManager().Get(player); + if (!data.hasQuest(quest)) + continue; + + Quest toProgress = data.getQuest(quest.getID()); + + _game.getArcadeManager().getQuestManager().incrementQuest(_game.getArcadeManager().GetClients().Get(player), toProgress, value); + } + } + } + + public TriggerType getTrigger() + { + return _trigger; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/WinQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/WinQuestTracker.java new file mode 100644 index 000000000..183ee7f60 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/WinQuestTracker.java @@ -0,0 +1,37 @@ +package nautilus.game.arcade.quest; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; + +/** + * WinQuestTracker + * + * @author xXVevzZXx + */ +public class WinQuestTracker extends QuestTracker +{ + + public WinQuestTracker(Game game) + { + super(game, TriggerType.WIN); + } + + @EventHandler + public void onWin(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + return; + + for (Player player : getGame().getWinners()) + { + incrementQuests(player, 1); + } + } + +} diff --git a/Plugins/mineplex-google-sheets/src/mineplex/googlesheets/SpreadsheetType.java b/Plugins/mineplex-google-sheets/src/mineplex/googlesheets/SpreadsheetType.java index af2acf11c..7c14a68b4 100644 --- a/Plugins/mineplex-google-sheets/src/mineplex/googlesheets/SpreadsheetType.java +++ b/Plugins/mineplex-google-sheets/src/mineplex/googlesheets/SpreadsheetType.java @@ -8,6 +8,8 @@ public enum SpreadsheetType GEM_HUNTERS_CHESTS("11Noztgbpu_gUKkc5F4evKKfyxS-Jv1coE0IrBToX_gg"), GEM_HUNTERS_SHOP("1OcYktxVZaW6Fm29Zh6w4Lb-UVyuN8r1x-TFb_3USYYI"), + + QUESTS_SHEET("1Gy1a7GCVopmOLwYE3Sk1DNVCAIwT8ReaLu4wRe0sfDE") ; private String _id;