package de.tobiyas.racesandclasses.commands.bind; import static de.tobiyas.racesandclasses.translation.languages.Keys.trait_failed; import static de.tobiyas.racesandclasses.translation.languages.Keys.trait_toggled; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import de.tobiyas.racesandclasses.APIs.LanguageAPI; import de.tobiyas.racesandclasses.commands.AbstractCommand; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager; import de.tobiyas.racesandclasses.traitcontainer.interfaces.TraitResults; import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait; import de.tobiyas.racesandclasses.translation.languages.Keys; import de.tobiyas.racesandclasses.util.traitutil.TraitRegionChecker; public class CommandExecutor_UseTrait extends AbstractCommand implements Listener{ public CommandExecutor_UseTrait() { super("usetrait", new String[]{"ut"}); } @Override public boolean onInternalCommand(CommandSender sender, Command command, String label, String[] args) { if(!(sender instanceof Player)) return false; RaCPlayer player = RaCPlayerManager.get().getPlayer((Player)sender); if(!plugin.getPermissionManager().checkPermissions(player.getPlayer(), "RaC.use")) return true; if(args.length < 1) { LanguageAPI.sendTranslatedMessage(player, Keys.wrong_command_use, "command", "&c " + getCommandNames().iterator().next() + " <skill name> or /" + getCommandNames().iterator().next() + " list to list all available Traits."); return true; } if("list".equalsIgnoreCase(args[0])){ String traits = ChatColor.GREEN + "Bindable Traits: "; for(Trait trait : player.getTraits()){ if(trait.isBindable()){ traits += " " + ChatColor.AQUA + trait.getDisplayName() + ChatColor.GREEN + ","; } } sender.sendMessage(traits); return true; } String spellName = StringUtils.join(args, " "); Trait selected = null; for(Trait trait : player.getTraits()){ if(trait.getName().equalsIgnoreCase(spellName) || trait.getDisplayName().equalsIgnoreCase(spellName)){ if(trait.isBindable()) { selected = trait; break; } } } if(selected == null){ sender.sendMessage(ChatColor.RED + "Could not find this Trait."); return true; } if(TraitRegionChecker.isInDisabledLocation(player.getLocation())){ LanguageAPI.sendTranslatedMessage(player, Keys.in_restricted_area); return true; } //trigger the Trait TraitResults result = selected.triggerOnBind(player); if(result.isTriggered()){ LanguageAPI.sendTranslatedMessage(player, trait_toggled, "name", selected.getDisplayName()); }else{ LanguageAPI.sendTranslatedMessage(player, trait_failed, "name", selected.getDisplayName()); } return true; } @Override public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) { List<String> values = new LinkedList<String>(); if(!(sender instanceof Player)) return values; if(args.length == 1){ for(Trait trait : RaCPlayerManager.get().getPlayer((Player) sender).getTraits()){ if(!trait.isBindable()) continue; if(trait.getDisplayName().toLowerCase().startsWith(args[0].toLowerCase())){ values.add(trait.getDisplayName()); } } } return values; } }