diff --git a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java index dbe9225..5d014fd 100644 --- a/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java +++ b/src/main/java/me/totalfreedom/tfguilds/TFGuilds.java @@ -8,7 +8,14 @@ import me.totalfreedom.tfguilds.command.TFGuildsCommand; import me.totalfreedom.tfguilds.config.Config; import me.totalfreedom.tfguilds.listener.ChatListener; import me.totalfreedom.tfguilds.listener.JoinListener; +import me.totalfreedom.tfguilds.sql.SQLDatabase; +import me.totalfreedom.tfguilds.sql.SQLGuildData; +import me.totalfreedom.tfguilds.sql.SQLRankData; +import me.totalfreedom.tfguilds.sql.SQLUserData; +import me.totalfreedom.tfguilds.sql.SQLWorldData; import me.totalfreedom.tfguilds.util.GLog; +import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -22,18 +29,24 @@ public final class TFGuilds extends JavaPlugin } public Config config; - public Config guilds; - public Config players; public TFMBridge bridge; + public SQLDatabase sql; + public SQLGuildData guildData; + public SQLRankData rankData; + public SQLWorldData worldData; + public SQLUserData userData; @Override public void onEnable() { plugin = this; config = new Config("config.yml"); - guilds = new Config("guilds.yml"); - players = new Config("players.yml"); bridge = new TFMBridge(); + sql = new SQLDatabase(); + guildData = new SQLGuildData(); + rankData = new SQLRankData(); + worldData = new SQLWorldData(); + userData = new SQLUserData(); loadCommands(); loadListeners(); GLog.info("Enabled " + this.getDescription().getFullName()); @@ -44,8 +57,6 @@ public final class TFGuilds extends JavaPlugin { plugin = null; config.save(); - guilds.save(); - players.save(); GLog.info("Disabled " + this.getDescription().getFullName()); } diff --git a/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java b/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java index b74fa67..dff8a05 100644 --- a/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java +++ b/src/main/java/me/totalfreedom/tfguilds/bridge/TFMBridge.java @@ -46,7 +46,7 @@ public class TFMBridge return player.isOp(); } - return getTFM().sl.isStaff(player); + return getTFM().al.isAdmin(player); } public boolean isAdmin(CommandSender sender) @@ -57,11 +57,17 @@ public class TFMBridge return sender.isOp(); } - return getTFM().sl.isStaff(sender); + return getTFM().al.isAdmin(sender); } public boolean isVanished(Player player) { - return getTFM().sl.isVanished(player.getName()); + if (getTFM() == null) + { + GLog.warn("TFM not detected on the server."); + return false; + } + + 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 index 40282de..eeb681b 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/AddModSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/AddModSubcommand.java @@ -44,7 +44,7 @@ public class AddModSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(player.getName())) + if (!guild.hasMember(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); return true; @@ -56,13 +56,13 @@ public class AddModSubcommand extends Common implements CommandExecutor return true; } - if (guild.hasModerator(player.getName())) + if (guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This member is already a moderator for this guild!"); return true; } - guild.addModerator(player.getName()); + guild.addModerator(player.getUniqueId()); 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(); @@ -83,7 +83,7 @@ public class AddModSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change who is a moderator in your guild!"); return true; @@ -96,25 +96,25 @@ public class AddModSubcommand extends Common implements CommandExecutor return true; } - if (guild.getOwner().equals(n.getName())) + if (guild.getOwner().equals(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "No need to make yourself a moderator!"); return true; } - if (!guild.hasMember(n.getName())) + if (!guild.hasMember(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); return true; } - if (guild.hasModerator(n.getName())) + if (guild.hasModerator(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This member is already a moderator for your guild!"); return true; } - guild.addModerator(n.getName()); + guild.addModerator(n.getUniqueId()); 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(); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java index f30e273..c39988e 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/CreateRankSubcommand.java @@ -38,7 +38,7 @@ public class CreateRankSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't create ranks for your guild!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java index 7e41555..df4b932 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/CreateSubcommand.java @@ -32,7 +32,7 @@ public class CreateSubcommand extends Common implements CommandExecutor return true; } - Player player = (Player)sender; + Player player = (Player) sender; String name = StringUtils.join(args, " ", 1, args.length); String identifier = GUtil.flatten(name); @@ -76,7 +76,6 @@ public class CreateSubcommand extends Common implements CommandExecutor } 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; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java index 113525d..a29a55e 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/DeleteRankSubcommand.java @@ -35,7 +35,7 @@ public class DeleteRankSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't delete ranks from your guild!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java index ddde390..e52f52a 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/DisbandSubcommand.java @@ -40,7 +40,7 @@ public class DisbandSubcommand extends Common implements CommandExecutor } String n = guild.getName(); - GLog.info("Removing guilds.yml data for " + n); + GLog.info("Removing guild data for " + n); guild.disband(); GLog.info(sender.getName() + " deleted guild " + guild.getName()); sender.sendMessage(tl(PREFIX + "Disbanded \"" + GUtil.colorize(n) + "%p%\".")); @@ -62,13 +62,13 @@ public class DisbandSubcommand extends Common implements CommandExecutor } Guild guild = Guild.getGuild(player); - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You are not the owner of this guild!"); return true; } - GLog.info("Removing guilds.yml data for " + guild.getName()); + GLog.info("Removing guild data for " + guild.getName()); guild.disband(); GLog.info(player.getName() + " deleted guild " + guild.getName()); sender.sendMessage(tl(PREFIX + "You have disbanded your guild!")); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java index e66fb69..daa23d0 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/GuildCommand.java @@ -10,6 +10,7 @@ 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 { @@ -84,7 +85,6 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - Guild guild = Guild.getGuild(sender); if (args.length == 1) { return Arrays.asList("addmod", "chat", "createrank", "create", @@ -139,15 +139,25 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "deleterank": case "setdefaultrank": { - if (guild.getOwner().equals(sender.getName())) + if (sender instanceof Player) { - return guild.getRankNames(); + Player player = (Player) sender; + Guild guild = Guild.getGuild(player); + if (guild.getOwner().equals(player.getUniqueId())) + { + return guild.getRankNames(); + } } } case "tp": { - return guild.getMembers(); + if (sender instanceof Player) + { + Player player = (Player) sender; + Guild guild = Guild.getGuild(player); + return guild.getOnlyMembers(); + } } case "disband": @@ -162,9 +172,14 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "kick": { - if (guild.hasModerator(sender.getName())) + if (sender instanceof Player) { - return guild.getOnlyMembers(); + Player player = (Player) sender; + Guild guild = Guild.getGuild(player); + if (guild.hasModerator(player.getUniqueId())) + { + return guild.getOnlyMembers(); + } } } @@ -172,9 +187,14 @@ public class GuildCommand extends Common implements CommandExecutor, TabComplete case "addmod": case "setowner": { - if (guild.getOwner().equals(sender.getName())) + if (sender instanceof Player) { - return guild.getMembers(); + Player player = (Player) sender; + Guild guild = Guild.getGuild(player); + if (guild.getOwner().equals(player.getUniqueId())) + { + return guild.getOnlyMembers(); + } } } } diff --git a/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java index d0b0e8f..663d5f7 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/HomeSubcommand.java @@ -38,7 +38,7 @@ public class HomeSubcommand extends Common implements CommandExecutor { if (args[1].equalsIgnoreCase("set")) { - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't modify your guild's home!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java index 5047735..56a38a2 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/JoinSubcommand.java @@ -59,7 +59,7 @@ public class JoinSubcommand extends Common implements CommandExecutor INVITES.remove(player); } - guild.addMember(player.getName()); + guild.addMember(player.getUniqueId()); guild.broadcast(tl("%s%" + player.getName() + " %p%has joined the guild.")); guild.save(); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java index 7729b99..7aefd6e 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/KickSubcommand.java @@ -44,19 +44,19 @@ public class KickSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(player.getName())) + if (!guild.hasMember(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); return true; } - if (guild.getOwner().equals(player.getName()) || guild.hasModerator(player.getName())) + if (guild.getOwner().equals(player.getUniqueId()) || guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You cannot kick the owner/moderator(s) of a guild!"); return true; } - guild.removeMember(player.getName()); + guild.removeMember(player.getUniqueId()); 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.")); @@ -78,7 +78,7 @@ public class KickSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't kick people from your guild!"); return true; @@ -91,19 +91,19 @@ public class KickSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(n.getName())) + if (!guild.hasMember(n.getUniqueId())) { 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())) + if (guild.getOwner().equals(n.getUniqueId()) || guild.hasModerator(n.getUniqueId()) && !guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You cannot kick the owner/moderator(s) of a guild!"); return true; } - guild.removeMember(n.getName()); + guild.removeMember(n.getUniqueId()); 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.")); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java index 2d1f5cb..ab1a023 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/LeaveSubcommand.java @@ -34,14 +34,14 @@ public class LeaveSubcommand extends Common implements CommandExecutor return true; } - if (guild.getOwner().equals(player.getName())) + if (guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You cannot leave as you are the owner!"); return true; } - guild.removeModerator(player.getName()); - guild.removeMember(player.getName()); + guild.removeModerator(player.getUniqueId()); + guild.removeMember(player.getUniqueId()); guild.save(); sender.sendMessage(tl("%p%You left your guild.")); guild.broadcast(tl("%s%" + sender.getName() + " %p%left the guild.")); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java index ec88d9c..3d58ae2 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/MOTDSubcommand.java @@ -36,7 +36,7 @@ public class MOTDSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't modify your guild's MOTD!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java index 27c7326..bd389e1 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/RemoveModSubcommand.java @@ -44,25 +44,28 @@ public class RemoveModSubcommand extends Common implements CommandExecutor return true; } - if (guild.getModerators().contains(sender.getName())) + if (sender instanceof Player) { - sender.sendMessage(ChatColor.RED + "You may not demote yourself."); - return true; + if (guild.getModerators().contains(((Player) sender).getUniqueId())) + { + sender.sendMessage(ChatColor.RED + "You may not demote yourself."); + return true; + } } - if (!guild.hasMember(player.getName())) + if (!guild.hasMember(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); return true; } - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This member is not a moderator for this guild!"); return true; } - guild.removeModerator(player.getName()); + guild.removeModerator(player.getUniqueId()); 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(); @@ -83,7 +86,7 @@ public class RemoveModSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change who is a moderator in your guild!"); return true; @@ -102,19 +105,19 @@ public class RemoveModSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(n.getName())) + if (!guild.hasMember(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); return true; } - if (!guild.hasModerator(n.getName())) + if (!guild.hasModerator(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This member is not a moderator for your guild!"); return true; } - guild.removeModerator(n.getName()); + guild.removeModerator(n.getUniqueId()); 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(); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java index 29137b8..e062734 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/RenameSubcommand.java @@ -41,7 +41,7 @@ public class RenameSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change the name of your guild!"); return true; @@ -80,11 +80,7 @@ public class RenameSubcommand extends Common implements CommandExecutor } } - guild.disband(); - guild.setIdentifier(GUtil.flatten(newName)); - guild.setName(newName); - guild.updateRankIdentifiers(); - guild.setTag(GUtil.colorize("&8[&7" + newName + "&8]")); + guild.rename(newName); 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(); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java index 070918a..0d5d570 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetDefaultRankSubcommand.java @@ -35,7 +35,7 @@ public class SetDefaultRankSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You do not have permissions to manage ranks in your guild!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetMemberSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetMemberSubcommand.java index 89051c4..ae95a01 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetMemberSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetMemberSubcommand.java @@ -46,7 +46,7 @@ public class SetMemberSubcommand extends Common implements CommandExecutor return true; } - guild.addMember(player.getName()); + guild.addMember(player.getUniqueId()); guild.broadcast(tl("%s%" + player.getName() + " %p%has joined the guild.")); guild.save(); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java index 0648176..7b9b3bb 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetOwnerSubcommand.java @@ -44,20 +44,20 @@ public class SetOwnerSubcommand extends Common implements CommandExecutor return true; } - if (guild.getOwner().contains(player.getName())) + if (guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is already the owner of that guild!"); return true; } - if (!guild.hasMember(player.getName())) + if (!guild.hasMember(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in the specified guild!"); return true; } - guild.removeModerator(player.getName()); - guild.setOwner(player.getName()); + guild.removeModerator(player.getUniqueId()); + guild.setOwner(player.getUniqueId()); 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(); @@ -78,7 +78,7 @@ public class SetOwnerSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change who is the owner of your guild!"); return true; @@ -97,14 +97,14 @@ public class SetOwnerSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(n.getName())) + if (!guild.hasMember(n.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); return true; } - guild.removeModerator(n.getName()); - guild.setOwner(n.getName()); + guild.removeModerator(n.getUniqueId()); + guild.setOwner(n.getUniqueId()); 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(); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java index dee3546..2a55be5 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetRankSubcommand.java @@ -37,7 +37,7 @@ public class SetRankSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change the ranks of your guild members!"); return true; @@ -50,7 +50,7 @@ public class SetRankSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasMember(r.getName())) + if (!guild.hasMember(r.getUniqueId())) { sender.sendMessage(ChatColor.RED + "This player is not in your guild!"); return true; @@ -61,7 +61,7 @@ public class SetRankSubcommand extends Common implements CommandExecutor { for (GuildRank gr : guild.getRanks()) { - gr.getMembers().remove(r.getName()); + gr.getMembers().remove(r.getUniqueId()); } sender.sendMessage(tl(PREFIX + "Removed the rank of %s%" + r.getName() + "%p% in your guild.")); @@ -79,10 +79,11 @@ public class SetRankSubcommand extends Common implements CommandExecutor for (GuildRank gr : guild.getRanks()) { - gr.getMembers().remove(r.getName()); + gr.getMembers().remove(r.getUniqueId()); } - rank.getMembers().add(r.getName()); + rank.getMembers().add(r.getUniqueId()); + rank.save(); 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(); diff --git a/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java index 42da3cd..b95857e 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/SetStateSubcommand.java @@ -65,7 +65,7 @@ public class SetStateSubcommand extends Common implements CommandExecutor return true; } - if (!guild.hasModerator(player.getName())) + if (!guild.hasModerator(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't change the state of the guild!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java index 131f3c2..295db80 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/TFGuildsCommand.java @@ -32,8 +32,6 @@ public class TFGuildsCommand extends Common implements CommandExecutor 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; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java index b0d7649..d2f33ed 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/TPSubcommand.java @@ -42,7 +42,7 @@ public class TPSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getMembers().contains(to.getName())) + if (!guild.getMembers().contains(to.getUniqueId())) { sender.sendMessage(ChatColor.RED + "That player is not in your guild."); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java index 4d97ec2..0657f60 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/TagSubcommand.java @@ -36,7 +36,7 @@ public class TagSubcommand extends Common implements CommandExecutor return true; } - if (!guild.getOwner().equals(player.getName())) + if (!guild.getOwner().equals(player.getUniqueId())) { sender.sendMessage(ChatColor.RED + "You can't modify your guild's tag!"); return true; diff --git a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java index 222352a..b582601 100644 --- a/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java +++ b/src/main/java/me/totalfreedom/tfguilds/command/ToggleTagSubcommand.java @@ -2,6 +2,7 @@ package me.totalfreedom.tfguilds.command; import me.totalfreedom.tfguilds.Common; import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.user.User; import me.totalfreedom.tfguilds.util.GUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -36,19 +37,10 @@ public class ToggleTagSubcommand extends Common implements CommandExecutor 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() + ".")); + User user = plugin.userData.get(player.getUniqueId()); + user.setTag(!user.isTag()); + user.save(); + sender.sendMessage(tl(PREFIX + (user.isTag() ? "Enabled" : "Disabled") + " personal guild tag for " + player.getName() + ".")); return true; } @@ -66,18 +58,10 @@ public class ToggleTagSubcommand extends Common implements CommandExecutor 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.")); + User user = plugin.userData.get(player.getUniqueId()); + user.setTag(!user.isTag()); + user.save(); + sender.sendMessage(tl(PREFIX + (user.isTag() ? "Enabled" : "Disabled") + " personal guild tag.")); return true; } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java b/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java index ee89a20..d2e2b11 100644 --- a/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java +++ b/src/main/java/me/totalfreedom/tfguilds/guild/Guild.java @@ -1,8 +1,8 @@ package me.totalfreedom.tfguilds.guild; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.UUID; import lombok.Getter; import lombok.Setter; import me.totalfreedom.tfguilds.TFGuilds; @@ -14,8 +14,7 @@ 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.OfflinePlayer; import org.bukkit.entity.Player; public class Guild @@ -32,13 +31,13 @@ public class Guild @Getter @Setter - private String owner; + private UUID owner; @Getter - private final List moderators; + private final List moderators; @Getter - private final List members; + private final List members; @Getter @Setter @@ -68,9 +67,9 @@ public class Guild public Guild(String identifier, String name, - String owner, - List members, - List moderators, + UUID owner, + List members, + List moderators, String tag, GuildState state, List ranks, @@ -95,77 +94,63 @@ public class Guild 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) - { - rank.set(); - } - 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(); + plugin.guildData.save(this); } - public void addMember(String name) + public void addMember(UUID uuid) { if (hasDefaultRank()) { - getRank(defaultRank).getMembers().add(name); + getRank(defaultRank).getMembers().add(uuid); } - members.add(name); + members.add(uuid); } - public void removeMember(String name) + public void removeMember(UUID uuid) { - Player player = Bukkit.getPlayer(name); + Player player = Bukkit.getPlayer(uuid); if (player != null) { Common.IN_GUILD_CHAT.remove(player); } - members.remove(name); + members.remove(uuid); for (GuildRank gr : getRanks()) { - getRank(gr.getName()).getMembers().remove(name); + getRank(gr.getName()).getMembers().remove(uuid); } - moderators.remove(name); + moderators.remove(uuid); } - public boolean hasMember(String name) + public boolean hasMember(UUID uuid) { - return members.contains(name); + return members.contains(uuid); } - public void addModerator(String name) + public void addModerator(UUID uuid) { - moderators.add(name); + moderators.add(uuid); } - public void removeModerator(String name) + public void removeModerator(UUID uuid) { - moderators.remove(name); + moderators.remove(uuid); } - public boolean hasModerator(String name) + public boolean hasModerator(UUID uuid) { - if (owner.equals(name)) + if (owner.equals(uuid)) { return true; } - return moderators.contains(name); + return moderators.contains(uuid); } public void addRank(String name) { - ranks.add(new GuildRank(identifier, GUtil.flatten(name), name, new ArrayList<>())); + ranks.add(GuildRank.createGuildRank(identifier, GUtil.flatten(name), name)); } public void removeRank(String name) @@ -236,23 +221,37 @@ public class Guild { for (Player player : Bukkit.getOnlinePlayers()) { - if (members.contains(player.getName())) + if (members.contains(player.getUniqueId())) { player.sendMessage(message); } } } + public List getModeratorNames() + { + List only = new ArrayList<>(); + for (UUID moderator : moderators) + { + if (moderator.equals(owner)) + continue; + OfflinePlayer player = Bukkit.getOfflinePlayer(moderator); + only.add(player.getName()); + } + return only; + } + public List getOnlyMembers() { List only = new ArrayList<>(); - for (String member : members) + for (UUID member : members) { if (member.equals(owner) || moderators.contains(member)) { continue; } - only.add(member); + OfflinePlayer player = Bukkit.getOfflinePlayer(member); + only.add(player.getName()); } return only; } @@ -270,14 +269,14 @@ public class Guild 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"); + "%s%Owner%p% - " + Bukkit.getOfflinePlayer(owner).getName() + "\n" + + "%s%Moderators%p% - " + StringUtils.join(getModeratorNames(), ", ") + "\n"); for (GuildRank rank : ranks) { list.append("%s%") .append(rank.getName()).append("%p% - ") - .append(StringUtils.join(rank.getMembers(), ", ")) + .append(StringUtils.join(rank.getMemberNames(), ", ")) .append("\n"); } @@ -288,11 +287,8 @@ public class Guild public static List getGuildList() { List g = new ArrayList<>(); - for (String key : plugin.guilds.getKeys(false)) - { - Guild guild = getGuild(key); + for (Guild guild : plugin.guildData.getAll()) g.add(guild.getName()); - } return g; } @@ -300,8 +296,8 @@ public class Guild { 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%Owner%p%: " + Bukkit.getOfflinePlayer(owner).getName() + "\n" + + "%s%Moderators%p%: " + StringUtils.join(getModeratorNames(), ", ") + "\n" + "%s%Members%p%: " + StringUtils.join(getOnlyMembers(), ", ") + "\n" + "%s%Tag%p%: " + (tag == null ? "None" : GUtil.colorize(tag)) + "\n" + "%s%State%p%: " + state.getDisplay() + "\n" + @@ -339,17 +335,23 @@ public class Guild public void disband() { - for (String member : members) + for (UUID member : members) { Player player = Bukkit.getPlayer(member); if (player == null) - { continue; - } Common.IN_GUILD_CHAT.remove(player); } - plugin.guilds.set(identifier, null); - plugin.guilds.save(); + plugin.guildData.delete(this); + } + + public void rename(String name) + { + this.identifier = GUtil.flatten(name); + updateRankIdentifiers(); + this.name = name; + this.tag = GUtil.colorize("&8[&7" + name + "&8]"); + this.save(); } public void updateRankIdentifiers() @@ -357,111 +359,38 @@ public class Guild for (GuildRank rank : ranks) { rank.delete(); - rank.setIguild(identifier); - rank.set(); - plugin.guilds.save(); + rank.updateGuildIdentifier(identifier); + rank.save(); } } public static Guild createGuild(String identifier, String name, Player owner) { - if (plugin.guilds.contains(identifier)) - { + if (plugin.guildData.exists(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(); + Guild guild = plugin.guildData.create(identifier, name, owner); 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) - { - for (String key : rankcs.getKeys(false)) - { - ranks.add(new GuildRank(identifier, key, plugin.guilds.getString(identifier + ".ranks." + key + ".name"), - plugin.guilds.getStringList(identifier + ".ranks." + key + ".members"))); - } - } - - 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")); + return plugin.guildData.get(identifier); } 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; + return plugin.guildData.get(player); } public static boolean guildExists(String identifier) { - return plugin.guilds.contains(identifier); + return plugin.guildData.exists(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; + return getGuild(player) != null; } } \ 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 index f2e539b..f14af20 100644 --- a/src/main/java/me/totalfreedom/tfguilds/guild/GuildRank.java +++ b/src/main/java/me/totalfreedom/tfguilds/guild/GuildRank.java @@ -1,16 +1,19 @@ package me.totalfreedom.tfguilds.guild; +import java.util.ArrayList; import java.util.List; +import java.util.UUID; import lombok.Getter; import lombok.Setter; import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; public class GuildRank { private static TFGuilds plugin = TFGuilds.getPlugin(); - // owning guild's identifier - @Setter + @Getter private String iguild; // identifier @@ -23,24 +26,45 @@ public class GuildRank // members of this rank @Getter - private List members; + private List members; - public GuildRank(String iguild, String identifier, String name, List members) + public GuildRank(String iguild, String identifier, String name, List members) { - this.identifier = identifier; this.iguild = iguild; + this.identifier = identifier; this.name = name; this.members = members; } - public void set() + public List getMemberNames() { - plugin.guilds.set(iguild + ".ranks." + identifier + ".name", name); - plugin.guilds.set(iguild + ".ranks." + identifier + ".members", members); + List only = new ArrayList<>(); + for (UUID member : members) + { + OfflinePlayer player = Bukkit.getOfflinePlayer(member); + only.add(player.getName()); + } + return only; + } + + public static GuildRank createGuildRank(String guildIdentifier, String identifier, String name) + { + return plugin.rankData.create(guildIdentifier, identifier, name); + } + + public void save() + { + plugin.rankData.save(this); + } + + public void updateGuildIdentifier(String newIdentifier) + { + plugin.rankData.updateGuildIdentifier(this, newIdentifier); + this.iguild = newIdentifier; } public void delete() { - plugin.guilds.set(iguild + ".ranks." + identifier, null); + plugin.rankData.delete(this); } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java b/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java index bcae284..62f1794 100644 --- a/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java +++ b/src/main/java/me/totalfreedom/tfguilds/listener/ChatListener.java @@ -5,6 +5,7 @@ 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.user.User; import me.totalfreedom.tfguilds.util.GUtil; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -46,11 +47,11 @@ public class ChatListener implements Listener String display; if (rank == null) { - if (guild.getOwner().equals(player.getName())) + if (guild.getOwner().equals(player.getUniqueId())) { display = "Guild Owner"; } - else if (guild.hasModerator(player.getName())) + else if (guild.hasModerator(player.getUniqueId())) { display = "Guild Moderator"; } @@ -69,13 +70,8 @@ public class ChatListener implements Listener return; } - if (plugin.players.contains(player.getName())) - { - if (!plugin.players.getBoolean(player.getName() + ".tag")) - { - return; - } - } + User user = plugin.userData.get(player.getUniqueId()); + if (!user.isTag()) return; if (guild.hasTag()) { 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..db9d772 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLDatabase.java @@ -0,0 +1,81 @@ +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; + +public class SQLDatabase +{ + private static final String DATABASE_FILENAME = "database.db"; + private static final TFGuilds plugin = TFGuilds.getPlugin(); + + private File file; + private Connection connection; + + public SQLDatabase() + { + File file = new File(plugin.getDataFolder(), DATABASE_FILENAME); + if (!file.exists()) + { + try + { + file.createNewFile(); + plugin.saveResource(DATABASE_FILENAME, false); + } + catch (IOException ex) + { + ex.printStackTrace(); + } + } + this.file = file; + } + + public Connection getConnection() + { + try + { + Connection connection = DriverManager.getConnection("jdbc:sqlite:" + file.getAbsolutePath()); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `users` (\n" + + "\t`id` INT,\n" + + "\t`uuid` TINYTEXT,\n" + + "\t`tag` BOOL\n" + + ");").execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `worlds` (\n" + + "\t`id` SMALLINT,\n" + + "\t`name` TINYTEXT\n" + + ");").execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `ranks` (\n" + + "\t`guild_identifier` TEXT,\n" + + "\t`identifier` TEXT,\n" + + "\t`name` TEXT,\n" + + "\t`members` TEXT\n" + + ");").execute(); + connection.prepareStatement("CREATE TABLE IF NOT EXISTS `guilds` (\n" + + "\t`identifier` TEXT,\n" + + "\t`name` TEXT,\n" + + "\t`owner` INT,\n" + + "\t`moderators` TEXT,\n" + + "\t`members` TEXT,\n" + + "\t`tag` TEXT,\n" + + "\t`state` TINYINT,\n" + + "\t`ranks` TEXT,\n" + + "\t`motd` TEXT,\n" + + "\t`x` DOUBLE,\n" + + "\t`y` DOUBLE,\n" + + "\t`z` DOUBLE,\n" + + "\t`world` SMALLINT,\n" + + "\t`default_rank` TEXT,\n" + + "\t`creation` BIGINT\n" + + ");").execute(); + return connection; + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLGuildData.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLGuildData.java new file mode 100644 index 0000000..07cddef --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLGuildData.java @@ -0,0 +1,223 @@ +package me.totalfreedom.tfguilds.sql; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.guild.GuildRank; +import me.totalfreedom.tfguilds.guild.GuildState; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class SQLGuildData +{ + private static final TFGuilds plugin = TFGuilds.getPlugin(); + private static final String TABLE_NAME = "guilds"; + + private final String SELECT = "SELECT * FROM `" + TABLE_NAME + "` WHERE identifier=?"; + private final String SELECT_MEMBER = "SELECT * FROM `" + TABLE_NAME + "` WHERE members LIKE ?"; + private final String SELECT_ALL = "SELECT * FROM `" + TABLE_NAME + "`"; + private final String UPDATE = "UPDATE `" + TABLE_NAME + "` SET name=?, owner=?, members=?, moderators=?, tag=?, state=?, ranks=?, motd=?, x=?, y=?, z=?, world=?, default_rank=? WHERE identifier=?"; + private final String DELETE = "DELETE FROM `" + TABLE_NAME + "` WHERE identifier=?"; + private final String INSERT = "INSERT INTO `" + TABLE_NAME + "` (`identifier`, `name`, `owner`, `members`, " + + "`moderators`, `tag`, `state`, `ranks`, `motd`, `x`, `y`, `z`, `world`, `default_rank`, `creation`) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; + + public boolean exists(String identifier) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, identifier); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public Guild get(String identifier) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, identifier); + ResultSet set = statement.executeQuery(); + boolean next = set.next(); + if (!next) return null; + String name = set.getString("name"); + UUID owner = plugin.userData.get(set.getInt("owner")).getUuid(); + List members = new ArrayList<>(); + for (String stringMember : set.getString("members").split(",")) + members.add(plugin.userData.get(Integer.parseInt(stringMember)).getUuid()); + List moderators = new ArrayList<>(); + if (set.getString("moderators") != null) + { + for (String stringModerator : set.getString("moderators").split(",")) + moderators.add(plugin.userData.get(Integer.parseInt(stringModerator)).getUuid()); + } + String tag = set.getString("tag"); + GuildState state = GuildState.values()[set.getInt("state")]; + List ranks = new ArrayList<>(); + if (set.getString("ranks") != null) + { + for (String rankString : Arrays.asList(set.getString("ranks").split(","))) + ranks.add(plugin.rankData.get(identifier, rankString)); + } + String motd = set.getString("motd"); + Location home = new Location(plugin.worldData.getWorld(set.getInt("world")), + set.getDouble("x"), + set.getDouble("y"), + set.getDouble("z")); + String defaultRank = set.getString("default_rank"); + long creation = set.getLong("creation"); + return new Guild(identifier, name, owner, members, moderators, tag, state, ranks, motd, home, creation, defaultRank); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public Guild get(Player player) + { + for (Guild guild : getAll()) + { + if (guild.getMembers().contains(player.getUniqueId())) + return guild; + } + return null; + } + + public List getAll() + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT_ALL); + ResultSet set = statement.executeQuery(); + List guilds = new ArrayList<>(); + while (set.next()) + guilds.add(get(set.getString("identifier"))); + return guilds; + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + /* + 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); + */ + + public Guild create(String identifier, String name, Player owner) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(INSERT); + statement.setString(1, identifier); + statement.setString(2, name); + int ownerID = plugin.userData.get(owner.getUniqueId()).getId(); + statement.setInt(3, ownerID); + statement.setString(4, "" + ownerID); + statement.setString(5, null); + statement.setString(6, "&8[&7" + name + "&8]"); + statement.setInt(7, GuildState.INVITE_ONLY.ordinal()); + statement.setString(8, null); + statement.setString(9, null); + statement.setDouble(10, 0.0); + statement.setDouble(11, 100.0); + statement.setDouble(12, 0.0); + statement.setInt(13, plugin.worldData.getWorldID(Bukkit.getWorlds().get(0))); + statement.setString(14, null); + long creation = System.currentTimeMillis(); + statement.setLong(15, creation); + statement.execute(); + return new Guild(identifier, name, owner.getUniqueId(), Collections.singletonList(owner.getUniqueId()), new ArrayList<>(), + ChatColor.DARK_GRAY + "[" + ChatColor.GRAY + name + ChatColor.DARK_GRAY + "]", + GuildState.INVITE_ONLY, new ArrayList<>(), null, new Location(Bukkit.getWorlds().get(0), 0.0, 100.0, 0.0), creation, null); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public void save(Guild guild) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(UPDATE); + statement.setString(1, guild.getName()); + statement.setString(2, "" + plugin.userData.get(guild.getOwner()).getId()); + List members = new ArrayList<>(); + for (UUID member : guild.getMembers()) + members.add("" + plugin.userData.get(member).getId()); + statement.setString(3, members.size() == 0 ? null : StringUtils.join(members, ",")); + List moderators = new ArrayList<>(); + for (UUID moderator : guild.getModerators()) + moderators.add("" + plugin.userData.get(moderator).getId()); + statement.setString(4, moderators.size() == 0 ? null : StringUtils.join(moderators, ",")); + statement.setString(5, guild.getTag()); + statement.setInt(6, guild.getState().ordinal()); + List stringRanks = new ArrayList<>(); + for (GuildRank rank : guild.getRanks()) + stringRanks.add(rank.getIdentifier()); + statement.setString(7, stringRanks.size() == 0 ? null : StringUtils.join(stringRanks, ",")); + statement.setString(8, guild.getMotd()); + Location home = guild.getHome(); + statement.setDouble(9, home == null ? 0.0 : home.getX()); + statement.setDouble(10, home == null ? 100.0 : home.getY()); + statement.setDouble(11, home == null ? 0.0 : home.getZ()); + statement.setInt(12, home == null ? plugin.worldData.getWorldID(Bukkit.getWorlds().get(0)) : plugin.worldData.getWorldID(home.getWorld())); + statement.setString(13, guild.getDefaultRank()); + statement.setString(14, guild.getIdentifier()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public void delete(Guild guild) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(DELETE); + statement.setString(1, guild.getIdentifier()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLRankData.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLRankData.java new file mode 100644 index 0000000..ec11742 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLRankData.java @@ -0,0 +1,142 @@ +package me.totalfreedom.tfguilds.sql; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.guild.GuildRank; +import me.totalfreedom.tfguilds.guild.GuildState; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class SQLRankData +{ + private static final TFGuilds plugin = TFGuilds.getPlugin(); + private static final String TABLE_NAME = "ranks"; + + private final String SELECT = "SELECT * FROM `" + TABLE_NAME + "` WHERE guild_identifier=? AND identifier=?"; + private final String UPDATE = "UPDATE `" + TABLE_NAME + "` SET name=?, members=? WHERE guild_identifier=? AND identifier=?"; + private final String UPDATE_GUILD = "UPDATE `" + TABLE_NAME + "` SET guild_identifier=? WHERE guild_identifier=? AND identifier=?"; + private final String DELETE = "DELETE `" + TABLE_NAME + "` WHERE guild_identifier=? AND identifier=?"; + private final String INSERT = "INSERT INTO `" + TABLE_NAME + "` (`guild_identifier`, `identifier`, `name`, `members`) " + + "VALUES (?, ?, ?, ?);"; + + public boolean exists(String guildIdentifier, String identifier) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, guildIdentifier); + statement.setString(2, identifier); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public GuildRank get(String guildIdentifier, String identifier) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, guildIdentifier); + statement.setString(2, identifier); + ResultSet set = statement.executeQuery(); + set.next(); + String name = set.getString("name"); + List members = new ArrayList<>(); + if (set.getString("members") != null) + { + for (String stringMember : set.getString("members").split(",")) + members.add(plugin.userData.get(Integer.parseInt(stringMember)).getUuid()); + } + return new GuildRank(guildIdentifier, identifier, name, members); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public GuildRank create(String guildIdentifier, String identifier, String name) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(INSERT); + statement.setString(1, guildIdentifier); + statement.setString(2, identifier); + statement.setString(3, name); + statement.setString(4, null); + statement.execute(); + return new GuildRank(guildIdentifier, identifier, name, new ArrayList<>()); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public void save(GuildRank rank) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(UPDATE); + statement.setString(1, rank.getName()); + List members = new ArrayList<>(); + for (UUID member : rank.getMembers()) + members.add("" + plugin.userData.get(member).getId()); + statement.setString(2, members.size() == 0 ? null : StringUtils.join(members, ",")); + statement.setString(3, rank.getIguild()); + statement.setString(4, rank.getIdentifier()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public void updateGuildIdentifier(GuildRank rank, String newIdentifier) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(UPDATE_GUILD); + statement.setString(1, newIdentifier); + statement.setString(2, rank.getIguild()); + statement.setString(3, rank.getIdentifier()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public void delete(GuildRank rank) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(DELETE); + statement.setString(1, rank.getIguild()); + statement.setString(2, rank.getIdentifier()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLUserData.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLUserData.java new file mode 100644 index 0000000..46dcfd3 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLUserData.java @@ -0,0 +1,156 @@ +package me.totalfreedom.tfguilds.sql; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import me.totalfreedom.tfguilds.TFGuilds; +import me.totalfreedom.tfguilds.guild.Guild; +import me.totalfreedom.tfguilds.guild.GuildRank; +import me.totalfreedom.tfguilds.guild.GuildState; +import me.totalfreedom.tfguilds.user.User; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; + +public class SQLUserData +{ + private static final TFGuilds plugin = TFGuilds.getPlugin(); + private static final String TABLE_NAME = "users"; + + private final String SELECT = "SELECT * FROM `" + TABLE_NAME + "` WHERE uuid=?"; + private final String SELECT_ID = "SELECT * FROM `" + TABLE_NAME + "` WHERE id=?"; + private final String UPDATE = "UPDATE `" + TABLE_NAME + "` SET tag=? WHERE uuid=?"; + private final String INSERT = "INSERT INTO `" + TABLE_NAME + "` (`id`, `uuid`, `tag`) " + + "VALUES (?, ?, ?);"; + private final String COUNT = "SELECT COUNT(*) AS rows FROM `" + TABLE_NAME + "`"; + + public boolean exists(UUID uuid) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, uuid.toString()); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public boolean existsID(int id) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT_ID); + statement.setInt(1, id); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public User get(UUID uuid) + { + if (!exists(uuid)) create(uuid); + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, uuid.toString()); + ResultSet set = statement.executeQuery(); + set.next(); + int id = set.getInt("id"); + boolean tag = set.getBoolean("tag"); + return new User(id, uuid, tag); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public User get(int id) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT_ID); + statement.setInt(1, id); + ResultSet set = statement.executeQuery(); + set.next(); + UUID uuid = UUID.fromString(set.getString("uuid")); + boolean tag = set.getBoolean("tag"); + return new User(id, uuid, tag); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public User create(UUID uuid) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(INSERT); + int id = getUserCount() + 1; + statement.setInt(1, id); + statement.setString(2, uuid.toString()); + statement.setBoolean(3, true); + statement.execute(); + return new User(id, uuid, true); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public void save(User user) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(UPDATE); + statement.setBoolean(1, user.isTag()); + statement.setString(2, user.getUuid().toString()); + statement.execute(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + } + + public int getUserCount() + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(COUNT); + ResultSet set = statement.executeQuery(); + set.next(); + int count = set.getInt("rows"); + set.close(); + return count; + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/sql/SQLWorldData.java b/src/main/java/me/totalfreedom/tfguilds/sql/SQLWorldData.java new file mode 100644 index 0000000..d8b91f1 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/sql/SQLWorldData.java @@ -0,0 +1,116 @@ +package me.totalfreedom.tfguilds.sql; + +import me.totalfreedom.tfguilds.TFGuilds; +import org.bukkit.Bukkit; +import org.bukkit.World; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class SQLWorldData +{ + private static final TFGuilds plugin = TFGuilds.getPlugin(); + + private final String SELECT = "SELECT * FROM `worlds` WHERE name=?"; + private final String SELECT_ID = "SELECT * FROM `worlds` WHERE id=?"; + private final String INSERT = "INSERT INTO `worlds` (`id`, `name`) VALUES (?, ?);"; + private final String COUNT = "SELECT COUNT(*) AS rows FROM `worlds`"; + + public boolean exists(World world) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, world.getName()); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public boolean existsID(int id) + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(SELECT_ID); + statement.setInt(1, id); + ResultSet set = statement.executeQuery(); + return set.next(); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return false; + } + + public int getWorldID(World world) + { + try (Connection connection = plugin.sql.getConnection()) + { + if (!exists(world)) + { + PreparedStatement statement = connection.prepareStatement(INSERT); + statement.setInt(1, getWorldCount() + 1); + statement.setString(2, world.getName()); + statement.execute(); + } + PreparedStatement statement = connection.prepareStatement(SELECT); + statement.setString(1, world.getName()); + ResultSet set = statement.executeQuery(); + set.next(); + int id = set.getInt("id"); + set.close(); + return id; + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return -1; + } + + public World getWorld(int id) + { + try (Connection connection = plugin.sql.getConnection()) + { + if (!existsID(id)) return null; + PreparedStatement statement = connection.prepareStatement(SELECT_ID); + statement.setInt(1, id); + ResultSet set = statement.executeQuery(); + set.next(); + String name = set.getString("name"); + set.close(); + return Bukkit.getWorld(name); + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return null; + } + + public int getWorldCount() + { + try (Connection connection = plugin.sql.getConnection()) + { + PreparedStatement statement = connection.prepareStatement(COUNT); + ResultSet set = statement.executeQuery(); + set.next(); + int count = set.getInt("rows"); + set.close(); + return count; + } + catch (SQLException ex) + { + ex.printStackTrace(); + } + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/tfguilds/user/User.java b/src/main/java/me/totalfreedom/tfguilds/user/User.java new file mode 100644 index 0000000..0d57e48 --- /dev/null +++ b/src/main/java/me/totalfreedom/tfguilds/user/User.java @@ -0,0 +1,27 @@ +package me.totalfreedom.tfguilds.user; + +import java.util.UUID; +import lombok.Getter; +import lombok.Setter; +import me.totalfreedom.tfguilds.TFGuilds; + +@Getter +public class User +{ + private final int id; + private final UUID uuid; + @Setter + private boolean tag; + + public User(int id, UUID uuid, boolean tag) + { + this.id = id; + this.uuid = uuid; + this.tag = tag; + } + + public void save() + { + TFGuilds.getPlugin().userData.save(this); + } +} diff --git a/src/main/resources/database.db b/src/main/resources/database.db new file mode 100644 index 0000000..e69de29 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