diff --git a/src/main/java/me/blackvein/quests/NpcListener.java b/src/main/java/me/blackvein/quests/NpcListener.java index ecd9e7c73..b7e83b4fb 100644 --- a/src/main/java/me/blackvein/quests/NpcListener.java +++ b/src/main/java/me/blackvein/quests/NpcListener.java @@ -1,225 +1,231 @@ -package me.blackvein.quests; - -import java.text.MessageFormat; -import java.util.LinkedList; -import me.blackvein.quests.util.ItemUtil; -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.event.NPCDeathEvent; -import net.citizensnpcs.api.event.NPCRightClickEvent; -import net.citizensnpcs.api.npc.NPC; -import org.bukkit.ChatColor; -import org.bukkit.conversations.Conversable; -import org.bukkit.conversations.Conversation; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.inventory.ItemStack; - -public class NpcListener implements Listener { - - final Quests plugin; - - public NpcListener(Quests newPlugin) { - - plugin = newPlugin; - - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onNPCRightClick(NPCRightClickEvent evt) { - - if (evt.getClicker().isConversing() == false) { - - final Player player = evt.getClicker(); - final Quester quester = plugin.getQuester(player.getName()); - boolean delivery = false; - - if (quester.hasObjective("deliverItem") && player.getItemInHand() != null) { - - ItemStack hand = player.getItemInHand(); - - ItemStack found = null; - - for(ItemStack is : quester.currentStage.itemsToDeliver){ - - if(ItemUtil.compareItems(is, hand, true) == 0){ - found = is; - break; - } - - } - - if (found != null) { - - NPC clicked = evt.getNPC(); - - for (NPC n : quester.currentStage.itemDeliveryTargets) { - if (n.getId() == clicked.getId()) { - quester.deliverItem(hand); - delivery = true; - break; - } - } - - } - } - - if (plugin.questNPCs.contains(evt.getNPC()) && delivery == false) { - - if (plugin.checkQuester(player.getName()) == false) { - if (quester.hasObjective("talkToNPC")) { - - quester.interactWithNPC(evt.getNPC()); - - } else { - - LinkedList npcQuests = new LinkedList(); - - for (Quest q : plugin.getQuests()) { - - if (q.npcStart != null && q.npcStart.getId() == evt.getNPC().getId()) { - npcQuests.add(q); - } - - } - - - - if (npcQuests.isEmpty() == false && npcQuests.size() > 1) { - - Conversation c = plugin.NPCConversationFactory.buildConversation((Conversable) player); - c.getContext().setSessionData("quests", npcQuests); - c.getContext().setSessionData("npc", evt.getNPC().getName()); - c.begin(); - - } else if (npcQuests.size() == 1) { - - Quest q = npcQuests.get(0); - - if (!quester.completedQuests.contains(q.name)) { - - if (quester.currentQuest == null) { - - quester.questToTake = q.name; - - String s = extracted(quester); - player.sendMessage(s); - plugin.conversationFactory.buildConversation((Conversable) player).begin(); - - } else if (quester.currentQuest.equals(q) == false) { - - player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); - - } - - } else if (quester.completedQuests.contains(q.name)) { - - if (quester.currentQuest == null) { - - if (quester.getDifference(q) > 0) { - 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) { - player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); - } else { - quester.questToTake = q.name; - String s = extracted(quester); - - player.sendMessage(s); - - 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(); - - if (damager != null) { - - if (damager instanceof Projectile) { - - Projectile p = (Projectile) damager; - if (p.getShooter() instanceof Player) { - - Player player = (Player) p.getShooter(); - boolean okay = true; - - if (plugin.citizens != null) { - if (CitizensAPI.getNPCRegistry().isNPC(player)) { - okay = false; - } - } - - if (okay) { - - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("killNPC")) { - quester.killNPC(evt.getNPC()); - } - - } - } - - } else if (damager instanceof Player) { - - boolean okay = true; - - if (plugin.citizens != null) { - if (plugin.citizens.getNPCRegistry().isNPC(damager)) { - okay = false; - } - } - - 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); - } +package me.blackvein.quests; + +import java.text.MessageFormat; +import java.util.LinkedList; +import me.blackvein.quests.util.ItemUtil; +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.event.NPCDeathEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.citizensnpcs.api.npc.NPC; +import org.bukkit.ChatColor; +import org.bukkit.conversations.Conversable; +import org.bukkit.conversations.Conversation; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.inventory.ItemStack; + +public class NpcListener implements Listener { + + final Quests plugin; + + public NpcListener(Quests newPlugin) { + + plugin = newPlugin; + + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onNPCRightClick(NPCRightClickEvent evt) { + + if (evt.getClicker().isConversing() == false) { + + final Player player = evt.getClicker(); + final Quester quester = plugin.getQuester(player.getName()); + boolean delivery = false; + + if (quester.hasObjective("deliverItem") && player.getItemInHand() != null) { + + ItemStack hand = player.getItemInHand(); + + ItemStack found = null; + + for(ItemStack is : quester.currentStage.itemsToDeliver){ + + if(ItemUtil.compareItems(is, hand, true) == 0){ + found = is; + break; + } + + } + + if (found != null) { + + NPC clicked = evt.getNPC(); + + for (NPC n : quester.currentStage.itemDeliveryTargets) { + if (n.getId() == clicked.getId()) { + quester.deliverItem(hand); + delivery = true; + break; + } + } + + } + } + + if (plugin.questNPCs.contains(evt.getNPC()) && delivery == false) { + + if (plugin.checkQuester(player.getName()) == false) { + if (quester.hasObjective("talkToNPC")) { + + quester.interactWithNPC(evt.getNPC()); + + } else { + + LinkedList npcQuests = new LinkedList(); + + for (Quest q : plugin.getQuests()) { + + if (q.npcStart != null && q.npcStart.getId() == evt.getNPC().getId()) { + npcQuests.add(q); + } + + } + + + + if (npcQuests.isEmpty() == false && npcQuests.size() > 1) { + + Conversation c = plugin.NPCConversationFactory.buildConversation((Conversable) player); + c.getContext().setSessionData("quests", npcQuests); + c.getContext().setSessionData("npc", evt.getNPC().getName()); + c.begin(); + + } else if (npcQuests.size() == 1) { + + Quest q = npcQuests.get(0); + + if (!quester.completedQuests.contains(q.name)) { + + if (quester.currentQuest == null) { + + quester.questToTake = q.name; + + String s = extracted(quester); + + for (String msg : s.split("
")) { + player.sendMessage(msg); + } + + plugin.conversationFactory.buildConversation((Conversable) player).begin(); + + } else if (quester.currentQuest.equals(q) == false) { + + player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); + + } + + } else if (quester.completedQuests.contains(q.name)) { + + if (quester.currentQuest == null) { + + if (quester.getDifference(q) > 0) { + 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) { + player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); + } else { + quester.questToTake = q.name; + String s = extracted(quester); + + for (String msg : s.split("
")) { + player.sendMessage(msg); + } + + 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(); + + if (damager != null) { + + if (damager instanceof Projectile) { + + Projectile p = (Projectile) damager; + if (p.getShooter() instanceof Player) { + + Player player = (Player) p.getShooter(); + boolean okay = true; + + if (plugin.citizens != null) { + if (CitizensAPI.getNPCRegistry().isNPC(player)) { + okay = false; + } + } + + if (okay) { + + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("killNPC")) { + quester.killNPC(evt.getNPC()); + } + + } + } + + } else if (damager instanceof Player) { + + boolean okay = true; + + if (plugin.citizens != null) { + if (plugin.citizens.getNPCRegistry().isNPC(damager)) { + okay = false; + } + } + + 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); + } } \ No newline at end of file diff --git a/src/main/java/me/blackvein/quests/PlayerListener.java b/src/main/java/me/blackvein/quests/PlayerListener.java index a0eef6797..4fe4e6754 100644 --- a/src/main/java/me/blackvein/quests/PlayerListener.java +++ b/src/main/java/me/blackvein/quests/PlayerListener.java @@ -1,617 +1,620 @@ -package me.blackvein.quests; - -import java.io.File; - -import net.citizensnpcs.api.CitizensAPI; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.conversations.Conversable; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.enchantment.EnchantItemEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityTameEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.*; -import org.bukkit.event.player.PlayerFishEvent.State; - -public class PlayerListener implements Listener { - - final Quests plugin; - - public PlayerListener(Quests newPlugin) { - - plugin = newPlugin; - - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent evt) { - - if (plugin.checkQuester(evt.getPlayer().getName()) == false) { - - if (evt.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { - - final Quester quester = plugin.getQuester(evt.getPlayer().getName()); - final Player player = evt.getPlayer(); - - if (quester.hasObjective("useBlock")) { - - quester.useBlock(evt.getClickedBlock().getType()); - - }else if (plugin.questFactory.selectedBlockStarts.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.questFactory.selectedBlockStarts.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.eventFactory.selectedExplosionLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.eventFactory.selectedExplosionLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.eventFactory.selectedEffectLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.eventFactory.selectedEffectLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.eventFactory.selectedMobLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.eventFactory.selectedMobLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.eventFactory.selectedLightningLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.eventFactory.selectedLightningLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.eventFactory.selectedTeleportLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.eventFactory.selectedTeleportLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.questFactory.selectedKillLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.questFactory.selectedKillLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if (plugin.questFactory.selectedReachLocations.containsKey(evt.getPlayer())){ - - Block block = evt.getClickedBlock(); - Location loc = block.getLocation(); - plugin.questFactory.selectedReachLocations.put(evt.getPlayer(), block); - evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); - - }else if(player.isConversing() == false){ - - for (final Quest q : plugin.quests) { - - if (q.blockStart != null) { - - if (q.blockStart.equals(evt.getClickedBlock().getLocation())) { - - if (quester.currentQuest != null) { - - player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); - - } else { - - if (quester.completedQuests.contains(q.name)) { - - if (q.redoDelay > -1 && (quester.getDifference(q)) > 0) { - - 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 + "."); - return; - - }else if (quester.completedQuests.contains(q.name) && q.redoDelay < 0) { - - player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); - return; - - } - - } - - quester.questToTake = q.name; - - String s = - ChatColor.GOLD + "- " + ChatColor.DARK_PURPLE + quester.questToTake + ChatColor.GOLD + " -\n" - + "\n" - + ChatColor.RESET + plugin.getQuest(quester.questToTake).description + "\n"; - - player.sendMessage(s); - plugin.conversationFactory.buildConversation((Conversable) player).begin(); - - } - - break; - } - - } - - } - - } - - } - - } - - } - - @EventHandler - public void onBlockDamage(BlockDamageEvent evt) { - - if (plugin.checkQuester(evt.getPlayer().getName()) == false) { - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - if (quester.hasObjective("damageBlock")) { - - quester.damageBlock(evt.getBlock().getType()); - - } - - } - - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockPlace(BlockPlaceEvent evt) { - - if (plugin.checkQuester(evt.getPlayer().getName()) == false) { - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - if (quester.hasObjective("placeBlock")) { - - if (evt.isCancelled() == false) { - quester.placeBlock(evt.getBlock().getType()); - } - - } - - } - - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockBreak(BlockBreakEvent evt) { - - if (plugin.checkQuester(evt.getPlayer().getName()) == false) { - - boolean canOpen = true; - - if (canOpen == true) { - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - if (quester.hasObjective("breakBlock")) { - - if (evt.getPlayer().getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH) == false && evt.isCancelled() == false) { - quester.breakBlock(evt.getBlock().getType()); - } - - } - - if (quester.hasObjective("placeBlock")) { - - if (quester.blocksPlaced.containsKey(evt.getBlock().getType())) { - - if (quester.blocksPlaced.get(evt.getBlock().getType()) > 0) { - - if (evt.isCancelled() == false) { - quester.blocksPlaced.put(evt.getBlock().getType(), quester.blocksPlaced.get(evt.getBlock().getType()) - 1); - } - - } - - } - - } - - if (evt.getPlayer().getItemInHand().getType().equals(Material.SHEARS) && quester.hasObjective("cutBlock")) { - - quester.cutBlock(evt.getBlock().getType()); - - } - - } - - } - - } - - @EventHandler - public void onPlayerShearEntity(PlayerShearEntityEvent evt) { - - if (plugin.checkQuester(evt.getPlayer().getName()) == false) { - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - if (evt.getEntity().getType().equals(EntityType.SHEEP) && quester.hasObjective("shearSheep")) { - - Sheep sheep = (Sheep) evt.getEntity(); - quester.shearSheep(sheep.getColor()); - - } - - } - - } - - @EventHandler - public void onEntityTame(EntityTameEvent evt) { - - if (evt.getOwner() instanceof Player) { - - Player p = (Player) evt.getOwner(); - if (plugin.checkQuester(p.getName()) == false) { - - Quester quester = plugin.getQuester(p.getName()); - if (quester.hasObjective("tameMob")) { - - quester.tameMob(evt.getEntityType()); - - } - - } - - } - - } - - @EventHandler - public void onEnchantItem(EnchantItemEvent evt) { - - if (plugin.checkQuester(evt.getEnchanter().getName()) == false) { - - Quester quester = plugin.getQuester(evt.getEnchanter().getName()); - if (quester.hasObjective("enchantItem")) { - - for (Enchantment e : evt.getEnchantsToAdd().keySet()) { - - quester.enchantItem(e, evt.getItem().getType()); - - } - - } - - } - - } - - /* - * - * CRAFTING (Player) - * - * 0 - Crafted Slot 1 - Top-left Craft Slot 2 - Top-right Craft Slot 3 - - * Bottom-left Craft Slot 4 - Bottom-right Craft Slot - * - * 5 - Head Slot 6 - Body Slot 7 - Leg Slot 8 - Boots Slot - * - * 9-35 - Top-left to Bottom-right inventory slots 36-44 - Left to Right - * hotbar slots - * - * -999 - Drop Slot - * - * - * BREWING - * - * 0 - Left Potion Slot 1 - Middle Potion Slot 2 - Right Potion Slot 3- - * Ingredient Slot - * - * 4-30 - Top-left to Bottom-right inventory slots 31-39 - Left to Right - * hotbar slots - * - * ENCHANTING - * - * 0 - Enchant Slot - * - * 1-27 - Top-left to Bottom-right inventory slots 28-36 - Left to Right - * hotbar slots - * - * ENDER CHEST - * - * 0-26 - Top-left to Bottom-right chest slots - * - * 27-53 - Top-left to Bottom-right inventory slots 54-62 - Left to Right - * hotbar slots - * - * DISPENSER - * - * 0-8 - Top-left to Bottom-right dispenser slots - * - * 9-35 - Top-left to Bottom-right inventory slots 36-44 - Left to Right - * hotbar slots - * - * FURNACE - * - * 0 - Furnace Slot 1 - Fuel Slot 2 - Product Slot - * - * 3-29 - Top-left to Bottom-right inventory slots 30-38 - Left to Right - * hotbar slots - * - * WORKBENCH - * - * 0 - Product Slot 1-9 - Top-left to Bottom-right crafting slots - * - * CHEST - * - * 0-26 - Top-left to Bottom-right chest slots - * - * 27-53 - Top-left to Bottom-right inventory slots 54-62 - Left to Right - * hotbar slots - * - * CHEST (Double) - * - * 0-53 - Top-left to Bottom-right chest slots - * - * 54-80 - Top-left to Bottom-right inventory slots 81-89 - Left to Right - * hotbar slots - * - */ - - @EventHandler - public void onEntityDeath(EntityDeathEvent evt) { - - if (evt.getEntity() instanceof Player == false) { - - if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) { - - EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause(); - Entity damager = damageEvent.getDamager(); - - if (damager != null) { - - if (damager instanceof Projectile) { - - Projectile p = (Projectile) damager; - if (p.getShooter() instanceof Player) { - - Player player = (Player) p.getShooter(); - boolean okay = true; - - if (plugin.citizens != null) { - if (CitizensAPI.getNPCRegistry().isNPC(player)) { - okay = false; - } - } - - if (okay) { - - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("killMob")) { - quester.killMob(evt.getEntity().getLocation(), evt.getEntity().getType()); - } - - } - } - - } else if (damager instanceof Player) { - - boolean okay = true; - - if (plugin.citizens != null) { - if (CitizensAPI.getNPCRegistry().isNPC(damager)) { - okay = false; - } - } - - if (okay) { - - Player player = (Player) damager; - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("killMob")) { - quester.killMob(evt.getEntity().getLocation(), evt.getEntity().getType()); - } - - } - } - - } - - } - - } - - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent evt) { - - if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) { - - EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause(); - Entity damager = damageEvent.getDamager(); - - if (damager != null) { - - if (damager instanceof Projectile) { - - Projectile p = (Projectile) damager; - if (p.getShooter() instanceof Player) { - - Player player = (Player) p.getShooter(); - - if (plugin.checkQuester(player.getName()) == false) { - - boolean okay = true; - - if (plugin.citizens != null) { - if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) { - okay = false; - } - } - - if (okay) { - - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("killPlayer")) { - quester.killPlayer(evt.getEntity().getName()); - } - - } - - } - - } - - } else if (damager instanceof Player) { - - Player player = (Player) damager; - - if (plugin.checkQuester(player.getName()) == false) { - - boolean okay = true; - - if (plugin.citizens != null) { - - if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) { - okay = false; - } - - } - - if (okay) { - - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("killPlayer")) { - quester.killPlayer(evt.getEntity().getName()); - } - - } - - } - } - - } - - } - - } - - @EventHandler - public void onPlayerFish(PlayerFishEvent evt) { - - Player player = evt.getPlayer(); - if(plugin.checkQuester(player.getName()) == false){ - - Quester quester = plugin.getQuester(player.getName()); - if (quester.hasObjective("catchFish") && evt.getState().equals(State.CAUGHT_FISH)) { - quester.catchFish(); - } - - } - - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent evt) { - - if(plugin.checkQuester(evt.getPlayer().getName()) == false){ - - Quester quester = new Quester(plugin); - quester.name = evt.getPlayer().getName(); - if (new File(plugin.getDataFolder(), "data/" + quester.name + ".yml").exists()) { - quester.loadData(); - } else { - quester.saveData(); - } - plugin.questers.put(evt.getPlayer().getName(), quester); - - for (String s : quester.completedQuests) { - - Quest q = plugin.getQuest(s); - - if (q != null) { - - if (quester.completedTimes.containsKey(q.name) == false && q.redoDelay > -1) - quester.completedTimes.put(q.name, System.currentTimeMillis()); - - } - - } - - quester.checkQuest(); - - if(quester.currentQuest != null){ - - if(quester.currentStage.delay > -1){ - - quester.startStageTimer(); - - } - - } - - } - - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent evt) { - - if(plugin.checkQuester(evt.getPlayer().getName()) == false){ - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - if(quester.currentQuest != null){ - if(quester.currentStage.delay > -1) - quester.stopStageTimer(); - } - quester.saveData(); - - plugin.questers.remove(quester.name); - - } - - } - - @EventHandler - public void onPlayerMove(PlayerMoveEvent evt) { - - if(plugin.checkQuester(evt.getPlayer().getName()) == false){ - - boolean isPlayer = true; - if (plugin.citizens != null) { - if (CitizensAPI.getNPCRegistry().isNPC(evt.getPlayer())) { - isPlayer = false; - } - } - - if (isPlayer) { - - Quester quester = plugin.getQuester(evt.getPlayer().getName()); - - if (quester.hasObjective("reachLocation")) { - - quester.reachLocation(evt.getTo()); - - } - - } - - } - - } -} +package me.blackvein.quests; + +import java.io.File; + +import net.citizensnpcs.api.CitizensAPI; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.conversations.Conversable; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDamageEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.enchantment.EnchantItemEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityTameEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.*; +import org.bukkit.event.player.PlayerFishEvent.State; + +public class PlayerListener implements Listener { + + final Quests plugin; + + public PlayerListener(Quests newPlugin) { + + plugin = newPlugin; + + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent evt) { + + if (plugin.checkQuester(evt.getPlayer().getName()) == false) { + + if (evt.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + + final Quester quester = plugin.getQuester(evt.getPlayer().getName()); + final Player player = evt.getPlayer(); + + if (quester.hasObjective("useBlock")) { + + quester.useBlock(evt.getClickedBlock().getType()); + + }else if (plugin.questFactory.selectedBlockStarts.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.questFactory.selectedBlockStarts.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.eventFactory.selectedExplosionLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.eventFactory.selectedExplosionLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.eventFactory.selectedEffectLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.eventFactory.selectedEffectLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.eventFactory.selectedMobLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.eventFactory.selectedMobLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.eventFactory.selectedLightningLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.eventFactory.selectedLightningLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.eventFactory.selectedTeleportLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.eventFactory.selectedTeleportLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.questFactory.selectedKillLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.questFactory.selectedKillLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if (plugin.questFactory.selectedReachLocations.containsKey(evt.getPlayer())){ + + Block block = evt.getClickedBlock(); + Location loc = block.getLocation(); + plugin.questFactory.selectedReachLocations.put(evt.getPlayer(), block); + evt.getPlayer().sendMessage(ChatColor.GOLD + "Selected location " + ChatColor.AQUA + loc.getWorld().getName() + ": " + loc.getX() + ", " + loc.getY() + ", " + loc.getZ() + ChatColor.GOLD + " (" + ChatColor.GREEN + Quester.prettyItemString(block.getType().getId()) + ChatColor.GOLD + ")"); + + }else if(player.isConversing() == false){ + + for (final Quest q : plugin.quests) { + + if (q.blockStart != null) { + + if (q.blockStart.equals(evt.getClickedBlock().getLocation())) { + + if (quester.currentQuest != null) { + + player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); + + } else { + + if (quester.completedQuests.contains(q.name)) { + + if (q.redoDelay > -1 && (quester.getDifference(q)) > 0) { + + 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 + "."); + return; + + }else if (quester.completedQuests.contains(q.name) && q.redoDelay < 0) { + + player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); + return; + + } + + } + + quester.questToTake = q.name; + + String s = + ChatColor.GOLD + "- " + ChatColor.DARK_PURPLE + quester.questToTake + ChatColor.GOLD + " -\n" + + "\n" + + ChatColor.RESET + plugin.getQuest(quester.questToTake).description + "\n"; + + for (String msg : s.split("
")) { + player.sendMessage(msg); + } + + plugin.conversationFactory.buildConversation((Conversable) player).begin(); + + } + + break; + } + + } + + } + + } + + } + + } + + } + + @EventHandler + public void onBlockDamage(BlockDamageEvent evt) { + + if (plugin.checkQuester(evt.getPlayer().getName()) == false) { + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + if (quester.hasObjective("damageBlock")) { + + quester.damageBlock(evt.getBlock().getType()); + + } + + } + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBlockPlace(BlockPlaceEvent evt) { + + if (plugin.checkQuester(evt.getPlayer().getName()) == false) { + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + if (quester.hasObjective("placeBlock")) { + + if (evt.isCancelled() == false) { + quester.placeBlock(evt.getBlock().getType()); + } + + } + + } + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBlockBreak(BlockBreakEvent evt) { + + if (plugin.checkQuester(evt.getPlayer().getName()) == false) { + + boolean canOpen = true; + + if (canOpen == true) { + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + if (quester.hasObjective("breakBlock")) { + + if (evt.getPlayer().getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH) == false && evt.isCancelled() == false) { + quester.breakBlock(evt.getBlock().getType()); + } + + } + + if (quester.hasObjective("placeBlock")) { + + if (quester.blocksPlaced.containsKey(evt.getBlock().getType())) { + + if (quester.blocksPlaced.get(evt.getBlock().getType()) > 0) { + + if (evt.isCancelled() == false) { + quester.blocksPlaced.put(evt.getBlock().getType(), quester.blocksPlaced.get(evt.getBlock().getType()) - 1); + } + + } + + } + + } + + if (evt.getPlayer().getItemInHand().getType().equals(Material.SHEARS) && quester.hasObjective("cutBlock")) { + + quester.cutBlock(evt.getBlock().getType()); + + } + + } + + } + + } + + @EventHandler + public void onPlayerShearEntity(PlayerShearEntityEvent evt) { + + if (plugin.checkQuester(evt.getPlayer().getName()) == false) { + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + if (evt.getEntity().getType().equals(EntityType.SHEEP) && quester.hasObjective("shearSheep")) { + + Sheep sheep = (Sheep) evt.getEntity(); + quester.shearSheep(sheep.getColor()); + + } + + } + + } + + @EventHandler + public void onEntityTame(EntityTameEvent evt) { + + if (evt.getOwner() instanceof Player) { + + Player p = (Player) evt.getOwner(); + if (plugin.checkQuester(p.getName()) == false) { + + Quester quester = plugin.getQuester(p.getName()); + if (quester.hasObjective("tameMob")) { + + quester.tameMob(evt.getEntityType()); + + } + + } + + } + + } + + @EventHandler + public void onEnchantItem(EnchantItemEvent evt) { + + if (plugin.checkQuester(evt.getEnchanter().getName()) == false) { + + Quester quester = plugin.getQuester(evt.getEnchanter().getName()); + if (quester.hasObjective("enchantItem")) { + + for (Enchantment e : evt.getEnchantsToAdd().keySet()) { + + quester.enchantItem(e, evt.getItem().getType()); + + } + + } + + } + + } + + /* + * + * CRAFTING (Player) + * + * 0 - Crafted Slot 1 - Top-left Craft Slot 2 - Top-right Craft Slot 3 - + * Bottom-left Craft Slot 4 - Bottom-right Craft Slot + * + * 5 - Head Slot 6 - Body Slot 7 - Leg Slot 8 - Boots Slot + * + * 9-35 - Top-left to Bottom-right inventory slots 36-44 - Left to Right + * hotbar slots + * + * -999 - Drop Slot + * + * + * BREWING + * + * 0 - Left Potion Slot 1 - Middle Potion Slot 2 - Right Potion Slot 3- + * Ingredient Slot + * + * 4-30 - Top-left to Bottom-right inventory slots 31-39 - Left to Right + * hotbar slots + * + * ENCHANTING + * + * 0 - Enchant Slot + * + * 1-27 - Top-left to Bottom-right inventory slots 28-36 - Left to Right + * hotbar slots + * + * ENDER CHEST + * + * 0-26 - Top-left to Bottom-right chest slots + * + * 27-53 - Top-left to Bottom-right inventory slots 54-62 - Left to Right + * hotbar slots + * + * DISPENSER + * + * 0-8 - Top-left to Bottom-right dispenser slots + * + * 9-35 - Top-left to Bottom-right inventory slots 36-44 - Left to Right + * hotbar slots + * + * FURNACE + * + * 0 - Furnace Slot 1 - Fuel Slot 2 - Product Slot + * + * 3-29 - Top-left to Bottom-right inventory slots 30-38 - Left to Right + * hotbar slots + * + * WORKBENCH + * + * 0 - Product Slot 1-9 - Top-left to Bottom-right crafting slots + * + * CHEST + * + * 0-26 - Top-left to Bottom-right chest slots + * + * 27-53 - Top-left to Bottom-right inventory slots 54-62 - Left to Right + * hotbar slots + * + * CHEST (Double) + * + * 0-53 - Top-left to Bottom-right chest slots + * + * 54-80 - Top-left to Bottom-right inventory slots 81-89 - Left to Right + * hotbar slots + * + */ + + @EventHandler + public void onEntityDeath(EntityDeathEvent evt) { + + if (evt.getEntity() instanceof Player == false) { + + if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) { + + EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause(); + Entity damager = damageEvent.getDamager(); + + if (damager != null) { + + if (damager instanceof Projectile) { + + Projectile p = (Projectile) damager; + if (p.getShooter() instanceof Player) { + + Player player = (Player) p.getShooter(); + boolean okay = true; + + if (plugin.citizens != null) { + if (CitizensAPI.getNPCRegistry().isNPC(player)) { + okay = false; + } + } + + if (okay) { + + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("killMob")) { + quester.killMob(evt.getEntity().getLocation(), evt.getEntity().getType()); + } + + } + } + + } else if (damager instanceof Player) { + + boolean okay = true; + + if (plugin.citizens != null) { + if (CitizensAPI.getNPCRegistry().isNPC(damager)) { + okay = false; + } + } + + if (okay) { + + Player player = (Player) damager; + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("killMob")) { + quester.killMob(evt.getEntity().getLocation(), evt.getEntity().getType()); + } + + } + } + + } + + } + + } + + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent evt) { + + if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) { + + EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause(); + Entity damager = damageEvent.getDamager(); + + if (damager != null) { + + if (damager instanceof Projectile) { + + Projectile p = (Projectile) damager; + if (p.getShooter() instanceof Player) { + + Player player = (Player) p.getShooter(); + + if (plugin.checkQuester(player.getName()) == false) { + + boolean okay = true; + + if (plugin.citizens != null) { + if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) { + okay = false; + } + } + + if (okay) { + + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("killPlayer")) { + quester.killPlayer(evt.getEntity().getName()); + } + + } + + } + + } + + } else if (damager instanceof Player) { + + Player player = (Player) damager; + + if (plugin.checkQuester(player.getName()) == false) { + + boolean okay = true; + + if (plugin.citizens != null) { + + if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) { + okay = false; + } + + } + + if (okay) { + + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("killPlayer")) { + quester.killPlayer(evt.getEntity().getName()); + } + + } + + } + } + + } + + } + + } + + @EventHandler + public void onPlayerFish(PlayerFishEvent evt) { + + Player player = evt.getPlayer(); + if(plugin.checkQuester(player.getName()) == false){ + + Quester quester = plugin.getQuester(player.getName()); + if (quester.hasObjective("catchFish") && evt.getState().equals(State.CAUGHT_FISH)) { + quester.catchFish(); + } + + } + + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent evt) { + + if(plugin.checkQuester(evt.getPlayer().getName()) == false){ + + Quester quester = new Quester(plugin); + quester.name = evt.getPlayer().getName(); + if (new File(plugin.getDataFolder(), "data/" + quester.name + ".yml").exists()) { + quester.loadData(); + } else { + quester.saveData(); + } + plugin.questers.put(evt.getPlayer().getName(), quester); + + for (String s : quester.completedQuests) { + + Quest q = plugin.getQuest(s); + + if (q != null) { + + if (quester.completedTimes.containsKey(q.name) == false && q.redoDelay > -1) + quester.completedTimes.put(q.name, System.currentTimeMillis()); + + } + + } + + quester.checkQuest(); + + if(quester.currentQuest != null){ + + if(quester.currentStage.delay > -1){ + + quester.startStageTimer(); + + } + + } + + } + + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent evt) { + + if(plugin.checkQuester(evt.getPlayer().getName()) == false){ + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + if(quester.currentQuest != null){ + if(quester.currentStage.delay > -1) + quester.stopStageTimer(); + } + quester.saveData(); + + plugin.questers.remove(quester.name); + + } + + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent evt) { + + if(plugin.checkQuester(evt.getPlayer().getName()) == false){ + + boolean isPlayer = true; + if (plugin.citizens != null) { + if (CitizensAPI.getNPCRegistry().isNPC(evt.getPlayer())) { + isPlayer = false; + } + } + + if (isPlayer) { + + Quester quester = plugin.getQuester(evt.getPlayer().getName()); + + if (quester.hasObjective("reachLocation")) { + + quester.reachLocation(evt.getTo()); + + } + + } + + } + + } +} diff --git a/src/main/java/me/blackvein/quests/Quest.java b/src/main/java/me/blackvein/quests/Quest.java index 4316eba41..c36ed17ca 100644 --- a/src/main/java/me/blackvein/quests/Quest.java +++ b/src/main/java/me/blackvein/quests/Quest.java @@ -173,7 +173,13 @@ public class Quest { q.reset(); q.completedQuests.add(name); String none = ChatColor.GRAY + "- (None)"; - player.sendMessage(Quests.parseString(finished, q.currentQuest)); + + String ps = Quests.parseString(finished, q.currentQuest); + + for (String msg : ps.split("
")) { + player.sendMessage(msg); + } + if(moneyReward > 0 && Quests.economy != null){ Quests.economy.depositPlayer(q.name, moneyReward); none = null; diff --git a/src/main/java/me/blackvein/quests/QuestFactory.java b/src/main/java/me/blackvein/quests/QuestFactory.java index 94c428fba..69329a897 100644 --- a/src/main/java/me/blackvein/quests/QuestFactory.java +++ b/src/main/java/me/blackvein/quests/QuestFactory.java @@ -611,6 +611,12 @@ public class QuestFactory implements ConversationAbandonedListener, ColorUtil { public Prompt acceptInput(ConversationContext context, String input) { 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); } @@ -632,6 +638,12 @@ public class QuestFactory implements ConversationAbandonedListener, ColorUtil { public Prompt acceptInput(ConversationContext context, String input) { 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); } diff --git a/src/main/java/me/blackvein/quests/Quests.java b/src/main/java/me/blackvein/quests/Quests.java index feecc8463..30ea91850 100644 --- a/src/main/java/me/blackvein/quests/Quests.java +++ b/src/main/java/me/blackvein/quests/Quests.java @@ -222,8 +222,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener, loadEvents(); log.log(Level.INFO, "[Quests] " + quests.size() + " Quest(s) loaded."); log.log(Level.INFO, "[Quests] " + events.size() + " Event(s) loaded."); + questers.putAll(getOnlineQuesters()); if (snoop) { - questers.putAll(getOnlineQuesters()); snoop(); } } @@ -779,6 +779,11 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener, + RESET + getQuest(quester.questToTake).description + "\n"; cs.sendMessage(s); + + for (String msg : s.split("
")) { + cs.sendMessage(msg); + } + conversationFactory.buildConversation((Conversable) cs).begin(); } else { diff --git a/src/main/java/me/blackvein/quests/prompts/QuestAcceptPrompt.java b/src/main/java/me/blackvein/quests/prompts/QuestAcceptPrompt.java index 6788d2266..fcfa16498 100644 --- a/src/main/java/me/blackvein/quests/prompts/QuestAcceptPrompt.java +++ b/src/main/java/me/blackvein/quests/prompts/QuestAcceptPrompt.java @@ -1,150 +1,154 @@ -package me.blackvein.quests.prompts; - -import java.text.MessageFormat; -import java.util.LinkedList; -import me.blackvein.quests.ColorUtil; -import me.blackvein.quests.Quest; -import me.blackvein.quests.Quester; -import me.blackvein.quests.Quests; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.conversations.Conversable; -import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; -import org.bukkit.entity.Player; - -public class QuestAcceptPrompt extends StringPrompt implements ColorUtil { - - final Quests plugin; - Quester quester; - LinkedList quests; - - public QuestAcceptPrompt(Quests plugin) { - - this.plugin = plugin; - } - - @Override - public String getPromptText(ConversationContext cc) { - - quests = (LinkedList) cc.getSessionData("quests"); - quester = plugin.getQuester(((Player) cc.getForWhom()).getName()); - - String npc = (String) cc.getSessionData("npc"); - String menu = YELLOW + "- " + GOLD + "Quests" + " | " + npc + YELLOW + " -\n"; - for (int i = 1; i <= quests.size(); i++) { - - Quest quest = quests.get(i - 1); - if (quester.completedQuests.contains(quest.getName())) { - menu += DARKGREEN + "" + BOLD + "" + i + ". " + RESET + "" + GREEN + "" + ITALIC + quest.getName() + RESET + "" + GREEN + " (Completed)\n"; - } else { - menu += GOLD + "" + BOLD + "" + i + ". " + RESET + "" + YELLOW + "" + ITALIC + quest.getName() + "\n"; - } - - } - - menu += GOLD + "" + BOLD + "" + (quests.size() + 1) + ". " + RESET + "" + ColorUtil.GRAY + "Cancel\n"; - menu += WHITE + "Enter an option"; - - return menu; - } - - @Override - public Prompt acceptInput(ConversationContext cc, String input) { - - int numInput = -1; - try { - numInput = Integer.parseInt(input); - } catch (Exception e) { - //Continue - } - - if (input.equalsIgnoreCase("Cancel") || numInput == (quests.size() + 1)) { - cc.getForWhom().sendRawMessage(YELLOW + "Cancelled."); - return Prompt.END_OF_CONVERSATION; - } else { - - Quest q = null; - - for (Quest quest : quests) { - - if (quest.getName().equalsIgnoreCase(input) || StringUtils.containsIgnoreCase(quest.getName(), input) || numInput == (quests.indexOf(quest) + 1)) { - q = quest; - break; - } - - } - - if (q == null) { - cc.getForWhom().sendRawMessage(RED + "Invalid Selection!"); - return new QuestAcceptPrompt(plugin); - } else { - - Player player = quester.getPlayer(); - - if (!quester.completedQuests.contains(q.name)) { - - if (quester.currentQuest == null) { - - if(q.testRequirements(quester)){ - - quester.questToTake = q.name; - - String s = extracted(quester); - player.sendMessage(s); - plugin.conversationFactory.buildConversation((Conversable) player).begin(); - - }else{ - player.sendMessage(q.failRequirements); - } - - } else if (quester.currentQuest.equals(q) == false) { - - player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); - - } - - } else if (quester.completedQuests.contains(q.name)) { - - if (quester.currentQuest == null) { - - if (quester.getDifference(q) > 0) { - 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) { - player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); - } else { - quester.questToTake = q.name; - String s = extracted(quester); - - player.sendMessage(s); - - plugin.conversationFactory.buildConversation((Conversable) player).begin(); - } - - } else if (quester.currentQuest.equals(q) == false) { - - player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); - - } - - } - - 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, - ChatColor.GOLD, - ChatColor.RESET, plugin.getQuest(quester.questToTake).description); - } -} +package me.blackvein.quests.prompts; + +import java.text.MessageFormat; +import java.util.LinkedList; +import me.blackvein.quests.ColorUtil; +import me.blackvein.quests.Quest; +import me.blackvein.quests.Quester; +import me.blackvein.quests.Quests; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.conversations.Conversable; +import org.bukkit.conversations.ConversationContext; +import org.bukkit.conversations.Prompt; +import org.bukkit.conversations.StringPrompt; +import org.bukkit.entity.Player; + +public class QuestAcceptPrompt extends StringPrompt implements ColorUtil { + + final Quests plugin; + Quester quester; + LinkedList quests; + + public QuestAcceptPrompt(Quests plugin) { + + this.plugin = plugin; + } + + @Override + public String getPromptText(ConversationContext cc) { + + quests = (LinkedList) cc.getSessionData("quests"); + quester = plugin.getQuester(((Player) cc.getForWhom()).getName()); + + String npc = (String) cc.getSessionData("npc"); + String menu = YELLOW + "- " + GOLD + "Quests" + " | " + npc + YELLOW + " -\n"; + for (int i = 1; i <= quests.size(); i++) { + + Quest quest = quests.get(i - 1); + if (quester.completedQuests.contains(quest.getName())) { + menu += DARKGREEN + "" + BOLD + "" + i + ". " + RESET + "" + GREEN + "" + ITALIC + quest.getName() + RESET + "" + GREEN + " (Completed)\n"; + } else { + menu += GOLD + "" + BOLD + "" + i + ". " + RESET + "" + YELLOW + "" + ITALIC + quest.getName() + "\n"; + } + + } + + menu += GOLD + "" + BOLD + "" + (quests.size() + 1) + ". " + RESET + "" + ColorUtil.GRAY + "Cancel\n"; + menu += WHITE + "Enter an option"; + + return menu; + } + + @Override + public Prompt acceptInput(ConversationContext cc, String input) { + + int numInput = -1; + try { + numInput = Integer.parseInt(input); + } catch (Exception e) { + //Continue + } + + if (input.equalsIgnoreCase("Cancel") || numInput == (quests.size() + 1)) { + cc.getForWhom().sendRawMessage(YELLOW + "Cancelled."); + return Prompt.END_OF_CONVERSATION; + } else { + + Quest q = null; + + for (Quest quest : quests) { + + if (quest.getName().equalsIgnoreCase(input) || StringUtils.containsIgnoreCase(quest.getName(), input) || numInput == (quests.indexOf(quest) + 1)) { + q = quest; + break; + } + + } + + if (q == null) { + cc.getForWhom().sendRawMessage(RED + "Invalid Selection!"); + return new QuestAcceptPrompt(plugin); + } else { + + Player player = quester.getPlayer(); + + if (!quester.completedQuests.contains(q.name)) { + + if (quester.currentQuest == null) { + + if(q.testRequirements(quester)){ + + quester.questToTake = q.name; + + String s = extracted(quester); + + for (String msg : s.split("
")) { + player.sendMessage(msg); + } + + plugin.conversationFactory.buildConversation((Conversable) player).begin(); + + }else{ + player.sendMessage(q.failRequirements); + } + + } else if (quester.currentQuest.equals(q) == false) { + + player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); + + } + + } else if (quester.completedQuests.contains(q.name)) { + + if (quester.currentQuest == null) { + + if (quester.getDifference(q) > 0) { + 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) { + player.sendMessage(ChatColor.YELLOW + "You have already completed " + ChatColor.AQUA + q.name + ChatColor.YELLOW + "."); + } else { + quester.questToTake = q.name; + String s = extracted(quester); + + player.sendMessage(s); + + plugin.conversationFactory.buildConversation((Conversable) player).begin(); + } + + } else if (quester.currentQuest.equals(q) == false) { + + player.sendMessage(ChatColor.YELLOW + "You may only have one active Quest."); + + } + + } + + 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, + ChatColor.GOLD, + ChatColor.RESET, plugin.getQuest(quester.questToTake).description); + } +}