mirror of
https://github.com/PikaMug/Quests.git
synced 2025-03-12 06:40:32 +01:00
Add objective update API events, part 3. Fixes #1501
This commit is contained in:
parent
c4aa648448
commit
557bcfd6d6
@ -177,28 +177,30 @@ public abstract class CustomObjective implements Listener {
|
||||
}
|
||||
}
|
||||
if (index > -1) {
|
||||
final int progress = quester.getQuestData(quest).customObjectiveCounts.get(obj.getName());
|
||||
final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index);
|
||||
|
||||
final ObjectiveType type = ObjectiveType.CUSTOM;
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(quester, quest, type);
|
||||
= new QuesterPreUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index);
|
||||
if (quester.getQuestData(quest).customObjectiveCounts.get(obj.getName()) >= goal) {
|
||||
quester.finishObjective(quest, type, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, goal), null, null, null, null, null, null, null, obj);
|
||||
if (progress >= goal) {
|
||||
quester.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, null, obj);
|
||||
|
||||
// Multiplayer
|
||||
quester.dispatchMultiplayerObjectives(quest, quester.getCurrentStage(quest), (final Quester q) -> {
|
||||
q.getQuestData(quest).customObjectiveCounts.put(obj.getName(),
|
||||
quester.getQuestData(quest).customObjectiveCounts.get(obj.getName()));
|
||||
q.finishObjective(quest, type, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, goal), null, null, null, null, null, null, null, obj);
|
||||
q.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, null, obj);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(quester, quest, type);
|
||||
= new QuesterPostUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
}
|
||||
}
|
||||
|
50
main/src/main/java/me/blackvein/quests/Objective.java
Normal file
50
main/src/main/java/me/blackvein/quests/Objective.java
Normal file
@ -0,0 +1,50 @@
|
||||
package me.blackvein.quests;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
|
||||
public class Objective {
|
||||
private final ObjectiveType type;
|
||||
private final int progress;
|
||||
private final int goal;
|
||||
private final ItemStack progressStack;
|
||||
private final ItemStack goalStack;
|
||||
|
||||
|
||||
public Objective(final ObjectiveType type, final int progress, final int goal) {
|
||||
this.type = type;
|
||||
this.progress = progress;
|
||||
this.goal = goal;
|
||||
this.progressStack = null;
|
||||
this.goalStack = null;
|
||||
}
|
||||
|
||||
public Objective(final ObjectiveType type, final ItemStack progress, final ItemStack goal) {
|
||||
this.type = type;
|
||||
this.progress = progress.getAmount();
|
||||
this.goal = goal.getAmount();
|
||||
this.progressStack = progress;
|
||||
this.goalStack = goal;
|
||||
}
|
||||
|
||||
public ObjectiveType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getProgress() {
|
||||
return progress;
|
||||
}
|
||||
|
||||
public int getGoal() {
|
||||
return goal;
|
||||
}
|
||||
|
||||
public ItemStack getItemProgress() {
|
||||
return progressStack;
|
||||
}
|
||||
|
||||
public ItemStack getItemGoal() {
|
||||
return goalStack;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -26,6 +26,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.blackvein.quests.actions.Action;
|
||||
import me.blackvein.quests.conditions.Condition;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
|
||||
public class Stage {
|
||||
|
||||
@ -554,59 +555,72 @@ public class Stage {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if stage has the specified objective<p>
|
||||
* Check if stage has the specified type of objective<p>
|
||||
*
|
||||
* Accepted strings are: breakBlock, damageBlock, placeBlock, useBlock,
|
||||
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, milkCow, catchFish,
|
||||
* killMob, deliverItem, killPlayer, talkToNPC, killNPC, tameMob,
|
||||
* shearSheep, password, reachLocation
|
||||
*
|
||||
* @deprecated Use {@link #containsObjective(ObjectiveType)}
|
||||
*
|
||||
* @param type The type of objective to check for
|
||||
* @return true if stage contains specified objective
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean containsObjective(final String type) {
|
||||
if (type.equalsIgnoreCase("breakBlock")) {
|
||||
return containsObjective(ObjectiveType.fromName(type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if stage has the specified type of objective<p>
|
||||
*
|
||||
* @param type The type of objective to check for
|
||||
* @return true if stage contains specified objective
|
||||
*/
|
||||
public boolean containsObjective(final ObjectiveType type) {
|
||||
if (type.equals(ObjectiveType.BREAK_BLOCK)) {
|
||||
return !blocksToBreak.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("damageBlock")) {
|
||||
} else if (type.equals(ObjectiveType.DAMAGE_BLOCK)) {
|
||||
return !blocksToDamage.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("placeBlock")) {
|
||||
} else if (type.equals(ObjectiveType.PLACE_BLOCK)) {
|
||||
return !blocksToPlace.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("useBlock")) {
|
||||
} else if (type.equals(ObjectiveType.USE_BLOCK)) {
|
||||
return !blocksToUse.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("cutBlock")) {
|
||||
} else if (type.equals(ObjectiveType.CUT_BLOCK)) {
|
||||
return !blocksToCut.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("craftItem")) {
|
||||
} else if (type.equals(ObjectiveType.CRAFT_ITEM)) {
|
||||
return !itemsToCraft.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("smeltItem")) {
|
||||
} else if (type.equals(ObjectiveType.SMELT_ITEM)) {
|
||||
return !itemsToSmelt.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("enchantItem")) {
|
||||
} else if (type.equals(ObjectiveType.ENCHANT_ITEM)) {
|
||||
return !itemsToEnchant.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("brewItem")) {
|
||||
} else if (type.equals(ObjectiveType.BREW_ITEM)) {
|
||||
return !itemsToBrew.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("consumeItem")) {
|
||||
} else if (type.equals(ObjectiveType.CONSUME_ITEM)) {
|
||||
return !itemsToConsume.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("milkCow")) {
|
||||
return cowsToMilk != null;
|
||||
} else if (type.equalsIgnoreCase("catchFish")) {
|
||||
return fishToCatch != null;
|
||||
} else if (type.equalsIgnoreCase("killMob")) {
|
||||
return !mobsToKill.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("deliverItem")) {
|
||||
} else if (type.equals(ObjectiveType.DELIVER_ITEM)) {
|
||||
return !itemsToDeliver.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("killPlayer")) {
|
||||
} else if (type.equals(ObjectiveType.MILK_COW)) {
|
||||
return cowsToMilk != null;
|
||||
} else if (type.equals(ObjectiveType.CATCH_FISH)) {
|
||||
return fishToCatch != null;
|
||||
} else if (type.equals(ObjectiveType.KILL_MOB)) {
|
||||
return !mobsToKill.isEmpty();
|
||||
} else if (type.equals(ObjectiveType.KILL_PLAYER)) {
|
||||
return playersToKill != null;
|
||||
} else if (type.equalsIgnoreCase("talkToNPC")) {
|
||||
} else if (type.equals(ObjectiveType.TALK_TO_NPC)) {
|
||||
return !citizensToInteract.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("killNPC")) {
|
||||
} else if (type.equals(ObjectiveType.KILL_NPC)) {
|
||||
return !citizensToKill.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("tameMob")) {
|
||||
} else if (type.equals(ObjectiveType.TAME_MOB)) {
|
||||
return !mobsToTame.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("shearSheep")) {
|
||||
} else if (type.equals(ObjectiveType.SHEAR_SHEEP)) {
|
||||
return !sheepToShear.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("password")) {
|
||||
return !passwordPhrases.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("reachLocation")) {
|
||||
} else if (type.equals(ObjectiveType.REACH_LOCATION)) {
|
||||
return !locationsToReach.isEmpty();
|
||||
} else if (type.equals(ObjectiveType.PASSWORD)) {
|
||||
return !passwordPhrases.isEmpty();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -15,9 +15,9 @@ package me.blackvein.quests.events.quester;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import me.blackvein.quests.Objective;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
|
||||
/**
|
||||
* Called after a quester progresses an objective
|
||||
@ -25,13 +25,13 @@ import me.blackvein.quests.enums.ObjectiveType;
|
||||
public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
private final Quest quest;
|
||||
private final ObjectiveType type;
|
||||
private final Objective objective;
|
||||
private boolean cancel = false;
|
||||
|
||||
public QuesterPostUpdateObjectiveEvent(final Quester quester, final Quest quest, final ObjectiveType type) {
|
||||
public QuesterPostUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
|
||||
super(quester);
|
||||
this.quest = quest;
|
||||
this.type = type;
|
||||
this.objective = objective;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -44,12 +44,12 @@ public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Can
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of objective involved in this event
|
||||
* Returns the objective involved in this event
|
||||
*
|
||||
* @return Type which is involved in this event
|
||||
* @return Objective which is involved in this event
|
||||
*/
|
||||
public ObjectiveType getObjectiveType() {
|
||||
return type;
|
||||
public Objective getObjective() {
|
||||
return objective;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -15,9 +15,9 @@ package me.blackvein.quests.events.quester;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import me.blackvein.quests.Objective;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
|
||||
/**
|
||||
* Called before a quester progresses an objective
|
||||
@ -25,13 +25,13 @@ import me.blackvein.quests.enums.ObjectiveType;
|
||||
public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
private final Quest quest;
|
||||
private final ObjectiveType type;
|
||||
private final Objective objective;
|
||||
private boolean cancel = false;
|
||||
|
||||
public QuesterPreUpdateObjectiveEvent(final Quester quester, final Quest quest, final ObjectiveType type) {
|
||||
public QuesterPreUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
|
||||
super(quester);
|
||||
this.quest = quest;
|
||||
this.type = type;
|
||||
this.objective = objective;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -44,12 +44,12 @@ public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Canc
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of objective involved in this event
|
||||
* Returns the objective involved in this event
|
||||
*
|
||||
* @return Type which is involved in this event
|
||||
* @return Objective which is involved in this event
|
||||
*/
|
||||
public ObjectiveType getObjectiveType() {
|
||||
return type;
|
||||
public Objective getObjective() {
|
||||
return objective;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -31,6 +31,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
|
||||
public class BlockListener implements Listener {
|
||||
@ -49,13 +50,16 @@ public class BlockListener implements Listener {
|
||||
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
|
||||
.getData().toItemStack().getDurability());
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType breakType = ObjectiveType.BREAK_BLOCK;
|
||||
final ObjectiveType placeType = ObjectiveType.PLACE_BLOCK;
|
||||
final ObjectiveType cutType = ObjectiveType.CUT_BLOCK;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (evt.isCancelled() == false) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("breakBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(breakType)) {
|
||||
if (quest.getOptions().canIgnoreSilkTouch()
|
||||
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
|
||||
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
|
||||
@ -64,7 +68,7 @@ public class BlockListener implements Listener {
|
||||
quester.breakBlock(quest, blockItemStack);
|
||||
}
|
||||
}
|
||||
quester.dispatchMultiplayerEverything(quest, "breakBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, breakType, (final Quester q) -> {
|
||||
if (quest.getOptions().canIgnoreSilkTouch()
|
||||
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
|
||||
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
|
||||
@ -75,7 +79,7 @@ public class BlockListener implements Listener {
|
||||
return null;
|
||||
});
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("placeBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(placeType)) {
|
||||
for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
final int index = quester.getQuestData(quest).blocksPlaced.indexOf(is);
|
||||
@ -84,7 +88,7 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, placeType, (final Quester q) -> {
|
||||
for (final ItemStack is : q.getQuestData(quest).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
final int index = q.getQuestData(quest).blocksPlaced.indexOf(is);
|
||||
@ -95,12 +99,12 @@ public class BlockListener implements Listener {
|
||||
return null;
|
||||
});
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("cutBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(cutType)) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
quester.cutBlock(quest, blockItemStack);
|
||||
}
|
||||
}
|
||||
quester.dispatchMultiplayerEverything(quest, "cutBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, cutType, (final Quester q) -> {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
q.cutBlock(quest, blockItemStack);
|
||||
}
|
||||
@ -119,17 +123,18 @@ public class BlockListener implements Listener {
|
||||
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
|
||||
.getData().toItemStack().getDurability());
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.DAMAGE_BLOCK;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("damageBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.damageBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.placeBlock(quest, blockItemStack);
|
||||
return null;
|
||||
});
|
||||
@ -145,6 +150,7 @@ public class BlockListener implements Listener {
|
||||
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
|
||||
.getData().toItemStack().getDurability());
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.PLACE_BLOCK;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (evt.isCancelled() == false) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
@ -152,11 +158,11 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("placeBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.placeBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.placeBlock(quest, blockItemStack);
|
||||
return null;
|
||||
});
|
||||
@ -185,17 +191,18 @@ public class BlockListener implements Listener {
|
||||
if (evt.isCancelled() == false) {
|
||||
final ItemStack blockItemStack = new ItemStack(evt.getClickedBlock().getType(), 1, evt
|
||||
.getClickedBlock().getState().getData().toItemStack().getDurability());
|
||||
final ObjectiveType type = ObjectiveType.USE_BLOCK;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("useBlock")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.useBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "useBlock", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.useBlock(quest, blockItemStack);
|
||||
return null;
|
||||
});
|
||||
|
@ -28,6 +28,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
|
||||
public class ItemListener implements Listener {
|
||||
|
||||
@ -44,17 +45,18 @@ public class ItemListener implements Listener {
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final ItemStack craftedItem = getCraftedItem(evt);
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CRAFT_ITEM;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("craftItem")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.craftItem(quest, craftedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "craftItem", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.craftItem(quest, craftedItem);
|
||||
return null;
|
||||
});
|
||||
@ -88,17 +90,18 @@ public class ItemListener implements Listener {
|
||||
|| evt.getInventory().getType().name().equals("SMOKER")) {
|
||||
if (evt.getSlotType() == SlotType.RESULT) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.SMELT_ITEM;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("smeltItem")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.smeltItem(quest, evt.getCurrentItem());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "smeltItem", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.smeltItem(quest, evt.getCurrentItem());
|
||||
return null;
|
||||
});
|
||||
@ -107,17 +110,18 @@ public class ItemListener implements Listener {
|
||||
} else if (evt.getInventory().getType() == InventoryType.BREWING) {
|
||||
if (evt.getSlotType() == SlotType.CRAFTING) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.BREW_ITEM;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("brewItem")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.brewItem(quest, evt.getCurrentItem());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "brewItem", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.brewItem(quest, evt.getCurrentItem());
|
||||
return null;
|
||||
});
|
||||
@ -138,17 +142,18 @@ public class ItemListener implements Listener {
|
||||
// Ignore
|
||||
}
|
||||
final Quester quester = plugin.getQuester(evt.getEnchanter().getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.ENCHANT_ITEM;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("enchantItem")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.enchantItem(quest, enchantedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "enchantItem", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
quester.enchantItem(quest, enchantedItem);
|
||||
return null;
|
||||
});
|
||||
@ -163,17 +168,18 @@ public class ItemListener implements Listener {
|
||||
final ItemStack consumedItem = evt.getItem().clone();
|
||||
consumedItem.setAmount(1);
|
||||
final Quester quester = plugin.getQuester(evt.getPlayer().getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CONSUME_ITEM;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("consumeItem")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.consumeItem(quest, consumedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "consumeItem", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
quester.consumeItem(quest, consumedItem);
|
||||
return null;
|
||||
});
|
||||
|
@ -34,6 +34,7 @@ import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
import me.blackvein.quests.util.ItemUtil;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
import me.blackvein.quests.util.RomanNumeral;
|
||||
@ -68,7 +69,8 @@ public class NpcListener implements Listener {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
boolean delivery = false;
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (quester.getCurrentStage(quest).containsObjective("deliverItem") && player.getItemInHand() != null) {
|
||||
if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.DELIVER_ITEM)
|
||||
&& player.getItemInHand() != null) {
|
||||
final ItemStack hand = player.getItemInHand();
|
||||
int currentIndex = -1;
|
||||
final LinkedList<Integer> matches = new LinkedList<Integer>();
|
||||
@ -191,7 +193,7 @@ public class NpcListener implements Listener {
|
||||
if (plugin.getQuestNpcs().contains(evt.getNPC()) && delivery == false) {
|
||||
boolean hasObjective = false;
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (quester.getCurrentStage(quest).containsObjective("talkToNPC")) {
|
||||
if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.TALK_TO_NPC)) {
|
||||
if (quester.getQuestData(quest) != null
|
||||
&& quester.getQuestData(quest).citizensInteracted.containsKey(evt.getNPC().getId())
|
||||
&& quester.getQuestData(quest).citizensInteracted.get(evt.getNPC().getId()) == false) {
|
||||
@ -255,74 +257,6 @@ public class NpcListener implements Listener {
|
||||
} else if (npcQuests.isEmpty()) {
|
||||
evt.getClicker().sendMessage(ChatColor.YELLOW + Lang.get(player, "noMoreQuest"));
|
||||
}
|
||||
|
||||
/*if (!quester.getCompletedQuests().contains(q.getName())) {
|
||||
if (quester.getCurrentQuests().size() < plugin.getSettings().getMaxQuests()
|
||||
|| plugin.getSettings().getMaxQuests() < 1) {
|
||||
quester.setQuestToTake(q.getName());
|
||||
if (!plugin.getSettings().canAskConfirmation()) {
|
||||
quester.takeQuest(q, false);
|
||||
} else {
|
||||
if (q.getGUIDisplay() != null) {
|
||||
quester.showGUIDisplay(evt.getNPC(), npcQuests);
|
||||
} else {
|
||||
for (String msg : extracted(quester).split("<br>")) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
plugin.getConversationFactory().buildConversation((Conversable) player).begin();
|
||||
}
|
||||
}
|
||||
} else if (quester.getCurrentQuests().containsKey(q) == false) {
|
||||
String msg = Lang.get(player, "questMaxAllowed");
|
||||
msg = msg.replace("<number>", String.valueOf(plugin.getSettings().getMaxQuests()));
|
||||
player.sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
} else if (quester.getCurrentQuests().size() < plugin.getSettings().getMaxQuests()
|
||||
|| plugin.getSettings().getMaxQuests() < 1) {
|
||||
if (quester.getCooldownDifference(q) > 0) {
|
||||
String early = Lang.get(player, "questTooEarly");
|
||||
early = early.replace("<quest>", ChatColor.AQUA + q.getName() + ChatColor.YELLOW);
|
||||
early = early.replace("<time>", ChatColor.DARK_PURPLE
|
||||
+ MiscUtil.getTime(quester.getCooldownDifference(q)) + ChatColor.YELLOW);
|
||||
player.sendMessage(ChatColor.YELLOW + early);
|
||||
} else if (q.getPlanner().getCooldown() < 0) {
|
||||
String completed = Lang.get(player, "questAlreadyCompleted");
|
||||
completed = completed.replace("<quest>", ChatColor.AQUA + q.getName()
|
||||
+ ChatColor.YELLOW);
|
||||
player.sendMessage(ChatColor.YELLOW + completed);
|
||||
} else {
|
||||
quester.setQuestToTake(q.getName());
|
||||
if (!plugin.getSettings().canAskConfirmation()) {
|
||||
quester.takeQuest(q, false);
|
||||
} else {
|
||||
if (q.getGUIDisplay() != null) {
|
||||
quester.showGUIDisplay(evt.getNPC(), npcQuests);
|
||||
} else {
|
||||
for (String msg : extracted(quester).split("<br>")) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
plugin.getConversationFactory().buildConversation((Conversable) player).begin();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (quester.getCurrentQuests().containsKey(q) == false) {
|
||||
String msg = Lang.get(player, "questMaxAllowed");
|
||||
msg = msg.replace("<number>", String.valueOf(plugin.getSettings().getMaxQuests()));
|
||||
player.sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
} else if (npcQuests.isEmpty() == false && npcQuests.size() > 1) {
|
||||
if (hasAtLeastOneGUI) {
|
||||
quester.showGUIDisplay(evt.getNPC(), npcQuests);
|
||||
} else {
|
||||
Conversation c = plugin.getNpcConversationFactory().buildConversation(player);
|
||||
c.getContext().setSessionData("npcQuests", npcQuests);
|
||||
c.getContext().setSessionData("npc", evt.getNPC().getName());
|
||||
c.begin();
|
||||
}
|
||||
return;
|
||||
} else if (npcQuests.isEmpty()) {
|
||||
evt.getClicker().sendMessage(ChatColor.YELLOW + Lang.get(player, "noMoreQuest"));
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -355,6 +289,7 @@ public class NpcListener implements Listener {
|
||||
= (EntityDamageByEntityEvent) evt.getNPC().getEntity().getLastDamageCause();
|
||||
final Entity damager = damageEvent.getDamager();
|
||||
if (damager != null) {
|
||||
final ObjectiveType type = ObjectiveType.KILL_NPC;
|
||||
if (damager instanceof Projectile) {
|
||||
if (evt.getNPC().getEntity().getLastDamageCause().getEntity() instanceof Player) {
|
||||
final Player player = (Player) evt.getNPC().getEntity().getLastDamageCause().getEntity();
|
||||
@ -367,7 +302,7 @@ public class NpcListener implements Listener {
|
||||
if (okay) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (quester.getCurrentStage(quest).containsObjective("killNPC")) {
|
||||
if (quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killNPC(quest, evt.getNPC());
|
||||
}
|
||||
}
|
||||
@ -384,7 +319,7 @@ public class NpcListener implements Listener {
|
||||
final Player player = (Player) damager;
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (quester.getCurrentStage(quest).containsObjective("killNPC")) {
|
||||
if (quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killNPC(quest, evt.getNPC());
|
||||
}
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.Stage;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
import me.blackvein.quests.util.ItemUtil;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
import me.blackvein.quests.util.MiscUtil;
|
||||
@ -392,17 +393,18 @@ public class PlayerListener implements Listener {
|
||||
final Player player = evt.getPlayer();
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.MILK_COW;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("milkCow")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.milkCow(quest);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "milkCow", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.milkCow(quest);
|
||||
return null;
|
||||
});
|
||||
@ -445,15 +447,16 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (quester.getCurrentStage(quest).containsObjective("password")) {
|
||||
final ObjectiveType type = ObjectiveType.PASSWORD;
|
||||
if (quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.sayPassword(quest, evt);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.sayPassword(quest, evt);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "password", (final Quester q) -> {
|
||||
q.sayPassword(quest, evt);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -505,17 +508,18 @@ public class PlayerListener implements Listener {
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Sheep sheep = (Sheep) evt.getEntity();
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.SHEAR_SHEEP;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("shearSheep")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.shearSheep(quest, sheep.getColor());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "shearSheep", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.shearSheep(quest, sheep.getColor());
|
||||
return null;
|
||||
});
|
||||
@ -530,17 +534,18 @@ public class PlayerListener implements Listener {
|
||||
final Player player = (Player) evt.getOwner();
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.TAME_MOB;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("tameMob")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.tameMob(quest, evt.getEntityType());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "tameMob", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.tameMob(quest, evt.getEntityType());
|
||||
return null;
|
||||
});
|
||||
@ -596,33 +601,35 @@ public class PlayerListener implements Listener {
|
||||
if (damager instanceof Player) {
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().isNPC(target)) {
|
||||
final ObjectiveType type = ObjectiveType.KILL_NPC;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("killNPC")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "killNPC", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
final ObjectiveType type = ObjectiveType.KILL_MOB;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("killMob")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killMob(quest, target.getLocation(), target.getType());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "killMob", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.killMob(quest, target.getLocation(), target.getType());
|
||||
return null;
|
||||
});
|
||||
@ -713,17 +720,18 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.KILL_PLAYER;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("killPlayer")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killPlayer(quest, (Player)target);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "killPlayer", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.killPlayer(quest, (Player)target);
|
||||
return null;
|
||||
});
|
||||
@ -736,18 +744,19 @@ public class PlayerListener implements Listener {
|
||||
final Player player = evt.getPlayer();
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CATCH_FISH;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("catchFish")
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)
|
||||
&& evt.getState().equals(State.CAUGHT_FISH)) {
|
||||
quester.catchFish(quest);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "catchFish", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
q.catchFish(quest);
|
||||
return null;
|
||||
});
|
||||
@ -906,6 +915,7 @@ public class PlayerListener implements Listener {
|
||||
final Quester quester = plugin.getQuester(uuid);
|
||||
if (quester != null) {
|
||||
if (plugin.canUseQuests(uuid)) {
|
||||
final ObjectiveType type = ObjectiveType.REACH_LOCATION;
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, false)) {
|
||||
return;
|
||||
@ -913,7 +923,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)) {
|
||||
if (quester.getCurrentStage(quest) != null
|
||||
&& quester.getCurrentStage(quest).containsObjective("reachLocation")) {
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@ -923,7 +933,7 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "reachLocation", (final Quester q) -> {
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
|
||||
plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
Loading…
Reference in New Issue
Block a user