Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
31 changed files
with
3,075 additions
and
1,545 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
141 changes: 141 additions & 0 deletions
141
core/src/main/java/me/blackvein/quests/commands/QuestsSubCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
/* | ||
* Copyright (c) 2014 PikaMug and contributors. All rights reserved. | ||
* | ||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | ||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
package me.blackvein.quests.commands; | ||
|
||
import me.blackvein.quests.util.Lang; | ||
import org.bukkit.Bukkit; | ||
import org.bukkit.ChatColor; | ||
import org.bukkit.OfflinePlayer; | ||
import org.bukkit.command.CommandSender; | ||
import org.bukkit.entity.Player; | ||
|
||
import java.util.LinkedHashMap; | ||
import java.util.LinkedList; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
public abstract class QuestsSubCommand { | ||
|
||
public abstract String getName(); | ||
|
||
public abstract String getNameI18N(); | ||
|
||
public abstract String getDescription(); | ||
|
||
public abstract String getPermission(); | ||
|
||
public abstract String getSyntax(); | ||
|
||
public abstract void execute(CommandSender commandSender, String[] args); | ||
|
||
public static boolean assertNonPlayer(CommandSender commandSender) { | ||
if (!(commandSender instanceof Player)) { | ||
commandSender.sendMessage(ChatColor.YELLOW + Lang.get("consoleError")); | ||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
/** | ||
* Get an online Player by name | ||
* | ||
* @param name Name of the player | ||
* @return Player or null if not found | ||
*/ | ||
public static Player getOnlinePlayer(final String name) { | ||
if (name == null) { | ||
return null; | ||
} | ||
for (final Player p : Bukkit.getServer().getOnlinePlayers()) { | ||
if (p.getName().equalsIgnoreCase(name)) { | ||
return p; | ||
} | ||
} | ||
for (final Player p : Bukkit.getServer().getOnlinePlayers()) { | ||
if (p.getName().toLowerCase().startsWith(name)) { | ||
return p; | ||
} | ||
} | ||
for (final Player p : Bukkit.getServer().getOnlinePlayers()) { | ||
if (p.getName().toLowerCase().contains(name)) { | ||
return p; | ||
} | ||
} | ||
return null; | ||
} | ||
|
||
/** | ||
* Get a potentially offline Player by name | ||
* | ||
* @param name Name of the player | ||
* @return Player or null if not found | ||
*/ | ||
public static OfflinePlayer getOfflinePlayer(final String name) { | ||
if (name == null) { | ||
return null; | ||
} | ||
final Player player = getOnlinePlayer(name); | ||
if (player != null) { | ||
return player; | ||
} | ||
for (final OfflinePlayer p : Bukkit.getServer().getOfflinePlayers()) { | ||
if (p != null && p.getName() != null && p.getName().equalsIgnoreCase(name)) { | ||
return p; | ||
} | ||
} | ||
for (final OfflinePlayer p : Bukkit.getServer().getOfflinePlayers()) { | ||
if (p != null && p.getName() != null && p.getName().toLowerCase().startsWith(name)) { | ||
return p; | ||
} | ||
} | ||
for (final OfflinePlayer p : Bukkit.getServer().getOfflinePlayers()) { | ||
if (p != null && p.getName() != null && p.getName().toLowerCase().contains(name)) { | ||
return p; | ||
} | ||
} | ||
return null; | ||
} | ||
|
||
/** | ||
* Used to get quest names that contain spaces from command input | ||
* | ||
* @param args an array of Strings | ||
* @param startingIndex the index to start combining at | ||
* @param endingIndex the index to stop combining at | ||
* @param delimiter the character for which the array was split | ||
* @return a String or null | ||
*/ | ||
public static String concatArgArray(final String[] args, final int startingIndex, final int endingIndex, | ||
final char delimiter) { | ||
StringBuilder s = new StringBuilder(); | ||
for (int i = startingIndex; i <= endingIndex; i++) { | ||
s.append(args[i]).append(delimiter); | ||
} | ||
s = new StringBuilder(s.substring(0, s.length())); | ||
return s.toString().trim().equals("") ? null : s.toString().trim(); | ||
} | ||
|
||
public static Map<String, Integer> sort(final Map<String, Integer> unsortedMap) { | ||
final List<Map.Entry<String, Integer>> list = new LinkedList<>(unsortedMap.entrySet()); | ||
list.sort((o1, o2) -> { | ||
final int i = o1.getValue(); | ||
final int i2 = o2.getValue(); | ||
return Integer.compare(i2, i); | ||
}); | ||
final Map<String, Integer> sortedMap = new LinkedHashMap<>(); | ||
for (final Map.Entry<String, Integer> entry : list) { | ||
sortedMap.put(entry.getKey(), entry.getValue()); | ||
} | ||
return sortedMap; | ||
} | ||
} |
218 changes: 218 additions & 0 deletions
218
core/src/main/java/me/blackvein/quests/commands/quest/QuestCommandHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,218 @@ | ||
/* | ||
* Copyright (c) 2014 PikaMug and contributors. All rights reserved. | ||
* | ||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | ||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
package me.blackvein.quests.commands.quest; | ||
|
||
import me.blackvein.quests.Quests; | ||
import me.blackvein.quests.player.IQuester; | ||
import me.blackvein.quests.quests.IQuest; | ||
import me.blackvein.quests.quests.IStage; | ||
import me.blackvein.quests.quests.Requirements; | ||
import me.blackvein.quests.util.ItemUtil; | ||
import me.blackvein.quests.util.Lang; | ||
import me.blackvein.quests.util.MiscUtil; | ||
import org.bukkit.ChatColor; | ||
import org.bukkit.command.CommandSender; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.inventory.ItemStack; | ||
|
||
public class QuestCommandHandler { | ||
|
||
private final Quests plugin; | ||
|
||
public QuestCommandHandler(Quests plugin) { | ||
this.plugin = plugin; | ||
} | ||
|
||
public boolean check(final CommandSender cs, final String[] args) { | ||
if (cs instanceof Player) { | ||
if (cs.hasPermission("quests.quest")) { | ||
if (args.length == 0) { | ||
final Player player = (Player) cs; | ||
final IQuester quester = plugin.getQuester(player.getUniqueId()); | ||
if (!quester.getCurrentQuestsTemp().isEmpty()) { | ||
for (final IQuest q : quester.getCurrentQuestsTemp().keySet()) { | ||
final IStage stage = quester.getCurrentStage(q); | ||
q.updateCompass(quester, stage); | ||
if (plugin.getQuester(player.getUniqueId()).getQuestData(q).getDelayStartTime() == 0) { | ||
final String msg = Lang.get(player, "questObjectivesTitle") | ||
.replace("<quest>", q.getName()); | ||
Lang.send(player, ChatColor.GOLD + msg); | ||
plugin.showObjectives(q, quester, false); | ||
} else { | ||
final long time = plugin.getQuester(player.getUniqueId()).getStageTime(q); | ||
String msg = ChatColor.YELLOW + "(" + Lang.get(player, "delay") + ") " + ChatColor.RED | ||
+ Lang.get(player, "plnTooEarly"); | ||
msg = msg.replace("<quest>", q.getName()); | ||
msg = msg.replace("<time>", MiscUtil.getTime(time)); | ||
Lang.send(player, msg); | ||
} | ||
} | ||
} else { | ||
Lang.send(player, ChatColor.YELLOW + Lang.get(player, "noActiveQuest")); | ||
} | ||
} else { | ||
showQuestDetails(cs, args); | ||
} | ||
} else { | ||
cs.sendMessage(ChatColor.RED + Lang.get("noPermission")); | ||
return true; | ||
} | ||
} else { | ||
cs.sendMessage(ChatColor.YELLOW + Lang.get("consoleError")); | ||
return true; | ||
} | ||
return true; | ||
} | ||
|
||
private void showQuestDetails(final CommandSender cs, final String[] args) { | ||
if (cs.hasPermission("quests.questinfo")) { | ||
StringBuilder name = new StringBuilder(); | ||
if (args.length == 1) { | ||
name = new StringBuilder(args[0].toLowerCase()); | ||
} else { | ||
int index = 0; | ||
for (final String s : args) { | ||
if (index == (args.length - 1)) { | ||
name.append(s.toLowerCase()); | ||
} else { | ||
name.append(s.toLowerCase()).append(" "); | ||
} | ||
index++; | ||
} | ||
} | ||
final IQuest q = plugin.getQuestTemp(name.toString()); | ||
if (q != null) { | ||
final Player player = (Player) cs; | ||
final IQuester quester = plugin.getQuester(player.getUniqueId()); | ||
cs.sendMessage(ChatColor.GOLD + "- " + q.getName() + " -"); | ||
cs.sendMessage(" "); | ||
if (q.getNpcStart() != null) { | ||
String msg = Lang.get("speakTo"); | ||
msg = msg.replace("<npc>", q.getNpcStart().getName()); | ||
cs.sendMessage(ChatColor.YELLOW + msg); | ||
} else { | ||
cs.sendMessage(ChatColor.YELLOW + q.getDescription()); | ||
} | ||
cs.sendMessage(" "); | ||
if (plugin.getSettings().canShowQuestReqs()) { | ||
cs.sendMessage(ChatColor.GOLD + Lang.get("requirements")); | ||
final Requirements reqs = q.getRequirements(); | ||
if (!reqs.getPermissions().isEmpty()) { | ||
for (final String perm : reqs.getPermissions()) { | ||
if (plugin.getDependencies().getVaultPermission().has(player, perm)) { | ||
cs.sendMessage(ChatColor.GREEN + Lang.get("permissionDisplay") + " " + perm); | ||
} else { | ||
cs.sendMessage(ChatColor.RED + Lang.get("permissionDisplay") + " " + perm); | ||
} | ||
} | ||
} | ||
if (reqs.getHeroesPrimaryClass() != null) { | ||
if (plugin.getDependencies() | ||
.testPrimaryHeroesClass(reqs.getHeroesPrimaryClass(), player.getUniqueId())) { | ||
cs.sendMessage(ChatColor.BOLD + "" + ChatColor.GREEN + reqs.getHeroesPrimaryClass() | ||
+ ChatColor.RESET + "" + ChatColor.DARK_GREEN + " " + Lang.get("heroesClass")); | ||
} else { | ||
cs.sendMessage(ChatColor.BOLD + "" + ChatColor.DARK_RED + reqs.getHeroesPrimaryClass() | ||
+ ChatColor.RESET + "" + ChatColor.RED + " " + Lang.get("heroesClass")); | ||
} | ||
} | ||
if (reqs.getHeroesSecondaryClass() != null) { | ||
if (plugin.getDependencies() | ||
.testSecondaryHeroesClass(reqs.getHeroesSecondaryClass(), player.getUniqueId())) { | ||
cs.sendMessage(ChatColor.BOLD + "" + ChatColor.DARK_RED + reqs.getHeroesSecondaryClass() | ||
+ ChatColor.RESET + "" + ChatColor.RED + " " + Lang.get("heroesClass")); | ||
} else { | ||
cs.sendMessage(ChatColor.BOLD + "" + ChatColor.GREEN + reqs.getHeroesSecondaryClass() | ||
+ ChatColor.RESET + "" + ChatColor.DARK_GREEN + " " + Lang.get("heroesClass")); | ||
} | ||
} | ||
if (!reqs.getMcmmoSkills().isEmpty()) { | ||
for (final String skill : reqs.getMcmmoSkills()) { | ||
final int level = plugin.getDependencies().getMcmmoSkillLevel(Quests | ||
.getMcMMOSkill(skill), player.getName()); | ||
final int req = reqs.getMcmmoAmounts().get(reqs.getMcmmoSkills().indexOf(skill)); | ||
final String skillName = MiscUtil.getCapitalized(skill); | ||
if (level >= req) { | ||
cs.sendMessage(ChatColor.GREEN + skillName + " " + Lang.get("mcMMOLevel") + " " + req); | ||
} else { | ||
cs.sendMessage(ChatColor.RED + skillName + " " + Lang.get("mcMMOLevel") + " " + req); | ||
} | ||
} | ||
} | ||
if (reqs.getQuestPoints() != 0) { | ||
if (quester.getQuestPoints() >= reqs.getQuestPoints()) { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.GREEN + reqs.getQuestPoints() + " " | ||
+ Lang.get("questPoints")); | ||
} else { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.RED + reqs.getQuestPoints() + " " | ||
+ Lang.get("questPoints")); | ||
} | ||
} | ||
if (reqs.getMoney() != 0) { | ||
if (plugin.getDependencies().getVaultEconomy() != null && plugin.getDependencies() | ||
.getVaultEconomy().getBalance(quester.getOfflinePlayer()) >= reqs.getMoney()) { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.GREEN + reqs.getMoney() + " " | ||
+ (reqs.getMoney() > 1 ? plugin.getDependencies().getVaultEconomy() | ||
.currencyNamePlural() : plugin.getDependencies().getVaultEconomy() | ||
.currencyNameSingular())); | ||
} else { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.RED + reqs.getMoney() + " " | ||
+ (reqs.getMoney() > 1 ? plugin.getDependencies().getVaultEconomy() | ||
.currencyNamePlural() : plugin.getDependencies().getVaultEconomy() | ||
.currencyNameSingular())); | ||
} | ||
} | ||
if (!reqs.getItems().isEmpty()) { | ||
for (final ItemStack is : reqs.getItems()) { | ||
if (plugin.getQuester(player.getUniqueId()).hasItem(is)) { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.GREEN + ItemUtil.getString(is)); | ||
} else { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.RED + ItemUtil.getString(is)); | ||
} | ||
} | ||
} | ||
if (!reqs.getNeededQuests().isEmpty()) { | ||
for (final IQuest quest : reqs.getNeededQuests()) { | ||
if (quester.getCompletedQuestsTemp().contains(quest)) { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.GREEN + Lang.get("complete") + " " | ||
+ ChatColor.ITALIC + quest.getName()); | ||
} else { | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.RED + Lang.get("complete") + " " | ||
+ ChatColor.ITALIC + quest.getName()); | ||
} | ||
} | ||
} | ||
if (!reqs.getBlockQuests().isEmpty()) { | ||
for (final IQuest quest : reqs.getBlockQuests()) { | ||
if (quester.getCompletedQuestsTemp().contains(quest)) { | ||
String msg = Lang.get("haveCompleted"); | ||
msg = msg.replace("<quest>", ChatColor.ITALIC + "" + ChatColor.DARK_PURPLE | ||
+ quest.getName() + ChatColor.RED); | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.RED + msg); | ||
} else { | ||
String msg = Lang.get("cannotComplete"); | ||
msg = msg.replace("<quest>", ChatColor.ITALIC + "" + ChatColor.DARK_PURPLE | ||
+ quest.getName() + ChatColor.GREEN); | ||
cs.sendMessage(ChatColor.GRAY + "- " + ChatColor.GREEN + msg); | ||
} | ||
} | ||
} | ||
} | ||
} else { | ||
cs.sendMessage(ChatColor.YELLOW + Lang.get("questNotFound")); | ||
} | ||
} else { | ||
cs.sendMessage(ChatColor.RED + Lang.get("noPermission")); | ||
} | ||
} | ||
} |
Oops, something went wrong.