187 lines
3.9 KiB
Java
187 lines
3.9 KiB
Java
package net.mc_pandacraft.java.plugin.pandacraftutils.commands;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager;
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer;
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
|
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitScheduler;
|
|
|
|
public class CommandMuco extends AbstractCommandExecutor {
|
|
|
|
public CommandMuco() {
|
|
super("muco");
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(CommandSender sender, Command cmd, String label,
|
|
String[] args) {
|
|
|
|
if (args.length == 0) {
|
|
sendMucoLists(sender);
|
|
return true;
|
|
}
|
|
|
|
Map<String, List<String>> lists = ConfigManager.getInstance().MultiCommand_config;
|
|
|
|
|
|
String list_name = args[0].toLowerCase();
|
|
|
|
if (!lists.containsKey(list_name)) {
|
|
sender.sendMessage(ChatColor.RED+"La sous commande '"+list_name+"' n'existe pas");
|
|
return true;
|
|
}
|
|
|
|
if ((sender instanceof Player) && !OnlinePlayerManager.get((Player)sender).hasPermission("pandacraft.muco."+list_name)) {
|
|
sender.sendMessage(ChatColor.RED+"Vous n'avez pas la permission pour la sous commande '"+list_name+"'");
|
|
return true;
|
|
}
|
|
|
|
|
|
List<String> params = new ArrayList<String>();
|
|
|
|
|
|
for (int i=1; i<args.length; i++) {
|
|
params.add(args[i]);
|
|
}
|
|
|
|
|
|
|
|
List<String> list = lists.get(list_name);
|
|
|
|
for (String line : list) {
|
|
executeListedCommand(sender, line, params);
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void sendMucoLists(CommandSender sender) {
|
|
|
|
List<String> list_names = getMucoLists((sender instanceof Player)?OnlinePlayerManager.get((Player) sender):null);
|
|
|
|
sender.sendMessage(ChatColor.GOLD+"----- Liste des commandes /muco -----");
|
|
|
|
for (String name : list_names) {
|
|
sender.sendMessage(" - "+ChatColor.GRAY+name);
|
|
}
|
|
|
|
sender.sendMessage(ChatColor.GOLD+"-----------------------------------");
|
|
}
|
|
|
|
|
|
private List<String> getMucoLists(OnlinePlayer permittedPlayer) {
|
|
Set<String> list_names = ConfigManager.getInstance().MultiCommand_config.keySet();
|
|
|
|
List<String> retList = new ArrayList<String>();
|
|
|
|
for (String name : list_names) {
|
|
if (permittedPlayer == null || permittedPlayer.hasPermission("pandacraft.muco."+name))
|
|
retList.add(name);
|
|
}
|
|
|
|
return retList;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void executeListedCommand(CommandSender sender, String line, List<String> params) {
|
|
String[] args = line.split(" ", 4);
|
|
|
|
if (args.length != 4) {
|
|
plugin.getLogger().warning("/muco : bad format for "+ChatColor.ITALIC+line);
|
|
return;
|
|
}
|
|
|
|
long time;
|
|
|
|
try {
|
|
time = Integer.parseInt(args[0]);
|
|
} catch (NumberFormatException e) {
|
|
plugin.getLogger().warning("/muco : bad format for "+ChatColor.ITALIC+line);
|
|
return;
|
|
}
|
|
|
|
boolean console = args[1].equalsIgnoreCase("c");
|
|
boolean async = args[2].equalsIgnoreCase("a");
|
|
|
|
if (!args[3].startsWith("/")) {
|
|
plugin.getLogger().warning("/muco : bad format for "+ChatColor.ITALIC+line);
|
|
return;
|
|
}
|
|
|
|
String cmd = args[3].substring(1);
|
|
|
|
for (int i=0; i<params.size(); i++) {
|
|
cmd = cmd.replaceAll("\\$"+(i+1), params.get(i));
|
|
}
|
|
|
|
sender = console ? plugin.getServer().getConsoleSender() : sender;
|
|
|
|
BukkitScheduler scheduler = plugin.getServer().getScheduler();
|
|
|
|
Runnable executor = new Runnable() {
|
|
CommandSender sender; String cmd;
|
|
public Runnable init(CommandSender s, String c) {
|
|
sender = s; cmd = c;
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
plugin.getServer().dispatchCommand(sender, cmd);
|
|
}
|
|
}.init(sender, cmd);
|
|
|
|
|
|
if (async)
|
|
scheduler.runTaskLaterAsynchronously(plugin, executor, time);
|
|
else
|
|
scheduler.runTaskLater(plugin, executor, time);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|