diff --git a/src/com/redstoner/modules/afk/AFK.java b/src/com/redstoner/modules/afk/AFK.java index 393c487..66cd506 100644 --- a/src/com/redstoner/modules/afk/AFK.java +++ b/src/com/redstoner/modules/afk/AFK.java @@ -30,10 +30,10 @@ import com.redstoner.modules.datamanager.DataManager; @Commands(CommandHolderType.File) @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 4, compatible = 4) +@Version(major = 4, minor = 0, revision = 5, compatible = 5) public class AFK implements Module, Listener { - private CustomListener listener = new CustomListener(); + private CustomListener listener; boolean move = true, look = false; @Override @@ -43,7 +43,7 @@ public class AFK implements Module, Listener DataManager.setConfig("indicator", "&7[AFK]"); String[] choices = new String[] {"listen", "ignore"}; DataManager.setConfig("move", "listen", choices); - DataManager.setConfig("look", "listen", choices); + DataManager.setConfig("look", "ignore", choices); DataManager.setConfig("chat", "listen", choices); DataManager.setConfig("interact", "listen", choices); DataManager.setConfig("command", "ignore", choices); @@ -53,10 +53,10 @@ public class AFK implements Module, Listener public void migrate(Version old) { Module.super.migrate(old); - if ((old.major() == 4) && (old.minor() == 0) && (old.revision()) == 3) + if ((old.major() == 4) && (old.minor() == 0) && (old.revision() == 3)) { String[] choices = new String[] {"listen", "ignore"}; - DataManager.setConfig("look", "listen", choices); + DataManager.setConfig("look", "ignore", choices); } } @@ -64,6 +64,7 @@ public class AFK implements Module, Listener public void postEnable() { Module.super.postEnable(); + listener = new CustomListener(); update_afk_listeners(Bukkit.getConsoleSender()); } diff --git a/src/com/redstoner/modules/buildchat/BuildChat.java b/src/com/redstoner/modules/buildchat/BuildChat.java index 8e74bf7..c83b700 100644 --- a/src/com/redstoner/modules/buildchat/BuildChat.java +++ b/src/com/redstoner/modules/buildchat/BuildChat.java @@ -28,7 +28,7 @@ import com.redstoner.modules.Module; * @author Pepich */ @Commands(CommandHolderType.String) @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 0, compatible = 4) +@Version(major = 4, minor = 0, revision = 1, compatible = 4) public class BuildChat implements Module, Listener { private static final char defaultKey = ';'; @@ -45,7 +45,7 @@ public class BuildChat implements Module, Listener keys = new JSONObject(); saveKeys(); } - bctoggled = new ArrayList(); + bctoggled = new ArrayList<>(); return true; } @@ -176,7 +176,7 @@ public class BuildChat implements Module, Listener @Command(hook = "bct_off") public boolean bcToggleOffCommand(CommandSender sender) { - if (bctoggled.remove(((Player) sender).getUniqueId().toString())) + if (bctoggled.remove(((Player) sender).getUniqueId())) getLogger().message(sender, "BCT now §cdisabled"); else getLogger().message(sender, "BCT was already disabled"); diff --git a/src/com/redstoner/modules/chat/Chat.cmd b/src/com/redstoner/modules/chat/Chat.cmd new file mode 100644 index 0000000..180339f --- /dev/null +++ b/src/com/redstoner/modules/chat/Chat.cmd @@ -0,0 +1,53 @@ +command me { + perm utils.me; + [string:text...] { + help /me's in chat.; + run me text; + } +} +command chat { + alias speak; + [string:message...] { + perm utils.chat; + run chat message; + help A way to speak in normal chat with normal formatting if you have ACT or CGT on.; + } +} +command shrug { + [string:message...] { + perm utils.shrug; + run shrug message; + help Appends the shrug emoticon to the end of your message.; + } +} +command say { + [string:message...] { + perm utils.say; + run say message; + help A replacement for the default say command to make the format be more consistant.; + } +} +command sayn { + [string:name] [string:message...] { + perm utils.sayn; + type console; + run sayn name message; + help A replacement for the default say command to make the format be more consistant.; + } +} + +command mute { + [string:player] { + perm utils.chat.admin; + run mute player; + help Mutes a player.; + } +} + +command unmute { + [string:player] { + perm utils.chat.admin; + run unmute player; + help Unmutes a player.; + } +} \ No newline at end of file diff --git a/src/com/redstoner/modules/chat/Chat.java b/src/com/redstoner/modules/chat/Chat.java new file mode 100644 index 0000000..699bac3 --- /dev/null +++ b/src/com/redstoner/modules/chat/Chat.java @@ -0,0 +1,136 @@ +package com.redstoner.modules.chat; + +import org.bukkit.Bukkit; +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.AsyncPlayerChatEvent; + +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.Module; +import com.redstoner.modules.datamanager.DataManager; +import com.redstoner.modules.ignore.Ignore; + +@Commands(CommandHolderType.File) +@AutoRegisterListener +@Version(major = 4, minor = 0, revision = 1, compatible = 4) +public class Chat implements Module, Listener +{ + + @Override + public void firstLoad() + { + Module.super.firstLoad(); + DataManager.setConfig("chat", " %n §7→§r %m"); + DataManager.setConfig("me", " §7- %n §7⇦ %m"); + DataManager.setConfig("say", " §7[§9%n§7]:§r %m"); + DataManager.setConfig("shrug", " %n §7→§r %m ¯\\_(ツ)_/¯"); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerChat(AsyncPlayerChatEvent event) + { + Player player = event.getPlayer(); + String message = event.getMessage(); + event.setCancelled(true); + broadcastFormatted("chat", player, message); + } + + @Command(hook = "me") + public boolean me(CommandSender sender, String message) + { + broadcastFormatted("me", sender, message); + return true; + } + + @Command(hook = "chat") + public boolean chat(CommandSender sender, String message) + { + broadcastFormatted("chat", sender, message); + return true; + } + + @Command(hook = "say") + public boolean say(CommandSender sender, String message) + { + String name; + if (sender instanceof Player) + name = ((Player) sender).getName(); + else + name = "§9CONSOLE"; + broadcastFormatted("say", sender, message, name); + return true; + } + + @Command(hook = "sayn") + public boolean say(CommandSender sender, String name, String message) + { + broadcastFormatted("say", sender, message, name); + return true; + } + + @Command(hook = "shrug") + public boolean shrug(CommandSender sender, String message) + { + broadcastFormatted("shrug", sender, message); + return true; + } + + @Command(hook = "mute") + public boolean mute(CommandSender sender, String player) + { + Player p = Bukkit.getPlayer(player); + if (p == null) + { + getLogger().message(sender, true, "That player couldn't be found!"); + return true; + } + DataManager.setData(p, "muted", true); + getLogger().message(sender, "Muted player &e" + Utils.getName(p) + "&7!"); + getLogger().message(p, "You have been &cmuted&7!"); + return true; + } + + @Command(hook = "unmute") + public boolean unmute(CommandSender sender, String player) + { + Player p = Bukkit.getPlayer(player); + if (p == null) + { + getLogger().message(sender, true, "That player couldn't be found!"); + return true; + } + DataManager.setData(p, "muted", false); + getLogger().message(sender, "Unmuted player &e" + Utils.getName(p) + "&7!"); + getLogger().message(p, "You have been &aunmuted&7!"); + return true; + } + + public boolean broadcastFormatted(String format, CommandSender sender, String message) + { + return broadcastFormatted(format, sender, message, Utils.getName(sender)); + } + + public boolean broadcastFormatted(String format, CommandSender sender, String message, String name) + { + if ((boolean) DataManager.getOrDefault(sender, "muted", false)) + { + Utils.noPerm(sender, "You have been muted!"); + getLogger().info(" &7User &e" + Utils.getName(sender) + " &7tried to &e" + format + " &7(&e" + message + + "&7) while being &cmuted&7."); + return false; + } + String raw = (String) DataManager.getConfigOrDefault(format, " %n §7→§r %m"); + String formatted = raw.replace("%n", name).replace("%m", message); + Utils.broadcast("", formatted, ModuleLoader.exists("Ignore") ? Ignore.getIgnoredBy(sender) : null); + return true; + } +} diff --git a/src/com/redstoner/modules/chatalias/Chatalias.java b/src/com/redstoner/modules/chatalias/Chatalias.java index a8124e1..5a6baa9 100644 --- a/src/com/redstoner/modules/chatalias/Chatalias.java +++ b/src/com/redstoner/modules/chatalias/Chatalias.java @@ -32,11 +32,11 @@ import net.nemez.chatapi.ChatAPI; @Commands(CommandHolderType.String) @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 1, compatible = 4) +@Version(major = 4, minor = 0, revision = 2, compatible = 4) public class Chatalias implements Module, Listener { private final String[] commands = new String[] {"e?r", "e?m .+?", "e?t", "e?w", "e?msg .+?", "e?message .+?", - "e?whisper .+?", "e?me", "cgsay", "ac", "bc"}; + "e?whisper .+?", "e?me", "cgsay", "ac", "bc, say, sayn .+?, chat, shrug"}; private JSONObject aliases = new JSONObject(); @Override diff --git a/src/com/redstoner/modules/chatgroups/Chatgroups.java b/src/com/redstoner/modules/chatgroups/Chatgroups.java index 05c39e8..44a53bd 100644 --- a/src/com/redstoner/modules/chatgroups/Chatgroups.java +++ b/src/com/redstoner/modules/chatgroups/Chatgroups.java @@ -24,6 +24,7 @@ import com.redstoner.misc.JsonManager; import com.redstoner.misc.Main; import com.redstoner.misc.Utils; import com.redstoner.modules.Module; +import com.redstoner.modules.ignore.Ignore; import com.redstoner.modules.socialspy.Socialspy; import net.nemez.chatapi.ChatAPI; @@ -33,7 +34,7 @@ import net.nemez.chatapi.ChatAPI; * @author Pepich */ @Commands(CommandHolderType.String) @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 1, compatible = 4) +@Version(major = 4, minor = 0, revision = 2, compatible = 4) public class Chatgroups implements Module, Listener { private static final char defaultKey = ':'; @@ -358,13 +359,16 @@ public class Chatgroups implements Module, Listener String name = Utils.getName(sender); String group = getGroup(sender); message = ChatAPI.colorify(null, message); + + BroadcastFilter ignore = ModuleLoader.exists("Ignore")? Ignore.getIgnoredBy(sender) : null; Utils.broadcast("§8[§bCG§8] §9", name + "§8: §6" + message, new BroadcastFilter() { @Override public boolean sendTo(CommandSender recipient) { + String rgroup = getGroup(recipient); - if (rgroup != null) + if ( rgroup != null && (ignore == null? true : ignore.sendTo(recipient)) ) return rgroup.equals(group); else return false; diff --git a/src/com/redstoner/modules/datamanager/DataManager.cmd b/src/com/redstoner/modules/datamanager/DataManager.cmd index 387e2ef..559e6ca 100644 --- a/src/com/redstoner/modules/datamanager/DataManager.cmd +++ b/src/com/redstoner/modules/datamanager/DataManager.cmd @@ -31,8 +31,4 @@ command config { type console; help Deletes all config settings of a given module.; } - remove [string:module] [string:key] { - run remove module key; - help Deletes the specified config setting; - } } \ No newline at end of file diff --git a/src/com/redstoner/modules/datamanager/DataManager.java b/src/com/redstoner/modules/datamanager/DataManager.java index 92485d2..e4b8773 100644 --- a/src/com/redstoner/modules/datamanager/DataManager.java +++ b/src/com/redstoner/modules/datamanager/DataManager.java @@ -36,7 +36,7 @@ import com.redstoner.modules.Module; @Commands(CommandHolderType.Stream) @AutoRegisterListener -@Version(major = 4, minor = 1, revision = 4, compatible = 4) +@Version(major = 4, minor = 1, revision = 5, compatible = 4) public final class DataManager implements CoreModule, Listener { protected final File dataFolder = new File(Main.plugin.getDataFolder(), "data"); @@ -651,7 +651,7 @@ public final class DataManager implements CoreModule, Listener if (prefix == null || prefix.equals("")) return list; for (String s : list) - if (s.startsWith(prefix)) + if (s.toLowerCase().startsWith(prefix.toLowerCase())) subset.add(s); return subset; } @@ -675,7 +675,6 @@ public final class DataManager implements CoreModule, Listener case "list": case "get": case "set": - case "remove": { event.setCompletions( subsetWhereStartsWith(module_index, arguments.length == 3 ? arguments[2] : "")); @@ -689,7 +688,6 @@ public final class DataManager implements CoreModule, Listener { case "get": case "set": - case "remove": { Object o = config_data.get(arguments[2]); if (o == null) @@ -771,16 +769,6 @@ public final class DataManager implements CoreModule, Listener return true; } - @Command(hook = "remove") - public boolean remove(CommandSender sender, String module, String key) - { - if (removeConfig_(module, key)) - getLogger().message(sender, "Successfully deleted the config entry §e" + module + "." + key + "§7!"); - else - getLogger().message(sender, true, "Could not delete the config entry §e" + module + "." + key + "§7!"); - return true; - } - @Command(hook = "remove_all") public boolean remove_all(CommandSender sender, String module) { diff --git a/src/com/redstoner/modules/ignore/Ignore.cmd b/src/com/redstoner/modules/ignore/Ignore.cmd new file mode 100644 index 0000000..382846b --- /dev/null +++ b/src/com/redstoner/modules/ignore/Ignore.cmd @@ -0,0 +1,22 @@ +command ignore { + [string:player] { + perm utils.ignore; + run ignore player; + type player; + help Ignores or Unignores a player.; + } + [empty] { + perm utils.ignore; + run list; + type player; + help Lists everyone you ignore.; + } +} +command unignore { + [string:player] { + perm utils.ignore; + run unignore player; + type player; + help Unignore a player.; + } +} \ No newline at end of file diff --git a/src/com/redstoner/modules/ignore/Ignore.java b/src/com/redstoner/modules/ignore/Ignore.java new file mode 100644 index 0000000..a77ca96 --- /dev/null +++ b/src/com/redstoner/modules/ignore/Ignore.java @@ -0,0 +1,159 @@ +package com.redstoner.modules.ignore; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.json.simple.JSONArray; + +import com.nemez.cmdmgr.Command; +import com.nemez.cmdmgr.Command.AsyncType; +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.BroadcastFilter; +import com.redstoner.misc.CommandHolderType; +import com.redstoner.misc.Utils; +import com.redstoner.modules.Module; +import com.redstoner.modules.datamanager.DataManager; + +import net.nemez.chatapi.click.Message; + +@Commands(CommandHolderType.File) +@AutoRegisterListener +@Version(major = 4, minor = 0, revision = 0, compatible = 4) +public class Ignore implements Module +{ + + @Command(hook = "unignore", async = AsyncType.ALWAYS) + public boolean unignore(CommandSender sender, String player) + { + return ignore(sender, player, false); + } + + @Command(hook = "ignore", async = AsyncType.ALWAYS) + public boolean ignore(CommandSender sender, String player) + { + return ignore(sender, player, true); + } + + @Command(hook = "list", async = AsyncType.ALWAYS) + public boolean list(CommandSender sender) + { + getLogger().message(sender, "§7You are currently ignoring:"); + + JSONArray ignores = (JSONArray) DataManager.getOrDefault(sender, "ignores", new JSONArray()); + + if (ignores.isEmpty()) + { + new Message(sender, null).appendText(" §7Nobody \\o/").send(); + return true; + } + + String players; + OfflinePlayer pi = Bukkit.getOfflinePlayer(UUID.fromString((String) ignores.get(0))); + players = " §3" + pi.getName() + "§7"; + + for (int i = 1; i < ignores.size(); i++) + { + OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString((String) ignores.get(i))); + players += ", §3" + p.getName() + "§7"; + } + + Message m = new Message(sender, null); + m.appendText(players); + m.send(); + return true; + } + + @SuppressWarnings({"unchecked", "deprecation"}) + public boolean ignore(CommandSender sender, String player, boolean allowIgnore) + { + JSONArray ignores = (JSONArray) DataManager.getOrDefault(sender, "ignores", new JSONArray()); + + Player p = Utils.isUUID(player) ? Bukkit.getPlayer(UUID.fromString(player)) : Bukkit.getPlayer(player); + + OfflinePlayer op = Utils.isUUID(player) ? Bukkit.getOfflinePlayer(UUID.fromString(player)) + : Bukkit.getOfflinePlayer(player); + + String pName = p != null ? p.getDisplayName() : op.getName(); + String pUUID = p != null ? p.getUniqueId().toString() : op.getUniqueId().toString(); + String sUUID = ((Player) sender).getUniqueId().toString(); + + if (pUUID.equals(sUUID)) + { + getLogger().message(sender, true, "§7You can't ignore yourself :P"); + return true; + } + + if (ignores.contains(pUUID)) + { + ignores.remove(pUUID); + getLogger().message(sender, "§7You are no longer ignoring §3" + pName + "§7."); + } + else if (!allowIgnore) + { + getLogger().message(sender, "§7You weren't ignoring §3" + pName + "§7."); + } + else + { + ignores.add(pUUID); + getLogger().message(sender, "§7You are now ignoring §3" + pName + "§7."); + } + DataManager.setData(sender, "ignores", ignores); + return true; + + } + + public static BroadcastFilter getIgnoredBy(CommandSender sender) + { + try + { + Module mod = ModuleLoader.getModule("Ignore"); + Method m = mod.getClass().getDeclaredMethod("_getIgnoredBy", CommandSender.class); + m.setAccessible(true); + return (BroadcastFilter) m.invoke(mod, sender); + } + catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException + | InvocationTargetException e) + {} + return null; + } + + @SuppressWarnings("unused") + private BroadcastFilter _getIgnoredBy(CommandSender sender) + { + return new BroadcastFilter() + { + + private final String sUUID = sender instanceof Player ? ((Player) sender).getUniqueId().toString() + : "CONSOLE"; + + @Override + public boolean sendTo(CommandSender recipient) + { + if (sUUID.equals("CONSOLE")) + return true; + + if (recipient instanceof Player) + { + Player player = (Player) recipient; + + if (player.hasPermission("utils.ignore.override")) + return true; + + JSONArray ignores = (JSONArray) DataManager.getOrDefault(recipient, "ignores", new JSONArray()); + return !ignores.contains(sUUID); + } + else + return true; + } + }; + } + +} diff --git a/src/com/redstoner/modules/illumination/Illumination.java b/src/com/redstoner/modules/illumination/Illumination.java deleted file mode 100644 index a6f1337..0000000 --- a/src/com/redstoner/modules/illumination/Illumination.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.redstoner.modules.illumination; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import com.nemez.cmdmgr.Command; -import com.redstoner.annotations.Commands; -import com.redstoner.annotations.Version; -import com.redstoner.misc.CommandHolderType; -import com.redstoner.modules.Module; - -@Commands(CommandHolderType.String) -@Version(major = 4, minor = 0, revision = 0, compatible = 4) -public class Illumination implements Module -{ - PotionEffect effect = new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0, false, false); - - @Command(hook = "illuminate") - public void illuminate(CommandSender sender) - { - Player player = (Player) sender; - if (player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) - { - player.removePotionEffect(PotionEffectType.NIGHT_VISION); - getLogger().message(sender, "Night Vision Disabled."); - } - else - { - player.addPotionEffect(effect, true); - getLogger().message(sender, "Night Vision Enabled."); - } - } - - // @noformat - @Override - public String getCommandString() - { - return "command nightvision {\n" + - " [empty] {\n" + - " run illuminate;\n" + - " type player;\n" + - " help Gives the player infinte night vision;\n" + - " perm utils.illuminate;\n" + - " }\n" + - "}"; - } - // @format -} diff --git a/src/com/redstoner/modules/logs/LogHandler.java b/src/com/redstoner/modules/logs/LogHandler.java index b7d7c9d..76f3849 100644 --- a/src/com/redstoner/modules/logs/LogHandler.java +++ b/src/com/redstoner/modules/logs/LogHandler.java @@ -8,6 +8,8 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import java.util.zip.GZIPInputStream; import org.bukkit.command.CommandSender; @@ -61,17 +63,24 @@ public class LogHandler extends Thread regex = "^.*" + regex; if (!regex.endsWith("$")) regex += ".*$"; - boolean singleFile = true; - if (fileName.contains("*")) - singleFile = false; File logFolder = Logs.getLogsDir(); + Pattern fileNamePattern; + try + { + fileNamePattern = Pattern.compile(fileName); + } + catch (PatternSyntaxException e) + { + Logs.logger.message(sender, true, "An error occured trying to compile the filename pattern!"); + stillSearching.remove(sender); + return; + } File[] files = logFolder.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.matches(fileName); + return fileNamePattern.matcher(name).matches(); } }); totalFiles = files.length; @@ -85,6 +94,17 @@ public class LogHandler extends Thread Logs.logger.message(sender, "A total of &e" + totalFiles + "&7 files will be searched!"); boolean progress = (boolean) DataManager.getOrDefault(Utils.getID(sender), "Logs", "progress", true); + Pattern searchPattern; + try + { + searchPattern = Pattern.compile(regex); + } + catch (PatternSyntaxException e) + { + Logs.logger.message(sender, true, "An error occured trying to compile the search pattern!"); + stillSearching.remove(sender); + return; + } for (File file : files) { if (file.getName().endsWith(".gz")) @@ -92,13 +112,13 @@ public class LogHandler extends Thread BufferedReader inputReader = new BufferedReader( new InputStreamReader(new GZIPInputStream(new FileInputStream(file)))); - matches += searchStream(inputReader, regex, sender, singleFile, file.getName()); + matches += searchStream(inputReader, searchPattern, sender, file.getName()); inputReader.close(); } else { BufferedReader inputReader = new BufferedReader(new FileReader(file)); - matches += searchStream(inputReader, regex, sender, singleFile, file.getName()); + matches += searchStream(inputReader, searchPattern, sender, file.getName()); inputReader.close(); } filesSearched++; @@ -137,8 +157,8 @@ public class LogHandler extends Thread * @param filename the name of the file that is currently being searched * @return how many matches it found * @throws IOException if something goes wrong */ - private int searchStream(BufferedReader inputReader, String regex, CommandSender sender, boolean singleFile, - String filename) throws IOException + private int searchStream(BufferedReader inputReader, Pattern searchPattern, CommandSender sender, String filename) + throws IOException { String format = (String) DataManager.getOrDefault(Utils.getID(sender), "Logs", "format", Logs.defaultFormat); boolean colors = (boolean) DataManager.getOrDefault(Utils.getID(sender), "Logs", "colors", true); @@ -152,7 +172,7 @@ public class LogHandler extends Thread { totalLines++; currentLine++; - if (line.matches(regex)) + if (searchPattern.matcher(line).matches()) { if (((p != null) && (!p.isOnline()))) { diff --git a/src/com/redstoner/modules/logs/Logs.java b/src/com/redstoner/modules/logs/Logs.java index bfa96bc..b54bfc9 100644 --- a/src/com/redstoner/modules/logs/Logs.java +++ b/src/com/redstoner/modules/logs/Logs.java @@ -15,7 +15,7 @@ import com.redstoner.modules.ModuleLogger; import com.redstoner.modules.datamanager.DataManager; @Commands(CommandHolderType.File) -@Version(major = 4, minor = 0, revision = 2, compatible = 4) +@Version(major = 4, minor = 0, revision = 4, compatible = 4) public class Logs implements Module { public static final String defaultFormat = "§7 > %f: %r"; diff --git a/src/com/redstoner/modules/message/Message.cmd b/src/com/redstoner/modules/message/Message.cmd index a36918b..382e52e 100644 --- a/src/com/redstoner/modules/message/Message.cmd +++ b/src/com/redstoner/modules/message/Message.cmd @@ -27,4 +27,17 @@ command reply { help Sends a direct message to the last person you talked to.; perm utils.message; } +} + +command pmtoggle { + [empty] { + help Turns off your toggle.; + type player; + run pmtoggle_off; + } + [string:player] { + help Turns on your pmtoggle and locks onto .; + type player; + run pmtoggle 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 index 349c16a..ee9da0e 100644 --- a/src/com/redstoner/modules/message/Message.java +++ b/src/com/redstoner/modules/message/Message.java @@ -1,10 +1,15 @@ package com.redstoner.modules.message; import java.util.HashMap; +import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerQuitEvent; import com.nemez.cmdmgr.Command; import com.nemez.cmdmgr.Command.AsyncType; @@ -16,13 +21,15 @@ import com.redstoner.misc.CommandHolderType; import com.redstoner.misc.Utils; import com.redstoner.modules.Module; import com.redstoner.modules.datamanager.DataManager; +import com.redstoner.modules.ignore.Ignore; import com.redstoner.modules.socialspy.Socialspy; @Commands(CommandHolderType.File) -@Version(major = 4, minor = 0, revision = 1, compatible = 4) +@Version(major = 4, minor = 0, revision = 3, compatible = 4) public class Message implements Module { HashMap replyTargets = new HashMap<>(); + HashMap toggles = new HashMap(); @Command(hook = "message", async = AsyncType.ALWAYS) public boolean message(CommandSender sender, String target, String message) @@ -37,6 +44,10 @@ public class Message implements Module getLogger().message(sender, true, "That player couldn't be found!"); return true; } + else if (ModuleLoader.exists("Ignore")? !Ignore.getIgnoredBy(sender).sendTo(p) : true) { + getLogger().message(sender, true, Utils.getName(p) + " has ignored you. Your message was not sent."); + return true; + } else { if (ModuleLoader.getModule("Socialspy") != null) @@ -77,6 +88,10 @@ public class Message implements Module getLogger().message(sender, true, "You don't have anyone to reply to!"); return true; } + else if (ModuleLoader.exists("Ignore")? !Ignore.getIgnoredBy(sender).sendTo(target) : true) { + getLogger().message(sender, true, Utils.getName(target) + " has ignored you. Your message was not sent."); + return true; + } else { if (ModuleLoader.getModule("Socialspy") != null) @@ -101,4 +116,56 @@ public class Message implements Module replyTargets.put(target, sender); return true; } + + @Command(hook = "pmtoggle_off", async = AsyncType.ALWAYS) + public boolean pmtoggle_off(CommandSender sender) + { + Player player = (Player) sender; + if (toggles.remove(player) != null) + getLogger().message(player, "Your pmtoggle was removed!"); + else + getLogger().message(player, "You didn't have pmtoggle enabled! Use /pmtoggle to enabled it."); + return true; + } + + @Command(hook = "pmtoggle", async = AsyncType.ALWAYS) + public boolean pmtoggle(CommandSender sender, String player) + { + Player p = Bukkit.getPlayer(player); + if (p == null && !player.equals("CONSOLE")) + { + getLogger().message(sender, "§cThat player couldn't be found!"); + return true; + } + toggles.put((Player) sender, player); + getLogger().message(sender, "Locked your pmtoggle onto §6" + player + "§7."); + return true; + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + Player player = event.getPlayer(); + if (toggles.containsKey(player)) + { + Bukkit.dispatchCommand(player, "m " + toggles.get(player) + " " + event.getMessage()); + event.setCancelled(true); + } + } + + @SuppressWarnings("unlikely-arg-type") + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) + { + toggles.remove(event.getPlayer()); + String player = event.getPlayer().getName(); + if (toggles.containsValue(player)) + for (Entry entry : toggles.entrySet()) + if (entry.getValue().equals(player)) + { + toggles.remove(player); + getLogger().message(entry.getKey(), + "We removed your pmtoggle for &6" + player + "&7, as they left the game."); + } + } } diff --git a/src/com/redstoner/modules/misc/Misc.cmd b/src/com/redstoner/modules/misc/Misc.cmd new file mode 100644 index 0000000..2a41104 --- /dev/null +++ b/src/com/redstoner/modules/misc/Misc.cmd @@ -0,0 +1,50 @@ +command tempadd { + perm pex; + [string:user] [string:group] { + help Adds a user to a group for 1w.; + run tempadddef user group; + } + [string:user] [string:group] [string:duration] { + help Adds a user to a group for a specified duration.; + run tempadd user group duration; + } +} +command echo { + [string:text...] { + help Echoes back to you.; + run echo text; + } +} +command ping { + [empty] { + help Pongs :D; + run ping; + } + [string:password] { + help Pongs :D; + run ping2 password; + } +} +command sudo { + perm utils.sudo; + [string:name] [string:command...] { + help Sudo'es another user (or console); + run sudo name command; + } +} +command hasperm { + [flag:-f] [string:name] [string:node] { + perm utils.hasperm; + run hasperm -f name node; + help Checks if a player has a given permission node or not. Returns \"true/false\" in chat. When -f is set, it returns it unformatted.; + } +} +command nightvision { +alias nv; + [empty] { + run illuminate; + type player; + help Gives the player infinte night vision; + perm utils.illuminate; + } +} \ No newline at end of file diff --git a/src/com/redstoner/modules/misc/Misc.java b/src/com/redstoner/modules/misc/Misc.java index 2f56ec5..2a533ed 100644 --- a/src/com/redstoner/modules/misc/Misc.java +++ b/src/com/redstoner/modules/misc/Misc.java @@ -16,6 +16,8 @@ import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -26,13 +28,12 @@ import com.redstoner.annotations.Version; import com.redstoner.misc.CommandHolderType; import com.redstoner.misc.Utils; import com.redstoner.modules.Module; - import net.nemez.chatapi.ChatAPI; import net.nemez.chatapi.click.Message; -@Commands(CommandHolderType.String) +@Commands(CommandHolderType.File) @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 3, compatible = 4) +@Version(major = 4, minor = 1, revision = 0, compatible = 4) public class Misc implements Module, Listener { private final String[] sudoBlacklist = new String[] {"(.*:)?e?sudo", "(.*:)?script.*", "(.*:)?stop", @@ -168,36 +169,6 @@ public class Misc implements Module, Listener return ((CraftPlayer) player).getHandle().ping; } - @Command(hook = "me") - public boolean me(CommandSender sender, String text) - { - String name; - if (sender instanceof Player) - name = ((Player) sender).getDisplayName(); - else - name = "§9" + sender.getName(); - text = ChatAPI.colorify(sender, text); - Utils.broadcast(" §7- " + name + " §7⇦ ", text, null); - return true; - } - - @Command(hook = "say") - public boolean say(CommandSender sender, String message) - { - String name = Utils.getName(sender); - Utils.broadcast(" §7[§9" + name.replaceAll("[^0-9a-zA-Z§&\\[\\]]", "") + "§7]: ", - "§r" + ChatAPI.colorify(null, message), null); - return true; - } - - @Command(hook = "sayn") - public boolean say(CommandSender sender, String name, String message) - { - Utils.broadcast(" §7[§9" + ChatAPI.colorify(sender, name) + "§7]: ", "§r" + ChatAPI.colorify(null, message), - null); - return true; - } - @Command(hook = "sudo") public boolean sudo(CommandSender sender, String name, String command) { @@ -290,73 +261,21 @@ public class Misc implements Module, Listener return event.isCancelled(); } - // @noformat - @Override - public String getCommandString() + PotionEffect nightvision = new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0, false, false); + + @Command(hook = "illuminate") + public void illuminate(CommandSender sender) { - return "command tempadd {\n" + - " perm pex;\n" + - " [string:user] [string:group] {\n" + - " help Adds a user to a group for 1w.;\n" + - " run tempadddef user group;\n" + - " }\n" + - " [string:user] [string:group] [string:duration] {\n" + - " help Adds a user to a group for a specified duration.;\n" + - " run tempadd user group duration;\n" + - " }\n" + - "}\n" + - "command echo {\n" + - " [string:text...] {\n" + - " help Echoes back to you.;\n" + - " run echo text;\n" + - " }\n" + - "}\n" + - "command ping {\n" + - " [empty] {\n" + - " help Pongs :D;\n" + - " run ping;\n" + - " }\n" + - " [string:password] {\n" + - " help Pongs :D;\n" + - " run ping2 password;\n" + - " }\n" + - "}\n" + - "command me {\n" + - " perm utils.me;\n" + - " [string:text...] {\n" + - " help /me's in chat.;\n" + - " run me text;\n" + - " }\n" + - "}\n" + - "command sudo {\n" + - " perm utils.sudo;\n" + - " [string:name] [string:command...] {\n" + - " help Sudo'es another user (or console);\n" + - " run sudo name command;\n" + - " }\n" + - "}\n" + - "command hasperm {\n" + - " [flag:-f] [string:name] [string:node] {\n" + - " perm utils.hasperm;\n" + - " run hasperm -f name node;\n" + - " help Checks if a player has a given permission node or not. Returns \"true/false\" in chat. When -f is set, it returns it unformatted.;\n" + - " }\n" + - "}" + - "command say {\n" + - " [string:message...] {\n" + - " perm utils.say;\n" + - " run say message;\n" + - " help A replacement for the default say command to make the format be more consistant.;\n" + - " }\n" + - "}" + - "command sayn {\n" + - " [string:name] [string:message...] {\n" + - " perm utils.sayn;\n" + - " type console;\n" + - " run sayn name message;\n" + - " help A replacement for the default say command to make the format be more consistant.;\n" + - " }\n" + - "}"; + Player player = (Player) sender; + if (player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) + { + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + getLogger().message(sender, "Night Vision Disabled."); + } + else + { + player.addPotionEffect(nightvision, true); + getLogger().message(sender, "Night Vision Enabled."); + } } - // @format -} +} \ No newline at end of file diff --git a/src/com/redstoner/modules/onlineplayers/OnlinePlayers.java b/src/com/redstoner/modules/onlineplayers/OnlinePlayers.java index bf5a3d6..f09d100 100644 --- a/src/com/redstoner/modules/onlineplayers/OnlinePlayers.java +++ b/src/com/redstoner/modules/onlineplayers/OnlinePlayers.java @@ -17,9 +17,10 @@ import com.redstoner.annotations.Version; import com.redstoner.misc.JsonManager; import com.redstoner.misc.Main; import com.redstoner.modules.Module; +import com.redstoner.modules.datamanager.DataManager; @AutoRegisterListener -@Version(major = 4, minor = 0, revision = 2, compatible = 4) +@Version(major = 4, minor = 0, revision = 3, compatible = 4) @SuppressWarnings("unchecked") public class OnlinePlayers implements Module, Listener { @@ -33,7 +34,7 @@ public class OnlinePlayers implements Module, Listener saveFile = new File(Main.plugin.getDataFolder(), "players.json"); output = new JSONObject(); players = new JSONArray(); - output.put("dataFormat", "v1"); + output.put("dataFormat", "v2"); rescan(); } @@ -63,6 +64,8 @@ public class OnlinePlayers implements Module, Listener jsonPlayer.put("name", player.getName()); jsonPlayer.put("UUID", player.getUniqueId().toString()); jsonPlayer.put("joined", System.currentTimeMillis()); + jsonPlayer.put("vanished", DataManager.getState(player, "vanished")); + jsonPlayer.put("afk", DataManager.getState(player, "afk")); players.add(jsonPlayer); save(); } diff --git a/src/com/redstoner/modules/pmtoggle/Pmtoggle.java b/src/com/redstoner/modules/pmtoggle/Pmtoggle.java deleted file mode 100644 index 3657288..0000000 --- a/src/com/redstoner/modules/pmtoggle/Pmtoggle.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.redstoner.modules.pmtoggle; - -import java.util.HashMap; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import com.nemez.cmdmgr.Command; -import com.nemez.cmdmgr.Command.AsyncType; -import com.redstoner.annotations.AutoRegisterListener; -import com.redstoner.annotations.Commands; -import com.redstoner.annotations.Version; -import com.redstoner.misc.CommandHolderType; -import com.redstoner.modules.Module; - -@Commands(CommandHolderType.String) -@AutoRegisterListener -@Version(major = 4, minor = 0, revision = 0, compatible = 4) -public class Pmtoggle implements Module, Listener -{ - HashMap toggles = new HashMap(); - - @Command(hook = "pmtoggle_off", async = AsyncType.ALWAYS) - public boolean pmtoggle_off(CommandSender sender) - { - Player player = (Player) sender; - if (toggles.remove(player) != null) - getLogger().message(player, "Your pmtoggle was removed!"); - else - getLogger().message(player, "You didn't have pmtoggle enabled! Use /pmtoggle to enabled it."); - return true; - } - - @Command(hook = "pmtoggle", async = AsyncType.ALWAYS) - public boolean pmtoggle(CommandSender sender, String player) - { - Player p = Bukkit.getPlayer(player); - if (p == null && !player.equals("CONSOLE")) - { - getLogger().message(sender, "§cThat player couldn't be found!"); - return true; - } - toggles.put((Player) sender, player); - getLogger().message(sender, "Locked your pmtoggle onto §6" + player + "§7."); - return true; - } - - @EventHandler - public void onPlayerChat(AsyncPlayerChatEvent event) - { - Player player = event.getPlayer(); - if (toggles.containsKey(player)) - { - Bukkit.dispatchCommand(player, "m " + toggles.get(player) + " " + event.getMessage()); - event.setCancelled(true); - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) - { - toggles.remove(event.getPlayer()); - String player = event.getPlayer().getName(); - if (toggles.containsValue(player)) - { - for (Entry entry : toggles.entrySet()) - { - if (entry.getValue().equals(player)) - { - toggles.remove(player); - getLogger().message(entry.getKey(), - "We removed your pmtoggle for &6" + player + "&7, as they left the game."); - } - } - } - } - - // @noformat - @Override - public String getCommandString() - { - return "command pmtoggle {\n" + - " [empty] {\n" + - " help Turns off your toggle.;\n" + - " type player;\n" + - " run pmtoggle_off;\n" + - " }\n" + - " [string:player] {\n" + - " help Turns on your pmtoggle and locks onto .;\n" + - " type player;\n" + - " run pmtoggle player;\n" + - " }\n" + - "}"; - } - // @format -} diff --git a/src/com/redstoner/modules/reports/Reports.java b/src/com/redstoner/modules/reports/Reports.java index d9effc8..865ae11 100644 --- a/src/com/redstoner/modules/reports/Reports.java +++ b/src/com/redstoner/modules/reports/Reports.java @@ -26,7 +26,7 @@ import net.md_5.bungee.api.ChatColor; * * @author Redempt */ @Commands(CommandHolderType.String) -@Version(major = 4, minor = 0, revision = 0, compatible = 4) +@Version(major = 4, minor = 0, revision = 1, compatible = 4) public class Reports implements Module { private int task = 0; @@ -40,13 +40,9 @@ public class Reports implements Module reports = JsonManager.getArray(new File(Main.plugin.getDataFolder(), "reports.json")); archived = JsonManager.getArray(new File(Main.plugin.getDataFolder(), "archived_reports.json")); if (reports == null) - { reports = new JSONArray(); - } if (archived == null) - { archived = new JSONArray(); - } // Notify online staff of open reports task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, () -> { @@ -58,11 +54,13 @@ public class Reports implements Module { if (player.hasPermission("utils.report")) { - player.sendMessage(ChatColor.RED + "There are " + ChatColor.YELLOW + reports.size() + ChatColor.RED - + " open reports!"); + getLogger().message(player, "&cThere are &e" + reports.size() + + " &copen reports!"); } } - } , 2400, 2400); + getLogger().info("&cThere are &e" + reports.size() + + " &copen reports!"); + }, 2400, 2400); return true; } @@ -92,7 +90,7 @@ public class Reports implements Module Player player = (Player) sender; if (id > reports.size() - 1 || id < 0) { - sender.sendMessage(ChatColor.RED + "Invalid ID!"); + getLogger().message(sender, true, "Invalid ID!"); return; } JSONObject report = (JSONObject) reports.get(id); @@ -114,7 +112,7 @@ public class Reports implements Module // Check for invalid ID if (id > reports.size() - 1 || id < 0) { - sender.sendMessage(ChatColor.RED + "Invalid ID!"); + getLogger().message(sender, true, "Invalid ID!"); return; } // Move report to archived reports