summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/chatalias
diff options
context:
space:
mode:
authorDavid <david@panic.tk>2018-11-07 23:50:06 +0100
committerDavid <david@panic.tk>2018-11-07 23:50:06 +0100
commit604cf01967ede98bf5024e4926bb0777fc4e8eee (patch)
treee2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/chatalias
parente86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff)
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/chatalias')
-rw-r--r--src/main/java/com/redstoner/modules/chatalias/Chatalias.cmd16
-rw-r--r--src/main/java/com/redstoner/modules/chatalias/Chatalias.java317
2 files changed, 333 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/chatalias/Chatalias.cmd b/src/main/java/com/redstoner/modules/chatalias/Chatalias.cmd
new file mode 100644
index 0000000..8af4bb6
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/chatalias/Chatalias.cmd
@@ -0,0 +1,16 @@
+command alias {
+ add [flag:-r] [string:keyword] [string:replacement...] {
+ help Adds a new alias. Set -r to make it a regex-alias.;
+ run addalias -r keyword replacement;
+ }
+ del [flag:-r] [string:keyword] {
+ help Deletes an alias. -r indicates if it was a regex-alias.;
+ run delalias -r keyword;
+ }
+ list {
+ help Lists your aliases.;
+ run listaliases;
+ }
+ perm utils.alias;
+ type player;
+} \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/chatalias/Chatalias.java b/src/main/java/com/redstoner/modules/chatalias/Chatalias.java
new file mode 100644
index 0000000..eb13b4d
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/chatalias/Chatalias.java
@@ -0,0 +1,317 @@
+package com.redstoner.modules.chatalias;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.UUID;
+import java.util.regex.Pattern;
+
+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 org.bukkit.event.player.PlayerCommandPreprocessEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.permissions.PermissionAttachmentInfo;
+import org.json.simple.JSONObject;
+
+import com.nemez.cmdmgr.Command;
+import com.redstoner.annotations.AutoRegisterListener;
+import com.redstoner.annotations.Commands;
+import com.redstoner.annotations.Version;
+import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.JsonManager;
+import com.redstoner.misc.Main;
+import com.redstoner.modules.Module;
+
+import net.nemez.chatapi.ChatAPI;
+
+@Commands(CommandHolderType.File)
+@AutoRegisterListener
+@Version(major = 4, minor = 1, revision = 0, 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", "say", "sayn .+?", "chat", "shrug", "action"};
+ private JSONObject aliases = new JSONObject();
+
+ @Override
+ public boolean onEnable()
+ {
+ for (Player p : Bukkit.getOnlinePlayers())
+ {
+ loadAliases(p.getUniqueId());
+ }
+ return true;
+ }
+
+ @Override
+ public void onDisable()
+ {
+ for (Object key : aliases.keySet())
+ {
+ UUID uuid = UUID.fromString((String) key);
+ saveAliases(uuid);
+ }
+ }
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event)
+ {
+ loadAliases(event.getPlayer().getUniqueId());
+ }
+
+ @EventHandler
+ public void onPlayerLeave(PlayerQuitEvent event)
+ {
+ aliases.remove(event.getPlayer().getUniqueId().toString());
+ }
+
+ @SuppressWarnings("unchecked")
+ @EventHandler(priority = EventPriority.LOWEST)
+ public void onPlayerChat(AsyncPlayerChatEvent event)
+ {
+ Player player = event.getPlayer();
+ UUID uuid = player.getUniqueId();
+ if (!aliases.containsKey(uuid.toString()))
+ {
+ loadAliases(player.getUniqueId());
+ if (!aliases.containsKey(uuid.toString()))
+ return;
+ }
+ JSONObject playerAliases = (JSONObject) aliases.get(uuid.toString());
+ boolean changed = false;
+ for (Object key : playerAliases.keySet())
+ {
+ String keyword = (String) key;
+ String replacement = (String) playerAliases.get(key);
+ if (keyword.startsWith("R: "))
+ {
+ keyword = keyword.replace("R: ", "");
+ event.setMessage(event.getMessage().replaceAll(keyword, replacement));
+ }
+ else
+ {
+ if (keyword.startsWith("N: "))
+ keyword = keyword.replace("N: ", "");
+ else
+ {
+ changed = true;
+ playerAliases.put("N: " + key, replacement);
+ }
+ event.setMessage(event.getMessage().replace(keyword, replacement));
+ }
+ int maxLength;
+ try
+ {
+ maxLength = Integer.valueOf(getPermissionContent(player, "utils.alias.length."));
+ }
+ catch (NumberFormatException e)
+ {
+ maxLength = 255;
+ }
+ if (event.getMessage().length() > maxLength)
+ {
+ getLogger().message(player, true, "The generated message is too long!");
+ event.setCancelled(true);
+ return;
+ }
+ }
+ event.setMessage(ChatAPI.colorify(event.getPlayer(), event.getMessage()));
+ if (changed)
+ saveAliases(uuid);
+ }
+
+ @EventHandler(priority = EventPriority.LOWEST)
+ public void onPlayerCommand(PlayerCommandPreprocessEvent event)
+ {
+ if (event.isCancelled())
+ return;
+ boolean listening = false;
+ String command = "";
+ for (String s : commands)
+ {
+ command = "^\\/(.*:)?" + s + " ";
+ if (event.getMessage().matches(command + ".*"))
+ {
+ listening = true;
+ break;
+ }
+ }
+ if (!listening)
+ return;
+ Player player = event.getPlayer();
+ UUID uuid = player.getUniqueId();
+ JSONObject playerAliases = (JSONObject) aliases.get(uuid.toString());
+ String temp = event.getMessage().replaceAll(command, "");
+ command = event.getMessage().replaceAll(Pattern.quote(temp) + "$", "");
+ event.setMessage(event.getMessage().replaceFirst(Pattern.quote(command), ""));
+ for (Object key : playerAliases.keySet())
+ {
+ String keyword = (String) key;
+ String replacement = (String) playerAliases.get(key);
+ if (keyword.startsWith("R: "))
+ {
+ keyword = keyword.replace("R: ", "");
+ event.setMessage(event.getMessage().replaceAll(keyword, replacement));
+ }
+ else
+ {
+ if (keyword.startsWith("N: "))
+ keyword = keyword.replace("N: ", "");
+ event.setMessage(event.getMessage().replace(keyword, replacement));
+ }
+ int maxLength;
+ try
+ {
+ maxLength = Integer.valueOf(getPermissionContent(player, "utils.alias.length."));
+ }
+ catch (NumberFormatException e)
+ {
+ maxLength = 255;
+ }
+ if (event.getMessage().length() > maxLength)
+ {
+ getLogger().message(player, true, "The generated message is too long!");
+ event.setCancelled(true);
+ return;
+ }
+ }
+ event.setMessage(command + event.getMessage());
+ }
+
+ @SuppressWarnings("unchecked")
+ @Command(hook = "addalias")
+ public boolean addAlias(CommandSender sender, boolean regex, String keyword, String replacement)
+ {
+ if (regex && keyword.equals(".*"))
+ {
+ getLogger().message(sender, true, "You may not define the wildcard regex as an alias.");
+ return true;
+ }
+ Player player = (Player) sender;
+ UUID uuid = player.getUniqueId();
+ JSONObject data = (JSONObject) aliases.get(uuid.toString());
+ keyword = (regex ? "R: " : "N: ") + keyword;
+ if (!data.containsKey(keyword))
+ {
+ int maxAmount;
+ try
+ {
+ maxAmount = Integer.valueOf(getPermissionContent(player, "utils.alias.amount."));
+ }
+ catch (NumberFormatException e)
+ {
+ maxAmount = 25;
+ }
+ if (data.size() == maxAmount)
+ {
+ getLogger().message(sender, true, "You already reached your maximum of aliases!");
+ return true;
+ }
+ }
+ data.put(keyword, replacement);
+ if (sender.hasPermission("essentials.chat.color"))
+ getLogger().message(sender,
+ "Successfully created alias " + keyword.substring(3) + " §7-> " + replacement + " §7for you.");
+ else
+ getLogger().message(sender,
+ "Successfully created alias " + keyword.substring(3) + " §7-> " + replacement + " §7for you.");
+ saveAliases(uuid);
+ return true;
+ }
+
+ @Command(hook = "delalias")
+ public boolean delAlias(CommandSender sender, boolean regex, String keyword)
+ {
+ Player player = (Player) sender;
+ UUID uuid = player.getUniqueId();
+ JSONObject data = (JSONObject) aliases.get(uuid.toString());
+ keyword = (regex ? "R: " : "N: ") + keyword;
+ if (data.remove(keyword) != null)
+ {
+ getLogger().message(sender, "Successfully removed the alias!");
+ saveAliases(uuid);
+ return true;
+ }
+ else
+ {
+ getLogger().message(sender, true, "That alias doesn't exist! Hint: regex/no regex does matter for this.");
+ return true;
+ }
+ }
+
+ @Command(hook = "listaliases")
+ public boolean listAliases(CommandSender sender)
+ {
+ ArrayList<String> message = new ArrayList<>();
+ Player player = (Player) sender;
+ UUID uuid = player.getUniqueId();
+ JSONObject data = (JSONObject) aliases.get(uuid.toString());
+ for (Object key : data.keySet())
+ message.add((String) key + " §7-> " + data.get(key));
+ getLogger().message(sender, message.toArray(new String[] {}));
+ return true;
+ }
+
+ private String getPermissionContent(Player player, String permnode)
+ {
+ Set<PermissionAttachmentInfo> perms = player.getEffectivePermissions();
+ for (PermissionAttachmentInfo perm : perms)
+ if (perm.getPermission().toString().startsWith(permnode))
+ return perm.getPermission().replace(permnode, "");
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void loadAliases(UUID uuid)
+ {
+ JSONObject defaults = new JSONObject();
+ defaults.put("dataFormat", "v1");
+ JSONObject data = new JSONObject();
+ data.put("N: ./", "/");
+ defaults.put("data", data);
+ JSONObject playerAliases = JsonManager
+ .getObject(new File(Main.plugin.getDataFolder(), "aliases/" + uuid.toString() + ".json"));
+ if (playerAliases == null)
+ {
+ playerAliases = defaults;
+ }
+ String dataFormat = (String) playerAliases.get("dataFormat");
+ if (dataFormat == null)
+ {
+ JSONObject temp = new JSONObject();
+ temp.put("dataFormat", "v1");
+ JSONObject tempAliases = new JSONObject();
+ {
+ for (Object key : playerAliases.keySet())
+ {
+ tempAliases.put("N: " + key, playerAliases.get(key));
+ }
+ }
+ temp.put("data", tempAliases);
+ aliases.put(uuid.toString(), temp.get("data"));
+ }
+ else if (dataFormat.equals("v1"))
+ aliases.put(uuid.toString(), playerAliases.get("data"));
+ else
+ {
+ getLogger().error("Unknown data format for alias set of player " + uuid.toString());
+ aliases.put(uuid.toString(), ((JSONObject) defaults.get("data")).clone());
+ saveAliases(uuid);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void saveAliases(UUID uuid)
+ {
+ JSONObject temp = new JSONObject();
+ temp.put("dataFormat", "v1");
+ temp.put("data", aliases.get(uuid.toString()));
+ JsonManager.save(temp, new File(Main.plugin.getDataFolder(), "aliases/" + uuid.toString() + ".json"));
+ }
+}