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