mirror of
https://github.com/PikaMug/Quests.git
synced 2024-12-27 11:37:51 +01:00
NEW item consuming objective, fixes #1226
This commit is contained in:
parent
98d50f4f91
commit
9fc272c262
@ -398,6 +398,41 @@ public class QuestData {
|
||||
}
|
||||
};
|
||||
|
||||
public LinkedHashMap<ItemStack, Integer> itemsConsumed = new LinkedHashMap<ItemStack, Integer>() {
|
||||
|
||||
private static final long serialVersionUID = -5475073316902757883L;
|
||||
|
||||
@Override
|
||||
public Integer put(ItemStack key, Integer val) {
|
||||
Integer data = super.put(key, val);
|
||||
if (doJournalUpdate)
|
||||
quester.updateJournal();
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer remove(Object key) {
|
||||
Integer i = super.remove(key);
|
||||
if (doJournalUpdate)
|
||||
quester.updateJournal();
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
super.clear();
|
||||
if (doJournalUpdate)
|
||||
quester.updateJournal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putAll(Map<? extends ItemStack, ? extends Integer> m) {
|
||||
super.putAll(m);
|
||||
if (doJournalUpdate)
|
||||
quester.updateJournal();
|
||||
}
|
||||
};
|
||||
|
||||
public LinkedList<ItemStack> itemsDelivered = new LinkedList<ItemStack>() {
|
||||
|
||||
private static final long serialVersionUID = 2712497347022734646L;
|
||||
|
@ -377,6 +377,13 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
}
|
||||
context.setSessionData(pref + CK.S_BREW_ITEMS, items);
|
||||
}
|
||||
if (!stage.getItemsToConsume().isEmpty()) {
|
||||
LinkedList<ItemStack> items = new LinkedList<ItemStack>();
|
||||
for (ItemStack is : stage.getItemsToConsume()) {
|
||||
items.add(is);
|
||||
}
|
||||
context.setSessionData(pref + CK.S_CONSUME_ITEMS, items);
|
||||
}
|
||||
if (stage.getCowsToMilk() != null) {
|
||||
context.setSessionData(pref + CK.S_COW_MILK, stage.getCowsToMilk());
|
||||
}
|
||||
@ -705,6 +712,8 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
? (LinkedList<Integer>) context.getSessionData(pref + CK.S_ENCHANT_AMOUNTS) : null);
|
||||
stage.set("items-to-brew", context.getSessionData(pref + CK.S_BREW_ITEMS) != null
|
||||
? (LinkedList<ItemStack>) context.getSessionData(pref + CK.S_BREW_ITEMS) : null);
|
||||
stage.set("items-to-consume", context.getSessionData(pref + CK.S_CONSUME_ITEMS) != null
|
||||
? (LinkedList<ItemStack>) context.getSessionData(pref + CK.S_CONSUME_ITEMS) : null);
|
||||
stage.set("cows-to-milk", context.getSessionData(pref + CK.S_COW_MILK) != null
|
||||
? (Integer) context.getSessionData(pref + CK.S_COW_MILK) : null);
|
||||
stage.set("fish-to-catch", context.getSessionData(pref + CK.S_FISH) != null
|
||||
|
@ -946,6 +946,20 @@ public class Quester {
|
||||
finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + brewed + "/" + amt);
|
||||
}
|
||||
}
|
||||
for (ItemStack is : getCurrentStage(quest).itemsToConsume) {
|
||||
int consumed = 0;
|
||||
if (getQuestData(quest).itemsConsumed.containsKey(is)) {
|
||||
consumed = getQuestData(quest).itemsConsumed.get(is);
|
||||
}
|
||||
int amt = is.getAmount();
|
||||
if (consumed < amt) {
|
||||
String obj = Lang.get(getPlayer(), "consume") + " " + ItemUtil.getName(is);
|
||||
unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + consumed + "/" + amt);
|
||||
} else {
|
||||
String obj = Lang.get(getPlayer(), "consume") + " " + ItemUtil.getName(is);
|
||||
finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + consumed + "/" + amt);
|
||||
}
|
||||
}
|
||||
if (getCurrentStage(quest).cowsToMilk != null) {
|
||||
if (getQuestData(quest).getCowsMilked() < getCurrentStage(quest).cowsToMilk) {
|
||||
unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "milkCow") + ChatColor.GREEN + ": "
|
||||
@ -1212,9 +1226,9 @@ public class Quester {
|
||||
* Check if player's current stage has the specified 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
|
||||
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, consumeItem,
|
||||
* milkCow, catchFish, killMob, deliverItem, killPlayer, talkToNPC,
|
||||
* killNPC, tameMob, shearSheep, password, reachLocation
|
||||
*
|
||||
* @deprecated Use {@link Stage#containsObjective(String)}
|
||||
* @param quest The quest to check objectives of
|
||||
@ -1791,6 +1805,56 @@ public class Quester {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark item as consumed if Quester has such an objective
|
||||
*
|
||||
* @param quest The quest for which the item is being consumed
|
||||
* @param i The item being consumed
|
||||
*/
|
||||
public void consumeItem(Quest quest, ItemStack i) {
|
||||
Player player = getPlayer();
|
||||
ItemStack found = null;
|
||||
for (ItemStack is : getQuestData(quest).itemsConsumed.keySet()) {
|
||||
if (ItemUtil.compareItems(i, is, true) == 0) {
|
||||
found = is;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found != null) {
|
||||
int amount = getQuestData(quest).itemsConsumed.get(found);
|
||||
if (getCurrentStage(quest).itemsToConsume.indexOf(found) < 0) {
|
||||
plugin.getLogger().severe("Index out of bounds while consuming " + found.getType() + " x "
|
||||
+ found.getAmount() + " for quest " + quest.getName() + " with " + i.getType() + " x "
|
||||
+ i.getAmount() + " already consumed. List amount reports value of " + amount
|
||||
+ ". Please report this error on Github!");
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ "Quests had a problem consuming your item, please contact an administrator!");
|
||||
return;
|
||||
}
|
||||
int req = getCurrentStage(quest).itemsToConsume.get(getCurrentStage(quest).itemsToConsume.indexOf(found))
|
||||
.getAmount();
|
||||
Material m = i.getType();
|
||||
if (amount < req) {
|
||||
if ((i.getAmount() + amount) >= req) {
|
||||
getQuestData(quest).itemsConsumed.put(found, req);
|
||||
finishObjective(quest, "consumeItem", new ItemStack(m, 1), found, null, null, null, null, null, null,
|
||||
null, null);
|
||||
|
||||
// Multiplayer
|
||||
final ItemStack finalFound = found;
|
||||
dispatchMultiplayerObjectives(quest, getCurrentStage(quest), (Quester q) -> {
|
||||
q.getQuestData(quest).itemsConsumed.put(finalFound, req);
|
||||
q.finishObjective(quest, "consumeItem", new ItemStack(m, 1), finalFound, null, null, null, null,
|
||||
null, null, null, null);
|
||||
return null;
|
||||
});
|
||||
} else {
|
||||
getQuestData(quest).itemsConsumed.put(found, (amount + i.getAmount()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark cow as milked if Quester has such an objective
|
||||
*
|
||||
@ -2359,6 +2423,17 @@ public class Quester {
|
||||
} else {
|
||||
p.sendMessage(message.replace("<item>", ItemUtil.getName(is)));
|
||||
}
|
||||
} else if (objective.equalsIgnoreCase("consumeItem")) {
|
||||
ItemStack is = getCurrentStage(quest).itemsToConsume.get(getCurrentStage(quest).itemsToConsume
|
||||
.indexOf(goal));
|
||||
String message = ChatColor.GREEN + "(" + Lang.get(p, "completed") + ") " + Lang.get(p, "consume")
|
||||
+ " <item> " + is.getAmount() + "/" + is.getAmount();
|
||||
if (plugin.getSettings().canTranslateNames() && !goal.hasItemMeta()
|
||||
&& !goal.getItemMeta().hasDisplayName()) {
|
||||
plugin.getLocaleQuery().sendMessage(p, message, goal.getType(), goal.getDurability(), null);
|
||||
} else {
|
||||
p.sendMessage(message.replace("<item>", ItemUtil.getName(is)));
|
||||
}
|
||||
} else if (objective.equalsIgnoreCase("deliverItem")) {
|
||||
String obj = Lang.get(p, "deliver");
|
||||
obj = obj.replace("<npc>", plugin.getDependencies().getNPCName(getCurrentStage(quest).itemDeliveryTargets
|
||||
@ -2553,6 +2628,11 @@ public class Quester {
|
||||
data.itemsBrewed.put(is, 0);
|
||||
}
|
||||
}
|
||||
if (quest.getStage(stage).itemsToConsume.isEmpty() == false) {
|
||||
for (ItemStack is : quest.getStage(stage).itemsToConsume) {
|
||||
data.itemsConsumed.put(is, 0);
|
||||
}
|
||||
}
|
||||
if (quest.getStage(stage).mobsToKill.isEmpty() == false) {
|
||||
for (EntityType e : quest.getStage(stage).mobsToKill) {
|
||||
data.mobsKilled.add(e);
|
||||
@ -2782,6 +2862,13 @@ public class Quester {
|
||||
}
|
||||
questSec.set("item-brew-amounts", brewAmounts);
|
||||
}
|
||||
if (questData.itemsConsumed.isEmpty() == false) {
|
||||
LinkedList<Integer> consumeAmounts = new LinkedList<Integer>();
|
||||
for (Entry<ItemStack, Integer> e : questData.itemsConsumed.entrySet()) {
|
||||
consumeAmounts.add(e.getValue());
|
||||
}
|
||||
questSec.set("item-consume-amounts", consumeAmounts);
|
||||
}
|
||||
if (getCurrentStage(quest).cowsToMilk != null) {
|
||||
questSec.set("cows-milked", questData.getCowsMilked());
|
||||
}
|
||||
@ -3198,6 +3285,15 @@ public class Quester {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (questSec.contains("item-consume-amounts")) {
|
||||
List<Integer> consumeAmounts = questSec.getIntegerList("item-consume-amounts");
|
||||
for (int i = 0; i < consumeAmounts.size(); i++) {
|
||||
if (i < getCurrentStage(quest).itemsToConsume.size()) {
|
||||
getQuestData(quest).itemsConsumed.put(getCurrentStage(quest).itemsToConsume
|
||||
.get(i), consumeAmounts.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (questSec.contains("cows-milked")) {
|
||||
getQuestData(quest).setCowsMilked(questSec.getInt("cows-milked"));
|
||||
}
|
||||
@ -3696,9 +3792,9 @@ public class Quester {
|
||||
* Dispatch player event to fellow questers<p>
|
||||
*
|
||||
* Accepted strings are: breakBlock, damageBlock, placeBlock, useBlock,
|
||||
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, milkCow, catchFish,
|
||||
* killMob, deliverItem, killPlayer, talkToNPC, killNPC, tameMob,
|
||||
* shearSheep, password, reachLocation
|
||||
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, consumeItem,
|
||||
* milkCow, catchFish, killMob, deliverItem, killPlayer, talkToNPC,
|
||||
* killNPC, tameMob, shearSheep, password, reachLocation
|
||||
*
|
||||
* @param objectiveType The type of objective to progress
|
||||
* @param fun The function to execute, the event call
|
||||
|
@ -341,6 +341,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
return eventFactory;
|
||||
}
|
||||
|
||||
public BlockListener getBlockListener() {
|
||||
return blockListener;
|
||||
}
|
||||
|
||||
public ItemListener getItemListener() {
|
||||
return itemListener;
|
||||
}
|
||||
@ -896,6 +900,25 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
}
|
||||
}
|
||||
for (ItemStack is : stage.itemsToConsume) {
|
||||
int consumed = 0;
|
||||
if (data.itemsConsumed.containsKey(is)) {
|
||||
consumed = data.itemsConsumed.get(is);
|
||||
}
|
||||
int amt = is.getAmount();
|
||||
ChatColor color = consumed < amt ? ChatColor.GREEN : ChatColor.GRAY;
|
||||
String message = color + Lang.get(quester.getPlayer(), "consume") + " <item>"
|
||||
+ color + ": " + consumed + "/" + is.getAmount();
|
||||
if (depends.getPlaceholderApi() != null) {
|
||||
message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message);
|
||||
}
|
||||
if (getSettings().canTranslateNames() && !is.hasItemMeta() && !is.getItemMeta().hasDisplayName()) {
|
||||
localeQuery.sendMessage(quester.getPlayer(), message, is.getType(), is.getDurability(),
|
||||
is.getEnchantments());
|
||||
} else {
|
||||
quester.getPlayer().sendMessage(message.replace("<item>", ItemUtil.getName(is)));
|
||||
}
|
||||
}
|
||||
if (stage.cowsToMilk != null) {
|
||||
ChatColor color = data.getCowsMilked() < stage.cowsToMilk ? ChatColor.GREEN : ChatColor.GRAY;
|
||||
String message = color + Lang.get(quester.getPlayer(), "milkCow")
|
||||
@ -1914,6 +1937,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
List<Material> itemsToEnchant = new LinkedList<Material>();
|
||||
List<Integer> amountsToEnchant = new LinkedList<Integer>();
|
||||
List<ItemStack> itemsToBrew = new LinkedList<ItemStack>();
|
||||
List<ItemStack> itemsToConsume = new LinkedList<ItemStack>();
|
||||
List<Integer> npcIdsToTalkTo = new LinkedList<Integer>();
|
||||
List<ItemStack> itemsToDeliver= new LinkedList<ItemStack>();
|
||||
List<Integer> itemDeliveryTargetIds = new LinkedList<Integer>();
|
||||
@ -1924,7 +1948,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".script-to-run")) {
|
||||
if (getDependencies().getDenizenAPI().containsScript(config.getString("quests." + questKey
|
||||
+ ".stages.ordered." + stageNum + ".script-to-run"))) {
|
||||
oStage.script = config.getString("quests." + questKey + ".stages.ordered." + stageNum + ".script-to-run");
|
||||
oStage.script = config.getString("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".script-to-run");
|
||||
} else {
|
||||
throw new StageFormatException("script-to-run is not a valid Denizen script", quest, stageNum);
|
||||
}
|
||||
@ -1954,7 +1979,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
breakDurability = config.getShortList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".break-block-durability");
|
||||
} else {
|
||||
throw new StageFormatException("break-block-durability is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("break-block-durability is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("break-block-durability is missing", quest, stageNum);
|
||||
@ -1990,18 +2016,21 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
damageAmounts = config.getIntegerList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".damage-block-amounts");
|
||||
} else {
|
||||
throw new StageFormatException("damage-block-amounts is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("damage-block-amounts is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("damage-block-amounts is missing", quest, stageNum);
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".damage-block-durability")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".damage-block-durability")) {
|
||||
if (ConfigUtil.checkList(config.getList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".damage-block-durability"), Integer.class)) {
|
||||
damageDurability = config.getShortList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".damage-block-durability");
|
||||
} else {
|
||||
throw new StageFormatException("damage-block-durability is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("damage-block-durability is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("damage-block-durability is missing", quest, stageNum);
|
||||
@ -2049,7 +2078,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
placeDurability = config.getShortList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".place-block-durability");
|
||||
} else {
|
||||
throw new StageFormatException("place-block-durability is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("place-block-durability is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("place-block-durability is missing", quest, stageNum);
|
||||
@ -2096,7 +2126,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
useDurability = config.getShortList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".use-block-durability");
|
||||
} else {
|
||||
throw new StageFormatException("use-block-durability is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("use-block-durability is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("use-block-durability is missing", quest, stageNum);
|
||||
@ -2143,7 +2174,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
cutDurability = config.getShortList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".cut-block-durability");
|
||||
} else {
|
||||
throw new StageFormatException("cut-block-durability is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("cut-block-durability is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("cut-block-durability is missing", quest, stageNum);
|
||||
@ -2173,7 +2205,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (stack != null) {
|
||||
oStage.itemsToCraft.add(stack);
|
||||
} else {
|
||||
throw new StageFormatException("items-to-craft has invalid formatting " + stack, quest, stageNum);
|
||||
throw new StageFormatException("items-to-craft has invalid formatting "
|
||||
+ stack, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2186,7 +2219,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (is != null) {
|
||||
oStage.itemsToCraft.add(is);
|
||||
} else {
|
||||
throw new StageFormatException("Legacy items-to-craft has invalid formatting " + item, quest, stageNum);
|
||||
throw new StageFormatException("Legacy items-to-craft has invalid formatting "
|
||||
+ item, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2202,7 +2236,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (stack != null) {
|
||||
oStage.itemsToSmelt.add(stack);
|
||||
} else {
|
||||
throw new StageFormatException("items-to-smelt has invalid formatting " + stack, quest, stageNum);
|
||||
throw new StageFormatException("items-to-smelt has invalid formatting "
|
||||
+ stack, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2215,7 +2250,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (is != null) {
|
||||
oStage.itemsToSmelt.add(is);
|
||||
} else {
|
||||
throw new StageFormatException("Legacy items-to-smelt has invalid formatting " + item, quest, stageNum);
|
||||
throw new StageFormatException("Legacy items-to-smelt has invalid formatting "
|
||||
+ item, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2232,7 +2268,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (e != null) {
|
||||
enchantments.add(e);
|
||||
} else {
|
||||
throw new StageFormatException("enchantments has invalid enchantment " + enchant, quest, stageNum);
|
||||
throw new StageFormatException("enchantments has invalid enchantment "
|
||||
+ enchant, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2246,7 +2283,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (Material.matchMaterial(item) != null) {
|
||||
itemsToEnchant.add(Material.matchMaterial(item));
|
||||
} else {
|
||||
throw new StageFormatException("enchantment-item-names has invalid item name " + item, quest, stageNum);
|
||||
throw new StageFormatException("enchantment-item-names has invalid item name "
|
||||
+ item, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2275,7 +2313,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (stack != null) {
|
||||
oStage.itemsToBrew.add(stack);
|
||||
} else {
|
||||
throw new StageFormatException("items-to-brew has invalid formatting " + stack, quest, stageNum);
|
||||
throw new StageFormatException("items-to-brew has invalid formatting "
|
||||
+ stack, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2288,7 +2327,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (is != null) {
|
||||
oStage.itemsToBrew.add(is);
|
||||
} else {
|
||||
throw new StageFormatException("Legacy items-to-brew has invalid formatting " + item, quest, stageNum);
|
||||
throw new StageFormatException("Legacy items-to-brew has invalid formatting "
|
||||
+ item, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2296,8 +2336,23 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
}
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".items-to-consume")) {
|
||||
itemsToConsume = (List<ItemStack>) config.get("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".items-to-consume");
|
||||
if (ConfigUtil.checkList(itemsToConsume, ItemStack.class)) {
|
||||
for (ItemStack stack : itemsToConsume) {
|
||||
if (stack != null) {
|
||||
oStage.itemsToConsume.add(stack);
|
||||
} else {
|
||||
throw new StageFormatException("items-to-consume has invalid formatting "
|
||||
+ stack, quest, stageNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".cows-to-milk")) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".cows-to-milk", -999) != -999) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".cows-to-milk", -999)
|
||||
!= -999) {
|
||||
oStage.cowsToMilk = config.getInt("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".cows-to-milk");
|
||||
} else {
|
||||
@ -2305,7 +2360,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".fish-to-catch")) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".fish-to-catch", -999) != -999) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".fish-to-catch", -999)
|
||||
!= -999) {
|
||||
oStage.fishToCatch = config.getInt("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".fish-to-catch");
|
||||
} else {
|
||||
@ -2313,7 +2369,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".players-to-kill")) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".players-to-kill", -999) != -999) {
|
||||
if (config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".players-to-kill", -999)
|
||||
!= -999) {
|
||||
oStage.playersToKill = config.getInt("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".players-to-kill");
|
||||
} else {
|
||||
@ -2330,10 +2387,12 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (CitizensAPI.getNPCRegistry().getById(i) != null) {
|
||||
questNpcs.add(CitizensAPI.getNPCRegistry().getById(i));
|
||||
} else {
|
||||
throw new StageFormatException("npc-ids-to-talk-to has invalid NPC ID of " + i, quest, stageNum);
|
||||
throw new StageFormatException("npc-ids-to-talk-to has invalid NPC ID of " + i, quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("Citizens not found for npc-ids-to-talk-to", quest, stageNum);
|
||||
throw new StageFormatException("Citizens not found for npc-ids-to-talk-to", quest,
|
||||
stageNum);
|
||||
}
|
||||
|
||||
}
|
||||
@ -2345,7 +2404,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".npc-delivery-ids")) {
|
||||
if (ConfigUtil.checkList(config.getList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".npc-delivery-ids"), Integer.class)) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".delivery-messages")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".delivery-messages")) {
|
||||
itemsToDeliver = (List<ItemStack>) config.get("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".items-to-deliver");
|
||||
itemDeliveryTargetIds = config.getIntegerList("quests." + questKey + ".stages.ordered."
|
||||
@ -2366,13 +2426,16 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.itemDeliveryTargets.add(npcId);
|
||||
oStage.deliverMessages.addAll(deliveryMessages);
|
||||
} else {
|
||||
throw new StageFormatException("Citizens not found for npc-delivery-ids", quest, stageNum);
|
||||
throw new StageFormatException(
|
||||
"Citizens not found for npc-delivery-ids", quest, stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("npc-delivery-ids has invalid NPC ID of " + npcId, quest, stageNum);
|
||||
throw new StageFormatException("npc-delivery-ids has invalid NPC ID of "
|
||||
+ npcId, quest, stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting " + stack, quest, stageNum);
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting "
|
||||
+ stack, quest, stageNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2393,17 +2456,23 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.itemDeliveryTargets.add(npcId);
|
||||
oStage.deliverMessages.addAll(deliveryMessages);
|
||||
} else {
|
||||
throw new StageFormatException("npc-delivery-ids has invalid NPC ID of " + npcId, quest, stageNum);
|
||||
throw new StageFormatException(
|
||||
"npc-delivery-ids has invalid NPC ID of " + npcId, quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("Citizens was not found installed for npc-delivery-ids", quest, stageNum);
|
||||
throw new StageFormatException(
|
||||
"Citizens was not found installed for npc-delivery-ids", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting " + item, quest, stageNum);
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting "
|
||||
+ item, quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting", quest, stageNum);
|
||||
throw new StageFormatException("items-to-deliver has invalid formatting", quest,
|
||||
stageNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2422,8 +2491,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
+ ".npc-kill-amounts"), Integer.class)) {
|
||||
npcIdsToKill = config.getIntegerList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".npc-ids-to-kill");
|
||||
npcAmountsToKill = config.getIntegerList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".npc-kill-amounts");
|
||||
npcAmountsToKill = config.getIntegerList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".npc-kill-amounts");
|
||||
for (int i : npcIdsToKill) {
|
||||
if (CitizensAPI.getNPCRegistry().getById(i) != null) {
|
||||
if (npcAmountsToKill.get(npcIdsToKill.indexOf(i)) > 0) {
|
||||
@ -2431,14 +2500,17 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.citizenNumToKill.add(npcAmountsToKill.get(npcIdsToKill.indexOf(i)));
|
||||
questNpcs.add(CitizensAPI.getNPCRegistry().getById(i));
|
||||
} else {
|
||||
throw new StageFormatException("npc-kill-amounts is not a positive number", quest, stageNum);
|
||||
throw new StageFormatException("npc-kill-amounts is not a positive number",
|
||||
quest, stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("npc-ids-to-kill has invalid NPC ID of " + i, quest, stageNum);
|
||||
throw new StageFormatException("npc-ids-to-kill has invalid NPC ID of " + i, quest,
|
||||
stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("npc-kill-amounts is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("npc-kill-amounts is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("npc-kill-amounts is missing", quest, stageNum);
|
||||
@ -2486,7 +2558,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (ConfigUtil.getLocation(loc) != null) {
|
||||
locationsToKillWithin.add(ConfigUtil.getLocation(loc));
|
||||
} else {
|
||||
throw new StageFormatException("locations-to-kill has invalid formatting " + loc, quest, stageNum);
|
||||
throw new StageFormatException("locations-to-kill has invalid formatting " + loc, quest,
|
||||
stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2542,7 +2615,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (ConfigUtil.getLocation(loc) != null) {
|
||||
oStage.locationsToReach.add(ConfigUtil.getLocation(loc));
|
||||
} else {
|
||||
throw new StageFormatException("locations-to-reach has invalid formatting" + loc, quest, stageNum);
|
||||
throw new StageFormatException("locations-to-reach has invalid formatting" + loc, quest,
|
||||
stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2557,7 +2631,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.radiiToReachWithin.add(i);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("reach-location-radii is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("reach-location-radii is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("reach-location-radii is missing", quest, stageNum);
|
||||
@ -2583,8 +2658,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".mob-tame-amounts")) {
|
||||
if (ConfigUtil.checkList(config.getList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".mob-tame-amounts"), Integer.class)) {
|
||||
List<String> mobs = config.getStringList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".mobs-to-tame");
|
||||
List<String> mobs = config.getStringList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".mobs-to-tame");
|
||||
List<Integer> mobAmounts = config.getIntegerList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".mob-tame-amounts");
|
||||
for (String mob : mobs) {
|
||||
@ -2593,11 +2668,13 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.mobsToTame.put(EntityType.valueOf(mob.toUpperCase()),
|
||||
mobAmounts.get(mobs.indexOf(mob)));
|
||||
} else {
|
||||
throw new StageFormatException("mobs-to-tame has invalid tameable mob " + mob, quest, stageNum);
|
||||
throw new StageFormatException("mobs-to-tame has invalid tameable mob " + mob,
|
||||
quest, stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("mob-tame-amounts is not a list of numbers", quest, stageNum);
|
||||
throw new StageFormatException("mob-tame-amounts is not a list of numbers", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("mob-tame-amounts is missing", quest, stageNum);
|
||||
@ -2612,8 +2689,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".sheep-amounts")) {
|
||||
if (ConfigUtil.checkList(config.getList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".sheep-amounts"), Integer.class)) {
|
||||
List<String> sheep = config.getStringList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".sheep-to-shear");
|
||||
List<String> sheep = config.getStringList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".sheep-to-shear");
|
||||
List<Integer> shearAmounts = config.getIntegerList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".sheep-amounts");
|
||||
for (String color : sheep) {
|
||||
@ -2668,7 +2745,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.sheepToShear.put(DyeColor.YELLOW, shearAmounts.get(sheep.indexOf(color)));
|
||||
// <-- Legacy end
|
||||
} else {
|
||||
throw new StageFormatException("sheep-to-shear has invalid color " + color, quest, stageNum);
|
||||
throw new StageFormatException("sheep-to-shear has invalid color " + color, quest,
|
||||
stageNum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -2695,8 +2773,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.passwordPhrases.add(answers);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("password-displays and password-phrases are not the same size", quest,
|
||||
stageNum);
|
||||
throw new StageFormatException("password-displays and password-phrases are not the same size",
|
||||
quest, stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("password-phrases is missing", quest, stageNum);
|
||||
@ -2753,8 +2831,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".chat-events")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum + ".chat-events")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".chat-event-triggers")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum + ".chat-event-triggers")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".chat-event-triggers")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".chat-event-triggers")) {
|
||||
List<String> chatEvents = config.getStringList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".chat-events");
|
||||
List<String> chatEventTriggers = config.getStringList("quests." + questKey
|
||||
@ -2766,14 +2846,16 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.chatActions.put(chatEventTriggers.get(i), action);
|
||||
} else {
|
||||
loadEventFailed = true;
|
||||
throw new StageFormatException("chat-events failed to load " + chatEvents.get(i), quest, stageNum);
|
||||
throw new StageFormatException("chat-events failed to load " + chatEvents.get(i),
|
||||
quest, stageNum);
|
||||
}
|
||||
}
|
||||
if (loadEventFailed) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("chat-event-triggers is not in list format", quest, stageNum);
|
||||
throw new StageFormatException("chat-event-triggers is not in list format", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("chat-event-triggers is missing", quest, stageNum);
|
||||
@ -2784,8 +2866,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".command-events")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum + ".command-events")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".command-event-triggers")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum + ".command-event-triggers")) {
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".command-event-triggers")) {
|
||||
if (config.isList("quests." + questKey + ".stages.ordered." + stageNum
|
||||
+ ".command-event-triggers")) {
|
||||
List<String> commandEvents = config.getStringList("quests." + questKey + ".stages.ordered."
|
||||
+ stageNum + ".command-events");
|
||||
List<String> commandEventTriggers = config.getStringList("quests." + questKey
|
||||
@ -2797,14 +2881,16 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
oStage.commandActions.put(commandEventTriggers.get(i), action);
|
||||
} else {
|
||||
loadEventFailed = true;
|
||||
throw new StageFormatException("command-events failed to load " + commandEvents.get(i), quest, stageNum);
|
||||
throw new StageFormatException("command-events failed to load "
|
||||
+ commandEvents.get(i), quest, stageNum);
|
||||
}
|
||||
}
|
||||
if (loadEventFailed) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("command-event-triggers is not in list format", quest, stageNum);
|
||||
throw new StageFormatException("command-event-triggers is not in list format", quest,
|
||||
stageNum);
|
||||
}
|
||||
} else {
|
||||
throw new StageFormatException("command-event-triggers is missing", quest, stageNum);
|
||||
@ -2815,7 +2901,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
if (config.contains("quests." + questKey + ".stages.ordered." + stageNum + ".delay")) {
|
||||
if (config.getLong("quests." + questKey + ".stages.ordered." + stageNum + ".delay", -999) != -999) {
|
||||
oStage.delay = config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".delay") * 1000;
|
||||
oStage.delay = config.getInt("quests." + questKey + ".stages.ordered." + stageNum + ".delay")
|
||||
* 1000;
|
||||
} else {
|
||||
throw new StageFormatException("delay is not a number", quest, stageNum);
|
||||
}
|
||||
@ -2892,7 +2979,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
for (String s : data.getStringList(actionKey + "explosions")) {
|
||||
Location loc = ConfigUtil.getLocation(s);
|
||||
if (loc == null) {
|
||||
throw new ActionFormatException("explosions is not in proper \"WorldName x y z\" format", actionKey);
|
||||
throw new ActionFormatException("explosions is not in proper \"WorldName x y z\" format",
|
||||
actionKey);
|
||||
}
|
||||
explosions.add(loc);
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ public class Stage {
|
||||
protected Map<Map<Enchantment, Material>, Integer> itemsToEnchant
|
||||
= new HashMap<Map<Enchantment, Material>, Integer>();
|
||||
protected LinkedList<ItemStack> itemsToBrew = new LinkedList<ItemStack>();
|
||||
protected LinkedList<ItemStack> itemsToConsume = new LinkedList<ItemStack>();
|
||||
protected LinkedList<ItemStack> itemsToDeliver = new LinkedList<ItemStack>();
|
||||
protected LinkedList<Integer> itemDeliveryTargets = new LinkedList<Integer>() {
|
||||
|
||||
@ -229,6 +230,14 @@ public class Stage {
|
||||
public void setItemsToBrew(LinkedList<ItemStack> itemsToBrew) {
|
||||
this.itemsToBrew = itemsToBrew;
|
||||
}
|
||||
|
||||
public LinkedList<ItemStack> getItemsToConsume() {
|
||||
return itemsToBrew;
|
||||
}
|
||||
|
||||
public void setItemsToConsume(LinkedList<ItemStack> itemsToBrew) {
|
||||
this.itemsToBrew = itemsToBrew;
|
||||
}
|
||||
|
||||
public LinkedList<ItemStack> getItemsToDeliver() {
|
||||
return itemsToDeliver;
|
||||
@ -514,6 +523,7 @@ public class Stage {
|
||||
if (itemsToSmelt.isEmpty() == false) { return true; }
|
||||
if (itemsToEnchant.isEmpty() == false) { return true; }
|
||||
if (itemsToBrew.isEmpty() == false) { return true; }
|
||||
if (itemsToConsume.isEmpty() == false) { return true; }
|
||||
if (itemsToDeliver.isEmpty() == false) { return true; }
|
||||
if (citizensToInteract.isEmpty() == false) { return true; }
|
||||
if (citizensToKill.isEmpty() == false) { return true; }
|
||||
@ -555,6 +565,8 @@ public class Stage {
|
||||
return !itemsToEnchant.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("brewItem")) {
|
||||
return !itemsToBrew.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("consumeItem")) {
|
||||
return !itemsToConsume.isEmpty();
|
||||
} else if (type.equalsIgnoreCase("milkCow")) {
|
||||
return cowsToMilk != null;
|
||||
} else if (type.equalsIgnoreCase("catchFish")) {
|
||||
|
@ -42,7 +42,7 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
this.pref = "stage" + stageNum;
|
||||
}
|
||||
|
||||
private final int size = 5;
|
||||
private final int size = 6;
|
||||
|
||||
public int getSize() {
|
||||
return size;
|
||||
@ -58,8 +58,9 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
return ChatColor.BLUE;
|
||||
case 5:
|
||||
return ChatColor.BLUE;
|
||||
case 6:
|
||||
return ChatColor.GREEN;
|
||||
default:
|
||||
return null;
|
||||
@ -77,6 +78,8 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
case 4:
|
||||
return ChatColor.YELLOW + Lang.get("stageEditorBrewPotions");
|
||||
case 5:
|
||||
return ChatColor.YELLOW + Lang.get("stageEditorConsumeItems");
|
||||
case 6:
|
||||
return ChatColor.GREEN + Lang.get("done");
|
||||
default:
|
||||
return null;
|
||||
@ -139,6 +142,18 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
return text;
|
||||
}
|
||||
case 5:
|
||||
if (context.getSessionData(pref + CK.S_CONSUME_ITEMS) == null) {
|
||||
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
|
||||
} else {
|
||||
String text = "\n";
|
||||
LinkedList<ItemStack> items = (LinkedList<ItemStack>) context.getSessionData(pref + CK.S_CONSUME_ITEMS);
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getName(items.get(i))
|
||||
+ ChatColor.GRAY + " x " + ChatColor.AQUA + items.get(i).getAmount() + "\n";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
case 6:
|
||||
return "";
|
||||
default:
|
||||
return null;
|
||||
@ -187,6 +202,8 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
case 4:
|
||||
return new BrewListPrompt(context);
|
||||
case 5:
|
||||
return new ConsumeListPrompt(context);
|
||||
case 6:
|
||||
try {
|
||||
return new StageMainPrompt(stageNum, context);
|
||||
} catch (Exception e) {
|
||||
@ -821,4 +838,113 @@ public class ItemsPrompt extends QuestsEditorNumericPrompt {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConsumeListPrompt extends QuestsEditorNumericPrompt {
|
||||
|
||||
public ConsumeListPrompt(ConversationContext context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
private final int size = 3;
|
||||
|
||||
public int getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public String getTitle(ConversationContext context) {
|
||||
return Lang.get("stageEditorConsumeItems");
|
||||
}
|
||||
|
||||
public ChatColor getNumberColor(ConversationContext context, int number) {
|
||||
switch (number) {
|
||||
case 1:
|
||||
return ChatColor.BLUE;
|
||||
case 2:
|
||||
return ChatColor.RED;
|
||||
case 3:
|
||||
return ChatColor.GREEN;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getSelectionText(ConversationContext context, int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
return ChatColor.YELLOW + Lang.get("stageEditorDeliveryAddItem");
|
||||
case 2:
|
||||
return ChatColor.RED + Lang.get("clear");
|
||||
case 3:
|
||||
return ChatColor.GREEN + Lang.get("done");
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public String getAdditionalText(ConversationContext context, int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
if (context.getSessionData(pref + CK.S_CONSUME_ITEMS) == null) {
|
||||
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
|
||||
} else {
|
||||
String text = "\n";
|
||||
for (ItemStack is : (List<ItemStack>) context.getSessionData(pref + CK.S_CONSUME_ITEMS)) {
|
||||
text += ChatColor.GRAY + " - " + ItemUtil.getDisplayString(is) + "\n";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
case 2:
|
||||
case 3:
|
||||
return "";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
// Check/add newly made item
|
||||
if (context.getSessionData("newItem") != null) {
|
||||
if (context.getSessionData(pref + CK.S_CONSUME_ITEMS) != null) {
|
||||
List<ItemStack> items = (List<ItemStack>) context.getSessionData(pref + CK.S_CONSUME_ITEMS);
|
||||
items.add((ItemStack) context.getSessionData("tempStack"));
|
||||
context.setSessionData(pref + CK.S_CONSUME_ITEMS, items);
|
||||
} else {
|
||||
LinkedList<ItemStack> items = new LinkedList<ItemStack>();
|
||||
items.add((ItemStack) context.getSessionData("tempStack"));
|
||||
context.setSessionData(pref + CK.S_CONSUME_ITEMS, items);
|
||||
}
|
||||
context.setSessionData("newItem", null);
|
||||
context.setSessionData("tempStack", null);
|
||||
}
|
||||
|
||||
QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this);
|
||||
context.getPlugin().getServer().getPluginManager().callEvent(event);
|
||||
|
||||
String text = ChatColor.GOLD + "- " + getTitle(context) + " -\n";
|
||||
for (int i = 1; i <= size; i++) {
|
||||
text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - "
|
||||
+ getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Prompt acceptValidatedInput(ConversationContext context, Number input) {
|
||||
switch(input.intValue()) {
|
||||
case 1:
|
||||
return new ItemStackPrompt(ConsumeListPrompt.this);
|
||||
case 2:
|
||||
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorObjectiveCleared"));
|
||||
context.setSessionData(pref + CK.S_CONSUME_ITEMS, null);
|
||||
return new ConsumeListPrompt(context);
|
||||
case 3:
|
||||
return new ItemsPrompt(stageNum, context);
|
||||
default:
|
||||
return new ItemsPrompt(stageNum, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -232,7 +232,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
|
||||
if (context.getSessionData(stagePrefix + CK.S_CRAFT_ITEMS) == null
|
||||
&& context.getSessionData(stagePrefix + CK.S_SMELT_ITEMS) == null
|
||||
&& context.getSessionData(stagePrefix + CK.S_ENCHANT_TYPES) == null
|
||||
&& context.getSessionData(stagePrefix + CK.S_BREW_ITEMS) == null) {
|
||||
&& context.getSessionData(stagePrefix + CK.S_BREW_ITEMS) == null
|
||||
&& context.getSessionData(stagePrefix + CK.S_CONSUME_ITEMS) == null) {
|
||||
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
|
||||
} else {
|
||||
return "";
|
||||
@ -509,6 +510,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
|
||||
|| context.getSessionData(stagePrefix + CK.S_SMELT_ITEMS) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_ENCHANT_TYPES) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_BREW_ITEMS) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_CONSUME_ITEMS) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_DELIVERY_NPCS) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_NPCS_TO_TALK_TO) != null
|
||||
|| context.getSessionData(stagePrefix + CK.S_NPCS_TO_KILL) != null
|
||||
|
@ -23,6 +23,7 @@ import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.InventoryType.SlotType;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.blackvein.quests.Quest;
|
||||
@ -141,4 +142,25 @@ public class ItemListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onConsumeItem(PlayerItemConsumeEvent evt) {
|
||||
if (plugin.canUseQuests(evt.getPlayer().getUniqueId())) {
|
||||
final ItemStack consumedItem = evt.getItem().clone();
|
||||
consumedItem.setAmount(1);
|
||||
Quester quester = plugin.getQuester(evt.getPlayer().getUniqueId());
|
||||
for (Quest quest : plugin.getQuests()) {
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective("consumeItem")) {
|
||||
quester.consumeItem(quest, consumedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, "consumeItem", (Quester q) -> {
|
||||
quester.consumeItem(quest, consumedItem);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ public class CK {
|
||||
public static final String S_PLAYER_KILL = "playerKill";
|
||||
public static final String S_CRAFT_ITEMS = "craftItems";
|
||||
public static final String S_SMELT_ITEMS = "smeltItems";
|
||||
public static final String S_CONSUME_ITEMS = "consumeItems";
|
||||
public static final String S_ENCHANT_TYPES = "enchantTypes";
|
||||
public static final String S_ENCHANT_NAMES = "enchantNames";
|
||||
public static final String S_ENCHANT_AMOUNTS = "enchantAmounts";
|
||||
|
@ -122,6 +122,7 @@ stageEditorCraftItems: "Craft items"
|
||||
stageEditorSmeltItems: "Smelt items"
|
||||
stageEditorEnchantItems: "Enchant items"
|
||||
stageEditorBrewPotions: "Brew potions"
|
||||
stageEditorConsumeItems: "Consume items"
|
||||
stageEditorNPCs: "NPCs"
|
||||
stageEditorDeliverItems: "Deliver items"
|
||||
stageEditorTalkToNPCs: "Talk to NPCs"
|
||||
@ -601,6 +602,7 @@ craft: "Craft"
|
||||
smelt: "Smelt"
|
||||
enchantItem: "Enchant <item> with <enchantment>"
|
||||
brew: "Brew"
|
||||
consume: "Consume"
|
||||
catchFish: "Catch Fish"
|
||||
milkCow: "Milk Cow"
|
||||
kill: "Kill"
|
||||
|
Loading…
Reference in New Issue
Block a user