From ea7236738c6962206981c49ab6074864f27f3978 Mon Sep 17 00:00:00 2001 From: Minenash Date: Thu, 31 Jan 2019 16:33:03 -0500 Subject: Made Friends Module work again (but better). --- .../java/com/redstoner/modules/friends/Friends.cmd | 22 +- .../com/redstoner/modules/friends/Friends.java | 233 +++++++++++++-------- 2 files changed, 163 insertions(+), 92 deletions(-) diff --git a/src/main/java/com/redstoner/modules/friends/Friends.cmd b/src/main/java/com/redstoner/modules/friends/Friends.cmd index ea205c9..336a769 100644 --- a/src/main/java/com/redstoner/modules/friends/Friends.cmd +++ b/src/main/java/com/redstoner/modules/friends/Friends.cmd @@ -1,8 +1,11 @@ command friends { + alias friend; + perm utils.friends; + type player; + add [string:name] { run add name; - help Adds a friend to your friendlist.; - perm utils.friends; + help Adds a friend to your friend list.; } add [string:name] [string:group] { run add_grouped name group; @@ -11,8 +14,7 @@ command friends { } remove [string:name] { run del name; - help Removes a friend from your friendlist.; - perm utils.friends; + help Removes a friend from your friend list.; } remove [string:name] [string:group] { run del_grouped name group; @@ -22,7 +24,6 @@ command friends { list { run list; help Shows a list of all your friends.; - perm utils.friends; } list [string:group] { run list_group group; @@ -34,5 +35,14 @@ command friends { help Shows all your friend groups that have at least one person in them.; perm utils.friends.groups; } - type player; + group { + [string:groupName] { + run list_group groupName; + help Shows a list of all friends in that group.; + perm utils.friends.groups; + } + run list_groups; + help Shows all your friend groups that have at least one person in them.; + perm utils.friends.groups; + } } \ No newline at end of file diff --git a/src/main/java/com/redstoner/modules/friends/Friends.java b/src/main/java/com/redstoner/modules/friends/Friends.java index 9e06a3f..b38238b 100644 --- a/src/main/java/com/redstoner/modules/friends/Friends.java +++ b/src/main/java/com/redstoner/modules/friends/Friends.java @@ -11,6 +11,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.json.simple.JSONArray; @@ -27,41 +28,46 @@ import com.redstoner.modules.CoreModule; import com.redstoner.modules.Module; import com.redstoner.modules.datamanager.DataManager; +import net.nemez.chatapi.click.Message; + @AutoRegisterListener @Commands(CommandHolderType.File) -@Version(major = 5, minor = 0, revision = 0, compatible = 4) -public class Friends implements CoreModule { +@Version(major = 5, minor = 1, revision = 0, compatible = 4) +public class Friends implements CoreModule, Listener { + + private static int GROUP_PREFIX_LENGETH = 6; + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent e) { - JSONArray friended_by = (JSONArray) DataManager.getOrDefault(e.getPlayer(), "friended_by", new JSONArray()); + Player player = e.getPlayer(); + JSONArray friended_by = (JSONArray) DataManager.getOrDefault(player, "friended_by", new JSONArray()); for (Object obj : friended_by) { UUID uuid = UUID.fromString((String) obj); Player p = Bukkit.getPlayer(uuid); - if (p != null && p.canSee(e.getPlayer())) { - getLogger().message(p, "Your friend &e" + e.getPlayer().getDisplayName() + "&7 just joined!"); + if (p != null && p.canSee(player)) { + getLogger().message(p, "Your friend &e" + player.getDisplayName() + "&7 just joined!"); p.playSound(p.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1); } } - JSONArray notifications = (JSONArray) DataManager.getOrDefault(e.getPlayer(), "scheduled_notifications", new JSONArray()); - - for (Object obj : notifications) { - getLogger().message(e.getPlayer(), (String) obj); - } + JSONArray notifications = (JSONArray) DataManager.getOrDefault(player, "scheduled_notifications", new JSONArray()); + for (Object obj : notifications) + getLogger().message(player, (String) obj); } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerLeave(PlayerQuitEvent e) { - JSONArray friended_by = (JSONArray) DataManager.getOrDefault(e.getPlayer(), "friended_by", new JSONArray()); + Player player = e.getPlayer(); + JSONArray friended_by = (JSONArray) DataManager.getOrDefault(player, "friended_by", new JSONArray()); for (Object obj : friended_by) { UUID uuid = UUID.fromString((String) obj); Player p = Bukkit.getPlayer(uuid); - if (p != null && p.canSee(e.getPlayer())) { - getLogger().message(p, "Your friend &e" + e.getPlayer().getDisplayName() + "&7 just left!"); + if (p != null && p.canSee(player)) { + getLogger().message(p, "Your friend &e" + player.getDisplayName() + "&7 just left!"); p.playSound(p.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1); } } @@ -76,10 +82,10 @@ public class Friends implements CoreModule { } OfflinePlayer p = Bukkit.getPlayer(target); - - if (p == null) p = Bukkit.getOfflinePlayer(target); - if (p == null) { - getLogger().message(sender, true, "That player couldn't be found!"); + + if (p == null) p = Bukkit.getOfflinePlayer(target); + if (p == null || !p.hasPlayedBefore()) { + getLogger().message(sender, true, "That player has never joined the server!"); return true; } @@ -93,24 +99,25 @@ public class Friends implements CoreModule { friends.add(p.getUniqueId().toString()); DataManager.setData(sender, "friends", friends); DataManager.save(sender); - + JSONArray friended_by = ((JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "friended_by", new JSONArray())); friended_by.add(getID(sender)); - DataManager.setData(p.getUniqueId().toString(), "friended_by", friended_by); + DataManager.setData(p.getUniqueId().toString(), "friended_by", friended_by); DataManager.save(p.getUniqueId().toString()); - + getLogger().message(sender, "You are now friends with &e" + p.getName() + "&7!"); - if (p instanceof Player) { + if (p instanceof Player) getLogger().message((Player) p, "&e" + Utils.getName(sender) + "&7 added you as a friend!"); - } else { + else { JSONArray notifications = (JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "scheduled_notifications", new JSONArray()); notifications.add("&e" + Utils.getName(sender) + "&7 added you as a friend!"); notifications.remove("&e" + Utils.getName(sender) + "&7 removed you as a friend!"); DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications); + DataManager.save(p.getUniqueId().toString()); } return true; @@ -127,33 +134,34 @@ public class Friends implements CoreModule { OfflinePlayer p = Bukkit.getPlayer(target); if (p == null) p = Bukkit.getOfflinePlayer(target); - if (p == null) { - getLogger().message(sender, true, "That player couldn't be found!"); + if (p == null || !p.hasPlayedBefore()) { + getLogger().message(sender, true, "That player has neevr joined the server!"); return true; } - JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray())); + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "group." + group, new JSONArray())); if (friends.contains(p.getUniqueId().toString())) { - getLogger().message(sender, true, "This person already is part of that friendsgroup!"); + getLogger().message(sender, true, "This person already is part of that friendgroup!"); return true; } friends.add(p.getUniqueId().toString()); - DataManager.setData(sender, "groups." + group, friends); + DataManager.setData(sender, "group." + group, friends); DataManager.save(sender); getLogger().message(sender, "&e" + p.getName() + "&7 is now part of the group &e" + group + "&7!"); - if (p instanceof Player) { - getLogger().message((Player) p, "&e" + Utils.getName(sender) + " &7added you to their friendsgroup &e" + group + "&7!"); - } else { + if (p instanceof Player) + getLogger().message((Player) p, "&e" + Utils.getName(sender) + " &7added you to their friendgroup &e" + group + "&7!"); + else { JSONArray notifications = (JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "scheduled_notifications", new JSONArray()); - notifications.add("&e" + Utils.getName(sender) + " &7added you to their friendsgroup &e" + group + "&7!"); - notifications.remove("&e" + Utils.getName(sender) + " &7removed you from their friendsgroup &e" + group + "&7!"); + notifications.add("&e" + Utils.getName(sender) + " &7added you to their friendgroup &e" + group + "&7!"); + notifications.remove("&e" + Utils.getName(sender) + " &7removed you from their friendgroup &e" + group + "&7!"); DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications); + DataManager.save(p.getUniqueId().toString()); } return true; @@ -163,14 +171,14 @@ public class Friends implements CoreModule { @Command(hook = "del") public boolean del(CommandSender sender, String target) { if (target.equalsIgnoreCase("CONSOLE")) { - getLogger().message(sender, true, "You can't add console to your friends!"); + getLogger().message(sender, true, "You can't have console as your friends!"); return true; } OfflinePlayer p = Bukkit.getPlayer(target); if (p == null) p = Bukkit.getOfflinePlayer(target); - if (p == null) { + if (p == null || !p.hasPlayedBefore()) { getLogger().message(sender, true, "That player couldn't be found!"); return true; } @@ -185,24 +193,25 @@ public class Friends implements CoreModule { friends.remove(p.getUniqueId().toString()); DataManager.setData(sender, "friends", friends); DataManager.save(sender); - + JSONArray friended_by = ((JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "friended_by", new JSONArray())); - DataManager.setData(p.getUniqueId().toString(), "friended_by", friended_by); friended_by.remove(getID(sender)); - + + DataManager.setData(p.getUniqueId().toString(), "friended_by", friended_by); DataManager.save(p.getUniqueId().toString()); getLogger().message(sender, "You are no longer friends with &e" + p.getName() + "&7!"); - if (p instanceof Player) { + if (p instanceof Player) getLogger().message((Player) p, "&e" + Utils.getName(sender) + "&7 removed you as a friend!"); - } else { + else { JSONArray notifications = (JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "scheduled_notifications", new JSONArray()); notifications.add("&e" + Utils.getName(sender) + "&7 removed you as a friend!"); notifications.remove("&e" + Utils.getName(sender) + "&7 added you as a friend!"); DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications); + DataManager.save(p.getUniqueId().toString()); } return true; @@ -219,33 +228,34 @@ public class Friends implements CoreModule { OfflinePlayer p = Bukkit.getPlayer(target); if (p == null) p = Bukkit.getOfflinePlayer(target); - if (p == null) { + if (p == null || !p.hasPlayedBefore()) { getLogger().message(sender, true, "That player couldn't be found!"); return true; } - JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray())); + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "group." + group, new JSONArray())); if (!friends.contains(p.getUniqueId().toString())) { - getLogger().message(sender, true, "This person isn't a part of that friendsgroup!"); + getLogger().message(sender, true, "This person isn't a part of that friendgroup!"); return true; } friends.add(p.getUniqueId().toString()); - DataManager.setData(sender, "groups." + group, friends); + DataManager.setData(sender, "group." + group, friends); DataManager.save(sender); - + getLogger().message(sender, "&e" + p.getName() + "&7 is no longer a part of the group &e" + group + "&7!"); - if (p instanceof Player) { - getLogger().message((Player) p, "&e" + Utils.getName(sender) + " &7removed you from their friendsgroup &e" + group + "&7!"); - } else { + if (p instanceof Player) + getLogger().message((Player) p, "&e" + Utils.getName(sender) + " &7removed you from their friendgroup &e" + group + "&7!"); + else { JSONArray notifications = (JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "scheduled_notifications", new JSONArray()); - notifications.add("&e" + Utils.getName(sender) + " &7removed you from their friendsgroup &e" + group + "&7!"); - notifications.remove("&e" + Utils.getName(sender) + " &7added you to their friendsgroup &e" + group + "&7!"); + notifications.add("&e" + Utils.getName(sender) + " &7removed you from their friendgroup &e" + group + "&7!"); + notifications.remove("&e" + Utils.getName(sender) + " &7added you to their friendgroup &e" + group + "&7!"); DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications); + DataManager.save(p.getUniqueId().toString()); } return true; @@ -256,21 +266,27 @@ public class Friends implements CoreModule { JSONArray friends = (JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray()); if (friends.size() == 0) { - getLogger().message(sender, true, "You didn't add anyone to your friends list yet."); - } else { - StringBuilder sb = new StringBuilder(); - - for (Object o : friends.toArray()) { - UUID id = UUID.fromString((String) o); - Player p = Bukkit.getPlayer(id); - - if (p != null) sb.append(p.getDisplayName() + "&7, "); - else sb.append("&9" + Bukkit.getOfflinePlayer(id).getName() + "&7, "); + getLogger().message(sender, true, "You haven't added anyone to your friends list yet."); + return true; + } + + Message msg = new Message(sender, null) + .appendText(getLogger().getHeader() + "&7You have a total of &e" + friends.size() + "&7 friends:\n"); + + for (int i = 0; i < friends.size(); i++) { + UUID id = UUID.fromString((String) friends.get(i)); + Player p = Bukkit.getPlayer(id); + if (p != null) + msg.appendSuggestHover("&a" + p.getName(), "/msg " + p.getName() + " ", "&aONLINE\n&9" + + p.getDisplayName() + "\n&7" + id.toString() + "\n\n&oClick to send a message."); + else { + String op = Bukkit.getOfflinePlayer(id).getName(); + msg.appendSuggestHover("&c" + op, "/mail send " + op + " ", "&cOFFLINE\n&7" + id.toString() + "\n\n&oClick to send a message."); } - - String out = sb.toString().replaceAll(", $", ""); - getLogger().message(sender, "You have a total of &e" + friends.size() + "&7 friends:", out); + if (i != friends.size() - 1) + msg.appendText("&7, "); } + msg.send(); return true; } @@ -281,43 +297,88 @@ public class Friends implements CoreModule { if (friends.size() == 0) { getLogger().message(sender, true, "You didn't add anyone to this group yet."); - } else { - StringBuilder sb = new StringBuilder(); - - for (Object o : friends.toArray()) { - UUID id = UUID.fromString((String) o); - Player p = Bukkit.getPlayer(id); - - if (p != null) sb.append(p.getDisplayName() + "&7, "); - else sb.append("&9" + Bukkit.getOfflinePlayer(id).getName() + "&7, "); + return true; + } + + Message msg = new Message(sender, null) + .appendText(getLogger().getHeader() + "&7You have a total of &e" + friends.size() + "&7 friends added to this group[&e" + group + "&7]:"); + + for (int i = 0; i < friends.size(); i++) { + UUID id = UUID.fromString((String) friends.get(i)); + Player p = Bukkit.getPlayer(id); + if (p != null) + msg.appendSuggestHover("&a" + p.getName(), "/msg " + p.getName() + " ", "&aONLINE\n&9" + + p.getDisplayName() + "\n&7" + id.toString() + "\n\n&oClick to send a message."); + else { + String op = Bukkit.getOfflinePlayer(id).getName(); + msg.appendSuggestHover("&c" + op, "/mail send " + op + " ", "&cOFFLINE\n&7" + id.toString() + "\n\n&oClick to send a message."); } - - String out = sb.toString().replaceAll(", $", ""); - getLogger().message(sender, "You have a total of &e" + friends.size() + "&7 friends added to this group:", out); + if (i != friends.size() - 1) + msg.appendText("&7, "); } + msg.send(); - return true; + return true; } + private String getFriendsInGroup(CommandSender sender, String group) { + JSONArray friends = (JSONArray) DataManager.getOrDefault(sender, group == null? "friends" : "group." + group, new JSONArray()); + + if (friends.size() == 0) + return "This group is Empty"; + + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < friends.size(); i++) { + UUID id = UUID.fromString((String) friends.get(i)); + Player p = Bukkit.getPlayer(id); + if (p != null) + sb.append("&a" + p.getName()); + else + sb.append("&c" + Bukkit.getOfflinePlayer(id).getName()); + + if (i != friends.size() - 1) + sb.append("&7, "); + } + + return sb.toString(); + } + + private int getSizeOfGroup(CommandSender sender, String group) { + return ((JSONArray) DataManager.getOrDefault(sender, group == null? "friends" : "group." + group, new JSONArray())).size(); + } + @Command(hook = "list_groups") public boolean list_groups(CommandSender sender) { JSONObject raw = (JSONObject) DataManager.getOrDefault(sender, null, new JSONObject()); Set keys = raw.keySet(); if (keys.size() == 0 || (keys.contains("friends") && keys.size() == 1)) { - getLogger().message(sender, true, "You don't have any custom groups made yet."); + getLogger().message(sender, true, "You don't haven't created any friendgroups yet."); return true; - } else { - StringBuilder sb = new StringBuilder(); - - for (Object o : keys) { - sb.append("&e" + ((String) o).substring(6) + "&7, "); - } - - String out = sb.toString().replaceAll(", $", ""); - getLogger().message(sender, "", out); } - + + Message msg = new Message(sender, null) + .appendText(getLogger().getHeader() + "&7You have a total of &e" + keys.size() + "&7 friendgroups:\n"); + + if (keys.contains("friends")) { + msg.appendSendChatHover("&6friends", "/friends list", + "&7Size: " + getSizeOfGroup(sender, null) + "\n\n" + getFriendsInGroup(sender, null)) + .appendText("&7, "); + keys.remove("friends"); + } + + Object[] keysArray= keys.toArray(); + for (int i = 0; i < keysArray.length; i++) { + String group = ((String) keysArray[i]).substring(GROUP_PREFIX_LENGETH); + msg.appendSendChatHover("&e" + group, "/friends list " + group, + "&7Size: " + getSizeOfGroup(sender, group) + "\n\n" + getFriendsInGroup(sender, group)); + + if (i != keysArray.length - 1) + msg.appendText("&7, "); + } + + msg.send(); return true; } -- cgit v1.2.3