package com.leontg77.uhc.cmds; import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import com.leontg77.uhc.Game; import com.leontg77.uhc.InvGUI; import com.leontg77.uhc.Main; import com.leontg77.uhc.Main.BorderShrink; import com.leontg77.uhc.utils.GameUtils; import com.leontg77.uhc.utils.PlayerUtils; /** * Config command class. * * @author LeonTG77 */ public class ConfigCommand implements CommandExecutor, TabCompleter { /** * ConfigValue class * <p> * Class used for the config command to * get all the possible config options. * * @author LeonTG77 */ public enum ConfigValue { APPLERATES, BORDERSHRINK, FLINTRATES, HOST, MATCHPOST, MAXPLAYERS, MEETUP, PVP, RRNAME, SCENARIOS, TEAMSIZE, WORLD, FFA, HEADSHEAL, SHEARRATES; } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.config")) { sender.sendMessage(Main.NO_PERM_MSG); return true; } if (args.length == 0) { if (!(sender instanceof Player)) { sender.sendMessage(Main.PREFIX + "Usage: /config <type> <value>"); return true; } Player player = (Player) sender; InvGUI inv = InvGUI.getInstance(); inv.openConfigOptions(player); return true; } if (args.length == 1) { sender.sendMessage(Main.PREFIX + "Usage: /config <type> <value>"); return true; } Game game = Game.getInstance(); ConfigValue type; try { type = ConfigValue.valueOf(args[0].toUpperCase()); } catch (Exception e) { StringBuilder types = new StringBuilder(); int i = 1; for (ConfigValue value : ConfigValue.values()) { if (types.length() > 0) { if (i == ConfigValue.values().length) { types.append(" �7and�a "); } else { types.append("�7, �a"); } } types.append(value.name().toLowerCase()); i++; } sender.sendMessage(Main.PREFIX + "Available config types: �a" + types.toString().trim() + "�7."); return true; } switch (type) { case APPLERATES: int appleRate; try { appleRate = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild apple rate."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Apple rates has been changed to �a" + appleRate + "%"); game.setAppleRates(appleRate); break; case BORDERSHRINK: BorderShrink border; try { border = BorderShrink.valueOf(args[1].toUpperCase()); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild bordertype."); return true; } if (border == BorderShrink.NEVER) { PlayerUtils.broadcast(Main.PREFIX + "Border will no longer shrink."); } else { PlayerUtils.broadcast(Main.PREFIX + "Border will now shrink " + border.getPreText() + border.name().toLowerCase()); } game.setBorderShrink(border); break; case FFA: if (args[1].equalsIgnoreCase("true")) { game.setFFA(true); PlayerUtils.broadcast(Main.PREFIX + "The gamemode is now �a" + GameUtils.getTeamSize() + game.getScenarios() + "�7."); } else if (args[1].equalsIgnoreCase("false")) { game.setFFA(false); PlayerUtils.broadcast(Main.PREFIX + "The gamemode is now �a" + GameUtils.getTeamSize() + game.getScenarios() + "�7."); } else { sender.sendMessage(ChatColor.RED + "FFA can only be true or false, not " + args[1] + "."); } break; case FLINTRATES: int flintRate; try { flintRate = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild flint rate."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Flint rates has been changed to �a" + flintRate + "%"); game.setFlintRates(flintRate); break; case HEADSHEAL: int headheals; try { headheals = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild heal amount."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Golden heads now heal �a" + headheals + "�7 hearts."); game.setShearRates(headheals); break; case HOST: PlayerUtils.broadcast(Main.PREFIX + "The host has been changed to �a" + args[1] + "�7."); game.setHost(args[1]); break; case MATCHPOST: PlayerUtils.broadcast(Main.PREFIX + "The matchpost has been changed to �a" + args[1] + "�7."); game.setMatchPost(args[1]); break; case MAXPLAYERS: int maxplayers; try { maxplayers = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild player limit."); return true; } PlayerUtils.broadcast(Main.PREFIX + "The max player limit is now �a" + maxplayers + "�7."); game.setMaxPlayers(maxplayers); break; case MEETUP: int meetup; try { meetup = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild meetup time."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Meetup is now �a" + meetup + " �7minutes in."); game.setMeetup(meetup); break; case PVP: int pvp; try { pvp = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild pvp time."); return true; } PlayerUtils.broadcast(Main.PREFIX + "PvP will now be enabled �a" + pvp + " �7minutes in."); game.setPvP(pvp); break; case RRNAME: StringBuilder nameBuilder = new StringBuilder(); for (int ni = 1; ni < args.length; ni++) { nameBuilder.append(args[ni]).append(" "); } game.setRRName(nameBuilder.toString().trim()); PlayerUtils.broadcast(Main.PREFIX + "The recorded round is now called �a" + game.getRRName() + "�7."); break; case SCENARIOS: StringBuilder scenarioBuilder = new StringBuilder(); for (int ni = 1; ni < args.length; ni++) { scenarioBuilder.append(args[ni]).append(" "); } game.setScenarios(scenarioBuilder.toString().trim()); PlayerUtils.broadcast(Main.PREFIX + "The gamemode is now �a" + GameUtils.getTeamSize() + game.getScenarios() + "�7."); break; case SHEARRATES: int shearRate; try { shearRate = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild shear rate."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Shear rates has been changed to �a" + shearRate + "%"); game.setShearRates(shearRate); break; case TEAMSIZE: int teamSize; try { teamSize = Integer.parseInt(args[1]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[1] + " is not a vaild teamsize."); return true; } game.setTeamSize(teamSize); PlayerUtils.broadcast(Main.PREFIX + "The gamemode is now �a" + GameUtils.getTeamSize() + game.getScenarios() + "�7."); break; case WORLD: PlayerUtils.broadcast(Main.PREFIX + "The game will now be played in '�a" + args[1] + "�7'."); game.setWorld(args[1]); break; default: return true; } return true; } @Override public List<String> onTabComplete(CommandSender sender, Command cmd, String alias, String[] args) { if (!sender.hasPermission("uhc.config")) { return null; } ArrayList<String> toReturn = new ArrayList<String>(); if (args.length == 1) { if (args[0].equals("")) { for (ConfigValue type : ConfigValue.values()) { toReturn.add(type.name().toLowerCase()); } } else { for (ConfigValue type : ConfigValue.values()) { if (type.name().toLowerCase().startsWith(args[0].toLowerCase())) { toReturn.add(type.name().toLowerCase()); } } } } return toReturn; } }