summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/friends
diff options
context:
space:
mode:
authorDavid <david@panic.tk>2018-11-07 23:50:06 +0100
committerDavid <david@panic.tk>2018-11-07 23:50:06 +0100
commit604cf01967ede98bf5024e4926bb0777fc4e8eee (patch)
treee2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/friends
parente86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff)
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/friends')
-rw-r--r--src/main/java/com/redstoner/modules/friends/Friends.cmd38
-rw-r--r--src/main/java/com/redstoner/modules/friends/Friends.java360
2 files changed, 398 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/friends/Friends.cmd b/src/main/java/com/redstoner/modules/friends/Friends.cmd
new file mode 100644
index 0000000..ea205c9
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/friends/Friends.cmd
@@ -0,0 +1,38 @@
+command friends {
+ add [string:name] {
+ run add name;
+ help Adds a friend to your friendlist.;
+ perm utils.friends;
+ }
+ add [string:name] [string:group] {
+ run add_grouped name group;
+ help Adds a friend to a group of friends;
+ perm utils.friends.groups;
+ }
+ remove [string:name] {
+ run del name;
+ help Removes a friend from your friendlist.;
+ perm utils.friends;
+ }
+ remove [string:name] [string:group] {
+ run del_grouped name group;
+ help Removes a friend from a group of friends;
+ perm utils.friends.groups;
+ }
+ list {
+ run list;
+ help Shows a list of all your friends.;
+ perm utils.friends;
+ }
+ list [string:group] {
+ run list_group group;
+ help Shows a list of all friends in that group.;
+ perm utils.friends.groups;
+ }
+ groups {
+ run list_groups;
+ help Shows all your friend groups that have at least one person in them.;
+ perm utils.friends.groups;
+ }
+ type player;
+} \ 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
new file mode 100644
index 0000000..2eb9728
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/friends/Friends.java
@@ -0,0 +1,360 @@
+package com.redstoner.modules.friends;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Set;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.Sound;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+import com.nemez.cmdmgr.Command;
+import com.redstoner.annotations.AutoRegisterListener;
+import com.redstoner.annotations.Commands;
+import com.redstoner.annotations.Version;
+import com.redstoner.coremods.moduleLoader.ModuleLoader;
+import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.Utils;
+import com.redstoner.modules.CoreModule;
+import com.redstoner.modules.Module;
+import com.redstoner.modules.datamanager.DataManager;
+
+@AutoRegisterListener
+@Commands(CommandHolderType.File)
+@Version(major = 4, minor = 0, revision = 0, compatible = 4)
+public class Friends implements CoreModule
+{
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerJoin(PlayerJoinEvent e)
+ {
+ JSONArray friended_by = (JSONArray) DataManager.getOrDefault(e.getPlayer(), "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!");
+ 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);
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerLeave(PlayerQuitEvent e)
+ {
+ JSONArray friended_by = (JSONArray) DataManager.getOrDefault(e.getPlayer(), "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!");
+ p.playSound(p.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1);
+ }
+ }
+ }
+
+ @SuppressWarnings({"unchecked", "deprecation"})
+ @Command(hook = "add")
+ public boolean add(CommandSender sender, String target)
+ {
+ if (target.equalsIgnoreCase("CONSOLE"))
+ {
+ getLogger().message(sender, true, "You can't add console to your friends!");
+ return true;
+ }
+ 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!");
+ return true;
+ }
+ JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray()));
+ if (friends.contains(p.getUniqueId().toString()))
+ {
+ getLogger().message(sender, true, "You are already friends with this person!");
+ return true;
+ }
+ friends.add(p.getUniqueId().toString());
+ DataManager.save(sender);
+ JSONArray friended_by = ((JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "friended_by",
+ new JSONArray()));
+ friended_by.add(getID(sender));
+ DataManager.save(p.getUniqueId().toString());
+ getLogger().message(sender, "You are now friends with &e" + p.getName() + "&7!");
+ if (p instanceof Player)
+ {
+ getLogger().message((Player) p, "&e" + Utils.getName(sender) + "&7 added you as a friend!");
+ }
+ 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);
+ }
+ return true;
+ }
+
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Command(hook = "add_grouped")
+ public boolean add_grouped(CommandSender sender, String target, String group)
+ {
+ if (target.equalsIgnoreCase("CONSOLE"))
+ {
+ getLogger().message(sender, true, "You can't add console to your friends!");
+ return true;
+ }
+ 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!");
+ return true;
+ }
+ JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray()));
+ if (friends.contains(p.getUniqueId().toString()))
+ {
+ getLogger().message(sender, true, "This person already is part of that friendsgroup!");
+ return true;
+ }
+ friends.add(p.getUniqueId().toString());
+ 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
+ {
+ 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!");
+ DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications);
+ }
+ return true;
+ }
+
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @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!");
+ return true;
+ }
+ 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!");
+ return true;
+ }
+ JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray()));
+ if (friends.contains(p.getUniqueId().toString()))
+ {
+ getLogger().message(sender, true, "You are already friends with this person!");
+ return true;
+ }
+ friends.remove(p.getUniqueId().toString());
+ DataManager.save(sender);
+ JSONArray friended_by = ((JSONArray) DataManager.getOrDefault(p.getUniqueId().toString(), "friended_by",
+ new JSONArray()));
+ friended_by.remove(getID(sender));
+ DataManager.save(p.getUniqueId().toString());
+ getLogger().message(sender, "You are now friends with &e" + p.getName() + "&7!");
+ if (p instanceof Player)
+ {
+ getLogger().message((Player) p, "&e" + Utils.getName(sender) + "&7 added you as a friend!");
+ }
+ 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);
+ }
+ return true;
+ }
+
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Command(hook = "del_grouped")
+ public boolean del_grouped(CommandSender sender, String target, String group)
+ {
+ if (target.equalsIgnoreCase("CONSOLE"))
+ {
+ getLogger().message(sender, true, "You can't add console to your friends!");
+ return true;
+ }
+ 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!");
+ return true;
+ }
+ JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray()));
+ if (friends.contains(p.getUniqueId().toString()))
+ {
+ getLogger().message(sender, true, "This person already is part of that friendsgroup!");
+ return true;
+ }
+ friends.add(p.getUniqueId().toString());
+ 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
+ {
+ 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!");
+ DataManager.setData(p.getUniqueId().toString(), "scheduled_notifications", notifications);
+ }
+ return true;
+ }
+
+ @Command(hook = "list")
+ public boolean list(CommandSender sender)
+ {
+ JSONArray friends = (JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray());
+ if (friends.size() == 0)
+ {
+ getLogger().message(sender, true, "You didn't add anyone to your friendslist 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, ");
+ }
+ String out = sb.toString().replaceAll(", $", "");
+ getLogger().message(sender, "You have a total of &e" + friends.size() + "&7 friends:", out);
+ }
+ return true;
+ }
+
+ @Command(hook = "list_group")
+ public boolean list_group(CommandSender sender, String group)
+ {
+ JSONArray friends = (JSONArray) DataManager.getOrDefault(sender, "group." + group, new JSONArray());
+ 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, ");
+ }
+ String out = sb.toString().replaceAll(", $", "");
+ getLogger().message(sender, "You have a total of &e" + friends.size() + "&7 friends added to this group:", out);
+ }
+ return true;
+ }
+
+ @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.");
+ return true;
+ }
+ else
+ {
+ StringBuilder sb = new StringBuilder();
+ for (Object o : keys)
+ {
+ sb.append("&e" + (String) o + "&7, ");
+ }
+ String out = sb.toString().replaceAll(", $", "");
+ getLogger().message(sender, "", out);
+ }
+ return true;
+ }
+
+ public static boolean isFriend(CommandSender player, CommandSender friend)
+ {
+ return isFriend(player, friend, null);
+ }
+
+ public static boolean isFriend(CommandSender player, CommandSender friend, String condition)
+ {
+ try
+ {
+ Module mod = ModuleLoader.getModule("Friends");
+ Method m = mod.getClass().getDeclaredMethod("isFriend_", String.class);
+ return (boolean) m.invoke(mod, player, friend, condition);
+ }
+ catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
+ | InvocationTargetException e)
+ {}
+ return false;
+ }
+
+ protected boolean isFriend_(CommandSender player, CommandSender friend, String group)
+ {
+ if (group == null)
+ group = "friends";
+ else if (!group.startsWith("group."))
+ group = "group." + group;
+ JSONArray array = (JSONArray) DataManager.getOrDefault(player, group, new JSONArray());
+ return array.contains(getID(friend));
+ }
+
+ private final String getID(CommandSender sender)
+ {
+ if (sender instanceof Player)
+ return ((Player) sender).getUniqueId().toString();
+ else
+ return sender.getName();
+ }
+}