From 8df51360155b4a2febfd01d746c3466f6a62cfbc Mon Sep 17 00:00:00 2001 From: Pepich Date: Tue, 9 May 2017 10:57:34 +0200 Subject: [PATCH] Added message module to replace /msg and /ss --- src/com/redstoner/modules/message/Message.cmd | 58 +++++ .../redstoner/modules/message/Message.java | 219 ++++++++++++++++++ 2 files changed, 277 insertions(+) create mode 100644 src/com/redstoner/modules/message/Message.cmd create mode 100644 src/com/redstoner/modules/message/Message.java diff --git a/src/com/redstoner/modules/message/Message.cmd b/src/com/redstoner/modules/message/Message.cmd new file mode 100644 index 0000000..238b207 --- /dev/null +++ b/src/com/redstoner/modules/message/Message.cmd @@ -0,0 +1,58 @@ +command message { + [string:player] [string:message...] { + run message player message; + help Sends a direct message to a player.; + perm utils.message; + } +} + +command reply { + [string:message...] { + run reply message; + help Sends a direct message to the last person you talked to.; + perm utils.message; + } +} + +command socialspy { + format { + run config_format_default; + help Resets your format back to the default: &e%s; + } + format [string:format...] { + run config_format format; + help Specifies your ss format. Use /socialspy format_help to get info about how the format works.; + } + format_help { + run format_help; + help Displays info about the format command; + } + prefix { + run config_prefix_default; + help Resets your color back to the default (light gray color code); + } + prefix [string:prefix] { + run config_prefix prefix; + help Sets your prefix to the specified term.; + } + stripcolor on { + run stripcolor_on; + } + stripcolor off { + run stripcolor_off; + } + stripcolor { + run stripcolor; + } + on { + run on; + } + off { + run off; + } + [empty] { + run toggle; + } + perm utils.ss; + type player; +} \ No newline at end of file diff --git a/src/com/redstoner/modules/message/Message.java b/src/com/redstoner/modules/message/Message.java new file mode 100644 index 0000000..a5efc51 --- /dev/null +++ b/src/com/redstoner/modules/message/Message.java @@ -0,0 +1,219 @@ +package com.redstoner.modules.message; + +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.nemez.cmdmgr.Command; +import com.nemez.cmdmgr.Command.AsyncType; +import com.nemez.cmdmgr.CommandManager; +import com.redstoner.annotations.Version; +import com.redstoner.misc.Main; +import com.redstoner.misc.Utils; +import com.redstoner.modules.Module; +import com.redstoner.modules.datamanager.DataManager; + +import net.md_5.bungee.api.ChatColor; + +@Version(major = 3, minor = 0, revision = 2, compatible = 3) +public class Message implements Module +{ + HashMap replyTargets = new HashMap(); + + @Override + public void postEnable() + { + CommandManager.registerCommand(getClass().getResourceAsStream("Message.cmd"), this, Main.plugin); + } + + @Command(hook = "message", async = AsyncType.ALWAYS) + public boolean message(CommandSender sender, String target, String message) + { + CommandSender p; + if (target.equalsIgnoreCase("console")) + p = Bukkit.getConsoleSender(); + else + p = Bukkit.getPlayer(target); + if (p == null) + { + Utils.sendErrorMessage(sender, null, "That player couldn't be found!"); + return true; + } + else + { + spyBroadcast(sender, p, message, "/m"); + Utils.sendMessage(sender, "&6[&cme &6-> " + Utils.getName(p) + "&6] ", message, '&'); + Utils.sendMessage(sender, "&6[" + Utils.getName(p) + " &6-> &cme&6] ", message, '&'); + replyTargets.put(sender, p); + replyTargets.put(p, sender); + } + return true; + } + + @Command(hook = "reply", async = AsyncType.ALWAYS) + public boolean reply(CommandSender sender, String message) + { + CommandSender target = replyTargets.get(sender); + if (target == null || ((target instanceof OfflinePlayer) && !((OfflinePlayer) target).isOnline())) + { + Utils.sendErrorMessage(sender, null, "You don't have anyone to reply to!"); + return true; + } + else + { + spyBroadcast(sender, target, message, "/m"); + Utils.sendMessage(sender, "&6[&cme &6-> " + Utils.getName(target) + "&6] ", message, '&'); + Utils.sendMessage(sender, "&6[" + Utils.getName(target) + " &6-> &cme&6] ", message, '&'); + } + return true; + } + + @Command(hook = "config_prefix_default") + public boolean prefixDefault(CommandSender sender) + { + return prefix(sender, getDefaultPrefix()); + } + + @Command(hook = "config_prefix") + public boolean prefix(CommandSender sender, String prefix) + { + Utils.sendMessage(sender, null, "Set your socialspy prefix to: " + prefix, '&'); + DataManager.setData(sender, "prefix", prefix); + return true; + } + + @Command(hook = "config_format_default") + public boolean configFormatDefault(CommandSender sender) + { + return configFormat(sender, getDefaultFormat()); + } + + @Command(hook = "config_format") + public boolean configFormat(CommandSender sender, String format) + { + Utils.sendMessage(sender, null, "Set your socialspy format to: " + format, '&'); + DataManager.setData(sender, "format", format); + return true; + } + + @Command(hook = "stripcolor_on") + public boolean stripcolorOn(CommandSender sender) + { + Utils.sendMessage(sender, null, "Enabled stripping colors!"); + DataManager.setData(sender, "stripcolor", true); + return true; + } + + @Command(hook = "stripcolor_off") + public boolean stripcolorOff(CommandSender sender) + { + Utils.sendMessage(sender, null, "Disabled stripping colors!"); + DataManager.setData(sender, "stripcolor", false); + return true; + } + + @Command(hook = "stripcolor") + public boolean stripcolor(CommandSender sender) + { + boolean b = (boolean) DataManager.getData(sender, "stripcolor"); + Utils.sendMessage(sender, null, (b ? "Disabled" : "Enabled") + " stripping colors!"); + DataManager.setData(sender, "stripcolor", !b); + return true; + } + + @Command(hook = "on") + public boolean spyOn(CommandSender sender) + { + Utils.sendMessage(sender, null, "Enabled spy!"); + DataManager.setData(sender, "enabled", true); + return true; + } + + @Command(hook = "off") + public boolean spyOff(CommandSender sender) + { + Utils.sendMessage(sender, null, "Disabled spy!"); + DataManager.setData(sender, "enabled", false); + return true; + } + + @Command(hook = "toggle") + public boolean spyToggle(CommandSender sender) + { + boolean b = (boolean) DataManager.getOrDefault(sender, "enabled", false); + Utils.sendMessage(sender, null, (b ? "Disabled" : "Enabled") + " socialspy!"); + DataManager.setData(sender, "enabled", !b); + return true; + } + + @Command(hook = "format_help") + public boolean formatInfo(CommandSender sender) + { + Utils.sendModuleHeader(sender, "Socialspy"); + Utils.sendMessage(sender, "", " Format placeholders:"); + Utils.sendMessage(sender, "", " &c%s&eender &7(display name) | &c%S&eender &7(real name)", '&'); + Utils.sendMessage(sender, "", " &c%t&earget &7(display name) | &c%T&earget &7(real name)", '&'); + Utils.sendMessage(sender, "", " &p%s&erefix &7(see prefix option)", '&'); + Utils.sendMessage(sender, "", " &m%s&eessage", '&'); + Utils.sendMessage(sender, "", " &c%s&eommand", '&'); + Utils.sendMessage(sender, "", " Any other text will be put as literal text. Use %% to escape any %.", '&'); + Utils.sendMessage(sender, "", " The default format is: '§e" + getDefaultFormat()); + Utils.sendMessage(sender, "", " The default prefix is: '§e" + getDefaultPrefix()); + return true; + } + + public void spyBroadcast(CommandSender sender, CommandSender target, String message, String command) + { + for (Player p : Bukkit.getOnlinePlayers()) + { + if ((boolean) DataManager.getOrDefault(p, "enabled", false)) + if (sender.hasPermission("utils.socialspy")) + { + if (p.equals(sender) || p.equals(target)) + continue; + Utils.sendMessage(sender, "", formatMessage(sender, target, message, command)); + } + else + DataManager.setData(sender, "enabled", false); + } + } + + private String formatMessage(CommandSender sender, CommandSender target, String message, String command) + { + if ((boolean) DataManager.getOrDefault(sender, "stripcolor", false)) + message = ChatColor.stripColor(message); + String format = (String) DataManager.getOrDefault(sender, "format", getDefaultFormat()); + // Replace escaped % with placeholder + format = format.replace("%%", "§§"); + // Sender name + format = format.replace("%s", Utils.getName(sender)); + format = format.replace("%S", sender.getName()); + // Target name + format = format.replace("%t", Utils.getName(target)); + format = format.replace("%T", target.getName()); + // Prefix + String prefix = (String) DataManager.getOrDefault(sender, "prefix", getDefaultPrefix()); + format = format.replace("%p", prefix); + // Apply colors to halfway replaced String + format = ChatColor.translateAlternateColorCodes('&', format); + // Insert command and message + format = format.replace("%c", command); + format = format.replace("%c", command); + // Convert placeholder back + format = format.replace("§§", "%%"); + return format; + } + + private static final String getDefaultFormat() + { + return "%s &7to %t %p: %m"; + } + + private static final String getDefaultPrefix() + { + return "&7"; + } +}