diff --git a/pom.xml b/pom.xml index f6e63c6..ec5586f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.totalfreedom TFGuilds - 0.1.5 + 0.1.6 jar TFGuilds diff --git a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java index 3933d73..31c7ac3 100644 --- a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java +++ b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java @@ -12,7 +12,6 @@ public final class TFGuilds extends JavaPlugin { public static TFGuilds plugin; public TFMBridge tfmb; - public Config config; public Config guilds; @Override @@ -21,7 +20,6 @@ public final class TFGuilds extends JavaPlugin plugin = this; enableCommands(); enableListeners(); - config = new Config(plugin, "config.yml"); guilds = new Config(plugin, "guilds.yml"); tfmb = new TFMBridge(); GLog.info("Enabled"); @@ -30,7 +28,6 @@ public final class TFGuilds extends JavaPlugin @Override public void onDisable() { - config.save(); guilds.save(); GLog.info("Disabled"); } @@ -48,6 +45,8 @@ public final class TFGuilds extends JavaPlugin this.getCommand("guildkick").setExecutor(new GuildKickCommand()); this.getCommand("guildinfo").setExecutor(new GuildInfoCommand()); this.getCommand("guildadmin").setExecutor(new GuildAdminCommand()); + this.getCommand("guildsetmoderator").setExecutor(new GuildSetModeratorCommand()); + this.getCommand("guildremovemoderator").setExecutor(new GuildRemoveModeratorCommand()); } private void enableListeners() diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildInfoCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildInfoCommand.java index 28dae64..d0b1599 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildInfoCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildInfoCommand.java @@ -17,7 +17,7 @@ public class GuildInfoCommand extends GBase implements CommandExecutor { if (args.length == 0) { - if (GUtil.isConsole(sender)) + if (GUtil.isConsole(sender) || GUtil.getGuild((Player) sender) == null) { sender.sendMessage(GUtil.color("&cProvide a guild name.")); return true; @@ -25,14 +25,8 @@ public class GuildInfoCommand extends GBase implements CommandExecutor Player player = (Player) sender; String guild = GUtil.getGuild(player); - - if (guild == null) - { - player.sendMessage(GMessage.NOT_IN_GUILD); - return true; - } - String owner = GUtil.getOwner(guild); + List moderators = GUtil.getModerators(guild); String tag = GUtil.getTag(guild); String creation = GUtil.getTimeCreated(guild); List members = GUtil.getMember(guild); @@ -40,6 +34,7 @@ public class GuildInfoCommand extends GBase implements CommandExecutor player.sendMessage(GUtil.color("&2-=-=-=- &aGuild Information &2-=-=-=-")); player.sendMessage(GUtil.color("&2Guild Name: &a" + guild)); player.sendMessage(GUtil.color("&2Guild Owner: &a" + owner)); + player.sendMessage(GUtil.color("&2Guild Moderators: &a" + moderators)); player.sendMessage(GUtil.color("&2Guild Tag: &a" + tag)); player.sendMessage(GUtil.color("&2Guild Creation Date: &a" + creation)); player.sendMessage(GUtil.color("&2Member Count: &a" + members.size())); @@ -56,6 +51,7 @@ public class GuildInfoCommand extends GBase implements CommandExecutor } String owner = GUtil.getOwner(guild); + List moderators = GUtil.getModerators(guild); String tag = GUtil.getTag(guild); String creation = GUtil.getTimeCreated(guild); List members = GUtil.getMember(guild); @@ -63,6 +59,7 @@ public class GuildInfoCommand extends GBase implements CommandExecutor sender.sendMessage(GUtil.color("&2-=-=-=- &aGuild Information &2-=-=-=-")); sender.sendMessage(GUtil.color("&2Guild Name: &a" + guild)); sender.sendMessage(GUtil.color("&2Guild Owner: &a" + owner)); + sender.sendMessage(GUtil.color("&2Guild Moderators: &a" + moderators)); sender.sendMessage(GUtil.color("&2Guild Tag: &a" + tag)); sender.sendMessage(GUtil.color("&2Guild Creation Date: &a" + creation)); sender.sendMessage(GUtil.color("&2Member Count: &a" + members.size())); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildKickCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildKickCommand.java index 6b80cc9..8a8f18b 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildKickCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildKickCommand.java @@ -37,10 +37,9 @@ public class GuildKickCommand extends GBase implements CommandExecutor return true; } - String owner = GUtil.getOwner(guild); - if (!owner.equalsIgnoreCase(player.getName())) + if (!GUtil.isGuildModerator(player, guild)) { - player.sendMessage(GMessage.NOT_OWNER); + player.sendMessage(ChatColor.RED + "You must be a guild moderator in order to kick members."); return true; } @@ -57,6 +56,12 @@ public class GuildKickCommand extends GBase implements CommandExecutor return true; } + if (GUtil.isGuildModerator(target, guild)) + { + player.sendMessage(ChatColor.RED + "This player is a moderator and therefore cannot be kicked."); + return true; + } + if (target == player) { player.sendMessage(ChatColor.RED + "You may not kick yourself."); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildRemoveModeratorCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildRemoveModeratorCommand.java new file mode 100644 index 0000000..361e3a8 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildRemoveModeratorCommand.java @@ -0,0 +1,86 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.util.GBase; +import me.totalfreedom.tfguilds.util.GMessage; +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.entity.Player; + +import java.util.List; + +public class GuildRemoveModeratorCommand extends GBase implements CommandExecutor +{ + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + { + if (args.length == 0) + { + return false; + } + + if (GUtil.isConsole(sender)) + { + sender.sendMessage(GMessage.PLAYER_ONLY); + return true; + } + + Player player = (Player) sender; + String guild = GUtil.getGuild(player); + + if (guild == null) + { + player.sendMessage(GMessage.NOT_IN_GUILD); + return true; + } + String owner = GUtil.getOwner(guild); + if (!owner.equalsIgnoreCase(player.getName())) + { + player.sendMessage(GMessage.NOT_OWNER); + return true; + } + + Player target = Bukkit.getPlayer(args[0]); + if (target == null) + { + player.sendMessage(GMessage.PLAYER_NOT_FOUND); + return true; + } + + if (!GUtil.isGuildMember(target, GUtil.getGuild(player))) + { + player.sendMessage(ChatColor.RED + "That player isn't in your guild."); + return true; + } + + if (!GUtil.isGuildModerator(target, guild)) + { + player.sendMessage(ChatColor.RED + "This player isn't a guild moderator."); + return true; + } + + if (target == player) + { + player.sendMessage(ChatColor.RED + "You may not demote yourself."); + return true; + } + + List moderators = plugin.guilds.getStringList("guilds." + guild + ".moderators"); + moderators.remove(target.getName()); + plugin.guilds.set("guilds." + guild + ".moderators", moderators); + + for (Player p : Bukkit.getOnlinePlayers()) + { + if (GUtil.isGuildMember(p, guild)) + { + p.sendMessage(ChatColor.RED + target.getName() + " has been demoted to guild member"); + } + } + + player.sendMessage(ChatColor.GREEN + "Successfully demoted " + target.getName() + " to guild member"); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildSetModeratorCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildSetModeratorCommand.java new file mode 100644 index 0000000..44cf94c --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildSetModeratorCommand.java @@ -0,0 +1,86 @@ +package me.totalfreedom.tfguilds.command; + +import me.totalfreedom.tfguilds.util.GBase; +import me.totalfreedom.tfguilds.util.GMessage; +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.entity.Player; + +import java.util.List; + +public class GuildSetModeratorCommand extends GBase implements CommandExecutor +{ + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + { + if (args.length == 0) + { + return false; + } + + if (GUtil.isConsole(sender)) + { + sender.sendMessage(GMessage.PLAYER_ONLY); + return true; + } + + Player player = (Player) sender; + String guild = GUtil.getGuild(player); + + if (guild == null) + { + player.sendMessage(GMessage.NOT_IN_GUILD); + return true; + } + String owner = GUtil.getOwner(guild); + if (!owner.equalsIgnoreCase(player.getName())) + { + player.sendMessage(GMessage.NOT_OWNER); + return true; + } + + Player target = Bukkit.getPlayer(args[0]); + if (target == null) + { + player.sendMessage(GMessage.PLAYER_NOT_FOUND); + return true; + } + + if (!GUtil.isGuildMember(target, guild)) + { + player.sendMessage(ChatColor.RED + "That player isn't in your guild."); + return true; + } + + if (GUtil.isGuildModerator(target, guild)) + { + player.sendMessage(ChatColor.RED + "This player is already a guild moderator."); + return true; + } + + if (target == player) + { + player.sendMessage(ChatColor.RED + "You are already a moderator."); + return true; + } + + List moderators = plugin.guilds.getStringList("guilds." + guild + ".moderators"); + moderators.add(target.getName()); + plugin.guilds.set("guilds." + guild + ".moderators", moderators); + + for (Player p : Bukkit.getOnlinePlayers()) + { + if (GUtil.isGuildMember(p, guild)) + { + p.sendMessage(ChatColor.GREEN + target.getName() + " has been promoted to guild moderator"); + } + } + + player.sendMessage(ChatColor.GREEN + "Successfully promoted " + target.getName() + " to guild moderator"); + return true; + } +} diff --git a/src/main/java/me/totalfreedom/tfguilds/command/InviteGuildCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/InviteGuildCommand.java index f48e02e..1a057ff 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/InviteGuildCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/InviteGuildCommand.java @@ -33,6 +33,12 @@ public class InviteGuildCommand extends GBase implements CommandExecutor if (target != null) { + if (!GUtil.isGuildModerator(player, GUtil.getGuild(player))) + { + player.sendMessage(ChatColor.RED + "You must be a guild moderator in order to invite players."); + return true; + } + if (GUtil.isGuildMember(target, GUtil.getGuild(player))) { player.sendMessage(ChatColor.RED + "That player is already in a guild."); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TfGuildsCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TfGuildsCommand.java index 65f1a09..df445b6 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/TfGuildsCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/TfGuildsCommand.java @@ -32,10 +32,8 @@ public class TfGuildsCommand extends GBase implements CommandExecutor sender.sendMessage(GMessage.NO_PERMISSION); return true; } - try { - plugin.config.load(); plugin.guilds.load(); GLog.info("All configs reloaded successfully"); sender.sendMessage(GUtil.color("&aAll configuration files have been reloaded successfully.")); diff --git a/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java b/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java index 3a27a4d..e03a8e7 100644 --- a/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java +++ b/src/main/java/me/totalfreedom/tfguilds/util/GUtil.java @@ -31,6 +31,10 @@ public class GUtil plugin.guilds.set("guilds." + guildName, guildName); plugin.guilds.set("guilds." + guildName + ".owner", owner.getName()); + List moderators = plugin.guilds.getStringList("guilds." + guildName + ".moderators"); + moderators.add(owner.getName()); + plugin.guilds.set("guilds." + guildName + ".moderators", moderators); + List players = plugin.guilds.getStringList("guilds." + guildName + ".members"); players.add(owner.getName()); plugin.guilds.set("guilds." + guildName + ".members", players); @@ -159,6 +163,11 @@ public class GUtil return plugin.guilds.getString("guilds." + guildName + ".owner"); } + public static List getModerators(String guildName) + { + return plugin.guilds.getStringList("guilds." + guildName + ".moderators"); + } + public static List getMember(String guildName) { return plugin.guilds.getStringList("guilds." + guildName + ".members"); @@ -166,7 +175,12 @@ public class GUtil public static boolean isGuildMember(Player player, String guildName) { - return getMember(guildName).contains(player.getName().toLowerCase()); + return getMember(guildName).contains(player.getName()); + } + + public static boolean isGuildModerator(Player player, String guildName) + { + return getModerators(guildName).contains(player.getName()); } public static void guildChat(CommandSender sender, String message, String guildName) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml deleted file mode 100644 index e4edc3d..0000000 --- a/src/main/resources/config.yml +++ /dev/null @@ -1 +0,0 @@ -# TFGuilds Configuration File \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c153279..2a9d8da 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -12,7 +12,7 @@ commands: aliases: [guilds, tfguildsinfo, tfginfo, guildsinfo] createguild: description: Creates a guild - usage: / + usage: / aliases: [guildcreate] guildtag: description: Modify your guild's tag @@ -46,4 +46,12 @@ commands: usage: / guildadmin: description: Guild commands only for admins - usage: / \ No newline at end of file + usage: / + guildsetmoderator: + description: Promotes a player to guild mod + usage: / + aliases: [gsetmod, setguildmod, setguildmoderator, guildsetmod, guildpromote, gpromote] + guildremovemoderator: + description: / + usage: / + aliases: [gremovemod, removeguildmod, removeguildmoderator, guildremovemod, guilddemote, gdemote] \ No newline at end of file