*Multiple lines of text.

*add extra text to description and finish text.
This commit is contained in:
Zino 2013-08-06 21:11:25 +02:00
parent cfb567f59c
commit 83bdc7b458
6 changed files with 1029 additions and 993 deletions

View File

@ -1,225 +1,231 @@
package me.blackvein.quests; package me.blackvein.quests;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.LinkedList; import java.util.LinkedList;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.event.NPCDeathEvent; import net.citizensnpcs.api.event.NPCDeathEvent;
import net.citizensnpcs.api.event.NPCRightClickEvent; import net.citizensnpcs.api.event.NPCRightClickEvent;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversable; import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.Conversation; import org.bukkit.conversations.Conversation;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class NpcListener implements Listener { public class NpcListener implements Listener {
final Quests plugin; final Quests plugin;
public NpcListener(Quests newPlugin) { public NpcListener(Quests newPlugin) {
plugin = newPlugin; plugin = newPlugin;
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onNPCRightClick(NPCRightClickEvent evt) { public void onNPCRightClick(NPCRightClickEvent evt) {
if (evt.getClicker().isConversing() == false) { if (evt.getClicker().isConversing() == false) {
final Player player = evt.getClicker(); final Player player = evt.getClicker();
final Quester quester = plugin.getQuester(player.getName()); final Quester quester = plugin.getQuester(player.getName());
boolean delivery = false; boolean delivery = false;
if (quester.hasObjective("deliverItem") && player.getItemInHand() != null) { if (quester.hasObjective("deliverItem") && player.getItemInHand() != null) {
ItemStack hand = player.getItemInHand(); ItemStack hand = player.getItemInHand();
ItemStack found = null; ItemStack found = null;
for(ItemStack is : quester.currentStage.itemsToDeliver){ for(ItemStack is : quester.currentStage.itemsToDeliver){
if(ItemUtil.compareItems(is, hand, true) == 0){ if(ItemUtil.compareItems(is, hand, true) == 0){
found = is; found = is;
break; break;
} }
} }
if (found != null) { if (found != null) {
NPC clicked = evt.getNPC(); NPC clicked = evt.getNPC();
for (NPC n : quester.currentStage.itemDeliveryTargets) { for (NPC n : quester.currentStage.itemDeliveryTargets) {
if (n.getId() == clicked.getId()) { if (n.getId() == clicked.getId()) {
quester.deliverItem(hand); quester.deliverItem(hand);
delivery = true; delivery = true;
break; break;
} }
} }
} }
} }
if (plugin.questNPCs.contains(evt.getNPC()) && delivery == false) { if (plugin.questNPCs.contains(evt.getNPC()) && delivery == false) {
if (plugin.checkQuester(player.getName()) == false) { if (plugin.checkQuester(player.getName()) == false) {
if (quester.hasObjective("talkToNPC")) { if (quester.hasObjective("talkToNPC")) {
quester.interactWithNPC(evt.getNPC()); quester.interactWithNPC(evt.getNPC());
} else { } else {
LinkedList<Quest> npcQuests = new LinkedList<Quest>(); LinkedList<Quest> npcQuests = new LinkedList<Quest>();
for (Quest q : plugin.getQuests()) { for (Quest q : plugin.getQuests()) {
if (q.npcStart != null && q.npcStart.getId() == evt.getNPC().getId()) { if (q.npcStart != null && q.npcStart.getId() == evt.getNPC().getId()) {
npcQuests.add(q); npcQuests.add(q);
} }
} }
if (npcQuests.isEmpty() == false && npcQuests.size() > 1) { if (npcQuests.isEmpty() == false && npcQuests.size() > 1) {
Conversation c = plugin.NPCConversationFactory.buildConversation((Conversable) player); Conversation c = plugin.NPCConversationFactory.buildConversation((Conversable) player);
c.getContext().setSessionData("quests", npcQuests); c.getContext().setSessionData("quests", npcQuests);
c.getContext().setSessionData("npc", evt.getNPC().getName()); c.getContext().setSessionData("npc", evt.getNPC().getName());
c.begin(); c.begin();
} else if (npcQuests.size() == 1) { } else if (npcQuests.size() == 1) {
Quest q = npcQuests.get(0); Quest q = npcQuests.get(0);
if (!quester.completedQuests.contains(q.name)) { if (!quester.completedQuests.contains(q.name)) {
if (quester.currentQuest == null) { if (quester.currentQuest == null) {
quester.questToTake = q.name; quester.questToTake = q.name;
String s = extracted(quester); String s = extracted(quester);
player.sendMessage(s);
plugin.conversationFactory.buildConversation((Conversable) player).begin(); for (String msg : s.split("<br>")) {
player.sendMessage(msg);
} else if (quester.currentQuest.equals(q) == false) { }
player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); plugin.conversationFactory.buildConversation((Conversable) player).begin();
} } else if (quester.currentQuest.equals(q) == false) {
} else if (quester.completedQuests.contains(q.name)) { player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest.");
if (quester.currentQuest == null) { }
if (quester.getDifference(q) > 0) { } else if (quester.completedQuests.contains(q.name)) {
player.sendMessage(ChatColor.YELLOW + "You may not take " + ChatColor.AQUA + q.name + ChatColor.YELLOW + " again for another " + ChatColor.DARK_PURPLE + Quests.getTime(quester.getDifference(q)) + ChatColor.YELLOW + ".");
} else if (q.redoDelay < 0) { if (quester.currentQuest == null) {
player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + ".");
} else { if (quester.getDifference(q) > 0) {
quester.questToTake = q.name; player.sendMessage(ChatColor.YELLOW + "You may not take " + ChatColor.AQUA + q.name + ChatColor.YELLOW + " again for another " + ChatColor.DARK_PURPLE + Quests.getTime(quester.getDifference(q)) + ChatColor.YELLOW + ".");
String s = extracted(quester); } else if (q.redoDelay < 0) {
player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + ".");
player.sendMessage(s); } else {
quester.questToTake = q.name;
plugin.conversationFactory.buildConversation((Conversable) player).begin(); String s = extracted(quester);
}
for (String msg : s.split("<br>")) {
} else if (quester.currentQuest.equals(q) == false) { player.sendMessage(msg);
}
player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest.");
plugin.conversationFactory.buildConversation((Conversable) player).begin();
} }
} } else if (quester.currentQuest.equals(q) == false) {
} player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest.");
}
}
}
}
}
}
} }
}
}
@EventHandler
public void onNPCDeath(NPCDeathEvent evt) { }
if (evt.getNPC().getBukkitEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) { }
}
EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getNPC().getBukkitEntity().getLastDamageCause();
Entity damager = damageEvent.getDamager(); @EventHandler
public void onNPCDeath(NPCDeathEvent evt) {
if (damager != null) {
if (evt.getNPC().getBukkitEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
if (damager instanceof Projectile) {
EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getNPC().getBukkitEntity().getLastDamageCause();
Projectile p = (Projectile) damager; Entity damager = damageEvent.getDamager();
if (p.getShooter() instanceof Player) {
if (damager != null) {
Player player = (Player) p.getShooter();
boolean okay = true; if (damager instanceof Projectile) {
if (plugin.citizens != null) { Projectile p = (Projectile) damager;
if (CitizensAPI.getNPCRegistry().isNPC(player)) { if (p.getShooter() instanceof Player) {
okay = false;
} Player player = (Player) p.getShooter();
} boolean okay = true;
if (okay) { if (plugin.citizens != null) {
if (CitizensAPI.getNPCRegistry().isNPC(player)) {
Quester quester = plugin.getQuester(player.getName()); okay = false;
if (quester.hasObjective("killNPC")) { }
quester.killNPC(evt.getNPC()); }
}
if (okay) {
}
} Quester quester = plugin.getQuester(player.getName());
if (quester.hasObjective("killNPC")) {
} else if (damager instanceof Player) { quester.killNPC(evt.getNPC());
}
boolean okay = true;
}
if (plugin.citizens != null) { }
if (plugin.citizens.getNPCRegistry().isNPC(damager)) {
okay = false; } else if (damager instanceof Player) {
}
} boolean okay = true;
if (okay) { if (plugin.citizens != null) {
if (plugin.citizens.getNPCRegistry().isNPC(damager)) {
Player player = (Player) damager; okay = false;
Quester quester = plugin.getQuester(player.getName()); }
if (quester.hasObjective("killNPC")) { }
quester.killNPC(evt.getNPC());
} if (okay) {
} Player player = (Player) damager;
} Quester quester = plugin.getQuester(player.getName());
if (quester.hasObjective("killNPC")) {
} quester.killNPC(evt.getNPC());
}
}
}
} }
private String extracted(final Quester quester) { }
return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n",
ChatColor.GOLD, }
ChatColor.DARK_PURPLE,
quester.questToTake, }
ChatColor.GOLD,
ChatColor.RESET, plugin.getQuest(quester.questToTake).description); private String extracted(final Quester quester) {
} return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n",
ChatColor.GOLD,
ChatColor.DARK_PURPLE,
quester.questToTake,
ChatColor.GOLD,
ChatColor.RESET, plugin.getQuest(quester.questToTake).description);
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -173,7 +173,13 @@ public class Quest {
q.reset(); q.reset();
q.completedQuests.add(name); q.completedQuests.add(name);
String none = ChatColor.GRAY + "- (None)"; String none = ChatColor.GRAY + "- (None)";
player.sendMessage(Quests.parseString(finished, q.currentQuest));
String ps = Quests.parseString(finished, q.currentQuest);
for (String msg : ps.split("<br>")) {
player.sendMessage(msg);
}
if(moneyReward > 0 && Quests.economy != null){ if(moneyReward > 0 && Quests.economy != null){
Quests.economy.depositPlayer(q.name, moneyReward); Quests.economy.depositPlayer(q.name, moneyReward);
none = null; none = null;

View File

@ -611,6 +611,12 @@ public class QuestFactory implements ConversationAbandonedListener, ColorUtil {
public Prompt acceptInput(ConversationContext context, String input) { public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("cancel") == false) { if (input.equalsIgnoreCase("cancel") == false) {
if (input.startsWith("++")) {
if (context.getSessionData(CK.Q_ASK_MESSAGE) != null) {
context.setSessionData(CK.Q_ASK_MESSAGE, context.getSessionData(CK.Q_ASK_MESSAGE) + " " + input.substring(2));
return new CreateMenuPrompt();
}
}
context.setSessionData(CK.Q_ASK_MESSAGE, input); context.setSessionData(CK.Q_ASK_MESSAGE, input);
} }
@ -632,6 +638,12 @@ public class QuestFactory implements ConversationAbandonedListener, ColorUtil {
public Prompt acceptInput(ConversationContext context, String input) { public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("cancel") == false) { if (input.equalsIgnoreCase("cancel") == false) {
if (input.startsWith("++")) {
if (context.getSessionData(CK.Q_FINISH_MESSAGE) != null) {
context.setSessionData(CK.Q_FINISH_MESSAGE, context.getSessionData(CK.Q_FINISH_MESSAGE) + " " + input.substring(2));
return new CreateMenuPrompt();
}
}
context.setSessionData(CK.Q_FINISH_MESSAGE, input); context.setSessionData(CK.Q_FINISH_MESSAGE, input);
} }

View File

@ -222,8 +222,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener,
loadEvents(); loadEvents();
log.log(Level.INFO, "[Quests] " + quests.size() + " Quest(s) loaded."); log.log(Level.INFO, "[Quests] " + quests.size() + " Quest(s) loaded.");
log.log(Level.INFO, "[Quests] " + events.size() + " Event(s) loaded."); log.log(Level.INFO, "[Quests] " + events.size() + " Event(s) loaded.");
questers.putAll(getOnlineQuesters());
if (snoop) { if (snoop) {
questers.putAll(getOnlineQuesters());
snoop(); snoop();
} }
} }
@ -779,6 +779,11 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener,
+ RESET + getQuest(quester.questToTake).description + "\n"; + RESET + getQuest(quester.questToTake).description + "\n";
cs.sendMessage(s); cs.sendMessage(s);
for (String msg : s.split("<br>")) {
cs.sendMessage(msg);
}
conversationFactory.buildConversation((Conversable) cs).begin(); conversationFactory.buildConversation((Conversable) cs).begin();
} else { } else {

View File

@ -1,150 +1,154 @@
package me.blackvein.quests.prompts; package me.blackvein.quests.prompts;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.LinkedList; import java.util.LinkedList;
import me.blackvein.quests.ColorUtil; import me.blackvein.quests.ColorUtil;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversable; import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.ConversationContext; import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt; import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt; import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class QuestAcceptPrompt extends StringPrompt implements ColorUtil { public class QuestAcceptPrompt extends StringPrompt implements ColorUtil {
final Quests plugin; final Quests plugin;
Quester quester; Quester quester;
LinkedList<Quest> quests; LinkedList<Quest> quests;
public QuestAcceptPrompt(Quests plugin) { public QuestAcceptPrompt(Quests plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@Override @Override
public String getPromptText(ConversationContext cc) { public String getPromptText(ConversationContext cc) {
quests = (LinkedList<Quest>) cc.getSessionData("quests"); quests = (LinkedList<Quest>) cc.getSessionData("quests");
quester = plugin.getQuester(((Player) cc.getForWhom()).getName()); quester = plugin.getQuester(((Player) cc.getForWhom()).getName());
String npc = (String) cc.getSessionData("npc"); String npc = (String) cc.getSessionData("npc");
String menu = YELLOW + "- " + GOLD + "Quests" + " | " + npc + YELLOW + " -\n"; String menu = YELLOW + "- " + GOLD + "Quests" + " | " + npc + YELLOW + " -\n";
for (int i = 1; i <= quests.size(); i++) { for (int i = 1; i <= quests.size(); i++) {
Quest quest = quests.get(i - 1); Quest quest = quests.get(i - 1);
if (quester.completedQuests.contains(quest.getName())) { if (quester.completedQuests.contains(quest.getName())) {
menu += DARKGREEN + "" + BOLD + "" + i + ". " + RESET + "" + GREEN + "" + ITALIC + quest.getName() + RESET + "" + GREEN + " (Completed)\n"; menu += DARKGREEN + "" + BOLD + "" + i + ". " + RESET + "" + GREEN + "" + ITALIC + quest.getName() + RESET + "" + GREEN + " (Completed)\n";
} else { } else {
menu += GOLD + "" + BOLD + "" + i + ". " + RESET + "" + YELLOW + "" + ITALIC + quest.getName() + "\n"; menu += GOLD + "" + BOLD + "" + i + ". " + RESET + "" + YELLOW + "" + ITALIC + quest.getName() + "\n";
} }
} }
menu += GOLD + "" + BOLD + "" + (quests.size() + 1) + ". " + RESET + "" + ColorUtil.GRAY + "Cancel\n"; menu += GOLD + "" + BOLD + "" + (quests.size() + 1) + ". " + RESET + "" + ColorUtil.GRAY + "Cancel\n";
menu += WHITE + "Enter an option"; menu += WHITE + "Enter an option";
return menu; return menu;
} }
@Override @Override
public Prompt acceptInput(ConversationContext cc, String input) { public Prompt acceptInput(ConversationContext cc, String input) {
int numInput = -1; int numInput = -1;
try { try {
numInput = Integer.parseInt(input); numInput = Integer.parseInt(input);
} catch (Exception e) { } catch (Exception e) {
//Continue //Continue
} }
if (input.equalsIgnoreCase("Cancel") || numInput == (quests.size() + 1)) { if (input.equalsIgnoreCase("Cancel") || numInput == (quests.size() + 1)) {
cc.getForWhom().sendRawMessage(YELLOW + "Cancelled."); cc.getForWhom().sendRawMessage(YELLOW + "Cancelled.");
return Prompt.END_OF_CONVERSATION; return Prompt.END_OF_CONVERSATION;
} else { } else {
Quest q = null; Quest q = null;
for (Quest quest : quests) { for (Quest quest : quests) {
if (quest.getName().equalsIgnoreCase(input) || StringUtils.containsIgnoreCase(quest.getName(), input) || numInput == (quests.indexOf(quest) + 1)) { if (quest.getName().equalsIgnoreCase(input) || StringUtils.containsIgnoreCase(quest.getName(), input) || numInput == (quests.indexOf(quest) + 1)) {
q = quest; q = quest;
break; break;
} }
} }
if (q == null) { if (q == null) {
cc.getForWhom().sendRawMessage(RED + "Invalid Selection!"); cc.getForWhom().sendRawMessage(RED + "Invalid Selection!");
return new QuestAcceptPrompt(plugin); return new QuestAcceptPrompt(plugin);
} else { } else {
Player player = quester.getPlayer(); Player player = quester.getPlayer();
if (!quester.completedQuests.contains(q.name)) { if (!quester.completedQuests.contains(q.name)) {
if (quester.currentQuest == null) { if (quester.currentQuest == null) {
if(q.testRequirements(quester)){ if(q.testRequirements(quester)){
quester.questToTake = q.name; quester.questToTake = q.name;
String s = extracted(quester); String s = extracted(quester);
player.sendMessage(s);
plugin.conversationFactory.buildConversation((Conversable) player).begin(); for (String msg : s.split("<br>")) {
player.sendMessage(msg);
}else{ }
player.sendMessage(q.failRequirements);
} plugin.conversationFactory.buildConversation((Conversable) player).begin();
} else if (quester.currentQuest.equals(q) == false) { }else{
player.sendMessage(q.failRequirements);
player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); }
} } else if (quester.currentQuest.equals(q) == false) {
} else if (quester.completedQuests.contains(q.name)) { player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest.");
if (quester.currentQuest == null) { }
if (quester.getDifference(q) > 0) { } else if (quester.completedQuests.contains(q.name)) {
player.sendMessage(ChatColor.YELLOW + "You may not take " + ChatColor.AQUA + q.name + ChatColor.YELLOW + " again for another " + ChatColor.DARK_PURPLE + Quests.getTime(quester.getDifference(q)) + ChatColor.YELLOW + ".");
} else if (q.redoDelay < 0) { if (quester.currentQuest == null) {
player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + ".");
} else { if (quester.getDifference(q) > 0) {
quester.questToTake = q.name; player.sendMessage(ChatColor.YELLOW + "You may not take " + ChatColor.AQUA + q.name + ChatColor.YELLOW + " again for another " + ChatColor.DARK_PURPLE + Quests.getTime(quester.getDifference(q)) + ChatColor.YELLOW + ".");
String s = extracted(quester); } else if (q.redoDelay < 0) {
player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + ".");
player.sendMessage(s); } else {
quester.questToTake = q.name;
plugin.conversationFactory.buildConversation((Conversable) player).begin(); String s = extracted(quester);
}
player.sendMessage(s);
} else if (quester.currentQuest.equals(q) == false) {
plugin.conversationFactory.buildConversation((Conversable) player).begin();
player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); }
} } else if (quester.currentQuest.equals(q) == false) {
} player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest.");
return Prompt.END_OF_CONVERSATION; }
} }
return Prompt.END_OF_CONVERSATION;
}
}
}
private String extracted(final Quester quester) { }
return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n",
ChatColor.GOLD, }
ChatColor.DARK_PURPLE,
quester.questToTake, private String extracted(final Quester quester) {
ChatColor.GOLD, return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n",
ChatColor.RESET, plugin.getQuest(quester.questToTake).description); ChatColor.GOLD,
} ChatColor.DARK_PURPLE,
} quester.questToTake,
ChatColor.GOLD,
ChatColor.RESET, plugin.getQuest(quester.questToTake).description);
}
}