diff --git a/src/com/redstoner/modules/friends/Friends.cmd b/src/com/redstoner/modules/friends/Friends.cmd new file mode 100644 index 0000000..ea205c9 --- /dev/null +++ b/src/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/com/redstoner/modules/friends/Friends.java b/src/com/redstoner/modules/friends/Friends.java new file mode 100644 index 0000000..13422ef --- /dev/null +++ b/src/com/redstoner/modules/friends/Friends.java @@ -0,0 +1,371 @@ +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.nemez.cmdmgr.CommandManager; +import com.redstoner.annotations.AutoRegisterListener; +import com.redstoner.annotations.Version; +import com.redstoner.coremods.moduleLoader.ModuleLoader; +import com.redstoner.misc.Main; +import com.redstoner.misc.Utils; +import com.redstoner.modules.CoreModule; +import com.redstoner.modules.Module; +import com.redstoner.modules.datamanager.DataManager; + +@AutoRegisterListener +@Version(major = 3, minor = 0, revision = 1, compatible = 3) +public class Friends implements CoreModule +{ + @Override + public void postEnable() + { + CommandManager.registerCommand(getClass().getResourceAsStream("Friends.cmd"), this, Main.plugin); + } + + @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())) + { + Utils.sendMessage(p, null, "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) + Utils.sendMessage(e.getPlayer(), null, (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())) + { + Utils.sendMessage(p, null, "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")) + { + Utils.sendErrorMessage(sender, null, "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) + { + Utils.sendErrorMessage(sender, null, "That player couldn't be found!"); + return true; + } + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray())); + if (friends.contains(p.getUniqueId().toString())) + { + Utils.sendErrorMessage(sender, null, "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()); + Utils.sendMessage(sender, null, "You are now friends with &e" + p.getName() + "&7!", '&'); + if (p instanceof Player) + { + Utils.sendMessage((Player) p, null, "&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")) + { + Utils.sendErrorMessage(sender, null, "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) + { + Utils.sendErrorMessage(sender, null, "That player couldn't be found!"); + return true; + } + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray())); + if (friends.contains(p.getUniqueId().toString())) + { + Utils.sendErrorMessage(sender, null, "This person already is part of that friendsgroup!"); + return true; + } + friends.add(p.getUniqueId().toString()); + DataManager.save(sender); + Utils.sendMessage(sender, null, "&e" + p.getName() + "&7 is now part of the group &e" + group + "&7!", '&'); + if (p instanceof Player) + { + Utils.sendMessage((Player) p, null, + "&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")) + { + Utils.sendErrorMessage(sender, null, "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) + { + Utils.sendErrorMessage(sender, null, "That player couldn't be found!"); + return true; + } + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "friends", new JSONArray())); + if (friends.contains(p.getUniqueId().toString())) + { + Utils.sendErrorMessage(sender, null, "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()); + Utils.sendMessage(sender, null, "You are now friends with &e" + p.getName() + "&7!", '&'); + if (p instanceof Player) + { + Utils.sendMessage((Player) p, null, "&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")) + { + Utils.sendErrorMessage(sender, null, "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) + { + Utils.sendErrorMessage(sender, null, "That player couldn't be found!"); + return true; + } + JSONArray friends = ((JSONArray) DataManager.getOrDefault(sender, "groups." + group, new JSONArray())); + if (friends.contains(p.getUniqueId().toString())) + { + Utils.sendErrorMessage(sender, null, "This person already is part of that friendsgroup!"); + return true; + } + friends.add(p.getUniqueId().toString()); + DataManager.save(sender); + Utils.sendMessage(sender, null, "&e" + p.getName() + "&7 is now part of the group &e" + group + "&7!", '&'); + if (p instanceof Player) + { + Utils.sendMessage((Player) p, null, + "&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) + { + Utils.sendErrorMessage(sender, null, "You didn't add anyone to your friendslist yet."); + } + else + { + Utils.sendModuleHeader(sender); + Utils.sendMessage(sender, "", "You have a total of &e" + friends.size() + "&7 friends:", '&'); + 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(", $", ""); + Utils.sendMessage(sender, "", 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) + { + Utils.sendErrorMessage(sender, null, "You didn't add anyone to this group yet."); + } + else + { + Utils.sendModuleHeader(sender); + Utils.sendMessage(sender, "", "You have a total of &e" + friends.size() + "&7 friends added to this group:", + '&'); + 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(", $", ""); + Utils.sendMessage(sender, "", 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)) + { + Utils.sendErrorMessage(sender, null, "You don't have any custom groups made yet."); + return true; + } + else + { + Utils.sendModuleHeader(sender); + StringBuilder sb = new StringBuilder(); + for (Object o : keys) + { + sb.append("&e" + (String) o + "&7, "); + } + String out = sb.toString().replaceAll(", $", ""); + Utils.sendMessage(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(); + } +} diff --git a/src/com/redstoner/modules/iplock/IPLock.java b/src/com/redstoner/modules/iplock/IPLock.java new file mode 100644 index 0000000..671f878 --- /dev/null +++ b/src/com/redstoner/modules/iplock/IPLock.java @@ -0,0 +1,26 @@ +package com.redstoner.modules.iplock; + +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; +import org.json.simple.JSONObject; + +import com.redstoner.annotations.Version; +import com.redstoner.modules.Module; + +@Version(major = 3, minor = 0, revision = 0, compatible = 3) +public class IPLock implements Module, Listener +{ + JSONObject iplocks; + + @Override + public void postEnable() + {} + + public void onPlayerJoin(AsyncPlayerPreLoginEvent event) + { + event.getAddress().getHostAddress().toString(); + event.setKickMessage(""); + event.setLoginResult(Result.KICK_OTHER); + } +} diff --git a/src/com/redstoner/modules/teleport/Teleport.cmd b/src/com/redstoner/modules/teleport/Teleport.cmd new file mode 100644 index 0000000..38adc53 --- /dev/null +++ b/src/com/redstoner/modules/teleport/Teleport.cmd @@ -0,0 +1,5 @@ +command teleport { + alias tp; + alias to; + +} \ No newline at end of file diff --git a/src/com/redstoner/modules/teleport/Teleport.java b/src/com/redstoner/modules/teleport/Teleport.java new file mode 100644 index 0000000..f979af5 --- /dev/null +++ b/src/com/redstoner/modules/teleport/Teleport.java @@ -0,0 +1,12 @@ +package com.redstoner.modules.teleport; + +import com.redstoner.annotations.Version; +import com.redstoner.modules.Module; + +@Version(major = 3, minor = 0, revision = 0, compatible = 3) +public class Teleport implements Module +{ + @Override + public void postEnable() + {} +} diff --git a/src/com/redstoner/utils/Susender.java b/src/com/redstoner/utils/Susender.java new file mode 100644 index 0000000..7564913 --- /dev/null +++ b/src/com/redstoner/utils/Susender.java @@ -0,0 +1,158 @@ +package com.redstoner.utils; + +import java.util.Set; + +import org.bukkit.Server; +import org.bukkit.command.CommandSender; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; +import org.bukkit.plugin.Plugin; + +import com.redstoner.annotations.Version; + +@Version(major = 3, minor = 0, revision = 0, compatible = 3) +public class Susender implements CommandSender +{ + final CommandSender sender; + CommandSender permission; + CommandSender output; + + public Susender(CommandSender sender, CommandSender permissionHolder, CommandSender outputTarget) + { + this.sender = sender; + this.permission = permissionHolder; + this.output = outputTarget; + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0) + { + return sender.addAttachment(arg0); + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, int arg1) + { + return sender.addAttachment(arg0, arg1); + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, String arg1, boolean arg2) + { + return sender.addAttachment(arg0, arg1, arg2); + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, String arg1, boolean arg2, int arg3) + { + return sender.addAttachment(arg0, arg1, arg2, arg3); + } + + @Override + public Set getEffectivePermissions() + { + if (permission == null) + return sender.getEffectivePermissions(); + return permission.getEffectivePermissions(); + } + + @Override + public boolean hasPermission(String arg0) + { + if (permission == null) + return sender.hasPermission(arg0); + return permission.hasPermission(arg0); + } + + @Override + public boolean hasPermission(Permission arg0) + { + if (permission == null) + return sender.hasPermission(arg0); + return permission.hasPermission(arg0); + } + + @Override + public boolean isPermissionSet(String arg0) + { + if (permission == null) + return sender.isPermissionSet(arg0); + return permission.isPermissionSet(arg0); + } + + @Override + public boolean isPermissionSet(Permission arg0) + { + if (permission == null) + return sender.isPermissionSet(arg0); + return permission.isPermissionSet(arg0); + } + + @Override + public void recalculatePermissions() + { + if (permission == null) + sender.recalculatePermissions(); + else + permission.recalculatePermissions(); + } + + @Override + public void removeAttachment(PermissionAttachment arg0) + { + sender.removeAttachment(arg0); + } + + @Override + public boolean isOp() + { + return permission.isOp(); + } + + @Override + public void setOp(boolean arg0) + { + sender.setOp(arg0); + } + + @Override + public String getName() + { + return sender.getName(); + } + + @Override + public Server getServer() + { + return sender.getServer(); + } + + @Override + public void sendMessage(String arg0) + { + if (output == null) + sender.sendMessage(arg0); + else + output.sendMessage(arg0); + } + + @Override + public void sendMessage(String[] arg0) + { + if (output == null) + sender.sendMessage(arg0); + else + output.sendMessage(arg0); + } + + public void setOutputTarget(CommandSender outputTarget) + { + output = outputTarget; + } + + public void setPermissionHolder(CommandSender permissionHolder) + { + permission = permissionHolder; + } +}