diff --git a/.gitignore b/.gitignore index 89a26f4..d38df4f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,4 @@ -/.idea/artifacts -/.idea/libraries -/.idea/workspace.xml -/.idea/modules.xml -/.idea/uiDesigner.xml +/.idea/ target/ -out/ \ No newline at end of file +out/ +TFGuilds.iml diff --git a/.idea/TFGuilds.iml b/.idea/TFGuilds.iml index 36446bd..163e931 100644 --- a/.idea/TFGuilds.iml +++ b/.idea/TFGuilds.iml @@ -1,5 +1,19 @@ + + + + + + + + SPIGOT + + + + @@ -16,16 +30,7 @@ - - - - - - - - - - + @@ -55,6 +60,7 @@ + @@ -74,6 +80,7 @@ + diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..658f152 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 86bb373..9898a0e 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -9,24 +9,6 @@ - - - - \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..cd711a0 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index cffed5d..d2b0ede 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,9 @@ + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index dff5f3a..0000000 --- a/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: java diff --git a/TFGuilds.iml b/TFGuilds.iml deleted file mode 100644 index d0c8bd9..0000000 --- a/TFGuilds.iml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - SPIGOT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/nb-configuration.xml b/nb-configuration.xml new file mode 100644 index 0000000..5616f15 --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,19 @@ + + + + + + JDK_11 + true + + diff --git a/pom.xml b/pom.xml index 1d019dd..5ccd277 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.totalfreedom TFGuilds - 0.2.17 + 2021.06-RC3 jar TFGuilds @@ -25,8 +25,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 11 + 11 @@ -63,33 +63,13 @@ spigotmc-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - sonatype - https://oss.sonatype.org/content/groups/public/ - - - telesphoreo-repo - https://telesphoreo.me/repo/maven - org.spigotmc spigot-api - 1.16.4-R0.1-SNAPSHOT - provided - - - me.totalfreedom - TotalFreedomMod - 2020.11.5 - provided - - - org.projectlombok - lombok - 1.18.16 + 1.16.5-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/totalfreedom/tfguilds/Common.java b/src/main/java/me/totalfreedom/tfguilds/Common.java index 1172d0a..ffd279a 100644 --- a/src/main/java/me/totalfreedom/tfguilds/Common.java +++ b/src/main/java/me/totalfreedom/tfguilds/Common.java @@ -1,36 +1,23 @@ package me.totalfreedom.tfguilds; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import me.totalfreedom.tfguilds.config.ConfigEntry; -import me.totalfreedom.tfguilds.guild.Guild; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class Common { - protected static TFGuilds plugin = TFGuilds.getPlugin(); - public static final ChatColor PRIMARY = ConfigEntry.SCHEME_PRIMARY.getChatColor(); - public static final ChatColor SECONDARY = ConfigEntry.SCHEME_SECONDARY.getChatColor(); - public static final String NO_PERMS = ChatColor.RED + "No permission."; - public static final String PREFIX = "%s%[%p%TFGuilds%s%] %p%"; - public static final String PNF = ChatColor.RED + "Player not found."; + public static final String PREFIX = ChatColor.AQUA + "TFGuilds " + ChatColor.DARK_GRAY + "\u00BB " + ChatColor.GRAY; + public static final String NOT_IN_GUILD = PREFIX + "You are not in a guild."; + public static final String IN_GUILD = PREFIX + "You are already in a guild."; + public static final String PLAYER_NOT_FOUND = PREFIX + "That player is not online."; + public static final String PLAYER_NOT_IN_GUILD = PREFIX + "That player is not in your guild."; + public static final String IN_GAME_ONLY = PREFIX + "You must be in-game to interact with guilds"; + public static final String USAGE = PREFIX + "Correct usage: " + ChatColor.GOLD; - public static Map INVITES = new HashMap<>(); - public static List IN_GUILD_CHAT = new ArrayList<>(); - public static List CHAT_SPY = new ArrayList<>(); + public static final TFMBridge tfmBridge = TFGuilds.getPlugin().getTfmBridge(); - public static String tl(String in) - { - return in.replaceAll("%p%", PRIMARY + "").replaceAll("%s%", SECONDARY + ""); - } - - public static void broadcast(String msg) - { - Bukkit.broadcastMessage(msg); - } -} \ No newline at end of file + public static List GUILD_CHAT = new ArrayList<>(); + public static List GUILD_CHAT_SPY = new ArrayList<>(); +} diff --git a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java index dbe9225..3d2cd17 100644 --- a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java +++ b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java @@ -1,66 +1,125 @@ package me.totalfreedom.tfguilds; -import me.totalfreedom.tfguilds.bridge.TFMBridge; -import me.totalfreedom.tfguilds.command.GuildChatCommand; -import me.totalfreedom.tfguilds.command.GuildChatSpyCommand; -import me.totalfreedom.tfguilds.command.GuildCommand; -import me.totalfreedom.tfguilds.command.TFGuildsCommand; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import me.totalfreedom.tfguilds.command.*; import me.totalfreedom.tfguilds.config.Config; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.guild.User; import me.totalfreedom.tfguilds.listener.ChatListener; import me.totalfreedom.tfguilds.listener.JoinListener; -import me.totalfreedom.tfguilds.util.GLog; -import org.bukkit.plugin.PluginManager; +import me.totalfreedom.tfguilds.sql.SQLDatabase; import org.bukkit.plugin.java.JavaPlugin; -public final class TFGuilds extends JavaPlugin +public class TFGuilds extends JavaPlugin { + private static TFGuilds plugin; + private Config config; + private SQLDatabase sqlDatabase; + private TFMBridge tfmBridge; + private Map subCommands = new HashMap<>(); public static TFGuilds getPlugin() { return plugin; } - public Config config; - public Config guilds; - public Config players; - public TFMBridge bridge; - @Override public void onEnable() { - plugin = this; + this.plugin = this; config = new Config("config.yml"); - guilds = new Config("guilds.yml"); - players = new Config("players.yml"); - bridge = new TFMBridge(); - loadCommands(); - loadListeners(); - GLog.info("Enabled " + this.getDescription().getFullName()); + sqlDatabase = new SQLDatabase(this); + User.loadAll(); + Guild.loadAll(); + tfmBridge = new TFMBridge(); + tfmBridge.getTfm(); + new JoinListener(this); + new ChatListener(this); + loadSubCommands(); + getCommand("tfguilds").setExecutor(new TFGuildsCommand()); + getCommand("guild").setExecutor(new GuildCommand()); + getCommand("guildchatspy").setExecutor(new GuildChatSpyCommand()); } @Override public void onDisable() { - plugin = null; + try + { + getSQL().getConnection().close(); + } + catch (SQLException throwables) + { + } config.save(); - guilds.save(); - players.save(); - GLog.info("Disabled " + this.getDescription().getFullName()); } - private void loadCommands() + public Config getConfig() { - this.getCommand("guild").setExecutor(new GuildCommand()); - this.getCommand("guildchat").setExecutor(new GuildChatCommand()); - this.getCommand("tfguilds").setExecutor(new TFGuildsCommand()); - this.getCommand("guildchatspy").setExecutor(new GuildChatSpyCommand()); + return config; } - private void loadListeners() + public SQLDatabase getSQL() { - PluginManager manager = this.getServer().getPluginManager(); - manager.registerEvents(new ChatListener(), this); - manager.registerEvents(new JoinListener(), this); + return sqlDatabase; } -} \ No newline at end of file + + public TFMBridge getTfmBridge() + { + return tfmBridge; + } + + public SubCommand getSubCommand(String name) + { + return subCommands.get(name); + } + + public List getSubCommands() + { + List commands = new ArrayList<>(subCommands.keySet()); + Collections.sort(commands); + return commands; + } + + private void loadSubCommands() + { + subCommands.put("create", new CreateSubCommand()); + subCommands.put("info", new InfoSubCommand()); + subCommands.put("disband", new DisbandSubCommand()); + subCommands.put("invite", new InviteSubCommand()); + subCommands.put("join", new JoinSubCommand()); + subCommands.put("leave", new LeaveSubCommand()); + subCommands.put("warps", new WarpsSubCommand()); + subCommands.put("setwarp", new SetWarpSubCommand()); + subCommands.put("addmod", new AddModSubCommand()); + subCommands.put("removemod", new RemoveModSubCommand()); + subCommands.put("createrank", new CreateRankSubCommand()); + subCommands.put("deleterank", new DeleteRankSubCommand()); + subCommands.put("warp", new WarpSubCommand()); + subCommands.put("setrank", new SetRankSubCommand()); + subCommands.put("deletewarp", new DeleteWarpSubCommand()); + subCommands.put("kick", new KickSubCommand()); + subCommands.put("setowner", new SetOwnerSubCommand()); + subCommands.put("setstate", new SetStateSubCommand()); + subCommands.put("setdefaultrank", new SetDefaultRankSubCommand()); + subCommands.put("home", new HomeSubCommand()); + subCommands.put("tp", new TpSubCommand()); + subCommands.put("roster", new RosterSubCommand()); + subCommands.put("toggletag", new ToggleTagSubCommand()); + subCommands.put("chat", new ChatSubCommand()); + subCommands.put("motd", new MotdSubCommand()); + subCommands.put("toggletags", new ToggleTagsSubCommand()); + subCommands.put("tag", new TagSubCommand()); + subCommands.put("list", new ListSubCommand()); + subCommands.put("help", new HelpSubCommand()); + subCommands.put("mchat", new ModChatSubCommand()); + subCommands.put("notag", new NoTagSubCommand()); + subCommands.put("togglechat", new ToggleChatSubCommand()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/TFMBridge.java b/src/main/java/me/totalfreedom/tfguilds/TFMBridge.java new file mode 100644 index 0000000..775d1b2 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/TFMBridge.java @@ -0,0 +1,142 @@ +package me.totalfreedom.tfguilds; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import me.totalfreedom.tfguilds.util.ReflectionsHelper; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class TFMBridge +{ + + private final TFGuilds plugin = TFGuilds.getPlugin(); + private /*TotalFreedomMod*/ Plugin tfm = null; + + public /*TotalFreedomMod*/ Plugin getTfm() + { + if (tfm == null) + { + try + { + final Plugin tfmPlugin = plugin.getServer().getPluginManager().getPlugin("TotalFreedomMod"); + if (tfmPlugin != null && tfmPlugin.isEnabled()) + { + tfm = /*(TotalFreedomMod)*/tfmPlugin; + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + return tfm; + } + + public boolean isAdmin(Player player) + { + if (getTfm() == null) + { + Bukkit.getLogger().warning("TotalFreedomMod not detected, checking operator status instead."); + return player.isOp(); + } + Object al = ReflectionsHelper.getField(getTfm(), "al"); + Method isAdmin = ReflectionsHelper.getMethod(al, "isAdmin", Player.class); + try + { + return (boolean)isAdmin.invoke(al, player) /*getTfm().al.isAdmin(player)*/; + } + catch (IllegalAccessException | InvocationTargetException e) + { + e.printStackTrace(); + } + return false; + } + + public boolean isAdmin(CommandSender sender) + { + if (getTfm() == null) + { + Bukkit.getLogger().warning("TotalFreedomMod not detected, checking operator status instead."); + return sender.isOp(); + } + Object al = ReflectionsHelper.getField(getTfm(), "al"); + Method isAdmin = ReflectionsHelper.getMethod(al, "isAdmin", CommandSender.class); + try + { + return (boolean)isAdmin.invoke(al, sender) /*getTfm().al.isAdmin(player)*/; + } + catch (IllegalAccessException | InvocationTargetException e) + { + e.printStackTrace(); + } + return false; + } + + public boolean isVanished(Player player) + { + if (getTfm() == null) + { + Bukkit.getLogger().warning("TotalFreedomMod not detected, vanish will return false."); + return false; + } + Object al = ReflectionsHelper.getField(getTfm(), "al"); + Method isVanished = ReflectionsHelper.getMethod(al, "isVanished", String.class); + try + { + return (boolean)isVanished.invoke(al, player.getName()) /*getTfm().al.isVanished(player.getName)*/; + } + catch (IllegalAccessException | InvocationTargetException e) + { + e.printStackTrace(); + } + return false; + } + + public String getTag(Player player) + { + if (getTfm() == null) + { + return null; + } + + Object pl = ReflectionsHelper.getField(getTfm(), "pl"); + Method getPlayer = ReflectionsHelper.getMethod(pl, "getPlayer", Player.class); + try + { + Object fPlayer = getPlayer.invoke(pl, player); + Method getTag = ReflectionsHelper.getMethod(fPlayer, "getTag"); + + return (String)getTag.invoke(fPlayer); + } + catch (IllegalAccessException | InvocationTargetException e) + { + e.printStackTrace(); + } + + return "" /*ChatColor.stripColor(getTfm().pl.getPlayer(player).getTag())*/; + } + + public void clearTag(Player player) + { + if (getTfm() == null) + { + return; + } +// getTfm().pl.getPlayer(player).setTag(null); + Object pl = ReflectionsHelper.getField(getTfm(), "pl"); + Method getPlayer = ReflectionsHelper.getMethod(pl, "getPlayer", Player.class); + try + { + Object fPlayer = getPlayer.invoke(pl, player); + Method setTag = ReflectionsHelper.getMethod(fPlayer, "setTag", String.class); + + setTag.invoke(fPlayer, (Object)null); + } + catch (IllegalAccessException | InvocationTargetException e) + { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java b/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java deleted file mode 100644 index c1fa710..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java +++ /dev/null @@ -1,67 +0,0 @@ -package me.totalfreedom.tfguilds.bridge; - -import me.totalfreedom.tfguilds.TFGuilds; -import me.totalfreedom.tfguilds.util.GLog; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -public class TFMBridge -{ - private final TFGuilds plugin; - private TotalFreedomMod tfmPlugin; - - public TFMBridge() - { - this.plugin = TFGuilds.getPlugin(); - this.tfmPlugin = null; - } - - public TotalFreedomMod getTFM() - { - if (tfmPlugin == null) - { - try - { - final Plugin tfm = plugin.getServer().getPluginManager().getPlugin("TotalFreedomMod"); - if (tfm != null && tfm instanceof TotalFreedomMod) - { - tfmPlugin = (TotalFreedomMod)tfm; - } - } - catch (Exception ex) - { - ex.printStackTrace(); - } - } - return tfmPlugin; - } - - public boolean isAdmin(Player player) - { - if (getTFM() == null) - { - GLog.warn("TFM not detected on the server. Checking if player is OP..."); - return player.isOp(); - } - - return getTFM().al.isAdmin(player); - } - - public boolean isAdmin(CommandSender sender) - { - if (getTFM() == null) - { - GLog.warn("TFM not detected on the server. Checking if sender is OP..."); - return sender.isOp(); - } - - return getTFM().al.isAdmin(sender); - } - - public boolean isVanished(Player player) - { - return getTFM().al.isVanished(player.getName()); - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/AddModSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/AddModSubCommand.java new file mode 100644 index 0000000..843f850 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/AddModSubCommand.java @@ -0,0 +1,70 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class AddModSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length != 2) + { + sender.sendMessage(USAGE + "/g addmod "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "You must be the guild owner to add moderators!"); + return; + } + + if (playerSender.equals(player)) + { + sender.sendMessage(PREFIX + "You are the owner of your guild, you are already a moderator."); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(PLAYER_NOT_IN_GUILD); + return; + } + + if (guild.isModerator(player)) + { + sender.sendMessage(PREFIX + "That player is already a moderator!"); + return; + } + + guild.addModerator(player); + sender.sendMessage(PREFIX + "Successfully added " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " as a moderator."); + player.sendMessage(PREFIX + "You are now a guild moderator for your guild!"); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/AddModSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/AddModSubcommand.java deleted file mode 100644 index 40282de..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/AddModSubcommand.java +++ /dev/null @@ -1,123 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class AddModSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1 || args.length > 3) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g addmod | player>")); - return true; - } - - if (args.length == 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(args[1]); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) - { - sender.sendMessage(PNF); - return true; - } - - if (!guild.hasMember(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); - return true; - } - - if (guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "No need to make the owner a moderator!"); - return true; - } - - if (guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This member is already a moderator for this guild!"); - return true; - } - - guild.addModerator(player.getName()); - sender.sendMessage(tl(PREFIX + "Added %s%" + player.getName() + "%p% as a moderator for %s%" + GUtil.colorize(guild.getName()) + "%p%.")); - guild.broadcast(tl("%s%" + player.getName() + " %p%has been made a moderator of your guild.")); - guild.save(); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change who is a moderator in your guild!"); - return true; - } - - Player n = Bukkit.getPlayer(args[1]); - if (n == null) - { - sender.sendMessage(PNF); - return true; - } - - if (guild.getOwner().equals(n.getName())) - { - sender.sendMessage(ChatColor.RED + "No need to make yourself a moderator!"); - return true; - } - - if (!guild.hasMember(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); - return true; - } - - if (guild.hasModerator(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This member is already a moderator for your guild!"); - return true; - } - - guild.addModerator(n.getName()); - sender.sendMessage(tl(PREFIX + "Added %s%" + n.getName() + "%p% as a moderator for your guild.")); - guild.broadcast(tl("%s%" + n.getName() + " %p%has been made a moderator of your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ChatSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ChatSubCommand.java new file mode 100644 index 0000000..ecdb403 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ChatSubCommand.java @@ -0,0 +1,46 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChatSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (args.length >= 2) + { + String message = StringUtils.join(args, " ", 1, args.length); + guild.chat(playerSender, message, false); + return; + } + + if (GUILD_CHAT.contains(playerSender)) + { + GUILD_CHAT.remove(playerSender); + sender.sendMessage(PREFIX + "Guild chat " + ChatColor.GOLD + "disabled"); + return; + } + + GUILD_CHAT.add(playerSender); + sender.sendMessage(PREFIX + "Guild chat " + ChatColor.GOLD + "enabled"); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ChatSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ChatSubcommand.java deleted file mode 100644 index 5a1f1e2..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/ChatSubcommand.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class ChatSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (args.length >= 2) - { - String message = StringUtils.join(args, " ", 1, args.length); - guild.chat(player.getName(), message); - return true; - } - - if (IN_GUILD_CHAT.contains(player)) - { - IN_GUILD_CHAT.remove(player); - sender.sendMessage(tl("%p%Guild chat toggled off.")); - return true; - } - - IN_GUILD_CHAT.add(player); - sender.sendMessage(tl("%p%Guild chat toggled on.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubCommand.java new file mode 100644 index 0000000..4413ca9 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubCommand.java @@ -0,0 +1,70 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.GUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CreateRankSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + " /g createrank "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "Only the guild owner can create ranks for the guild!"); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!StringUtils.isAlphanumericSpace(name) || name.isBlank()) + { + sender.sendMessage(PREFIX + "The rank name must be alphanumeric!"); + return; + } + + if (name.length() > 15) + { + sender.sendMessage(PREFIX + "The rank name cannot go over 15 characters limit."); + return; + } + + if (GUtil.containsBlacklistedWord(name)) + { + sender.sendMessage(PREFIX + "The guild name contains a blacklisted word."); + return; + } + + if (guild.hasRank(name)) + { + sender.sendMessage(PREFIX + "That rank already exists!"); + return; + } + + guild.createRank(name); + sender.sendMessage(PREFIX + "Successfully created a new rank " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java deleted file mode 100644 index f30e273..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java +++ /dev/null @@ -1,87 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class CreateRankSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g createrank ")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't create ranks for your guild!"); - return true; - } - - String rank = StringUtils.join(args, " ", 1, args.length); - - for (String blacklisted : GUtil.BLACKLISTED_NAMES_AND_TAGS) - { - if (rank.equalsIgnoreCase(blacklisted)) - { - if (!plugin.bridge.isAdmin(player)) - { - player.sendMessage(ChatColor.RED + "You may not use that name."); - return true; - } - } - } - - Pattern pattern = Pattern.compile("^[A-Za-z0-9? ,_-]+$"); - Matcher matcher = pattern.matcher(rank); - - if (!matcher.matches()) - { - sender.sendMessage(ChatColor.RED + "Guild rank names must be alphanumeric."); - return true; - } - - if (rank.length() > 15) - { - sender.sendMessage(ChatColor.RED + "Guild rank names may not be over 15 characters."); - return true; - } - - if (guild.hasRank(rank)) - { - sender.sendMessage(ChatColor.RED + "A rank of that name already exists in the guild!"); - return true; - } - - guild.addRank(rank); - sender.sendMessage(tl(PREFIX + "Created a new rank named %s%" + rank + "%p% for your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateSubCommand.java new file mode 100644 index 0000000..39314bb --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/CreateSubCommand.java @@ -0,0 +1,65 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.GUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CreateSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g create "); + return; + } + + if (Guild.isAlreadyMember(playerSender)) + { + sender.sendMessage(IN_GUILD); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!StringUtils.isAlphanumericSpace(name) || name.isBlank()) + { + sender.sendMessage(PREFIX + "The guild name must be alphanumeric."); + return; + } + + if (name.length() > 30) + { + sender.sendMessage(PREFIX + "The guild name cannot go over 30 characters limit."); + return; + } + + if (Guild.hasGuild(name)) + { + sender.sendMessage(PREFIX + "The guild name is already taken."); + return; + } + + if (GUtil.containsBlacklistedWord(name)) + { + sender.sendMessage(PREFIX + "The guild name contains a blacklisted word."); + return; + } + + Guild.create(playerSender, name); + sender.sendMessage(PREFIX + "The guild " + ChatColor.GOLD + name + ChatColor.GRAY + " has been created."); + Bukkit.broadcastMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has created a guild " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java deleted file mode 100644 index 7e41555..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java +++ /dev/null @@ -1,84 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class CreateSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g create ")); - return true; - } - - Player player = (Player)sender; - String name = StringUtils.join(args, " ", 1, args.length); - String identifier = GUtil.flatten(name); - - if (Guild.isInGuild(player)) - { - sender.sendMessage(ChatColor.RED + "You are already in a guild!"); - return true; - } - - Pattern pattern = Pattern.compile("^[A-Za-z0-9? ,_-]+$"); - Matcher matcher = pattern.matcher(name); - - if (!matcher.matches()) - { - sender.sendMessage(ChatColor.RED + "Guild names must be alphanumeric."); - return true; - } - - if (name.length() > 30) - { - sender.sendMessage(ChatColor.RED + "Your guild name may not be over 30 characters."); - return true; - } - - if (Guild.guildExists(identifier)) - { - sender.sendMessage(ChatColor.RED + "A guild with a name similar to yours already exists!"); - return true; - } - - for (String blacklisted : GUtil.BLACKLISTED_NAMES_AND_TAGS) - { - if (name.equalsIgnoreCase(blacklisted)) - { - if (!plugin.bridge.isAdmin(player)) - { - player.sendMessage(ChatColor.RED + "You may not use that name."); - return true; - } - } - } - - Guild.createGuild(identifier, name, player); - plugin.players.set(player.getName() + ".tag", true); - sender.sendMessage(tl(PREFIX + "Created a guild named \"" + GUtil.colorize(name) + "%p%\"!")); - broadcast(GUtil.colorize(tl("%p%" + sender.getName() + " has created guild %p%&l" + name))); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubCommand.java new file mode 100644 index 0000000..d41a270 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubCommand.java @@ -0,0 +1,51 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DeleteRankSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g deleterank "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(PREFIX + "You are not in a guild!"); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "Only the guild owner can delete ranks for the guild!"); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!guild.hasRank(name)) + { + sender.sendMessage(PREFIX + "That rank does not exist!"); + return; + } + + guild.deleteRank(name); + sender.sendMessage(PREFIX + "Successfully deleted a rank " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java deleted file mode 100644 index 113525d..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java +++ /dev/null @@ -1,63 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class DeleteRankSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g deleterank ")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't delete ranks from your guild!"); - return true; - } - - String rank = StringUtils.join(args, " ", 1, args.length); - if (!guild.hasRank(rank)) - { - sender.sendMessage(ChatColor.RED + "A rank of that name does not exist in the guild!"); - return true; - } - - guild.removeRank(rank); - - if (guild.hasDefaultRank() && rank.equals(guild.getDefaultRank())) - { - guild.setDefaultRank(null); - guild.save(); - } - - sender.sendMessage(tl(PREFIX + "Deleted the rank named %s%" + rank + "%p% in your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DeleteWarpSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DeleteWarpSubCommand.java new file mode 100644 index 0000000..9cd8f88 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/DeleteWarpSubCommand.java @@ -0,0 +1,51 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DeleteWarpSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g deletewarp "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "You must be a guild moderator or owner to create a warp for the guild."); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!guild.hasWarp(name)) + { + sender.sendMessage(PREFIX + "That warp does not exist."); + return; + } + + guild.removeWarp(name); + sender.sendMessage(PREFIX + "Successfully removed a warp " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubCommand.java new file mode 100644 index 0000000..35f8e14 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubCommand.java @@ -0,0 +1,61 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DisbandSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length >= 2) + { + if (!tfmBridge.isAdmin(sender)) + { + sender.sendMessage(PREFIX + "You do not have permission."); + return; + } + + Guild guild = Guild.getGuild(StringUtils.join(args, " ", 1, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + guild.disband(); + sender.sendMessage(PREFIX + "The guild " + ChatColor.GOLD + guild.getName() + ChatColor.GRAY + " has been disbanded."); + Bukkit.broadcastMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has disbanded the guild " + ChatColor.GOLD + guild.getName()); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "You are not the guild owner!"); + return; + } + + sender.sendMessage(PREFIX + "The guild " + ChatColor.GOLD + guild.getName() + ChatColor.GRAY + " has been disbanded."); + Bukkit.broadcastMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has disbanded the guild " + ChatColor.GOLD + guild.getName()); + guild.disband(); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java deleted file mode 100644 index ddde390..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java +++ /dev/null @@ -1,78 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GLog; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class DisbandSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length > 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g disband [name]")); - return true; - } - - if (args.length == 2) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(GUtil.flatten(StringUtils.join(args, " ", 1, args.length))); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - String n = guild.getName(); - GLog.info("Removing guilds.yml data for " + n); - guild.disband(); - GLog.info(sender.getName() + " deleted guild " + guild.getName()); - sender.sendMessage(tl(PREFIX + "Disbanded \"" + GUtil.colorize(n) + "%p%\".")); - broadcast(GUtil.colorize(tl("%p%" + sender.getName() + " has disbanded guild %p%&l" + guild.getName()))); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - if (!Guild.isInGuild(player)) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - Guild guild = Guild.getGuild(player); - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You are not the owner of this guild!"); - return true; - } - - GLog.info("Removing guilds.yml data for " + guild.getName()); - guild.disband(); - GLog.info(player.getName() + " deleted guild " + guild.getName()); - sender.sendMessage(tl(PREFIX + "You have disbanded your guild!")); - broadcast(GUtil.colorize(tl("%p%&l" + guild.getName() + "%p% has been disbanded"))); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildChatCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildChatCommand.java deleted file mode 100644 index 7a035c8..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildChatCommand.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class GuildChatCommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (args.length >= 1) - { - String message = StringUtils.join(args, " ", 0, args.length); - guild.chat(player.getName(), message); - return true; - } - - if (IN_GUILD_CHAT.contains(player)) - { - IN_GUILD_CHAT.remove(player); - sender.sendMessage(tl("%p%Guild chat toggled off.")); - return true; - } - - IN_GUILD_CHAT.add(player); - sender.sendMessage(tl("%p%Guild chat toggled on.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildChatSpyCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildChatSpyCommand.java index a05960e..286d672 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildChatSpyCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildChatSpyCommand.java @@ -1,39 +1,40 @@ package me.totalfreedom.tfguilds.command; import me.totalfreedom.tfguilds.Common; +import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; public class GuildChatSpyCommand extends Common implements CommandExecutor { + @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (sender instanceof ConsoleCommandSender) + if (!(sender instanceof Player)) { - sender.sendMessage(NO_PERMS); + sender.sendMessage(PREFIX + "Console can already view guild chat."); return true; } - if (!plugin.bridge.isAdmin(sender)) + if (!tfmBridge.isAdmin(sender)) { - sender.sendMessage(NO_PERMS); + sender.sendMessage(PREFIX + "You do not have the permission."); return true; } Player player = (Player)sender; - if (CHAT_SPY.contains(player)) + if (GUILD_CHAT_SPY.contains(player)) { - CHAT_SPY.remove(player); - sender.sendMessage(tl(PREFIX + "%p%Global guild chat spy disabled.")); + GUILD_CHAT_SPY.remove(player); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Disabled " + ChatColor.GRAY + "guild chat spy."); return true; } - CHAT_SPY.add(player); - sender.sendMessage(tl(PREFIX + "%p%Global guild chat spy enabled.")); + GUILD_CHAT_SPY.add(player); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Enabled " + ChatColor.GRAY + "guild chat spy."); return true; } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java index 294b329..0589b2c 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java @@ -4,92 +4,56 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.TFGuilds; import me.totalfreedom.tfguilds.guild.Guild; import me.totalfreedom.tfguilds.util.GUtil; +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; public class GuildCommand extends Common implements CommandExecutor, TabCompleter { + @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + Player playerSender = null; + if (sender instanceof Player) + { + playerSender = (Player)sender; + } + if (args.length >= 1) { - switch (args[0].toLowerCase()) + String name = args[0].toLowerCase(); + SubCommand command = TFGuilds.getPlugin().getSubCommand(name); + if (command != null) { - case "list": - return new ListSubcommand().onCommand(sender, command, label, args); - case "help": - return new HelpSubcommand().onCommand(sender, command, label, args); - case "create": - return new CreateSubcommand().onCommand(sender, command, label, args); - case "disband": - return new DisbandSubcommand().onCommand(sender, command, label, args); - case "invite": - return new InviteSubcommand().onCommand(sender, command, label, args); - case "addmod": - return new AddModSubcommand().onCommand(sender, command, label, args); - case "removemod": - return new RemoveModSubcommand().onCommand(sender, command, label, args); - case "setowner": - return new SetOwnerSubcommand().onCommand(sender, command, label, args); - case "setstate": - return new SetStateSubcommand().onCommand(sender, command, label, args); - case "kick": - return new KickSubcommand().onCommand(sender, command, label, args); - case "leave": - return new LeaveSubcommand().onCommand(sender, command, label, args); - case "tp": - return new TPSubcommand().onCommand(sender, command, label, args); - case "info": - return new InfoSubcommand().onCommand(sender, command, label, args); - case "tag": - return new TagSubcommand().onCommand(sender, command, label, args); - case "chat": - return new ChatSubcommand().onCommand(sender, command, label, args); - case "join": - return new JoinSubcommand().onCommand(sender, command, label, args); - case "rename": - return new RenameSubcommand().onCommand(sender, command, label, args); - case "createrank": - return new CreateRankSubcommand().onCommand(sender, command, label, args); - case "deleterank": - return new DeleteRankSubcommand().onCommand(sender, command, label, args); - case "setrank": - return new SetRankSubcommand().onCommand(sender, command, label, args); - case "motd": - return new MOTDSubcommand().onCommand(sender, command, label, args); - case "home": - return new HomeSubcommand().onCommand(sender, command, label, args); - case "roster": - return new RosterSubcommand().onCommand(sender, command, label, args); - case "setdefaultrank": - return new SetDefaultRankSubcommand().onCommand(sender, command, label, args); - case "toggletags": - return new ToggleTagsSubcommand().onCommand(sender, command, label, args); - case "toggletag": - return new ToggleTagSubcommand().onCommand(sender, command, label, args); + command.execute(sender, playerSender, args); + } + else + { + sender.sendMessage(PREFIX + "Unknown subcommand, do " + ChatColor.GOLD + "/g help" + ChatColor.GRAY + " for help."); } - sender.sendMessage(tl(PREFIX + "Unknown command - Run /g help if you need help")); return true; } - return new HelpSubcommand().onCommand(sender, command, label, args); + return true; } @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) + public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { - Guild guild = Guild.getGuild(sender); + Guild guild = null; + if (sender instanceof Player) + { + guild = Guild.getGuild((Player)sender); + } if (args.length == 1) { - return Arrays.asList("addmod", "chat", "createrank", "create", - "deleterank", "disband", "help", "home", "info", "invite", - "join", "kick", "leave", "list", "motd", "removemod", "rename", - "roster", "setowner", "setrank", "setstate", "tag", "tp", "setdefaultrank", - "toggletags", "toggletag"); + return TFGuilds.getPlugin().getSubCommands(); } else if (args.length == 2) { @@ -97,24 +61,24 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete { case "home": { - return Arrays.asList("set"); + return Collections.singletonList("set"); } case "info": case "join": case "roster": { - return Guild.getGuildList(); + return Guild.getGuildNames(); } case "toggletag": { - if (!plugin.bridge.isAdmin(sender)) + if (!tfmBridge.isAdmin(sender)) { return Collections.emptyList(); } - return GUtil.getPlayerList(); + return GUtil.getPlayerNames(); } case "motd": @@ -125,18 +89,18 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "setstate": { - return Arrays.asList("OPEN", "INVITE", "CLOSED"); + return Arrays.asList("OPEN", "CLOSED", "INVITE_ONLY"); } case "invite": { - return GUtil.getPlayerList(); + return GUtil.getPlayerNames(); } case "deleterank": case "setdefaultrank": { - if (guild.getOwner().equals(sender.getName())) + if (guild != null && guild.getOwner().equals(((Player)sender).getUniqueId())) { return guild.getRankNames(); } @@ -144,24 +108,24 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "tp": { - return guild.getMembers(); + return guild != null ? guild.getMemberNames() : Collections.emptyList(); } case "disband": { - if (!plugin.bridge.isAdmin(sender)) + if (!tfmBridge.isAdmin(sender)) { return Collections.emptyList(); } - return Guild.getGuildList(); + return Guild.getGuildNames(); } case "kick": { - if (guild.hasModerator(sender.getName())) + if (guild != null && guild.isModerator((Player)sender)) { - return guild.getOnlyMembers(); + return guild.getMemberOnlyNames(); } } @@ -169,13 +133,18 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "addmod": case "setowner": { - if (guild.getOwner().equals(sender.getName())) + if (guild != null && guild.getOwner().equals(((Player)sender).getUniqueId())) { - return guild.getMembers(); + return guild.getMemberNames(); } } + + default: + { + return Collections.emptyList(); + } } } return Collections.emptyList(); } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/HelpSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/HelpSubCommand.java new file mode 100644 index 0000000..838be05 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/HelpSubCommand.java @@ -0,0 +1,22 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HelpSubCommand extends Common implements SubCommand +{ + + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + sender.sendMessage(PREFIX + "Command List"); + for (String command : TFGuilds.getPlugin().getSubCommands()) + { + sender.sendMessage(ChatColor.GRAY + " - " + ChatColor.GOLD + command); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/HelpSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/HelpSubcommand.java deleted file mode 100644 index a2918b3..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/HelpSubcommand.java +++ /dev/null @@ -1,42 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class HelpSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - sender.sendMessage(tl("%s%[%p%TFGuilds%s%] %p%Command List")); - sender.sendMessage(tl("%s% - %p%list")); - sender.sendMessage(tl("%s% - %p%help")); - sender.sendMessage(tl("%s% - %p%create ")); - sender.sendMessage(tl("%s% - %p%join ")); - sender.sendMessage(tl("%s% - %p%disband [name]")); - sender.sendMessage(tl("%s% - %p%invite ")); - sender.sendMessage(tl("%s% - %p%addmod | player>")); - sender.sendMessage(tl("%s% - %p%removemod | name>")); - sender.sendMessage(tl("%s% - %p%setowner | player>")); - sender.sendMessage(tl("%s% - %p%kick | player>")); - sender.sendMessage(tl("%s% - %p%leave")); - sender.sendMessage(tl("%s% - %p%tp ")); - sender.sendMessage(tl("%s% - %p%info [guild | player]")); - sender.sendMessage(tl("%s% - %p%tag | clear>")); - sender.sendMessage(tl("%s% - %p%rename ")); - sender.sendMessage(tl("%s% - %p%createrank ")); - sender.sendMessage(tl("%s% - %p%deleterank ")); - sender.sendMessage(tl("%s% - %p%setrank ")); - sender.sendMessage(tl("%s% - %p%motd | clear>")); - sender.sendMessage(tl("%s% - %p%home [set]")); - sender.sendMessage(tl("%s% - %p%chat [message]")); - sender.sendMessage(tl("%s% - %p%roster [guild | player]")); - sender.sendMessage(tl("%s% - %p%setstate ")); - sender.sendMessage(tl("%s% - %p%setdefaultrank ")); - sender.sendMessage(tl("%s% - %p%toggletags")); - sender.sendMessage(tl("%s% - %p%toggletag [player]")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/HomeSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/HomeSubCommand.java new file mode 100644 index 0000000..236cd56 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/HomeSubCommand.java @@ -0,0 +1,56 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HomeSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length > 2) + { + sender.sendMessage(USAGE + "/g home [set]"); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (args.length == 2) + { + if (args[1].equalsIgnoreCase("set")) + { + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "Only guild moderators can set guild's home location"); + return; + } + + guild.setHome(playerSender.getLocation()); + sender.sendMessage(PREFIX + "Successfully set guild's home to your location"); + } + else + { + sender.sendMessage(USAGE + "/g home [set]"); + } + return; + } + + playerSender.teleport(guild.getHome()); + sender.sendMessage(PREFIX + "Teleported to your guild's home!"); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java deleted file mode 100644 index d0b0e8f..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java +++ /dev/null @@ -1,65 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class HomeSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length > 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g home [set]")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (args.length == 2) - { - if (args[1].equalsIgnoreCase("set")) - { - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't modify your guild's home!"); - return true; - } - - guild.setHome(player.getLocation()); - guild.save(); - sender.sendMessage(tl(PREFIX + "Set your current location as the new home of your guild%p%.")); - return true; - } - return false; - } - - if (!guild.hasHome()) - { - sender.sendMessage(ChatColor.RED + "Your guild doesn't have a home!"); - return true; - } - - player.teleport(guild.getHome()); - sender.sendMessage(tl("%p%Teleported you to your guild's home!")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/InfoSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/InfoSubCommand.java new file mode 100644 index 0000000..b493428 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/InfoSubCommand.java @@ -0,0 +1,55 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class InfoSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (args.length >= 2) + { + Player player = Bukkit.getPlayer(args[1]); + if (player != null && !tfmBridge.isVanished(player)) + { + Guild guild = Guild.getGuild(player); + if (guild != null) + { + sender.sendMessage(guild.toString()); + return; + } + } + + Guild guild = Guild.getGuild(StringUtils.join(args, " ", 1, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + sender.sendMessage(guild.toString()); + return; + } + + if (!(sender instanceof Player)) + { + sender.sendMessage(USAGE + "/g info "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + sender.sendMessage(guild.toString()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/InfoSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/InfoSubcommand.java deleted file mode 100644 index 938ab2a..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/InfoSubcommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class InfoSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length >= 2) - { - Player player = Bukkit.getPlayer(args[1]); - if (player != null) - { - Guild guild = Guild.getGuild(player); - if (guild != null) - { - sender.sendMessage(guild.getInformation()); - return true; - } - } - - Guild guild = Guild.getGuild(GUtil.flatten(StringUtils.join(args, " ", 1, args.length))); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - sender.sendMessage(guild.getInformation()); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild((Player)sender); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - sender.sendMessage(guild.getInformation()); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/InviteSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/InviteSubCommand.java new file mode 100644 index 0000000..6b5e740 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/InviteSubCommand.java @@ -0,0 +1,100 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class InviteSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length != 2) + { + sender.sendMessage(USAGE + "/g invite "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (guild.getState() == Guild.State.CLOSED) + { + sender.sendMessage(PREFIX + "The guild is closed."); + return; + } + + if (guild.getState() == Guild.State.OPEN) + { + sender.sendMessage(PREFIX + "The guild is open to public, tell your friends to join by " + ChatColor.GOLD + "/g join " + guild.getName()); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (player.equals(playerSender)) + { + sender.sendMessage(PREFIX + "You cannot invite yourself."); + return; + } + + if (Guild.getGuild(player) != null) + { + sender.sendMessage(PREFIX + "That player is already in a guild."); + return; + } + + if (guild.isInvited(player)) + { + sender.sendMessage(PREFIX + "That player is already been invited."); + return; + } + + guild.invite(player); + player.sendMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has sent you an invite to join " + ChatColor.GOLD + guild.getName()); + player.sendMessage(PREFIX + "Do " + ChatColor.GOLD + "/g join " + guild.getName() + ChatColor.GRAY + " to join!"); + player.sendMessage(PREFIX + "The invite will expire in 90 seconds."); + sender.sendMessage(PREFIX + "The invite has been sent to " + ChatColor.GOLD + player.getName()); + + new BukkitRunnable() + { + @Override + public void run() + { + if (!guild.isInvited(player)) + { + return; + } + + guild.removeInvite(player); + + if (player.isOnline()) + { + player.sendMessage(PREFIX + "The invite to " + ChatColor.GOLD + guild.getName() + ChatColor.GRAY + " has expired!"); + sender.sendMessage(PREFIX + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " has not accepted your invite."); + } + } + }.runTaskLater(TFGuilds.getPlugin(), 20 * 90); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/InviteSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/InviteSubcommand.java deleted file mode 100644 index db467a4..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/InviteSubcommand.java +++ /dev/null @@ -1,92 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.guild.GuildState; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -public class InviteSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length != 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g invite ")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - Player invitee = Bukkit.getPlayer(args[1]); - if (invitee == null || plugin.bridge.isVanished(invitee)) - { - sender.sendMessage(PNF); - return true; - } - - if (Guild.getGuild(invitee) != null) - { - sender.sendMessage(ChatColor.RED + "This player is already in another guild!"); - return true; - } - - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (guild.getState() == GuildState.CLOSED) - { - sender.sendMessage(ChatColor.RED + "The guild is currently closed!"); - return true; - } - - if (guild.getState() == GuildState.OPEN) - { - sender.sendMessage(ChatColor.RED + "The guild is open! Tell your friend to join using \"/g join\"!"); - return true; - } - - if (INVITES.containsKey(invitee)) - { - sender.sendMessage(ChatColor.RED + "They have already been invited to your guild!"); - return true; - } - - INVITES.put(invitee, guild); - invitee.sendMessage(tl("%p%You have been invited to join %s%" + GUtil.colorize(guild.getName()) + "%p% through %s%" + player.getName() + "%p%'s invite!")); - invitee.sendMessage(tl("%p%Do %s%/g join " + ChatColor.stripColor(GUtil.colorize(guild.getName())) + "%p% to join!")); - invitee.sendMessage(tl("%p%This invite will expire in 90 seconds.")); - sender.sendMessage(tl("%p%Invite sent!")); - new BukkitRunnable() - { - public void run() - { - if (!INVITES.containsKey(invitee)) - { - return; - } - INVITES.remove(player); - invitee.sendMessage(ChatColor.RED + "Invite expired."); - sender.sendMessage(ChatColor.RED + "It has been 90 seconds and " + invitee.getName() + " did not accept your invitation."); - } - }.runTaskLater(plugin, 20 * 90); - return true; - } -} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/JoinSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/JoinSubCommand.java new file mode 100644 index 0000000..b13104e --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/JoinSubCommand.java @@ -0,0 +1,60 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class JoinSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g join "); + return; + } + + if (Guild.getGuild(playerSender) != null) + { + sender.sendMessage(IN_GUILD); + return; + } + + Guild guild = Guild.getGuild(StringUtils.join(args, " ", 1, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + if (guild.getState() == Guild.State.CLOSED) + { + sender.sendMessage(PREFIX + "That guild is currently closed."); + return; + } + + if (guild.getState() == Guild.State.INVITE_ONLY) + { + if (!guild.isInvited(playerSender)) + { + sender.sendMessage(PREFIX + "You must be invited to join the guild."); + return; + } + guild.removeInvite(playerSender); + } + + guild.addMember(playerSender); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has joined the guild."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java deleted file mode 100644 index 5047735..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java +++ /dev/null @@ -1,67 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.guild.GuildState; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class JoinSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g join ")); - return true; - } - - Player player = (Player)sender; - if (Guild.getGuild(player) != null) - { - sender.sendMessage(ChatColor.RED + "You are already in a guild!"); - return true; - } - - Guild guild = Guild.getGuild(GUtil.flatten(StringUtils.join(args, " ", 1, args.length))); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - if (guild.getState() == GuildState.CLOSED) - { - sender.sendMessage(ChatColor.RED + "That guild is currently closed!"); - return true; - } - - if (guild.getState() == GuildState.INVITE_ONLY) - { - if (!INVITES.containsKey(player)) - { - sender.sendMessage(ChatColor.RED + "You have not been invited to this guild!"); - return true; - } - INVITES.remove(player); - } - - guild.addMember(player.getName()); - guild.broadcast(tl("%s%" + player.getName() + " %p%has joined the guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/KickSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/KickSubCommand.java new file mode 100644 index 0000000..f869833 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/KickSubCommand.java @@ -0,0 +1,70 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class KickSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g kick "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "Only the guild owner and moderators can kick members."); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (playerSender.equals(player)) + { + sender.sendMessage(PREFIX + "You cannot kick yourself."); + return; + } + + if (guild.getOwner().equals(player.getUniqueId()) || guild.isModerator(player) && !guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "You may not kick the guild owner or moderators from your guild."); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(PLAYER_NOT_IN_GUILD); + return; + } + + guild.removeMember(player); + sender.sendMessage(PREFIX + "Successfully kicked " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " from your guild."); + player.sendMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has kicked you from " + ChatColor.GOLD + guild.getName()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java deleted file mode 100644 index 7729b99..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java +++ /dev/null @@ -1,113 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class KickSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length > 3) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g kick | player>")); - return true; - } - - if (args.length == 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(args[1]); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) - { - sender.sendMessage(PNF); - return true; - } - - if (!guild.hasMember(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); - return true; - } - - if (guild.getOwner().equals(player.getName()) || guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You cannot kick the owner/moderator(s) of a guild!"); - return true; - } - - guild.removeMember(player.getName()); - sender.sendMessage(tl(PREFIX + "Kicked %s%" + player.getName() + "%p% from %s%" + GUtil.colorize(guild.getName()) + "%p%.")); - player.sendMessage(tl("%s%You have been kicked from your guild.")); - guild.broadcast(tl("%s%" + player.getName() + " %p%has been kicked from your guild.")); - guild.save(); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't kick people from your guild!"); - return true; - } - - Player n = Bukkit.getPlayer(args[1]); - if (n == null) - { - sender.sendMessage(PNF); - return true; - } - - if (!guild.hasMember(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); - return true; - } - - if (guild.getOwner().equals(n.getName()) || guild.hasModerator(n.getName()) && !guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You cannot kick the owner/moderator(s) of a guild!"); - return true; - } - - guild.removeMember(n.getName()); - sender.sendMessage(tl(PREFIX + "Kicked %s%" + n.getName() + "%p% from your guild.")); - n.sendMessage(tl("%s%You have been kicked from your guild.")); - guild.broadcast(tl("%s%" + n.getName() + " %p%has been kicked from your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubCommand.java new file mode 100644 index 0000000..1663ffd --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubCommand.java @@ -0,0 +1,38 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LeaveSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "You may not leave your guild as the owner, please disband the guild instead."); + return; + } + + guild.removeMember(playerSender); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has left the guild."); + sender.sendMessage(PREFIX + "You have left the guild."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java deleted file mode 100644 index 2d1f5cb..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class LeaveSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length > 1) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g leave")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You cannot leave as you are the owner!"); - return true; - } - - guild.removeModerator(player.getName()); - guild.removeMember(player.getName()); - guild.save(); - sender.sendMessage(tl("%p%You left your guild.")); - guild.broadcast(tl("%s%" + sender.getName() + " %p%left the guild.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ListSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ListSubCommand.java new file mode 100644 index 0000000..10ef9f4 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ListSubCommand.java @@ -0,0 +1,60 @@ +package me.totalfreedom.tfguilds.command; + +import java.util.List; +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.PaginationList; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ListSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (args.length > 2) + { + sender.sendMessage(USAGE + "/g list [page]"); + return; + } + + List guilds = Guild.getGuildNames(); + if (guilds.isEmpty()) + { + sender.sendMessage(PREFIX + "There are no guilds."); + return; + } + + PaginationList pagination = new PaginationList<>(10); + pagination.addAll(guilds); + int index = 1; + + if (args.length == 2) + { + try + { + index = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) + { + sender.sendMessage(PREFIX + ChatColor.GOLD + args[1] + ChatColor.GRAY + " is not a valid number."); + return; + } + } + + if (index < 1 || index > pagination.getPageCount()) + { + sender.sendMessage(PREFIX + "Please pick a number between 1 and " + pagination.getPageCount()); + return; + } + + List page = pagination.getPage(index); + sender.sendMessage(PREFIX + "Guild list (" + ChatColor.GOLD + index + "/" + pagination.getPageCount() + ChatColor.GRAY + ")"); + for (String guild : page) + { + sender.sendMessage(ChatColor.GRAY + " - " + ChatColor.GOLD + guild); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ListSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ListSubcommand.java deleted file mode 100644 index 463b765..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/ListSubcommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import java.util.List; -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class ListSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - List guilds = Guild.getGuildList(); - - if (guilds.isEmpty()) - { - sender.sendMessage(ChatColor.RED + "Nobody has made a guild yet."); - return true; - } - - sender.sendMessage(tl(PREFIX + "%s%Guild List (%p%" + guilds.size() + " total%s%)")); - sender.sendMessage(tl("%s%- %p%" + StringUtils.join(guilds, "\n%s%- %p%"))); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java deleted file mode 100644 index ec88d9c..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java +++ /dev/null @@ -1,68 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class MOTDSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g motd | clear>")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't modify your guild's MOTD!"); - return true; - } - - if (args.length >= 3) - { - if (args[1].equalsIgnoreCase("set")) - { - String motd = StringUtils.join(args, " ", 2, args.length); - guild.setMotd(motd); - guild.save(); - sender.sendMessage(tl(PREFIX + "Set %s%" + GUtil.colorize(motd) + "%p% as the new MOTD of your guild%p%.")); - return true; - } - return false; - } - - if (!args[1].equalsIgnoreCase("clear")) - { - return false; - } - - guild.setMotd(null); - guild.save(); - sender.sendMessage(tl(PREFIX + "Cleared your guild's MOTD.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ModChatSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ModChatSubCommand.java new file mode 100644 index 0000000..3423480 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ModChatSubCommand.java @@ -0,0 +1,43 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ModChatSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "You must be a guild moderator to set player's rank for your guild."); + return; + } + + if (args.length == 1) + { + sender.sendMessage(USAGE + "/g mchat "); + return; + } + + String message = StringUtils.join(args, " ", 1, args.length); + guild.chat(playerSender, message, true); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/MotdSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/MotdSubCommand.java new file mode 100644 index 0000000..0f38a2f --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/MotdSubCommand.java @@ -0,0 +1,66 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.GUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class MotdSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length == 1) + { + sender.sendMessage(USAGE + "/g motd | clear>"); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "Only guild moderators can modify the guild's MOTD"); + return; + } + + if (args.length >= 3) + { + if (args[1].equalsIgnoreCase("set")) + { + String message = StringUtils.join(args, " ", 2, args.length); + guild.setMotd(message); + sender.sendMessage(PREFIX + "Set the guild's MOTD to " + ChatColor.GOLD + GUtil.colorize(message)); + } + else + { + sender.sendMessage(USAGE + "/g motd | clear>"); + } + return; + } + + if (!args[1].equalsIgnoreCase("clear")) + { + sender.sendMessage(USAGE + "/g motd | clear>"); + return; + } + + guild.setMotd(null); + sender.sendMessage(PREFIX + "Successfully cleared the guild's MOTD"); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/NoTagSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/NoTagSubCommand.java new file mode 100644 index 0000000..be35267 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/NoTagSubCommand.java @@ -0,0 +1,49 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class NoTagSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!tfmBridge.isAdmin(sender)) + { + sender.sendMessage(PREFIX + "You do not have the permission."); + return; + } + + if (args.length == 1) + { + sender.sendMessage(USAGE + "/g edittag "); + return; + } + + Guild guild = Guild.getGuild(StringUtils.join(args, " ", 1, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + boolean enabled = guild.canUseTag(); + if (enabled) + { + guild.setUseTag(false); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Disabled " + ChatColor.GRAY + "guild tags for " + ChatColor.GOLD + guild.getName()); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has disabled guild tags for your guild."); + } + else + { + guild.setUseTag(true); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Enabled " + ChatColor.GRAY + "guild tags for " + ChatColor.GOLD + guild.getName()); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has enabled guild tags for your guild."); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubCommand.java new file mode 100644 index 0000000..2d741d6 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubCommand.java @@ -0,0 +1,70 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RemoveModSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length != 2) + { + sender.sendMessage(USAGE + "/g removemod "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "You must be the guild owner to remove moderators."); + return; + } + + if (guild.getOwner().equals(player.getUniqueId())) + { + sender.sendMessage(PREFIX + "You are the owner of your guild, you cannot remove yourself."); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(player)) + { + sender.sendMessage(PREFIX + "That player is not a moderator."); + return; + } + + guild.removeModerator(player); + sender.sendMessage(PREFIX + "Successfully removed " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " as a moderator."); + player.sendMessage(PREFIX + "You are no longer a guild moderator for your guild."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java deleted file mode 100644 index 27c7326..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java +++ /dev/null @@ -1,123 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class RemoveModSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1 || args.length > 3) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g removemod | name>>")); - return true; - } - - if (args.length == 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(args[1]); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) - { - sender.sendMessage(PNF); - return true; - } - - if (guild.getModerators().contains(sender.getName())) - { - sender.sendMessage(ChatColor.RED + "You may not demote yourself."); - return true; - } - - if (!guild.hasMember(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); - return true; - } - - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This member is not a moderator for this guild!"); - return true; - } - - guild.removeModerator(player.getName()); - sender.sendMessage(tl(PREFIX + "Removed %s%" + player.getName() + "%p% as a moderator for %s%" + GUtil.colorize(guild.getName()) + "%p%.")); - guild.broadcast(tl("%s%" + player.getName() + " %p%has been made a member of your guild.")); - guild.save(); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change who is a moderator in your guild!"); - return true; - } - - Player n = Bukkit.getPlayer(args[1]); - if (n == null) - { - sender.sendMessage(PNF); - return true; - } - - if (n == player) - { - sender.sendMessage(ChatColor.RED + "You may not demote yourself."); - return true; - } - - if (!guild.hasMember(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); - return true; - } - - if (!guild.hasModerator(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This member is not a moderator for your guild!"); - return true; - } - - guild.removeModerator(n.getName()); - sender.sendMessage(tl(PREFIX + "Removed %s%" + n.getName() + "%p% as a moderator for your guild.")); - guild.broadcast(tl("%s%" + n.getName() + " %p%has been made a member of your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java deleted file mode 100644 index 29137b8..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java +++ /dev/null @@ -1,93 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class RenameSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g rename ")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - String newName = StringUtils.join(args, " ", 1, args.length); - String identifier = GUtil.flatten(newName); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change the name of your guild!"); - return true; - } - - Pattern pattern = Pattern.compile("^[A-Za-z0-9? ,_-]+$"); - Matcher matcher = pattern.matcher(newName); - - if (!matcher.matches()) - { - sender.sendMessage(ChatColor.RED + "Guild names must be alphanumeric."); - return true; - } - - if (identifier.length() > 30) - { - sender.sendMessage(ChatColor.RED + "Your new guild name may not be over 30 characters."); - return true; - } - - if (Guild.guildExists(identifier)) - { - sender.sendMessage(ChatColor.RED + "A guild with a name similar to yours already exists!"); - return true; - } - - for (String blacklisted : GUtil.BLACKLISTED_NAMES_AND_TAGS) - { - if (args[0].equalsIgnoreCase(blacklisted)) - { - if (!plugin.bridge.isAdmin(player)) - { - player.sendMessage(ChatColor.RED + "You may not use that name."); - return true; - } - } - } - - guild.disband(); - guild.setIdentifier(GUtil.flatten(newName)); - guild.setName(newName); - guild.updateRankIdentifiers(); - guild.setTag(GUtil.colorize("&8[&7" + newName + "&8]")); - sender.sendMessage(tl(PREFIX + "Set %s%" + GUtil.colorize(newName) + "%p% as the new name of your guild%p%.")); - guild.broadcast(tl("%p%Your guild has been renamed to " + GUtil.colorize(newName) + "%p%.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RosterSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RosterSubCommand.java new file mode 100644 index 0000000..ac349e9 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/RosterSubCommand.java @@ -0,0 +1,59 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RosterSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + Guild guild; + if (args.length >= 2) + { + Player player = Bukkit.getPlayer(args[1]); + if (player != null && !tfmBridge.isVanished(player)) + { + guild = Guild.getGuild(player); + if (guild == null) + { + sender.sendMessage(PLAYER_NOT_IN_GUILD); + return; + } + + sender.sendMessage(guild.getRoster()); + return; + } + + guild = Guild.getGuild(StringUtils.join(args, " ", 1, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + sender.sendMessage(guild.getRoster()); + return; + } + + if (!(sender instanceof Player)) + { + sender.sendMessage(USAGE + "/g roster "); + return; + } + + guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + sender.sendMessage(guild.getRoster()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RosterSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RosterSubcommand.java deleted file mode 100644 index 03be36f..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/RosterSubcommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class RosterSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length >= 2) - { - Player player = Bukkit.getPlayer(args[1]); - if (player != null) - { - Guild guild = Guild.getGuild(player); - if (guild != null) - { - sender.sendMessage(guild.getRoster()); - return true; - } - } - - Guild guild = Guild.getGuild(GUtil.flatten(StringUtils.join(args, " ", 1, args.length))); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - sender.sendMessage(guild.getRoster()); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild((Player)sender); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - sender.sendMessage(guild.getRoster()); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubCommand.java new file mode 100644 index 0000000..5b2a309 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubCommand.java @@ -0,0 +1,71 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.GUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetDefaultRankSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g setdefaultrank "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "Only the guild owner can set default rank."); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (name.equalsIgnoreCase("none")) + { + guild.setDefaultRank(null); + sender.sendMessage(PREFIX + "Removed default rank."); + return; + } + + if (!StringUtils.isAlphanumericSpace(name) || name.isBlank()) + { + sender.sendMessage(PREFIX + "The name must be alphanumeric."); + return; + } + + if (name.length() > 15) + { + sender.sendMessage(PREFIX + "The rank name cannot go over 15 characters limit."); + return; + } + + if (GUtil.containsBlacklistedWord(name)) + { + sender.sendMessage(PREFIX + "The guild name contains a blacklisted word."); + return; + } + + guild.setDefaultRank(name); + sender.sendMessage(PREFIX + "Successfully set " + ChatColor.GOLD + name + ChatColor.GRAY + " as the default rank of your guild."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java deleted file mode 100644 index 070918a..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class SetDefaultRankSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length == 0) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g setdefaultrank ")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You do not have permissions to manage ranks in your guild!"); - return true; - } - - String rank = StringUtils.join(args, " ", 1, args.length); - if (rank.equalsIgnoreCase("none")) - { - guild.setDefaultRank(null); - guild.save(); - sender.sendMessage(tl(PREFIX + "Removed the default guild rank.")); - return true; - } - - if (!guild.hasRank(rank)) - { - sender.sendMessage(ChatColor.RED + "A rank of that name does not exist in the guild!"); - return true; - } - - guild.setDefaultRank(rank); - guild.save(); - sender.sendMessage(tl(PREFIX + "Set %s%\"" + rank + "\"%p% as the default rank for your guild.")); - return true; - } -} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubCommand.java new file mode 100644 index 0000000..93b005c --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubCommand.java @@ -0,0 +1,65 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetOwnerSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g setowner "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "Only the guild owner can set the owner of the guild."); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (playerSender.equals(player)) + { + sender.sendMessage(PREFIX + "You are already the owner of the guild."); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(PREFIX + "That player is not in your guild."); + return; + } + + guild.setOwner(player); + sender.sendMessage(PREFIX + "Successfully set " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " as the new owner of the guild."); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has set " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + " as the new owner of the guild."); + player.sendMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has set you as the owner of " + ChatColor.GOLD + guild.getName()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java deleted file mode 100644 index 0648176..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java +++ /dev/null @@ -1,113 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class SetOwnerSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1 || args.length > 3) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g setowner | player>")); - return true; - } - - if (args.length == 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(args[1]); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) - { - sender.sendMessage(PNF); - return true; - } - - if (guild.getOwner().contains(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is already the owner of that guild!"); - return true; - } - - if (!guild.hasMember(player.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); - return true; - } - - guild.removeModerator(player.getName()); - guild.setOwner(player.getName()); - sender.sendMessage(tl(PREFIX + "Ownership has been transferred to %s%" + player.getName() + "%p% in %s%" + GUtil.colorize(guild.getName()) + "%p%.")); - guild.broadcast(tl("%s%" + player.getName() + " %p%has been made the owner of your guild.")); - guild.save(); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change who is the owner of your guild!"); - return true; - } - - Player n = Bukkit.getPlayer(args[1]); - if (n == null) - { - sender.sendMessage(PNF); - return true; - } - - if (n == player) - { - sender.sendMessage(ChatColor.RED + "You are already the owner of your guild."); - return true; - } - - if (!guild.hasMember(n.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); - return true; - } - - guild.removeModerator(n.getName()); - guild.setOwner(n.getName()); - sender.sendMessage(tl(PREFIX + "Ownership has been transferred to %s%" + n.getName() + "%p% in your guild.")); - guild.broadcast(tl("%s%" + n.getName() + " %p%has been made the owner of your guild.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubCommand.java new file mode 100644 index 0000000..51ed885 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubCommand.java @@ -0,0 +1,66 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetRankSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 3) + { + sender.sendMessage(USAGE + "/g setrank "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "You must be a guild moderator to set player's rank for your guild."); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(PLAYER_NOT_IN_GUILD); + return; + } + + String name = StringUtils.join(args, " ", 2, args.length); + if (!guild.hasRank(name)) + { + sender.sendMessage(PREFIX + "That rank does not exist."); + return; + } + + guild.setPlayerRank(player, name); + sender.sendMessage(PREFIX + "Successfully set " + ChatColor.GOLD + player.getName() + ChatColor.GRAY + "'s guild rank to " + ChatColor.GOLD + name); + player.sendMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has set your guild rank to " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java deleted file mode 100644 index dee3546..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java +++ /dev/null @@ -1,91 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.guild.GuildRank; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class SetRankSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g setrank ")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change the ranks of your guild members!"); - return true; - } - - Player r = Bukkit.getPlayer(args[1]); - if (r == null) - { - sender.sendMessage(PNF); - return true; - } - - if (!guild.hasMember(r.getName())) - { - sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); - return true; - } - - String name = StringUtils.join(args, " ", 2, args.length); - if (name.toLowerCase().equals("none")) - { - for (GuildRank gr : guild.getRanks()) - { - gr.getMembers().remove(r.getName()); - } - - sender.sendMessage(tl(PREFIX + "Removed the rank of %s%" + r.getName() + "%p% in your guild.")); - r.sendMessage(tl("%p%Your rank in your guild has been removed.")); - guild.save(); - return true; - } - - GuildRank rank = guild.getRank(name); - if (rank == null) - { - sender.sendMessage(ChatColor.RED + "A rank of that name does not exist in the guild!"); - return true; - } - - for (GuildRank gr : guild.getRanks()) - { - gr.getMembers().remove(r.getName()); - } - - rank.getMembers().add(r.getName()); - sender.sendMessage(tl(PREFIX + "Set the rank of %s%" + r.getName() + "%p% in your guild to %s%" + rank.getName() + "%p%.")); - r.sendMessage(tl("%p%Your rank in your guild has been set to %s%" + rank.getName() + "%p%.")); - guild.save(); - return true; - } -} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubCommand.java new file mode 100644 index 0000000..3cae41b --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubCommand.java @@ -0,0 +1,53 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetStateSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length != 2) + { + sender.sendMessage(USAGE + "/g setstate "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "Only guild moderators can change the state."); + return; + } + + Guild.State state = Guild.State.fromString(args[1]); + if (state == null) + { + sender.sendMessage(PREFIX + ChatColor.GOLD + args[1] + ChatColor.GRAY + " is not a valid state. Available options: " + + ChatColor.GOLD + StringUtils.join(Guild.State.values(), ", ")); + return; + } + + guild.setState(state); + sender.sendMessage(PREFIX + "Successfully set the guild state to " + ChatColor.GOLD + state.name()); + guild.broadcast(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has set the guild state to " + ChatColor.GOLD + state.name()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java deleted file mode 100644 index 42da3cd..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java +++ /dev/null @@ -1,87 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.guild.GuildState; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class SetStateSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length == 1) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g setstate ")); - return true; - } - - if (args.length == 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild guild = Guild.getGuild(args[1]); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - GuildState state = GuildState.findState(args[2]); - if (state == null) - { - sender.sendMessage(ChatColor.RED + "That is not a valid state!"); - return true; - } - - guild.setState(state); - sender.sendMessage(tl(PREFIX + "Set the guild state to %s%" + state.getDisplay().toLowerCase() + "%p% in %s%" + GUtil.colorize(guild.getName()) + "%p%.")); - guild.broadcast(tl("%p%The guild is now %s%" + state.getDisplay().toLowerCase() + "%p%.")); - guild.save(); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.hasModerator(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't change the state of the guild!"); - return true; - } - - GuildState state = GuildState.findState(args[1]); - if (state == null) - { - sender.sendMessage(ChatColor.RED + "That is not a valid state!"); - return true; - } - - guild.setState(state); - sender.sendMessage(tl(PREFIX + "Set the guild state to %s%" + state.getDisplay().toLowerCase() + "%p% in your guild.")); - guild.broadcast(tl("%p%The guild is now %s%" + state.getDisplay().toLowerCase() + "%p%.")); - guild.save(); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetWarpSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetWarpSubCommand.java new file mode 100644 index 0000000..755a03c --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetWarpSubCommand.java @@ -0,0 +1,57 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SetWarpSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g setwarp "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.isModerator(playerSender)) + { + sender.sendMessage(PREFIX + "You must be a guild moderator or owner to create a warp for the guild."); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!StringUtils.isAlphanumericSpace(name)) + { + sender.sendMessage(PREFIX + "The name must be alphanumeric."); + return; + } + + if (guild.hasWarp(name)) + { + sender.sendMessage(PREFIX + "A warp with that name already exist."); + return; + } + + guild.addWarp(name, playerSender.getLocation()); + sender.sendMessage(PREFIX + "A warp with the name " + ChatColor.GOLD + name + ChatColor.GRAY + " has been successfully created."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SubCommand.java new file mode 100644 index 0000000..2a131e7 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/SubCommand.java @@ -0,0 +1,10 @@ +package me.totalfreedom.tfguilds.command; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public interface SubCommand +{ + + void execute(CommandSender sender, Player playerSender, String[] args); +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java index 131f3c2..3d0973a 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java @@ -1,57 +1,50 @@ package me.totalfreedom.tfguilds.command; -import java.util.UUID; import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.util.GLog; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; +import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; public class TFGuildsCommand extends Common implements CommandExecutor { + @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (args.length > 1) { return false; } - if (args.length == 1) + if (args.length == 1 && args[0].equalsIgnoreCase("reload")) { - if (args[0].toLowerCase().equals("reload")) + if (!tfmBridge.isAdmin(sender)) { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - try - { - plugin.config.load(); - plugin.guilds.load(); - plugin.players.load(); - GLog.info("All configs reloaded successfully"); - sender.sendMessage(tl(PREFIX + "All configuration files have been reloaded successfully.")); - return true; - } - catch (Exception ex) - { - ex.printStackTrace(); - } + sender.sendMessage(PREFIX + "You do not have the permission."); return true; } + + try + { + TFGuilds.getPlugin().getConfig().load(); + TFGuilds.getPlugin().getLogger().info("Successfully reload the configuration file."); + sender.sendMessage(PREFIX + "The configuration file have been reloaded successfully."); + return true; + } + catch (Exception ex) + { + ex.printStackTrace(); + } + return true; } - sender.sendMessage(tl("%p%TFGuilds %s%is a plugin which allows for players to make their own guilds, providing guild chat, guild teleportation, and more.")); - sender.sendMessage(tl("%s%Version %p%v" + plugin.getDescription().getVersion())); - OfflinePlayer sp = Bukkit.getOfflinePlayer(UUID.fromString("d018f2b8-ce60-4672-a45f-e580e0331299")); - OfflinePlayer su = Bukkit.getOfflinePlayer(UUID.fromString("53b1512e-3481-4702-9f4f-63cb9c8be6a1")); - sender.sendMessage(tl("%s%Developed by %p%" + sp.getName() + " & " + su.getName())); - sender.sendMessage(tl("%s%https://github.com/TFPatches/TFGuilds")); + sender.sendMessage(ChatColor.AQUA + "TFGuilds " + ChatColor.GRAY + "is a plugin which allows players to create their own guilds, provide guild chat, guild teleportation and many more."); + sender.sendMessage(ChatColor.GRAY + "Version " + ChatColor.GOLD + TFGuilds.getPlugin().getDescription().getVersion()); + sender.sendMessage(ChatColor.GRAY + "Originally created by " + ChatColor.GOLD + "speednt " + ChatColor.GRAY + "and " + ChatColor.GOLD + "supernt"); + sender.sendMessage(ChatColor.GRAY + "Developed by " + ChatColor.GOLD + "NotInSync"); + sender.sendMessage(ChatColor.GRAY + "Source code " + ChatColor.GOLD + "https://github.com/AtlasMediaGroup/TFGuilds"); return true; } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java deleted file mode 100644 index b0d7649..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class TPSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length != 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g tp ")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - Player to = Bukkit.getPlayer(args[1]); - if (to == null) - { - sender.sendMessage(PNF); - return true; - } - - if (!guild.getMembers().contains(to.getName())) - { - sender.sendMessage(ChatColor.RED + "That player is not in your guild."); - return true; - } - - player.teleport(to.getLocation()); - sender.sendMessage(tl("%p%Teleported to %s%" + to.getName() + "%p%.")); - to.sendMessage(tl("%s%" + sender.getName() + " %p%has teleported to you.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TagSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TagSubCommand.java new file mode 100644 index 0000000..eaa4c37 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/TagSubCommand.java @@ -0,0 +1,107 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.config.ConfigEntry; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.util.GUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TagSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g tag | clear [guild]>"); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (!guild.getOwner().equals(playerSender.getUniqueId())) + { + sender.sendMessage(PREFIX + "Only the guild owner can edit the guild's tag."); + return; + } + + if (!guild.canUseTag()) + { + sender.sendMessage(PREFIX + "You may not edit or clear your guild tag, please contact an admin if this is an error."); + return; + } + + if (args.length >= 3) + { + if (args[1].equalsIgnoreCase("set")) + { + int length = ConfigEntry.GUILD_TAG_MAX_LENGTH.getInteger(); + String tag = StringUtils.join(args, " ", 2, args.length); + tag = tag.replace("%tag%", guild.getName()); + if (GUtil.removeColorCodes(tag).length() > length && length > 0) + { + sender.sendMessage(PREFIX + "The guild tag cannot go over " + length + " characters limit."); + return; + } + + if (GUtil.containsBlacklistedWord(tag) && tfmBridge.isAdmin(sender)) + { + sender.sendMessage(PREFIX + "The guild tag contains forbidden word(s)."); + return; + } + + guild.setTag(tag); + sender.sendMessage(PREFIX + "The guild tag has been changed to " + ChatColor.GOLD + GUtil.colorize(tag).replace("%rank%", "Guild Owner")); + } + else if (args[1].equalsIgnoreCase("clear")) + { + if (!tfmBridge.isAdmin(sender)) + { + sender.sendMessage(PREFIX + "You do not have the permission to use this command."); + return; + } + + guild = Guild.getGuild(StringUtils.join(args, " ", 2, args.length)); + if (guild == null) + { + sender.sendMessage(PREFIX + "That guild does not exist."); + return; + } + + guild.setTag(null); + sender.sendMessage(PREFIX + "Successfully cleared the guild tag for " + ChatColor.GOLD + guild.getName()); + return; + } + else + { + sender.sendMessage(USAGE + "/g tag | clear [guild]>"); + } + return; + } + + if (args[1].equalsIgnoreCase("clear")) + { + guild.setTag(null); + sender.sendMessage(PREFIX + "Successfully cleared the guild tag."); + } + else + { + sender.sendMessage(USAGE + "/g tag | clear [guild]>"); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java deleted file mode 100644 index 4d97ec2..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java +++ /dev/null @@ -1,107 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class TagSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - if (args.length < 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g tag | clear [guild]>>")); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - if (!guild.getOwner().equals(player.getName())) - { - sender.sendMessage(ChatColor.RED + "You can't modify your guild's tag!"); - return true; - } - - if (args.length >= 3) - { - if (args[1].equalsIgnoreCase("set")) - { - String tag = StringUtils.join(args, " ", 2, args.length); - - tag = tag.replace("%tag%", guild.getName()); - - if (tag.length() > 30) - { - player.sendMessage(ChatColor.RED + "Your guild tag must not be over 30 characters."); - return true; - } - - for (String blacklisted : GUtil.BLACKLISTED_NAMES_AND_TAGS) - { - if (tag.equalsIgnoreCase(blacklisted)) - { - if (!plugin.bridge.isAdmin(player)) - { - player.sendMessage(ChatColor.RED + "You may not use that name."); - return true; - } - } - } - - guild.setTag(tag); - guild.save(); - sender.sendMessage(tl("%p%Your guild tag has been changed to be \"" + GUtil.colorize(tag).replace("%rank%", "Guild Owner") + "%p%\".")); - return true; - } - } - - if (args[1].equalsIgnoreCase("clear")) - { - if (args.length >= 3) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Guild g = Guild.getGuild(GUtil.flatten(StringUtils.join(args, " ", 2, args.length))); - if (g == null) - { - sender.sendMessage(ChatColor.RED + "That guild doesn't exist!"); - return true; - } - - g.setTag(null); - g.save(); - sender.sendMessage(tl("%p%Cleared guild tag for " + g.getName() + ".")); - return true; - } - - guild.setTag(null); - guild.save(); - sender.sendMessage(tl("%p%Your guild tag has been cleared.")); - } - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleChatSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleChatSubCommand.java new file mode 100644 index 0000000..84e1c8e --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ToggleChatSubCommand.java @@ -0,0 +1,46 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.User; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ToggleChatSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (args.length > 1) + { + sender.sendMessage(USAGE + "/g togglechat"); + return; + } + + User user = User.getUserFromPlayer(playerSender); + if (user == null) + { + user = User.create(playerSender); + } + + // Must use this otherwise the subcommand will not work properly, unlike ToggleTagSubCommand.java + boolean enabled = user.displayChat(); + if (enabled) + { + user.setDisplayChat(false); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Disabled" + ChatColor.GRAY + " personal guild chat."); + } + else + { + user.setDisplayChat(true); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Enabled" + ChatColor.GRAY + " personal guild chat."); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubCommand.java new file mode 100644 index 0000000..f4310fc --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubCommand.java @@ -0,0 +1,36 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.User; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ToggleTagSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (args.length > 1) + { + sender.sendMessage(USAGE + "/g toggletag"); + return; + } + + User user = User.getUserFromPlayer(playerSender); + if (user == null) + { + user = User.create(playerSender); + } + + user.setDisplayTag(!user.displayTag()); + sender.sendMessage(PREFIX + ChatColor.GOLD + (user.displayTag() ? "Enabled" : "Disabled") + ChatColor.GRAY + " personal guild tag."); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java deleted file mode 100644 index 222352a..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java +++ /dev/null @@ -1,83 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.util.GUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -public class ToggleTagSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (args.length > 2) - { - sender.sendMessage(tl(PREFIX + "Proper usage: /g toggletag [player]")); - return true; - } - - if (args.length == 2) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - if (player == null) - { - sender.sendMessage(PNF); - return true; - } - - boolean enabled = plugin.players.getBoolean(player.getName() + ".tag"); - if (!plugin.players.contains(player.getName()) || enabled) - { - plugin.players.set(player.getName() + ".tag", false); - plugin.players.save(); - sender.sendMessage(tl(PREFIX + "Disabled personal guild tag for " + player.getName() + ".")); - return true; - } - - plugin.players.set(player.getName() + ".tag", true); - plugin.players.save(); - sender.sendMessage(tl(PREFIX + "Enabled personal guild tag for " + player.getName() + ".")); - return true; - } - - if (sender instanceof ConsoleCommandSender) - { - sender.sendMessage(NO_PERMS); - return true; - } - - Player player = (Player)sender; - Guild guild = Guild.getGuild(player); - if (guild == null) - { - sender.sendMessage(ChatColor.RED + "You aren't in a guild!"); - return true; - } - - boolean enabled = plugin.players.getBoolean(player.getName() + ".tag"); - if (!plugin.players.contains(player.getName()) || enabled) - { - plugin.players.set(player.getName() + ".tag", false); - plugin.players.save(); - sender.sendMessage(tl(PREFIX + "Disabled personal guild tag.")); - return true; - } - - plugin.players.set(player.getName() + ".tag", true); - plugin.players.save(); - sender.sendMessage(tl(PREFIX + "Enabled personal guild tag.")); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubCommand.java new file mode 100644 index 0000000..ebc589c --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubCommand.java @@ -0,0 +1,36 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.config.ConfigEntry; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ToggleTagsSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!tfmBridge.isAdmin(sender)) + { + sender.sendMessage(PREFIX + "You do not have the permission."); + return; + } + + boolean enabled = ConfigEntry.GUILD_TAGS.getBoolean(); + if (enabled) + { + ConfigEntry.GUILD_TAGS.setBoolean(false); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Disabled " + ChatColor.GRAY + "global guild tags."); + Bukkit.broadcastMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has globally disabled guild tags."); + } + else + { + ConfigEntry.GUILD_TAGS.setBoolean(true); + sender.sendMessage(PREFIX + ChatColor.GOLD + "Enabled " + ChatColor.GRAY + " global guild tags."); + Bukkit.broadcastMessage(PREFIX + ChatColor.GOLD + sender.getName() + ChatColor.GRAY + " has globally enabled guild tags."); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubcommand.java deleted file mode 100644 index 16a2982..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagsSubcommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.totalfreedom.tfguilds.command; - -import me.totalfreedom.tfguilds.Common; -import me.totalfreedom.tfguilds.config.ConfigEntry; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class ToggleTagsSubcommand extends Common implements CommandExecutor -{ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - if (!plugin.bridge.isAdmin(sender)) - { - sender.sendMessage(NO_PERMS); - return true; - } - - boolean enabled = ConfigEntry.GUILD_TAGS_ENABLED.getBoolean(); - if (enabled) - { - ConfigEntry.GUILD_TAGS_ENABLED.setBoolean(false); - sender.sendMessage(tl(PREFIX + "Globally disabled guild tags.")); - broadcast(ChatColor.RED + sender.getName() + " - Globally disabling guild tags"); - } - else - { - ConfigEntry.GUILD_TAGS_ENABLED.setBoolean(true); - sender.sendMessage(tl(PREFIX + "Globally enabled guild tags.")); - broadcast(ChatColor.RED + sender.getName() + " - Globally enabling guild tags"); - } - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TpSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TpSubCommand.java new file mode 100644 index 0000000..b033154 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/TpSubCommand.java @@ -0,0 +1,51 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TpSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length != 2) + { + sender.sendMessage(USAGE + "/g tp "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + Player player = Bukkit.getPlayer(args[1]); + if (player == null || tfmBridge.isVanished(player)) + { + sender.sendMessage(PLAYER_NOT_FOUND); + return; + } + + if (!guild.isMember(player)) + { + sender.sendMessage(PLAYER_NOT_IN_GUILD); + return; + } + + playerSender.teleport(player); + sender.sendMessage(PREFIX + "Successfully teleported to " + ChatColor.GOLD + player.getName()); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/WarpSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/WarpSubCommand.java new file mode 100644 index 0000000..9138933 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/WarpSubCommand.java @@ -0,0 +1,47 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class WarpSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + if (args.length < 2) + { + sender.sendMessage(USAGE + "/g warp "); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + String name = StringUtils.join(args, " ", 1, args.length); + if (!guild.hasWarp(name)) + { + sender.sendMessage(PREFIX + "The guild does not have the warp named " + ChatColor.GOLD + name); + return; + } + + Location location = guild.getWarp(name); + playerSender.teleport(location); + sender.sendMessage(PREFIX + "Successfully warped to " + ChatColor.GOLD + name); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/WarpsSubCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/WarpsSubCommand.java new file mode 100644 index 0000000..94d5eb9 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/WarpsSubCommand.java @@ -0,0 +1,37 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.guild.Guild; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class WarpsSubCommand extends Common implements SubCommand +{ + + @Override + public void execute(CommandSender sender, Player playerSender, String[] args) + { + if (!(sender instanceof Player)) + { + sender.sendMessage(IN_GAME_ONLY); + return; + } + + Guild guild = Guild.getGuild(playerSender); + if (guild == null) + { + sender.sendMessage(NOT_IN_GUILD); + return; + } + + if (guild.getWarps().isEmpty()) + { + sender.sendMessage(PREFIX + "There are no warps."); + return; + } + + sender.sendMessage(PREFIX + "Warps (" + guild.getWarps().size() + "): " + ChatColor.GOLD + StringUtils.join(guild.getWarpNames(), ", ")); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/config/Config.java b/src/main/java/me/totalfreedom/tfguilds/config/Config.java index c577ca6..636179e 100644 --- a/src/main/java/me/totalfreedom/tfguilds/config/Config.java +++ b/src/main/java/me/totalfreedom/tfguilds/config/Config.java @@ -1,38 +1,28 @@ package me.totalfreedom.tfguilds.config; -import me.totalfreedom.tfguilds.TFGuilds; -import org.bukkit.configuration.file.YamlConfiguration; - import java.io.File; +import java.io.IOException; +import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; public class Config extends YamlConfiguration { + private final TFGuilds plugin; private final File file; - public Config(String name) + public Config(String fileName) { this.plugin = TFGuilds.getPlugin(); - this.file = new File(plugin.getDataFolder(), name); + this.file = new File(plugin.getDataFolder(), fileName); if (!file.exists()) { - options().copyDefaults(true); - plugin.saveResource(name, false); + plugin.saveResource(fileName, false); } - load(); - } - public void load() - { - try - { - super.load(file); - } - catch (Exception e) - { - e.printStackTrace(); - } + load(); } public void save() @@ -41,9 +31,21 @@ public class Config extends YamlConfiguration { super.save(file); } - catch (Exception e) + catch (IOException ex) { - e.printStackTrace(); + ex.printStackTrace(); } } -} \ No newline at end of file + + public void load() + { + try + { + super.load(file); + } + catch (IOException | InvalidConfigurationException ex) + { + ex.printStackTrace(); + } + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/config/ConfigEntry.java b/src/main/java/me/totalfreedom/tfguilds/config/ConfigEntry.java index 4f5db02..2889c02 100644 --- a/src/main/java/me/totalfreedom/tfguilds/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/tfguilds/config/ConfigEntry.java @@ -1,25 +1,30 @@ package me.totalfreedom.tfguilds.config; import me.totalfreedom.tfguilds.TFGuilds; -import org.bukkit.ChatColor; public enum ConfigEntry { - SCHEME_PRIMARY("scheme.primary"), - SCHEME_SECONDARY("scheme.secondary"), - // Server - GUILD_CHAT_LOGGING_ENABLED("server.guild_chat_logging.enabled"), - GUILD_TAGS_ENABLED("server.guild_tags.enabled"); + + GUILD_CHAT_LOGGING("server.guild_chat_logging"), + GUILD_TAGS("server.guild_tags"), + GUILD_TAG_MAX_LENGTH("server.guild_tag_max_length"), + GLOBAL_TAG_MAX_LENGTH("server.global_tag_max_length"), + CONNECTION_TYPE("settings.connection"), + MYSQL_HOST("mysql.host"), + MYSQL_PORT("mysql.port"), + MYSQL_USERNAME("mysql.username"), + MYSQL_PASSWORD("mysql.password"), + MYSQL_DATABASE("mysql.database"); private final String path; + private final Config config; ConfigEntry(String path) { this.path = path; + this.config = TFGuilds.getPlugin().getConfig(); } - private static final Config config = TFGuilds.getPlugin().config; - public boolean getBoolean() { return config.getBoolean(path); @@ -31,8 +36,13 @@ public enum ConfigEntry config.save(); } - public ChatColor getChatColor() + public int getInteger() { - return ChatColor.valueOf(config.getString(path).toUpperCase()); + return config.getInt(path); } -} \ No newline at end of file + + public String getString() + { + return config.getString(path); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java b/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java index ee89a20..a21fd23 100644 --- a/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java +++ b/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java @@ -1,198 +1,124 @@ package me.totalfreedom.tfguilds.guild; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collections; +import java.util.HashMap; import java.util.List; -import lombok.Getter; -import lombok.Setter; -import me.totalfreedom.tfguilds.TFGuilds; +import java.util.Map; +import java.util.UUID; import me.totalfreedom.tfguilds.Common; +import me.totalfreedom.tfguilds.TFGuilds; import me.totalfreedom.tfguilds.config.ConfigEntry; -import me.totalfreedom.tfguilds.util.GLog; import me.totalfreedom.tfguilds.util.GUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.World; import org.bukkit.entity.Player; public class Guild { - private static final TFGuilds plugin = TFGuilds.getPlugin(); - @Getter - @Setter - private String identifier; - - @Getter - @Setter - private String name; - - @Getter - @Setter - private String owner; - - @Getter - private final List moderators; - - @Getter - private final List members; - - @Getter - @Setter - private String tag; - - @Getter - @Setter - private GuildState state; - - @Getter - private final List ranks; - - @Getter - @Setter - private String motd; - - @Getter - @Setter - private Location home; - - @Getter - @Setter + private static Map guilds = new HashMap<>(); + // + private final String id; + private final String name; + private final long createdAt; + private List invites = new ArrayList<>(); + private UUID owner; + private List moderators; + private List members; + private Map> ranks; + private Map warps; private String defaultRank; + private String tag; + private State state; + private String motd; + private Location home; + private boolean useTag; - @Getter - private final long creation; - - public Guild(String identifier, - String name, - String owner, - List members, - List moderators, + public Guild(String name, + UUID owner, + List moderators, + List members, + Map> ranks, + Map warps, + String defaultRank, + State state, String tag, - GuildState state, - List ranks, String motd, - Location home, - long creation, - String defaultrank) + double x, + double y, + double z, + String world, + long createdAt, + boolean useTag) { - this.identifier = identifier; + this.id = name.toLowerCase().replaceAll(" ", "_"); this.name = name; this.owner = owner; - this.members = members; this.moderators = moderators; - this.tag = tag; - this.state = state; + this.members = members; this.ranks = ranks; + this.warps = warps; + this.defaultRank = defaultRank; + this.state = state; + this.tag = tag; this.motd = motd; - this.home = home; - this.creation = creation; - this.defaultRank = defaultrank; - } - - public void save() - { - plugin.guilds.set(identifier + ".name", name); - plugin.guilds.set(identifier + ".owner", owner); - plugin.guilds.set(identifier + ".members", members); - plugin.guilds.set(identifier + ".moderators", moderators); - plugin.guilds.set(identifier + ".tag", tag); - plugin.guilds.set(identifier + ".state", state.name()); - for (GuildRank rank : ranks) + World w; + if (world == null) { - rank.set(); + w = Bukkit.getWorlds().get(0); } - plugin.guilds.set(identifier + ".motd", motd); - plugin.guilds.set(identifier + ".home", home); - plugin.guilds.set(identifier + ".creation", creation); - plugin.guilds.set(identifier + ".defaultrank", defaultRank); - plugin.guilds.save(); - } - - public void addMember(String name) - { - if (hasDefaultRank()) + else { - getRank(defaultRank).getMembers().add(name); + w = Bukkit.getWorld(world); } - - members.add(name); - } - - public void removeMember(String name) - { - Player player = Bukkit.getPlayer(name); - if (player != null) + if (w == null) { - Common.IN_GUILD_CHAT.remove(player); + w = Bukkit.getWorlds().get(0); } + this.home = new Location(w, x, y, z); + this.createdAt = createdAt; + this.useTag = useTag; + } - members.remove(name); - for (GuildRank gr : getRanks()) + public Guild(Player player, String name) + { + this(name, + player.getUniqueId(), + new ArrayList<>(), + new ArrayList<>(), + new HashMap<>(), + new HashMap<>(), + null, + State.OPEN, + null, + null, + 0, + 50, + 0, + null, + System.currentTimeMillis(), + true); + save(true); + } + + public static void create(Player player, String name) + { + guilds.put(name.toLowerCase().replaceAll(" ", "_"), + new Guild(player, name)); + } + + public static boolean isAlreadyMember(Player player) + { + for (Guild guild : guilds.values()) { - getRank(gr.getName()).getMembers().remove(name); - } - moderators.remove(name); - } - - public boolean hasMember(String name) - { - return members.contains(name); - } - - public void addModerator(String name) - { - moderators.add(name); - } - - public void removeModerator(String name) - { - moderators.remove(name); - } - - public boolean hasModerator(String name) - { - if (owner.equals(name)) - { - return true; - } - - return moderators.contains(name); - } - - public void addRank(String name) - { - ranks.add(new GuildRank(identifier, GUtil.flatten(name), name, new ArrayList<>())); - } - - public void removeRank(String name) - { - GuildRank remove = null; - for (GuildRank rank : ranks) - { - if (GUtil.flatten(name).equals(rank.getIdentifier())) - { - remove = rank; - } - } - - if (remove == null) - { - return; - } - - remove.delete(); - ranks.remove(remove); - } - - public boolean hasRank(String name) - { - for (GuildRank rank : ranks) - { - if (GUtil.flatten(name).equals(rank.getIdentifier())) + if (guild.isMember(player)) { return true; } @@ -200,268 +126,789 @@ public class Guild return false; } - public GuildRank getRank(String name) + public static void loadAll() { - for (GuildRank rank : ranks) + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try { - if (GUtil.flatten(name).equals(rank.getIdentifier())) + ResultSet set = connection.prepareStatement("SELECT * FROM guilds;").executeQuery(); + while (set.next()) { - return rank; + String id = set.getString("id"); + UUID owner = /*User.getUserFromId(set.getInt("owner")).getUuid()*/ UUID.fromString(set.getString("owner")); + List moderators = new ArrayList<>(); + if (set.getString("moderators") != null) + { + for (String string : set.getString("moderators").split(",")) + { + User user = User.getUserFromId(Integer.parseInt(string)); + if (user != null) + { + moderators.add(user.getUuid()); + } + } + } + List members = new ArrayList<>(); + if (set.getString("members") != null) + { + for (String string : set.getString("members").split(",")) + { + User user = User.getUserFromId(Integer.parseInt(string)); + if (user != null && !user.equals(User.getUserFromUuid(owner))) + { + members.add(user.getUuid()); + } + } + } + Map> ranks = new HashMap<>(); + PreparedStatement rankStatement = connection.prepareStatement("SELECT * FROM ranks WHERE guild_id=?;"); + rankStatement.setString(1, id); + ResultSet rankSet = rankStatement.executeQuery(); + while (rankSet.next()) + { + List rankMembers = new ArrayList<>(); + if (rankSet.getString("members") != null) + { + for (String string : rankSet.getString("members").split(",")) + { + if (string == null || string.isEmpty()) + { + break; + } + User user = User.getUserFromId(Integer.parseInt(string)); + if (user != null) + { + rankMembers.add(user.getUuid()); + } + } + } + ranks.put(rankSet.getString("name"), rankMembers); + } + Map warps = new HashMap<>(); + PreparedStatement warpStatement = connection.prepareStatement("SELECT * FROM warps WHERE guild_id=?;"); + warpStatement.setString(1, id); + ResultSet warpSet = warpStatement.executeQuery(); + while (warpSet.next()) + { + World w = Bukkit.getWorld(warpSet.getString("world")); + if (w == null) + { + continue; + } + double x = warpSet.getDouble("x"); + double y = warpSet.getDouble("y"); + double z = warpSet.getDouble("z"); + Location location = new Location(w, x, y, z); + warps.put(set.getString("name"), location); + } + Guild guild = new Guild(set.getString("name"), + owner, + moderators, + members, + ranks, + warps, + set.getString("default_rank"), + State.fromInt(set.getInt("state")), + set.getString("tag"), + set.getString("motd"), + set.getDouble("x"), + set.getDouble("y"), + set.getDouble("z"), + set.getString("world"), + set.getLong("creation"), + set.getBoolean("usetag")); + guilds.put(id, guild); + } + TFGuilds.getPlugin().getLogger().info(guilds.size() + " guilds loaded!"); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public static Guild getGuild(Player player) + { + for (Guild guild : guilds.values()) + { + if (guild.isMember(player)) + { + return guild; } } return null; } - public boolean hasTag() + public static Guild getGuild(String string) { - return tag != null; + for (Guild guild : guilds.values()) + { + if (guild.getName().equalsIgnoreCase(string)) + { + return guild; + } + } + return guilds.get(string) != null ? guilds.get(string) : null; } - public boolean hasMOTD() + public static boolean hasGuild(String string) { - return motd != null; + for (Guild guild : guilds.values()) + { + if (guild.getName().equalsIgnoreCase(string)) + { + return true; + } + } + return guilds.get(string) != null; } - public boolean hasHome() + public static List getGuildNames() { - return home != null; + List names = new ArrayList<>(); + guilds.values().forEach(guild -> + names.add(guild.getName())); + return names; } - public boolean hasDefaultRank() + public void addMember(Player player) { - return defaultRank != null; + if (!isMember(player)) + { + members.add(player.getUniqueId()); + save(); + } + } + + public void removeMember(Player player) + { + if (isMember(player)) + { + if (isModerator(player)) + { + moderators.remove(player.getUniqueId()); + } + members.remove(player.getUniqueId()); + save(); + } + } + + public boolean isMember(Player player) + { + return members.contains(player.getUniqueId()) || owner.equals(player.getUniqueId()); + } + + public void addModerator(Player player) + { + if (!isModerator(player)) + { + moderators.add(player.getUniqueId()); + save(); + } + } + + public void removeModerator(Player player) + { + if (isModerator(player)) + { + moderators.remove(player.getUniqueId()); + save(); + } + } + + public boolean isModerator(Player player) + { + return moderators.contains(player.getUniqueId()) || owner.equals(player.getUniqueId()); + } + + public void addWarp(String name, Location location) + { + if (!hasWarp(name)) + { + warps.put(name, location); + saveWarp(name); + } + } + + public void removeWarp(String name) + { + if (hasWarp(name)) + { + warps.remove(name); + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = connection.prepareStatement("DELETE FROM warps WHERE guild_id=? AND name=?"); + statement.setString(1, id); + statement.setString(2, name); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + } + + public boolean hasWarp(String name) + { + return warps.get(name) != null; + } + + public void createRank(String name) + { + ranks.put(name.toLowerCase().replaceAll(" ", "_"), new ArrayList<>()); + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = connection.prepareStatement("INSERT INTO ranks (`guild_id`, `name`, `members`) VALUES (?, ?, ?)"); + statement.setString(1, id); + statement.setString(2, name); + statement.setString(3, null); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public void deleteRank(String name) + { + if (hasRank(name)) + { + ranks.remove(name); + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = connection.prepareStatement("DELETE FROM ranks WHERE guild_id=? AND name=?"); + statement.setString(1, id); + statement.setString(2, name); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + } + + public boolean hasRank(String name) + { + return ranks.get(name) != null; + } + + public void setPlayerRank(Player player, String name) + { + if (hasRank(name)) + { + String str = getPlayerRank(player); + if (!str.equals(name) && !str.equals(defaultRank)) + { + removePlayerRank(player, str); + } + List list = ranks.get(name); + list.add(player.getUniqueId()); + ranks.put(name, list); + saveRankMembers(name); + } + } + + public void removePlayerRank(Player player, String name) + { + if (hasRank(name)) + { + List list = ranks.get(name); + list.remove(player.getUniqueId()); + ranks.put(name, list); + saveRankMembers(name); + } + } + + public String getPlayerRank(Player player) + { + for (String rank : ranks.keySet()) + { + if (ranks.get(rank).contains(player.getUniqueId())) + { + return rank; + } + } + + if (owner.equals(player.getUniqueId())) + { + return "Guild Owner"; + } + + if (moderators.contains(player.getUniqueId())) + { + return "Guild Moderator"; + } + + return defaultRank != null ? defaultRank : "Guild Member"; + } + + public String getModeratorIds() + { + List mod = new ArrayList<>(); + moderators.forEach(uuid -> + mod.add(User.getUserFromUuid(uuid).getId())); + return StringUtils.join(mod, ","); + } + + public String getMemberIds() + { + List mem = new ArrayList<>(); + members.forEach(member -> + mem.add(User.getUserFromUuid(member).getId())); + return StringUtils.join(mem, ","); + } + + public String getMotd() + { + return GUtil.colorize(motd); + } + + public void setMotd(String motd) + { + this.motd = motd; + } + + public void invite(Player player) + { + invites.add(player); + } + + public void removeInvite(Player player) + { + invites.remove(player); + } + + public boolean isInvited(Player player) + { + return invites.contains(player); + } + + public void save(boolean newSave) + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = newSave ? connection.prepareStatement("INSERT INTO guilds (`id`, `name`, `owner`, `moderators`, `members`, `tag`, `default_rank`, `state`, `motd`, `x`, `y`, `z`, `world`, `creation`, `usetag`)" + + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") + : connection.prepareStatement("UPDATE guilds SET owner=?," + + "moderators=?," + + "members=?," + + "tag=?," + + "default_rank=?," + + "state=?," + + "motd=?," + + "x=?," + + "y=?," + + "z=?," + + "world=?," + + "usetag=? WHERE id=?"); + if (newSave) + { + statement.setString(1, id); + statement.setString(2, name); + statement.setString(3, owner.toString() /*User.getUserFromUuid(owner).getId()*/); + statement.setString(4, null); + statement.setString(5, null); + statement.setString(6, tag); + statement.setString(7, defaultRank); + statement.setInt(8, state.ordinal()); + statement.setString(9, motd); + statement.setDouble(10, home.getX()); + statement.setDouble(11, home.getY()); + statement.setDouble(12, home.getZ()); + statement.setString(13, home.getWorld().getName()); + statement.setLong(14, createdAt); + statement.setBoolean(15, useTag); + } + else + { + statement.setString(1, owner.toString()); + statement.setString(2, moderators.isEmpty() ? null : getModeratorIds()); + statement.setString(3, members.isEmpty() ? null : getMemberIds()); + statement.setString(4, tag); + statement.setString(5, defaultRank); + statement.setInt(6, state.ordinal()); + statement.setString(7, motd); + statement.setDouble(8, home.getX()); + statement.setDouble(9, home.getY()); + statement.setDouble(10, home.getZ()); + statement.setString(11, home.getWorld().getName()); + statement.setBoolean(12, useTag); + statement.setString(13, id); + } + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public void save() + { + save(false); + } + + public void saveRankMembers(String name) + { + if (hasRank(name)) + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = connection.prepareStatement("UPDATE ranks SET members=? WHERE guild_id=? AND name=?"); + statement.setString(1, ranks.get(name).isEmpty() ? null : getMemberIdsByRank(name)); + statement.setString(2, id); + statement.setString(3, name); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + } + + public void saveWarp(String name) + { + if (hasWarp(name)) + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = connection.prepareStatement("INSERT INTO warps (`guild_id`, `name`, `x`, `y`, `z`, `world`) VALUES (?, ?, ?, ?, ?, ?)"); + statement.setString(1, id); + statement.setString(2, name); + Location location = warps.get(name); + statement.setDouble(3, location.getX()); + statement.setDouble(4, location.getY()); + statement.setDouble(5, location.getZ()); + statement.setString(6, location.getWorld().getName()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + } + + public String getMemberIdsByRank(String name) + { + if (hasRank(name)) + { + ArrayList rankMembers = new ArrayList<>(); + ranks.get(name).forEach(uuid -> + rankMembers.add(User.getUserFromUuid(uuid).getId())); + return StringUtils.join(rankMembers, ","); + } + return null; + } + + public String getId() + { + return id; + } + + public String getName() + { + return name; + } + + public UUID getOwner() + { + return owner; + } + + public void setOwner(Player player) + { + members.add(owner); + owner = player.getUniqueId(); + members.remove(player.getUniqueId()); + save(); + } + + public List getModerators() + { + return moderators; + } + + public List getModeratorNames() + { + List names = new ArrayList<>(); + moderators.forEach(uuid -> + names.add(Bukkit.getOfflinePlayer(uuid).getName())); + return names; + } + + public List getMembers() + { + return members; + } + + public List getMemberOnlyNames() + { + List names = new ArrayList<>(); + for (UUID uuid : members) + { + if (!moderators.contains(uuid) && !uuid.equals(owner)) + { + names.add(Bukkit.getOfflinePlayer(uuid).getName()); + } + } + return names; + } + + public List getMemberNames() + { + List names = new ArrayList<>(); + for (UUID uuid : members) + { + if (GUtil.getPlayerNames().contains(Bukkit.getOfflinePlayer(uuid).getName())) + { + names.add(Bukkit.getOfflinePlayer(uuid).getName()); + } + } + return names; + } + + public List getNamesByRank(String name) + { + List names = new ArrayList<>(); + if (hasRank(name)) + { + ranks.get(name).forEach(uuid -> + names.add(Bukkit.getOfflinePlayer(uuid).getName())); + } + return names; + } + + public Map> getRanks() + { + return ranks; + } + + public List getRankNames() + { + return new ArrayList<>(ranks.keySet()); + } + + public Map getWarps() + { + return warps; + } + + public List getWarpNames() + { + return new ArrayList<>(warps.keySet()); + } + + public Location getWarp(String name) + { + if (hasWarp(name)) + { + return warps.get(name); + } + return null; + } + + public String getDefaultRank() + { + return defaultRank; + } + + public void setDefaultRank(String defaultRank) + { + this.defaultRank = defaultRank; + save(); + } + + public String getTag() + { + return tag; + } + + public void setTag(String tag) + { + this.tag = tag; + save(); + } + + public State getState() + { + return state; + } + + public void setState(State state) + { + this.state = state; + save(); + } + + public Location getHome() + { + return home; + } + + public void setHome(Location home) + { + this.home = home; + save(); + } + + public boolean canUseTag() + { + return useTag; + } + + public void setUseTag(boolean useTag) + { + this.useTag = useTag; + save(); + } + + public void disband() + { + if (hasGuild(name)) + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement ranks = connection.prepareStatement("DELETE FROM ranks WHERE guild_id=?"); + ranks.setString(1, id); + ranks.execute(); + PreparedStatement warps = connection.prepareStatement("DELETE FROM warps WHERE guild_id=?"); + warps.setString(1, id); + warps.execute(); + PreparedStatement guild = connection.prepareStatement("DELETE FROM guilds WHERE id=?"); + guild.setString(1, id); + guild.execute(); + guilds.remove(id); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } } public void broadcast(String message) { for (Player player : Bukkit.getOnlinePlayers()) { - if (members.contains(player.getName())) + if (isMember(player)) { player.sendMessage(message); } } } - public List getOnlyMembers() + public void chat(Player player, String message, boolean modChat) { - List only = new ArrayList<>(); - for (String member : members) + if (ConfigEntry.GUILD_CHAT_LOGGING.getBoolean()) { - if (member.equals(owner) || moderators.contains(member)) - { - continue; - } - only.add(member); + Bukkit.getServer().getLogger().info("[Guild " + (modChat ? "Mod " : "") + "Chat | " + name + "] " + player.getName() + " \u00BB " + message); } - return only; - } - public List getRankNames() - { - List names = new ArrayList<>(); - for (GuildRank rank : ranks) + for (Player p : Bukkit.getOnlinePlayers()) { - names.add(rank.getName()); + if (User.getUserFromPlayer(p).displayChat() && isMember(p)) + { + if (modChat && isModerator(p)) + { + p.sendMessage(GUtil.colorize("&7[&bGuild Mod Chat &7| &b" + name + "&7] " + player.getName() + " &8\u00BB &6") + message); + } + else + { + p.sendMessage(GUtil.colorize("&7[&bGuild Chat &7| &b" + name + "&7] " + player.getName() + " &8\u00BB &6") + message); + } + } + + if (Common.GUILD_CHAT_SPY.contains(p) && player != p && !isMember(p)) + { + p.sendMessage(GUtil.colorize("&7[&bGuild " + (modChat ? "Mod " : "") + "Chat Spy &7| &b" + name + "&7] " + player.getName() + " &8\u00BB &6") + message); + } } - return names; } public String getRoster() { - StringBuilder list = new StringBuilder(Common.PREFIX + "Guild Roster for " + name + "\n" + - "%s%Owner%p% - " + owner + "\n" + - "%s%Moderators%p% - " + StringUtils.join(moderators, ", ") + "\n"); + StringBuilder builder = new StringBuilder(); + builder.append(ChatColor.AQUA).append("Guild Roster for ").append(ChatColor.GOLD).append(name).append("\n") + .append(ChatColor.GRAY).append("Owner: ") + .append(ChatColor.GOLD).append(Bukkit.getOfflinePlayer(owner).getName()).append("\n") + .append(ChatColor.GRAY).append("Moderators: ") + .append(ChatColor.GOLD).append(StringUtils.join(getModeratorNames(), ", ")).append("\n"); - for (GuildRank rank : ranks) + for (String rank : ranks.keySet()) { - list.append("%s%") - .append(rank.getName()).append("%p% - ") - .append(StringUtils.join(rank.getMembers(), ", ")) - .append("\n"); + builder.append(ChatColor.GRAY).append(rank).append(": ") + .append(ChatColor.GOLD).append(StringUtils.join(getNamesByRank(rank), ", ")).append("\n"); } - return Common.tl(list + - "%s%Members%p% - " + StringUtils.join(getOnlyMembers(), ", ")); + builder.append(ChatColor.GRAY).append("Members: ") + .append(ChatColor.GOLD).append(StringUtils.join(getMemberOnlyNames(), ", ")); + return builder.toString(); } - public static List getGuildList() + @Override + public String toString() { - List g = new ArrayList<>(); - for (String key : plugin.guilds.getKeys(false)) - { - Guild guild = getGuild(key); - g.add(guild.getName()); - } - return g; + return ChatColor.AQUA + "Guild Information" + "\n" + ChatColor.GRAY + + " Identifier: " + ChatColor.GOLD + id + "\n" + + ChatColor.GRAY + " Name: " + ChatColor.GOLD + name + "\n" + + ChatColor.GRAY + " Owner: " + ChatColor.GOLD + Bukkit.getOfflinePlayer(owner).getName() + "\n" + + ChatColor.GRAY + " Moderators: " + ChatColor.GOLD + moderators.size() + "\n" + + ChatColor.GRAY + " Members: " + ChatColor.GOLD + (members.size() + 1) + "\n" + + ChatColor.GRAY + " Tag: " + ChatColor.GOLD + (tag != null ? GUtil.colorize(tag) : "None") + "\n" + + ChatColor.GRAY + " State: " + ChatColor.GOLD + state.name() + "\n" + + ChatColor.GRAY + " Ranks (" + ranks.size() + "): " + ChatColor.GOLD + StringUtils.join(getRankNames(), ", ") + "\n" + + ChatColor.GRAY + " Created At: " + ChatColor.GOLD + GUtil.formatTime(createdAt); } - public String getInformation() + public long getCreatedAt() { - return Common.tl(Common.PREFIX + "Guild Information\n" + - "%s%Name%p%: " + name + "\n" + - "%s%Owner%p%: " + owner + "\n" + - "%s%Moderators%p%: " + StringUtils.join(moderators, ", ") + "\n" + - "%s%Members%p%: " + StringUtils.join(getOnlyMembers(), ", ") + "\n" + - "%s%Tag%p%: " + (tag == null ? "None" : GUtil.colorize(tag)) + "\n" + - "%s%State%p%: " + state.getDisplay() + "\n" + - "%s%Ranks%p%: " + StringUtils.join(getRankNames(), ", ") + "\n" + - "%s%Creation%p%: " + GUtil.format(creation) + "\n" + - "%s%Identifier (Technical)%p%: " + identifier); + return createdAt; } - public void chat(String as, String msg) + public enum State { - broadcast(Common.tl("%s%[%p%Guild Chat %s%| %p%" + GUtil.colorize(name) + "%s%] %p%" + as + ChatColor.WHITE + ": %p%" + msg)); + OPEN, + INVITE_ONLY, + CLOSED; - if (ConfigEntry.GUILD_CHAT_LOGGING_ENABLED.getBoolean()) + public static State fromString(String string) { - GLog.info(Common.tl("%s%[%p%Guild Chat %s%| %p%" + GUtil.colorize(name) + "%s%] %p%" + as + ChatColor.WHITE + ": %p%" + msg)); - } - - Player sender = Bukkit.getPlayer(as); - - for (Player player : Bukkit.getOnlinePlayers()) - { - if (Common.CHAT_SPY.contains(player)) + if (string.contains(" ")) { - if (sender != null) - { - if (player == sender) - { - continue; - } - } - player.sendMessage(GUtil.colorize("&7[GUILD CHAT SPY | " + GUtil.colorize(name) + "] " + as + ": " + msg)); + string = string.replaceAll(" ", "_"); } - } - } - - public void disband() - { - for (String member : members) - { - Player player = Bukkit.getPlayer(member); - if (player == null) + try + { + return valueOf(string.toUpperCase()); + } + catch (Exception ignored) { - continue; } - Common.IN_GUILD_CHAT.remove(player); - } - plugin.guilds.set(identifier, null); - plugin.guilds.save(); - } - - public void updateRankIdentifiers() - { - for (GuildRank rank : ranks) - { - rank.delete(); - rank.setIguild(identifier); - rank.set(); - plugin.guilds.save(); - } - } - - public static Guild createGuild(String identifier, String name, Player owner) - { - if (plugin.guilds.contains(identifier)) - { - return getGuild(identifier); - } - - Guild guild = new Guild(identifier, - name, - owner.getName(), - Collections.singletonList(owner.getName()), - new ArrayList<>(), - ChatColor.DARK_GRAY + "[" + ChatColor.GRAY + name + ChatColor.DARK_GRAY + "]", - GuildState.INVITE_ONLY, - new ArrayList<>(), - null, - null, - System.currentTimeMillis(), - null); - guild.save(); - GLog.info(owner.getName() + " has created guild " + name); - return guild; - } - - public static Guild getGuild(String identifier) - { - if (!plugin.guilds.contains(identifier)) - { return null; } - List ranks = new ArrayList<>(); - ConfigurationSection rankcs = plugin.guilds.getConfigurationSection(identifier + ".ranks"); - if (rankcs != null) + public static State fromInt(int value) { - for (String key : rankcs.getKeys(false)) + for (State state : values()) { - ranks.add(new GuildRank(identifier, key, plugin.guilds.getString(identifier + ".ranks." + key + ".name"), - plugin.guilds.getStringList(identifier + ".ranks." + key + ".members"))); + if (state.ordinal() == value) + { + return state; + } } + return null; } - - return new Guild(identifier, - plugin.guilds.getString(identifier + ".name"), - plugin.guilds.getString(identifier + ".owner"), - plugin.guilds.getStringList(identifier + ".members"), - plugin.guilds.getStringList(identifier + ".moderators"), - plugin.guilds.getString(identifier + ".tag"), - GuildState.findState(plugin.guilds.getString(identifier + ".state")), - ranks, - plugin.guilds.getString(identifier + ".motd"), - plugin.guilds.getLocation(identifier + ".home"), - plugin.guilds.getLong(identifier + ".creation"), - plugin.guilds.getString(identifier + ".defaultrank")); } - - public static Guild getGuild(Player player) - { - Guild guild = null; - for (String key : plugin.guilds.getKeys(false)) - { - Guild kg = getGuild(key); - if (kg.getMembers().contains(player.getName())) - { - guild = kg; - } - } - return guild; - } - - public static Guild getGuild(CommandSender sender) - { - Guild guild = null; - for (String key : plugin.guilds.getKeys(false)) - { - Guild kg = getGuild(key); - if (kg.getMembers().contains(sender.getName())) - { - guild = kg; - } - } - return guild; - } - - public static boolean guildExists(String identifier) - { - return plugin.guilds.contains(identifier); - } - - public static boolean isInGuild(Player player) - { - for (String key : plugin.guilds.getKeys(false)) - { - Guild guild = getGuild(key); - if (guild.getMembers().contains(player.getName())) - { - return true; - } - } - return false; - } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/guild/GuildRank.java b/src/main/java/me/totalfreedom/tfguilds/guild/GuildRank.java deleted file mode 100644 index f2e539b..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/guild/GuildRank.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.totalfreedom.tfguilds.guild; - -import java.util.List; -import lombok.Getter; -import lombok.Setter; -import me.totalfreedom.tfguilds.TFGuilds; - -public class GuildRank -{ - private static TFGuilds plugin = TFGuilds.getPlugin(); - - // owning guild's identifier - @Setter - private String iguild; - - // identifier - @Getter - private String identifier; - - // name - @Getter - private String name; - - // members of this rank - @Getter - private List members; - - public GuildRank(String iguild, String identifier, String name, List members) - { - this.identifier = identifier; - this.iguild = iguild; - this.name = name; - this.members = members; - } - - public void set() - { - plugin.guilds.set(iguild + ".ranks." + identifier + ".name", name); - plugin.guilds.set(iguild + ".ranks." + identifier + ".members", members); - } - - public void delete() - { - plugin.guilds.set(iguild + ".ranks." + identifier, null); - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/guild/GuildState.java b/src/main/java/me/totalfreedom/tfguilds/guild/GuildState.java deleted file mode 100644 index 1e69972..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/guild/GuildState.java +++ /dev/null @@ -1,41 +0,0 @@ -package me.totalfreedom.tfguilds.guild; - -import lombok.Getter; - -public enum GuildState -{ - OPEN("Open"), - INVITE_ONLY("Invite-only"), - CLOSED("Closed"); - - @Getter - private final String display; - - GuildState(String display) - { - this.display = display; - } - - public static GuildState findState(String string) - { - if (string == null) - { - return null; - } - - switch (string.toLowerCase()) - { - case "open": - case "opened": - return OPEN; - case "invite": - case "inviteonly": - case "invite_only": - return INVITE_ONLY; - case "closed": - case "close": - return CLOSED; - } - return null; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/guild/User.java b/src/main/java/me/totalfreedom/tfguilds/guild/User.java new file mode 100644 index 0000000..c7dd4b0 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/guild/User.java @@ -0,0 +1,156 @@ +package me.totalfreedom.tfguilds.guild; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.entity.Player; + +public class User +{ + + private static Map users = new HashMap<>(); + // + private final int id; + private final UUID uuid; + private boolean tag; + private boolean chat; + + public User(int id, UUID uuid, boolean tag, boolean chat) + { + this.id = id; + this.uuid = uuid; + this.tag = tag; + this.chat = chat; + } + + public static User create(Player player) + { + int id = users.size() + 1; + User user = new User(id, player.getUniqueId(), true, true); + users.put(id, user); + user.save(true); + return user; + } + + public static void loadAll() + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + ResultSet set = connection.prepareStatement("SELECT * FROM users").executeQuery(); + while (set.next()) + { + int id = set.getInt("rowid"); + UUID uuid = UUID.fromString(set.getString("uuid")); + boolean tag = set.getBoolean("tag"); + boolean chat = set.getBoolean("chat"); + users.put(id, new User(id, uuid, tag, chat)); + } + TFGuilds.getPlugin().getLogger().info(users.size() + " users loaded!"); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public static boolean hasUser(int id) + { + return users.get(id) != null; + } + + public static User getUserFromId(int id) + { + if (hasUser(id)) + { + return users.get(id); + } + return null; + } + + public static User getUserFromUuid(UUID uuid) + { + for (User user : users.values()) + { + if (user.getUuid().equals(uuid)) + { + return user; + } + } + return null; + } + + public static User getUserFromPlayer(Player player) + { + return getUserFromUuid(player.getUniqueId()); + } + + public int getId() + { + return id; + } + + public UUID getUuid() + { + return uuid; + } + + public boolean displayTag() + { + return tag; + } + + public void setDisplayTag(boolean tag) + { + this.tag = tag; + save(); + } + + public boolean displayChat() + { + return chat; + } + + public void setDisplayChat(boolean chat) + { + this.chat = chat; + save(); + } + + public void save(boolean newSave) + { + Connection connection = TFGuilds.getPlugin().getSQL().getConnection(); + try + { + PreparedStatement statement = newSave ? connection.prepareStatement("INSERT INTO users (`uuid`, `tag`, `chat`) VALUES (?, ?, ?)") + : connection.prepareStatement("UPDATE users SET tag=?, chat=? WHERE rowid=?"); + if (newSave) + { + statement.setString(1, uuid.toString()); + statement.setBoolean(2, tag); + statement.setBoolean(3, chat); + } + else + { + statement.setBoolean(1, tag); + statement.setBoolean(2, chat); + statement.setInt(3, id); + } + statement.execute(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + public void save() + { + save(false); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java b/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java index bcae284..1a735b4 100644 --- a/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java +++ b/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java @@ -4,7 +4,7 @@ import me.totalfreedom.tfguilds.Common; import me.totalfreedom.tfguilds.TFGuilds; import me.totalfreedom.tfguilds.config.ConfigEntry; import me.totalfreedom.tfguilds.guild.Guild; -import me.totalfreedom.tfguilds.guild.GuildRank; +import me.totalfreedom.tfguilds.guild.User; import me.totalfreedom.tfguilds.util.GUtil; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -15,71 +15,48 @@ import org.bukkit.event.player.AsyncPlayerChatEvent; public class ChatListener implements Listener { - private static final TFGuilds plugin = TFGuilds.getPlugin(); + + public ChatListener(TFGuilds plugin) + { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerChat(AsyncPlayerChatEvent e) + public void onPlayerChat(AsyncPlayerChatEvent event) { - Player player = e.getPlayer(); + Player player = event.getPlayer(); Guild guild = Guild.getGuild(player); if (guild == null) { return; } - if (Common.IN_GUILD_CHAT.contains(player)) + if (Common.GUILD_CHAT.contains(player)) { - guild.chat(player.getName(), e.getMessage()); - e.setCancelled(true); + event.setCancelled(true); + guild.chat(player, event.getMessage(), false); return; } - GuildRank rank = null; - for (GuildRank r : guild.getRanks()) - { - if (r.getMembers().contains(player.getName())) - { - rank = r; - } - } - - String display; - if (rank == null) - { - if (guild.getOwner().equals(player.getName())) - { - display = "Guild Owner"; - } - else if (guild.hasModerator(player.getName())) - { - display = "Guild Moderator"; - } - else - { - display = "Guild Member"; - } - } - else - { - display = rank.getName(); - } - - if (!ConfigEntry.GUILD_TAGS_ENABLED.getBoolean()) + if (!ConfigEntry.GUILD_TAGS.getBoolean()) { return; } - if (plugin.players.contains(player.getName())) + User user = User.getUserFromPlayer(player); + if (guild.getTag() != null && user.displayTag()) { - if (!plugin.players.getBoolean(player.getName() + ".tag")) + int maxLength = ConfigEntry.GLOBAL_TAG_MAX_LENGTH.getInteger(); + String tfmTag = TFGuilds.getPlugin().getTfmBridge().getTag(player); + if (tfmTag != null && maxLength > 0) { - return; + int length = GUtil.removeColorCodes(tfmTag).length() + GUtil.removeColorCodes(guild.getTag()).length(); + if (length > maxLength) + { + TFGuilds.getPlugin().getTfmBridge().clearTag(player); + } } - } - - if (guild.hasTag()) - { - e.setFormat(GUtil.colorize(guild.getTag().replace("%rank%", display)) + ChatColor.RESET + " " + e.getFormat()); + event.setFormat(GUtil.colorize(guild.getTag().replace("%rank%", guild.getPlayerRank(player))) + ChatColor.RESET + " " + event.getFormat()); } } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/listener/JoinListener.java b/src/main/java/me/totalfreedom/tfguilds/listener/JoinListener.java index 1aabd3d..a01c041 100644 --- a/src/main/java/me/totalfreedom/tfguilds/listener/JoinListener.java +++ b/src/main/java/me/totalfreedom/tfguilds/listener/JoinListener.java @@ -1,27 +1,55 @@ package me.totalfreedom.tfguilds.listener; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.config.ConfigEntry; import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.guild.User; import me.totalfreedom.tfguilds.util.GUtil; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; public class JoinListener implements Listener { - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) + + public JoinListener(TFGuilds plugin) { - Player player = e.getPlayer(); + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent event) + { + Player player = event.getPlayer(); + + User user = User.getUserFromPlayer(player); + if (user == null) + { + User.create(player); + } + Guild guild = Guild.getGuild(player); if (guild == null) { return; } - if (guild.hasMOTD()) + if (guild.getMotd() != null && !guild.getMotd().isEmpty()) { - player.sendMessage(GUtil.colorize(guild.getMotd())); + player.sendMessage(guild.getMotd()); + } + + int maxLength = ConfigEntry.GLOBAL_TAG_MAX_LENGTH.getInteger(); + String tfmTag = TFGuilds.getPlugin().getTfmBridge().getTag(player); + if (user.displayTag() && tfmTag != null && guild.getTag() != null && maxLength > 0) + { + int length = GUtil.removeColorCodes(tfmTag).length() + GUtil.removeColorCodes(guild.getTag()).length(); + if (length > maxLength) + { + TFGuilds.getPlugin().getTfmBridge().clearTag(player); + } } } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java new file mode 100644 index 0000000..5209c46 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java @@ -0,0 +1,116 @@ +package me.totalfreedom.tfguilds.sql; + +import java.io.File; +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.config.ConfigEntry; + +public class SQLDatabase +{ + + private Connection connection; + + public SQLDatabase(TFGuilds plugin) + { + String password = ConfigEntry.MYSQL_PASSWORD.getString(); + if (password == null) + { + password = ""; + } + try + { + switch (ConfigEntry.CONNECTION_TYPE.getString().toLowerCase()) + { + case "sqlite": + connection = DriverManager.getConnection("jdbc:sqlite:" + createDBFile(plugin).getAbsolutePath().replace("%20", " ")); + break; + case "mysql": + connection = DriverManager.getConnection(String.format("jdbc:mysql://%s:%d/%s", + ConfigEntry.MYSQL_HOST.getString(), + ConfigEntry.MYSQL_PORT.getInteger(), + ConfigEntry.MYSQL_DATABASE.getString()), + ConfigEntry.MYSQL_USERNAME.getString(), + password); + break; + default: + connection = DriverManager.getConnection("jdbc:sqlite:" + createDBFile(plugin).getAbsolutePath().replace("%20", " ")); + } + + createTables(); + plugin.getLogger().info("Connection to the MySQL server established!"); + } + catch (SQLException ex) + { + plugin.getLogger().severe("Could not connect to MySQL server!"); + } + } + + public Connection getConnection() + { + return connection; + } + + private void createTables() throws SQLException + { + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `users` (" + + "`uuid` TEXT," + + "`tag` BOOLEAN," + + "`chat` BOOLEAN," + + "`rowid` INTEGER AUTO_INCREMENT PRIMARY KEY)") + .execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `warps` (" + + "`guild_id` TEXT," + + "`name` TEXT," + + "`x` DOUBLE," + + "`y` DOUBLE," + + "`z` DOUBLE," + + "`world` TEXT," + + "`rowid` INTEGER AUTO_INCREMENT PRIMARY KEY)") + .execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `guilds` (" + + "`id` TEXT," + + "`name` TEXT," + + "`owner` TEXT," + + "`moderators` TEXT," + + "`members` TEXT," + + "`tag` TEXT," + + "`default_rank` TEXT," + + "`state` INT," + + "`motd` TEXT," + + "`x` DOUBLE," + + "`y` DOUBLE," + + "`z` DOUBLE," + + "`world` TEXT," + + "`creation` LONG," + + "`usetag` BOOLEAN," + + "`rowid` INTEGER AUTO_INCREMENT PRIMARY KEY)") + .execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `ranks` (" + + "`guild_id` TEXT," + + "`name` TEXT," + + "`members` TEXT," + + "`rowid` INTEGER AUTO_INCREMENT PRIMARY KEY)") + .execute(); + } + + private File createDBFile(TFGuilds plugin) + { + File file = new File(plugin.getDataFolder(), "database.db"); + if (!file.exists()) + { + try + { + file.createNewFile(); + plugin.getLogger().info("Creating database.db file"); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + return file; + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/util/GLog.java b/src/main/java/me/totalfreedom/tfguilds/util/GLog.java deleted file mode 100644 index 76eeee0..0000000 --- a/src/main/java/me/totalfreedom/tfguilds/util/GLog.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.totalfreedom.tfguilds.util; - -import java.util.logging.Level; -import java.util.logging.Logger; - -public class GLog -{ - private static final Logger LOGGER = Logger.getLogger("Minecraft"); - private static final String PREFIX = "[TFGuilds]"; - - private static void log(Object o, Level l) - { - LOGGER.log(l, PREFIX + " " + o); - } - - public static void info(Object o) - { - log(o, Level.INFO); - } - - public static void warn(Object o) - { - log(o, Level.WARNING); - } - - public static void severe(Object o) - { - log(o, Level.SEVERE); - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java b/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java index 3be055f..fe7158a 100644 --- a/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java +++ b/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java @@ -8,60 +8,78 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.totalfreedom.tfguilds.TFGuilds; -import org.apache.commons.lang.StringUtils; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class GUtil { - private static final SimpleDateFormat STANDARD = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss"); - private static final TFGuilds plugin = TFGuilds.getPlugin(); - public static String flatten(String s) - { - String[] split = s.split(" "); - for (int i = 0; i < split.length; i++) - { - split[i] = ChatColor.stripColor(colorize(split[i].toLowerCase())); - } - return StringUtils.join(split, "_"); - } - - public static String colorize(String string) - { - Matcher matcher = Pattern.compile("&#[a-f0-9A-F]{6}").matcher(string); - while (matcher.find()) - { - String code = matcher.group().replace("&", ""); - string = string.replace("&" + code, net.md_5.bungee.api.ChatColor.of(code) + ""); - } - - string = ChatColor.translateAlternateColorCodes('&', string); - return string; - } - - public static String format(long time) - { - Date date = new Date(time); - return STANDARD.format(date); - } - - public static List BLACKLISTED_NAMES_AND_TAGS = Arrays.asList( + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("EEE d MMM yyyy HH:mm:ss"); + private static final List BLACKLISTED_NAMES_AND_TAGS = Arrays.asList( "admin", "owner", "moderator", "developer", "console", "dev", "staff", "mod", "sra", "sta", "sa", "super admin", "telnet admin", "senior admin", "trial mod", "trial moderator", "trialmod", "trialmoderator"); + private static final Pattern CHAT_COLOR_FORMAT = Pattern.compile("&([a-fk-or0-9]|#[a-f0-9]{6})", Pattern.CASE_INSENSITIVE); - public static List getPlayerList() + public static String colorize(String string) { - List players = new ArrayList<>(); - for (Player player : Bukkit.getOnlinePlayers()) + if (string != null) { - if (!plugin.bridge.isVanished(player)) + Matcher matcher = Pattern.compile("&#[a-f0-9A-F]{6}").matcher(string); + while (matcher.find()) { - players.add(player.getName()); + String code = matcher.group().replace("&", ""); + string = string.replace("&" + code, ChatColor.of(code) + ""); + } + + string = ChatColor.translateAlternateColorCodes('&', string); + } + return string; + } + + public static String removeColorCodes(String string) + { + /*String s = null; + if (string != null) + { + Matcher matcher = CHAT_COLOR_FORMAT.matcher(string); + while (matcher.find()) + { + s = string.replaceAll(matcher.group(), ""); + } + }*/ + return ChatColor.stripColor(string); + } + + public static boolean containsBlacklistedWord(String string) + { + for (String blacklist : BLACKLISTED_NAMES_AND_TAGS) + { + if (string.contains(blacklist)) + { + return true; } } - return players; + return false; } -} \ No newline at end of file + + public static List getPlayerNames() + { + List names = new ArrayList<>(); + for (Player player : Bukkit.getOnlinePlayers()) + { + if (!TFGuilds.getPlugin().getTfmBridge().isVanished(player)) + { + names.add(player.getName()); + } + } + return names; + } + + public static String formatTime(long time) + { + Date date = new Date(time); + return DATE_FORMAT.format(date); + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/util/PaginationList.java b/src/main/java/me/totalfreedom/tfguilds/util/PaginationList.java new file mode 100644 index 0000000..900492b --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/util/PaginationList.java @@ -0,0 +1,73 @@ +package me.totalfreedom.tfguilds.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class PaginationList extends ArrayList +{ + + private final int epp; + + /** + * Defines a new Pagination List. + * + * @param epp Elements per page - how many elements will be included on a page of the list. + */ + public PaginationList(int epp) + { + super(); + this.epp = epp; + } + + /** + * Defines a new Pagination List. + * + * @param epp Elements per page - how many elements will be included on a page of the list. + * @param elements Elements to add to the list immediately. + */ + @SafeVarargs + public PaginationList(int epp, T... elements) + { + super(Arrays.asList(elements)); + this.epp = epp; + } + + /** + * @return The number of pages this list holds. + */ + public int getPageCount() + { + return (int)Math.ceil((double)size() / (double)epp); + } + + /** + * Get a page from the list. + * + * @param page Page you want to access. + * @return A sublist of only the elements from that page. + */ + public List getPage(int page) + { + if (page < 1 || page > getPageCount()) + { + return null; + } + int startIndex = (page - 1) * epp; + int endIndex = Math.min(startIndex + (epp - 1), this.size() - 1); + return subList(startIndex, endIndex + 1); + } + + /*@Override + public String toString() + { + StringBuilder res = new StringBuilder(); + for (int i = 1; i <= getPageCount(); i++) + { + res.append("Page ").append(i).append(": ").append("\n"); + for (T element : getPage(i)) + res.append(" - ").append(element).append("\n"); + } + return res.toString(); + }*/ +} diff --git a/src/main/java/me/totalfreedom/tfguilds/util/ReflectionsHelper.java b/src/main/java/me/totalfreedom/tfguilds/util/ReflectionsHelper.java new file mode 100644 index 0000000..9a6e03b --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/util/ReflectionsHelper.java @@ -0,0 +1,38 @@ +package me.totalfreedom.tfguilds.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class ReflectionsHelper +{ + + public static Object getField(T instance, String name) { + try + { + Field f = instance.getClass().getDeclaredField(name); + f.setAccessible(true); + return f.get(instance); + } + catch (NoSuchFieldException | IllegalAccessException e) + { + e.printStackTrace(); + } + return null; + } + + public static Method getMethod(T instance, String name, Class... parameterTypes) { + try + { + Method f = instance.getClass().getDeclaredMethod(name, parameterTypes); + f.setAccessible(true); + return f; + } + catch (NoSuchMethodException e) + { + e.printStackTrace(); + } + return null; + } + + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2eb6264..cae444f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,21 +2,30 @@ # TFGuilds - Configuration # -server: +settings: + # Types: mysql, sqlite + connection: sqlite +server: # Log guild chat to console? - guild_chat_logging: - enabled: true + guild_chat_logging: true # Enable guild tags globally? - guild_tags_enabled: - enabled: true + guild_tags_enabled: true - # Color scheme used for TFGuilds -scheme: + # Maximum guild tag length - 0 for unlimited. + # Note: chat colors are ignored + guild_tag_max_length: 20 - # Primary color - primary: GREEN + # Maximum overall tag length - requires TotalFreedomMod. + # If the player's tag and guild tag combined exceeds the maximum overall length, guild tag will take priority. 0 for unlimited. + # Note: chat colors are ignored + global_tag_max_length: 30 - # Secondary color - secondary: DARK_GREEN \ No newline at end of file +# MySQL configuration +mysql: + host: localhost + port: 3306 + username: root + password: password + database: TFGuilds \ No newline at end of file diff --git a/src/main/resources/guilds.yml b/src/main/resources/guilds.yml deleted file mode 100644 index c4f8235..0000000 --- a/src/main/resources/guilds.yml +++ /dev/null @@ -1,3 +0,0 @@ -# -# Guild data for TFGuilds -# diff --git a/src/main/resources/players.yml b/src/main/resources/players.yml deleted file mode 100644 index 27e0340..0000000 --- a/src/main/resources/players.yml +++ /dev/null @@ -1,3 +0,0 @@ -# -# Player data for TFGuilds -# \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6ec65e3..6174e6a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,22 +2,20 @@ name: TFGuilds version: ${project.version} main: me.totalfreedom.tfguilds.TFGuilds api-version: 1.16 -authors: [speed, super] +authors: [ Fleek, super, speed ] description: A guilds plugin for the TotalFreedom server. +softdepend: + - TotalFreedomMod commands: guild: - description: The main command of TFGuilds. - usage: / - aliases: [g] - guildchat: - description: Talk in chat with your guild. - usage: / [message] - aliases: [gchat] + description: A command to manage guilds + usage: / help + aliases: [ g ] tfguilds: - description: Information about the plugin. - usage: / - aliases: [tfg] + description: An information of TFGuilds plugin + usage: / [reload] + aliases: [ tfg ] guildchatspy: - description: An admin only command which allows for spying on guild chat. + description: Spy on guild chat usage: / - aliases: [gchatspy, gcs] \ No newline at end of file + aliases: [ gchatspy, gcs ]