/* * Copyright (C) 2011 halvors <halvors@skymiastudios.com> * Copyright (C) 2011 speeddemon92 <speeddemon92@gmail.com> * Copyright (C) 2011 adamonline45 <adamonline45@gmail.com> * * This file is part of Lupi. * * Lupi is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Lupi is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Lupi. If not, see <http://www.gnu.org/licenses/>. */ package org.halvors.lupi.command; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.halvors.lupi.Lupi; import org.halvors.lupi.util.ConfigurationManager; import org.halvors.lupi.util.LupiUtil; import org.halvors.lupi.util.WolfUtil; import org.halvors.lupi.util.WorldConfiguration; import org.halvors.lupi.wolf.SelectedWolfManager; import org.halvors.lupi.wolf.Wolf; import org.halvors.lupi.wolf.WolfManager; /** * WolfCommand. * * @author halvors */ public class WolfCommand implements CommandExecutor { private final Lupi plugin; private final ConfigurationManager configManager; private final WolfManager wolfManager; private final SelectedWolfManager selectedWolfManager; public WolfCommand(Lupi plugin) { this.plugin = plugin; this.configManager = plugin.getConfigurationManager(); this.wolfManager = plugin.getWolfManager(); this.selectedWolfManager = plugin.getSelectedWolfManager(); } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (args.length == 0) { if (sender.hasPermission("lupi.wolf.list")) { if (sender instanceof Player) { showPlayerWolves((Player) sender); } else { showWolves(sender); } } return true; } else { String subCommand = args[0]; if (subCommand.equalsIgnoreCase("reload")) { if (sender.hasPermission("lupi.admin.reload")) { configManager.reload(); sender.sendMessage(ChatColor.GREEN + "Reload complete."); } return true; } else if (subCommand.equalsIgnoreCase("help")) { if (sender.hasPermission("lupi.wolf.help")) { showHelp(sender, label); } return true; } else if (subCommand.equalsIgnoreCase("list")) { if (sender.hasPermission("lupi.wolf.list")) { showWolves(sender); } return true; } if (sender instanceof Player) { Player player = (Player) sender; if (subCommand.equalsIgnoreCase("info")) { if (sender.hasPermission("lupi.wolf.info")) { Wolf wolf = null; String owner = player.getName(); if (args.length == 1) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 2) { String name = args[1]; if (wolfManager.hasWolf(name, owner)) { wolf = wolfManager.getWolf(name, owner); } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { sender.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null) { WolfUtil.showInfo(sender, wolf); } } return true; } else if (subCommand.equalsIgnoreCase("setname")) { if (sender.hasPermission("lupi.wolf.setname")) { Wolf wolf = null; String owner = player.getName(); String name = null; if (args.length == 2) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); name = args[1]; } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 3){ String oldName = args[1]; if (wolfManager.hasWolf(oldName, owner)) { wolf = wolfManager.getWolf(oldName, owner); name = args[2]; } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { sender.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null && name != null) { sender.sendMessage(ChatColor.YELLOW + wolf.getName() + ChatColor.WHITE + " has changed name to " + ChatColor.YELLOW + name + ChatColor.WHITE + "."); wolf.setName(name); } } return true; } else if (subCommand.equalsIgnoreCase("call")) { if (sender.hasPermission("lupi.wolf.call")) { Wolf wolf = null; String owner = player.getName(); if (args.length == 1) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 2) { String name = args[1]; if (wolfManager.hasWolf(name, owner)) { wolf = wolfManager.getWolf(name, owner); } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { sender.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null) { org.bukkit.entity.Wolf bukkitWolf = wolf.getEntity(); bukkitWolf.teleport(player); sender.sendMessage(ChatColor.GREEN + "Your wolf is on it's way."); } } return true; } else if (subCommand.equalsIgnoreCase("stop")) { if (sender.hasPermission("lupi.wolf.stop")) { Wolf wolf = null; String owner = player.getName(); if (args.length == 1) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 2){ String name = args[1]; if (wolfManager.hasWolf(name, owner)) { wolf = wolfManager.getWolf(name, owner); } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { sender.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null) { org.bukkit.entity.Wolf bukkitWolf = wolf.getEntity(); bukkitWolf.setTarget(null); sender.sendMessage(ChatColor.YELLOW + wolf.getName() + ChatColor.WHITE + " has stopped attacking."); } } return true; } else if (subCommand.equalsIgnoreCase("give")) { if (sender.hasPermission("lupi.wolf.give")) { Wolf wolf = null; Player receiver = null; World world = player.getWorld(); WorldConfiguration worldConfig = configManager.get(world); String owner = player.getName(); if (args.length == 2) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); receiver = LupiUtil.getPlayer(args[1]); } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 3) { String name = args[1]; if (wolfManager.hasWolf(name, owner)) { wolf = wolfManager.getWolf(name, owner); receiver = LupiUtil.getPlayer(args[2]); } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { sender.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null && receiver != null) { org.bukkit.entity.Wolf bukkitWolf = wolf.getEntity(); String name = wolf.getName(); String to = receiver.getName(); int limit = worldConfig.wolfLimit; if (limit > 0) { if (limit <= wolfManager.getWolves(player).size()) { sender.sendMessage("You can't give " + ChatColor.YELLOW + name + ChatColor.WHITE + " to " + ChatColor.YELLOW + to + ChatColor.WHITE + " because he has reached the limit, limit is " + ChatColor.YELLOW + Integer.toString(limit) + ChatColor.WHITE + " wolves."); receiver.sendMessage(owner + " tried to give you " + ChatColor.YELLOW + name + ChatColor.WHITE + " but you can't receive the wolf because the limit is " + ChatColor.YELLOW + Integer.toString(limit) + ChatColor.WHITE + " wolves."); return false; } } wolf.setOwner(receiver); bukkitWolf.teleport(receiver); sender.sendMessage(ChatColor.YELLOW + name + ChatColor.WHITE + " was given to " + ChatColor.YELLOW + to + ChatColor.WHITE + "."); receiver.sendMessage("You have received " + ChatColor.YELLOW + name + ChatColor.WHITE + " from " + ChatColor.YELLOW + owner + ChatColor.WHITE + "."); } } return true; } else if (subCommand.equalsIgnoreCase("release")) { if (sender.hasPermission("lupi.wolf.release")) { Wolf wolf = null; String owner = player.getName(); if (args.length == 1) { if (selectedWolfManager.hasSelectedWolf(player)) { wolf = wolfManager.getWolf(selectedWolfManager.getSelectedWolf(player)); } else { sender.sendMessage(ChatColor.RED + "No wolf selected."); } } else if (args.length == 2){ String name = args[1]; if (wolfManager.hasWolf(name, owner)) { wolf = wolfManager.getWolf(name, owner); } else { sender.sendMessage(ChatColor.RED + "That wolf doesn't exists."); } } else { player.sendMessage(ChatColor.RED + "Too many arguments."); } if (wolf != null) { sender.sendMessage(ChatColor.YELLOW + wolf.getName() + ChatColor.WHITE + " has been released."); wolfManager.releaseWolf(wolf.getEntity()); } } return true; } else { sender.sendMessage(ChatColor.RED + "Sorry but these commands are for in-game players only."); } } } return false; } /** * Show player wolves. * * @param player */ private void showPlayerWolves(Player player) { List<org.halvors.lupi.wolf.Wolf> wolves = wolfManager.getWolves(player); if (!wolves.isEmpty()) { player.sendMessage("Your wolves " + ChatColor.YELLOW + "(" + ChatColor.WHITE + wolves.size() + ChatColor.YELLOW + ")"); for (org.halvors.lupi.wolf.Wolf wolf : wolves) { player.sendMessage(ChatColor.YELLOW + wolf.getName()); } } else { player.sendMessage(ChatColor.RED + "You have no wolves."); } } /** * Show all wolves. * * @param sender */ private void showWolves(CommandSender sender) { List<org.halvors.lupi.wolf.Wolf> wolves; if (sender instanceof Player) { Player player = (Player) sender; wolves = wolfManager.getWolves(player.getWorld()); } else { wolves = wolfManager.getWolves(); } if (!wolves.isEmpty()) { sender.sendMessage("Wolves " + ChatColor.YELLOW + "(" + ChatColor.WHITE + wolves.size() + ChatColor.YELLOW + ")"); for (org.halvors.lupi.wolf.Wolf wolf : wolves) { sender.sendMessage(ChatColor.YELLOW + wolf.getName() + ChatColor.WHITE + " - " + wolf.getOwner().getName()); } } else { sender.sendMessage(ChatColor.RED + "There are no tamed wolves."); } } /** * Show help * * @param sender * @param label */ private void showHelp(CommandSender sender, String label) { String command = "/" + label + " "; sender.sendMessage(ChatColor.GREEN + plugin.getName() + ChatColor.GREEN + " (" + ChatColor.WHITE + plugin.getVersion() + ChatColor.GREEN + ")"); sender.sendMessage(ChatColor.RED + "[]" + ChatColor.WHITE + " Required, " + ChatColor.GREEN + "<>" + ChatColor.WHITE + " Optional."); if (sender.hasPermission("lupi.wolf.help")) { sender.sendMessage(command + "help" + ChatColor.YELLOW + " - Show help."); } if (sender.hasPermission("lupi.wolf.list")) { sender.sendMessage(command + "list" + ChatColor.YELLOW + " - Show a list of tamed wolves."); } if (sender.hasPermission("lupi.wolf.info")) { sender.sendMessage(command + "info " + ChatColor.GREEN + "<" + ChatColor.WHITE + "wolf" + ChatColor.GREEN + ">" + ChatColor.YELLOW + " - Show info about the wolf."); } if (sender.hasPermission("lupi.wolf.setname")) { sender.sendMessage(command + "setname " + ChatColor.GREEN + "<" + ChatColor.WHITE + "name" + ChatColor.GREEN + ">" + ChatColor.YELLOW + " - Set your wolf's name."); } if (sender.hasPermission("lupi.wolf.call")) { sender.sendMessage(command + "call " + ChatColor.GREEN + "<" + ChatColor.WHITE + "name" + ChatColor.GREEN + ">" + ChatColor.YELLOW + " - Call your wolf."); } if (sender.hasPermission("lupi.wolf.stop")) { sender.sendMessage(command + "stop " + ChatColor.GREEN + "<" + ChatColor.WHITE + "name" + ChatColor.GREEN + ">" + ChatColor.YELLOW + " - Stop your wolf from attacking."); } if (sender.hasPermission("lupi.wolf.give")) { sender.sendMessage(command + "give " + ChatColor.GREEN + "<" + ChatColor.WHITE + "name" + ChatColor.GREEN + "> [" + ChatColor.WHITE + "player" + ChatColor.GREEN + "]" + ChatColor.YELLOW + " - Release your wolf."); } if (sender.hasPermission("lupi.wolf.release")) { sender.sendMessage(command + "release " + ChatColor.GREEN + "<" + ChatColor.WHITE + "name" + ChatColor.GREEN + ">" + ChatColor.YELLOW + " - Release your wolf."); } } }