Archived
0

Merge pull request #29 from RedstonerServer/Ignore_Module

Ignore module (and a bunch more)
This commit is contained in:
Pepich
2018-03-12 02:49:47 +01:00
committed by GitHub
19 changed files with 656 additions and 169 deletions

View File

@@ -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());
}

View File

@@ -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<UUID>();
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");

View File

@@ -0,0 +1,60 @@
command me {
perm utils.me;
[string:text...] {
help /me's in chat.;
run me text;
}
}
command action {
perm utils.action;
[string:text...] {
help /action's in chat.;
run action 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.;
}
}

View File

@@ -0,0 +1,173 @@
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.BroadcastFilter;
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 net.nemez.chatapi.ChatAPI;
@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("action", " %n §7 <- §r %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 = "action")
public boolean action(CommandSender sender, String message)
{
broadcastFormatted("action", 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), null);
}
public boolean broadcastFormatted(String format, CommandSender sender, String message, String name)
{
return broadcastFormatted(format, sender, message, name, null);
}
public boolean broadcastFormatted(String format, CommandSender sender, String message, AsyncPlayerChatEvent event)
{
return broadcastFormatted(format, sender, message, Utils.getName(sender), null);
}
public boolean broadcastFormatted(String format, CommandSender sender, String message, String name,
AsyncPlayerChatEvent event)
{
if ((boolean) DataManager.getOrDefault(sender, "muted", false))
{
getLogger().message(sender, true, "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("", ChatAPI.colorify(sender, formatted), wrap(ModuleLoader.exists("Ignore") ? Ignore.getIgnoredBy(sender) : null, event));
return true;
}
public BroadcastFilter wrap(BroadcastFilter filter, AsyncPlayerChatEvent event)
{
if (event == null)
return filter;
else
return new BroadcastFilter()
{
@Override
public boolean sendTo(CommandSender recipient)
{
return filter.sendTo(recipient) && event.getRecipients().contains(recipient);
}
};
}
}

View File

@@ -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", "action"};
private JSONObject aliases = new JSONObject();
@Override

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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 = 6, compatible = 4)
public final class DataManager implements CoreModule, Listener
{
protected final File dataFolder = new File(Main.plugin.getDataFolder(), "data");
@@ -45,8 +45,10 @@ public final class DataManager implements CoreModule, Listener
protected ArrayList<String> module_index;
int old_hash = 0;
protected HashMap<String, HashMap<String, Boolean>> states = new HashMap<>();
private DataManager previous_instance = null;
private static DataManager previous_instance = null;
protected ArrayList<String> subcommands;
protected List<String> scheduled_saves = new ArrayList<>();
int task_id;
@Override
public void postEnable()
@@ -75,6 +77,24 @@ public final class DataManager implements CoreModule, Listener
fixJson();
updateIndex();
CommandManager.registerCommand(getClass().getResourceAsStream("DataManager.cmd"), this, Main.plugin);
// Schedule save every ten seconds
task_id = Bukkit.getScheduler().runTaskTimerAsynchronously(Main.plugin, new Runnable()
{
@Override
public void run()
{
for (String id : scheduled_saves)
{
scheduled_saves.remove(id);
Object raw = data.get(id);
if (raw == null || ((JSONObject) raw).size() == 0)
return;
JSONObject json = (JSONObject) raw;
JsonManager.save(json, new File(dataFolder, id + ".json"));
}
}
}, 0, 10000).getTaskId();
}
@Override
@@ -86,6 +106,7 @@ public final class DataManager implements CoreModule, Listener
saveAndUnload(p);
}
JsonManager.save(config_data, new File(dataFolder, "configs.json"));
Bukkit.getScheduler().cancelTask(task_id);
}
@Command(hook = "import_file")
@@ -535,12 +556,9 @@ public final class DataManager implements CoreModule, Listener
{}
}
protected synchronized void save_(String id)
protected void save_(String id)
{
Object raw = data.get(id);
if (raw == null || ((JSONObject) raw).size() == 0)
return;
JsonManager.save((JSONObject) raw, new File(dataFolder, id + ".json"));
scheduled_saves.add(id);
}
protected void saveAndUnload(CommandSender sender)
@@ -651,7 +669,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 +693,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 +706,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 +787,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)
{

View File

@@ -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.;
}
}

View File

@@ -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 (sender.hasPermission("utils.ignore.override"))
return true;
JSONArray ignores = (JSONArray) DataManager.getOrDefault(recipient, "ignores", new JSONArray());
return !ignores.contains(sUUID);
}
else
return true;
}
};
}
}

View File

@@ -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())))
{

View File

@@ -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";

View File

@@ -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 <player>.;
type player;
run pmtoggle player;
}
}

View File

@@ -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<CommandSender, CommandSender> replyTargets = new HashMap<>();
HashMap<Player, String> toggles = new HashMap<Player, String>();
@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 <player> 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<Player, String> 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.");
}
}
}

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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();
}

View File

@@ -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

View File

@@ -11,12 +11,14 @@ import org.json.simple.JSONArray;
import com.nemez.cmdmgr.Command;
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.JsonManager;
import com.redstoner.misc.Main;
import com.redstoner.misc.Utils;
import com.redstoner.modules.Module;
import com.redstoner.modules.ignore.Ignore;
import net.nemez.chatapi.ChatAPI;
import net.nemez.chatapi.click.ClickCallback;
@@ -184,14 +186,8 @@ public class Saylol implements Module
name = "&9" + sender.getName();
Random random = new Random();
int id = random.nextInt(lols.size());
Utils.broadcast(LOL_PREFIX, ChatAPI.colorify(null, name + "&8: &e" + lols.get(id)), new BroadcastFilter()
{
@Override
public boolean sendTo(CommandSender recipient)
{
return recipient.hasPermission("utils.lol.see");
}
});
Utils.broadcast(LOL_PREFIX, ChatAPI.colorify(null, name + "&8: &e" + lols.get(id)),
ModuleLoader.exists("Ignore")? Ignore.getIgnoredBy(sender) : null);
lastLol = time;
return true;
}