package com.nisovin.magicspells.spells.command;
import java.util.Collection;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import com.nisovin.magicspells.MagicSpells;
import com.nisovin.magicspells.Spell;
import com.nisovin.magicspells.Spellbook;
import com.nisovin.magicspells.spells.CommandSpell;
import com.nisovin.magicspells.util.MagicConfig;
public class ListSpell extends CommandSpell {
private int lineLength = 60;
private boolean onlyShowCastableSpells;
private boolean reloadGrantedSpells;
private List<String> spellsToHide;
private String strNoSpells;
private String strPrefix;
public ListSpell(MagicConfig config, String spellName) {
super(config, spellName);
onlyShowCastableSpells = getConfigBoolean("only-show-castable-spells", false);
reloadGrantedSpells = getConfigBoolean("reload-granted-spells", true);
spellsToHide = getConfigStringList("spells-to-hide", null);
strNoSpells = getConfigString("str-no-spells", "You do not know any spells.");
strPrefix = getConfigString("str-prefix", "Known spells:");
}
@Override
public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) {
if (state == SpellCastState.NORMAL) {
Spellbook spellbook = MagicSpells.getSpellbook(player);
String extra = "";
if (args != null && args.length > 0 && spellbook.hasAdvancedPerm("list")) {
Player p = Bukkit.getServer().getPlayer(args[0]);
if (p != null) {
spellbook = MagicSpells.getSpellbook(p);
extra = "(" + p.getDisplayName() + ") ";
}
}
if (spellbook != null && reloadGrantedSpells) {
spellbook.addGrantedSpells();
}
if (spellbook == null || spellbook.getSpells().size() == 0) {
// no spells
sendMessage(player, strNoSpells);
} else {
String s = "";
for (Spell spell : spellbook.getSpells()) {
if (!spell.isHelperSpell() && (!onlyShowCastableSpells || spellbook.canCast(spell)) && !(spellsToHide != null && spellsToHide.contains(spell.getInternalName()))) {
if (s.equals("")) {
s = spell.getName();
} else {
s += ", " + spell.getName();
}
}
}
s = strPrefix + " " + extra + s;
while (s.length() > lineLength) {
int i = s.substring(0, lineLength).lastIndexOf(' ');
sendMessage(player, s.substring(0, i));
s = s.substring(i+1);
}
if (s.length() > 0) {
sendMessage(player, s);
}
}
}
return PostCastAction.HANDLE_NORMALLY;
}
@Override
public List<String> tabComplete(CommandSender sender, String partial) {
if (sender instanceof ConsoleCommandSender) {
if (!partial.contains(" ")) {
return tabCompletePlayerName(sender, partial);
}
}
return null;
}
@Override
public boolean castFromConsole(CommandSender sender, String[] args) {
StringBuilder s = new StringBuilder();
// get spell list
Collection<Spell> spells = MagicSpells.spells();
if (args != null && args.length > 0) {
Player p = Bukkit.getServer().getPlayer(args[0]);
if (p == null) {
sender.sendMessage("No such player.");
return true;
} else {
spells = MagicSpells.getSpellbook(p).getSpells();
s.append(p.getName() + "'s spells: ");
}
} else {
s.append("All spells: ");
}
// create string of spells
for (Spell spell : spells) {
s.append(spell.getName());
s.append(" ");
}
// send message
sender.sendMessage(s.toString());
return true;
}
}