Add Quest triggers, add a Repository, add Spreadsheet parsing, and add menus.

This commit is contained in:
Sarah 2017-05-05 23:02:15 +02:00
parent 8d32c35f88
commit 20281648c2
20 changed files with 1207 additions and 301 deletions

View File

@ -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);
}
}

View File

@ -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<Quest> _quests = new ArrayList<>();
public QuestClientData(Player player)
public void addQuest(Quest quest)
{
_quests.add(quest);
}
public ArrayList<Quest> 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);
}
}

View File

@ -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<QuestClientData>
{
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<Quest> _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<String, List<List<String>>> sheet = _sheetsManager.getSheetData(GOOGLE_SHEET);
List<List<String>> 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<Integer, Integer, Long> 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<Quest> getAvailableQuests()
{
return _availableQuests;
}
}

View File

@ -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<QuestManager>
{
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);
}
}

View File

@ -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<String, ArrayList<Triple<Integer, Integer, Long>>> _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<Triple<Integer, Integer, Long>> getQuests(CoreClient client)
{
player(client.GetPlayer());
// ArrayList<Triple<Integer, Integer, Long>> 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<Integer, Integer, Long> toAdd = null;
ArrayList<Triple<Integer, Integer, Long>> liste = _db.get(client.GetPlayer().getUniqueId().toString());
Iterator<Triple<Integer, Integer, Long>> iterator = liste.iterator();
while (iterator.hasNext())
{
Triple<Integer, Integer, Long> 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<Integer, Integer, Long> toAdd = null;
ArrayList<Triple<Integer, Integer, Long>> liste = _db.get(client.GetPlayer().getUniqueId().toString());
Iterator<Triple<Integer, Integer, Long>> iterator = liste.iterator();
while (iterator.hasNext())
{
Triple<Integer, Integer, Long> 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);
}
}

View File

@ -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()));
}
}

View File

@ -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<QuestManager, QuestShop>
{
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;
}
}

View File

@ -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);
}
}

View File

@ -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<QuestManager>
{
public QuestShop(QuestManager plugin, CoreClientManager clientManager, DonationManager donationManager)
{
super(plugin, clientManager, donationManager, "Quest Shop");
}
@Override
protected ShopPageBase<QuestManager, ? extends ShopBase<QuestManager>> buildPagesFor(Player player)
{
return new QuestPage(getPlugin(), this, getClientManager(), getDonationManager(), player);
}
public QuestManager getQuestManager()
{
return getPlugin();
}
}

View File

@ -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);
}
}
}

View File

@ -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<mineplex.database.tables.records.AccountQuestRecord> implements java.io.Serializable, java.lang.Cloneable
public class AccountQuest //extends TableImpl<mineplex.database.tables.records.AccountQuestRecord> implements java.io.Serializable, java.lang.Cloneable
{
/**
*
*/
private static final long serialVersionUID = -8158716179851336044L;
/**
* The reference instance of <code>Account.accountStat</code>
*/
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<mineplex.database.tables.records.AccountQuestRecord> getRecordType() {
return mineplex.database.tables.records.AccountQuestRecord.class;
}
/**
* The column <code>Account.accountStat.accountId</code>.
*/
public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, java.lang.Integer> accountId = createField("accountId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>Account.accountStat.statId</code>.
*/
public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, java.lang.Integer> statId = createField("statId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>Account.accountStat.value</code>.
*/
public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, org.jooq.types.ULong> value = createField("value", org.jooq.impl.SQLDataType.BIGINTUNSIGNED.defaulted(true), this, "");
/**
* Create a <code>Account.accountStat</code> table reference
*/
public AccountQuest()
{
super("accountquest", null);
}
/**
* Create an aliased <code>Account.accountStat</code> table reference
*/
public AccountQuest(java.lang.String alias) {
this(alias, mineplex.database.tables.AccountQuest.accountStat);
}
private AccountQuest(java.lang.String alias, org.jooq.Table<mineplex.database.tables.records.AccountQuestRecord> aliased) {
this(alias, aliased, null);
}
private AccountQuest(java.lang.String alias, org.jooq.Table<mineplex.database.tables.records.AccountQuestRecord> aliased, org.jooq.Field<?>[] parameters) {
super(alias, mineplex.database.Account.Account, aliased, parameters, "");
}
/**
* {@inheritDoc}
*/
@Override
public org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord> getPrimaryKey() {
return mineplex.database.Keys.KEY_accountStat_PRIMARY;
}
/**
* {@inheritDoc}
*/
@Override
public java.util.List<org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord>> getKeys() {
return java.util.Arrays.<org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord>>asList(mineplex.database.Keys.KEY_accountStat_PRIMARY);
}
/**
* {@inheritDoc}
*/
@Override
public java.util.List<org.jooq.ForeignKey<mineplex.database.tables.records.AccountStatRecord, ?>> getReferences() {
return java.util.Arrays.<org.jooq.ForeignKey<mineplex.database.tables.records.AccountStatRecord, ?>>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 <code>Account.accountStat</code>
// */
// 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<mineplex.database.tables.records.AccountQuestRecord> getRecordType() {
// return mineplex.database.tables.records.AccountQuestRecord.class;
// }
//
// /**
// * The column <code>Account.accountStat.accountId</code>.
// */
// public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, java.lang.Integer> accountId = createField("accountId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
//
// /**
// * The column <code>Account.accountStat.statId</code>.
// */
// public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, java.lang.Integer> statId = createField("statId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
//
// /**
// * The column <code>Account.accountStat.value</code>.
// */
// public final org.jooq.TableField<mineplex.database.tables.records.AccountQuestRecord, org.jooq.types.ULong> value = createField("value", org.jooq.impl.SQLDataType.BIGINTUNSIGNED.defaulted(true), this, "");
//
// /**
// * Create a <code>Account.accountStat</code> table reference
// */
// public AccountQuest()
// {
// super("accountquest", null);
// }
//
// /**
// * Create an aliased <code>Account.accountStat</code> table reference
// */
// public AccountQuest(java.lang.String alias) {
// this(alias, mineplex.database.tables.AccountQuest.accountStat);
// }
//
// private AccountQuest(java.lang.String alias, org.jooq.Table<mineplex.database.tables.records.AccountQuestRecord> aliased) {
// this(alias, aliased, null);
// }
//
// private AccountQuest(java.lang.String alias, org.jooq.Table<mineplex.database.tables.records.AccountQuestRecord> aliased, org.jooq.Field<?>[] parameters) {
// super(alias, mineplex.database.Account.Account, aliased, parameters, "");
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord> getPrimaryKey() {
// return mineplex.database.Keys.KEY_accountStat_PRIMARY;
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public java.util.List<org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord>> getKeys() {
// return java.util.Arrays.<org.jooq.UniqueKey<mineplex.database.tables.records.AccountStatRecord>>asList(mineplex.database.Keys.KEY_accountStat_PRIMARY);
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public java.util.List<org.jooq.ForeignKey<mineplex.database.tables.records.AccountStatRecord, ?>> getReferences() {
// return java.util.Arrays.<org.jooq.ForeignKey<mineplex.database.tables.records.AccountStatRecord, ?>>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);
// }
}

View File

@ -7,196 +7,196 @@ import org.jooq.Table;
*
* @author xXVevzZXx
*/
public class AccountQuestRecord extends org.jooq.impl.UpdatableRecordImpl<mineplex.database.tables.records.AccountQuestRecord> implements java.io.Serializable, java.lang.Cloneable, org.jooq.Record3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong>
public class AccountQuestRecord //extends org.jooq.impl.UpdatableRecordImpl<mineplex.database.tables.records.AccountQuestRecord> implements java.io.Serializable, java.lang.Cloneable, org.jooq.Record3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong>
{
/**
*
*/
private static final long serialVersionUID = 5171965369180094201L;
public AccountQuestRecord(Table<AccountQuestRecord> table)
{
super(table);
}
/**
* Setter for <code>Account.accountStat.accountId</code>.
*/
public void setAccountId(java.lang.Integer value) {
setValue(0, value);
}
/**
* Getter for <code>Account.accountStat.accountId</code>.
*/
public java.lang.Integer getAccountId() {
return (java.lang.Integer) getValue(0);
}
/**
* Setter for <code>Account.accountStat.statId</code>.
*/
public void setStatId(java.lang.Integer value) {
setValue(1, value);
}
/**
* Getter for <code>Account.accountStat.statId</code>.
*/
public java.lang.Integer getStatId() {
return (java.lang.Integer) getValue(1);
}
/**
* Setter for <code>Account.accountStat.value</code>.
*/
public void setValue(org.jooq.types.ULong value) {
setValue(2, value);
}
/**
* Getter for <code>Account.accountStat.value</code>.
*/
public org.jooq.types.ULong getValue() {
return (org.jooq.types.ULong) getValue(2);
}
// -------------------------------------------------------------------------
// Primary key information
// -------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Record2<java.lang.Integer, java.lang.Integer> key() {
return (org.jooq.Record2) super.key();
}
// -------------------------------------------------------------------------
// Record3 type implementation
// -------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Row3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong> fieldsRow() {
return (org.jooq.Row3) super.fieldsRow();
}
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Row3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong> valuesRow() {
return (org.jooq.Row3) super.valuesRow();
}
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Field<java.lang.Integer> field1() {
return mineplex.database.tables.AccountStat.accountStat.accountId;
}
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Field<java.lang.Integer> field2() {
return mineplex.database.tables.AccountStat.accountStat.statId;
}
/**
* {@inheritDoc}
*/
@Override
public org.jooq.Field<org.jooq.types.ULong> 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<AccountQuestRecord> table)
// {
// super(table);
// }
//
// /**
// * Setter for <code>Account.accountStat.accountId</code>.
// */
// public void setAccountId(java.lang.Integer value) {
// setValue(0, value);
// }
//
// /**
// * Getter for <code>Account.accountStat.accountId</code>.
// */
// public java.lang.Integer getAccountId() {
// return (java.lang.Integer) getValue(0);
// }
//
// /**
// * Setter for <code>Account.accountStat.statId</code>.
// */
// public void setStatId(java.lang.Integer value) {
// setValue(1, value);
// }
//
// /**
// * Getter for <code>Account.accountStat.statId</code>.
// */
// public java.lang.Integer getStatId() {
// return (java.lang.Integer) getValue(1);
// }
//
// /**
// * Setter for <code>Account.accountStat.value</code>.
// */
// public void setValue(org.jooq.types.ULong value) {
// setValue(2, value);
// }
//
// /**
// * Getter for <code>Account.accountStat.value</code>.
// */
// public org.jooq.types.ULong getValue() {
// return (org.jooq.types.ULong) getValue(2);
// }
//
// // -------------------------------------------------------------------------
// // Primary key information
// // -------------------------------------------------------------------------
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Record2<java.lang.Integer, java.lang.Integer> key() {
// return (org.jooq.Record2) super.key();
// }
//
// // -------------------------------------------------------------------------
// // Record3 type implementation
// // -------------------------------------------------------------------------
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Row3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong> fieldsRow() {
// return (org.jooq.Row3) super.fieldsRow();
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Row3<java.lang.Integer, java.lang.Integer, org.jooq.types.ULong> valuesRow() {
// return (org.jooq.Row3) super.valuesRow();
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Field<java.lang.Integer> field1() {
// return mineplex.database.tables.AccountStat.accountStat.accountId;
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Field<java.lang.Integer> field2() {
// return mineplex.database.tables.AccountStat.accountStat.statId;
// }
//
// /**
// * {@inheritDoc}
// */
// @Override
// public org.jooq.Field<org.jooq.types.ULong> 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);
// }
}

View File

@ -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<HubClient> implements IChatMessageFormatter
{
@ -175,6 +177,7 @@ public class HubManager extends MiniClientPlugin<HubClient> 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<HubClient> 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<HubClient> implements IChatMess
{
return _jumpManager;
}
public QuestManager getQuestManager()
{
return _questManager;
}
}

View File

@ -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;
}
}

View File

@ -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<String, Long> _deadBodiesExpire = new NautHashMap<String, Long>();
private final Set<StatTracker<? extends Game>> _statTrackers = new HashSet<>();
private final Set<QuestTracker> _questTrackers = new HashSet<>();
private NautHashMap<Player, Player> _teamReqs = new NautHashMap<Player, Player>();
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<QuestTracker> 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

View File

@ -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<ItemStack> _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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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;