Archived
0
This repository has been archived on 2024-08-30. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Modules/src/main/java/com/redstoner/modules/abot/Abot.java
2019-05-31 20:24:44 -04:00

350 lines
9.8 KiB
Java

package com.redstoner.modules.abot;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.json.simple.JSONArray;
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;
import net.nemez.chatapi.click.Message;
@Commands(CommandHolderType.File)
@AutoRegisterListener
@Version(major = 5, minor = 1, revision = 0, compatible = 4)
@SuppressWarnings("unchecked")
public class Abot implements Module, Listener {
private File answerFile = new File(Main.plugin.getDataFolder(), "abot.json");
JSONArray answers;
@Override
public boolean onEnable() {
return loadAnswers(Bukkit.getConsoleSender());
}
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event) {
for (Object rawObject : answers) {
JSONObject entry = (JSONObject) rawObject;
JSONArray regexes = (JSONArray) entry.get("regex");
for (Object regex : regexes) {
if (event.getMessage().toLowerCase().matches((String) regex)) {
Object hideperm = entry.get("hide-perm");
if (hideperm == null || !event.getPlayer().hasPermission((String) hideperm)) {
event.setCancelled(true);
getLogger().message(event.getPlayer(), (String) entry.get("message"));
return;
}
}
}
}
}
@Command(hook = "abot_reload")
public void loadAnswersCommand(CommandSender sender) {
loadAnswers(sender);
}
@Command(hook = "abot_list")
public void listAnswers(CommandSender sender) {
listAnswers(sender, false);
}
@Command(hook = "abot_list_nh")
public void listAnswers(CommandSender sender, boolean nohover) {
if (answers.isEmpty())
getLogger().message(sender, "There are no Abot answers to list.");
if (nohover) {
listAnswersNoHover(sender);
return;
}
Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader());
msg.appendText("&6Abot Answers:\n");
for (int i = 0; i < answers.size(); i++) {
JSONObject entry = (JSONObject) answers.get(i);
JSONArray regexes = (JSONArray) entry.get("regex");
String name = (String) entry.get("name");
String message = (String) entry.get("message");
String hover = "&6Name: &e" + name + "\n&6Message:&f " + (message.isEmpty()? "&cNone" : message)
+ "\n&6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n");
if (regexes.isEmpty())
continue;
for (Object regex : regexes)
hover += "&6 - &e" + (String) regex;
if (i > 0)
msg.appendText("&7, ");
msg.appendTextHover("&e" + name, hover);
}
msg.send();
}
public void listAnswersNoHover(CommandSender sender) {
Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader());
for (int i = 0; i < answers.size(); i++) {
JSONObject entry = (JSONObject) answers.get(i);
JSONArray regexes = (JSONArray) entry.get("regex");
msg.appendText("\n&6Name: &e" + (String) entry.get("name"));
String message = (String) entry.get("message");
msg.appendText("\n&f - &6Message:&f " + (message.isEmpty()? "&cNone" : message)
+ "\n&f - &6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n"));
if (regexes.isEmpty())
continue;
for (Object regex : regexes)
msg.appendText("&f - &e" + (String) regex);
}
msg.send();
}
@Command(hook = "abot_get")
public void getAnswer(CommandSender sender, String name) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with that name.");
return;
}
Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader());
JSONArray regexes = (JSONArray) entry.get("regex");
msg.appendText("\n&a" + (String) entry.get("name"));
String message = (String) entry.get("message");
msg.appendText("\n &6Message:&f " + (message.isEmpty()? "&cNone" : message)
+ "\n &6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n"));
if (!regexes.isEmpty())
for (Object regex : regexes)
msg.appendText("&6 - &e" + (String) regex);
}
@Command(hook = "abot_add")
public void addAnswer(CommandSender sender, String name) {
if (exists(name)) {
getLogger().message(sender, "That name is already in use.");
return;
}
JSONObject newEntry = new JSONObject();
newEntry.put("name", name);
newEntry.put("message", "");
newEntry.put("hide-perm", null);
newEntry.put("regex", new JSONArray());
answers.add(newEntry);
saveAnswers();
getLogger().message(sender, "&e" + name + "&7 has been created. Use &e/abot edit &a" + name +
"&e <name|message|permission|regex> &7to finish setting it up");
}
@Command(hook = "abot_remove")
public void removeAnswer(CommandSender sender, String name) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + name + "&7.");
return;
}
answers.remove(entry);
saveAnswers();
getLogger().message(sender, "&e"+name+" &7has been removed.");
}
@Command(hook = "abot_edit_name")
public void editName(CommandSender sender, String name, String newName) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + newName + "&7.");
return;
}
if (exists(newName)) {
getLogger().message(sender, "&e" + newName + " &7is already in use.");
return;
}
String oldName = (String) entry.get("name");
answers.remove(entry);
entry.put("name", newName);
answers.add(entry);
saveAnswers();
getLogger().message(sender, "Name changed from &e" + oldName + "&7 to &e" + newName + "&7.");
}
@Command(hook = "abot_edit_permission")
public void editPermission(CommandSender sender, String name, String permission) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + name + "&7.");
return;
}
String oldPerm = entry.get("hide-perm") == null? "&cNone" : (String) entry.get("hide-perm");
answers.remove(entry);
entry.put("hide-perm", permission.equals("null")? null : permission);
answers.add(entry);
saveAnswers();
getLogger().message(sender, "Hide Permission changed from &e" + oldPerm + "&7 to &e"
+ (permission.equals("null")? "&cNone" : permission) + "&7.");
}
@Command(hook = "abot_edit_message")
public void editMessage(CommandSender sender, String name, String message) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + name + "&7.");
return;
}
String oldMessage = entry.get("message").equals("")? "&cEmpty String" : (String) entry.get("message");
answers.remove(entry);
entry.put("message", message);
answers.add(entry);
saveAnswers();
getLogger().message(sender, "Message changed from " + oldMessage + "&7 to &e"
+ (message.isEmpty()? "&cEmpty String" : message) + "&7.");
}
@Command(hook = "abot_edit_regex_add")
public void editRegexAdd(CommandSender sender, String name, String regex) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + name + "&7.");
return;
}
answers.remove(entry);
JSONArray regexes = (JSONArray) entry.get("regex");
regexes.add(regex);
entry.put("regex", regexes);
answers.add(entry);
saveAnswers();
getLogger().message(sender, "Added the Regex &e" + regex + "&7.");
}
@Command(hook = "abot_edit_regex_remove")
public void editRegexRemove(CommandSender sender, String name, String regex) {
JSONObject entry = getAnswer(name);
if (entry == null) {
getLogger().message(sender, "There are no answer with the name &e" + name + "&7.");
return;
}
answers.remove(entry);
JSONArray regexes = (JSONArray) entry.get(regex);
if (!regexes.remove(regex))
getLogger().message(sender, "The regex,&e" + regex + "&7, is not associated with that answer.");
else {
entry.put("regex", regexes);
answers.add(entry);
saveAnswers();
getLogger().message(sender, "Removed the Regex &e" + regex + "&7.");
}
}
public JSONObject getAnswer(String name) {
for (Object rawEntry : answers) {
JSONObject entry = (JSONObject) rawEntry;
if (((String)entry.get("name")).equals(name))
return entry;
}
return null;
}
public boolean exists(String name) {
for (Object rawEntry : answers) {
JSONObject entry = (JSONObject) rawEntry;
if (((String)entry.get("name")).equals(name))
return true;
}
return false;
}
public boolean loadAnswers(CommandSender sender) {
try {
JSONObject json = JsonManager.getObject(answerFile);
if (json == null) {
answers = new JSONArray();
getLogger().message(sender, "Couldn't find Abot's Answers File, creating one.");
saveAnswers();
}
else if (!json.get("version").toString().equals("2")) {
getLogger().message(sender, true, "abot.json is not the correct version. Aborting!");
return false;
}
answers = (JSONArray) json.get("data");
}
catch (ClassCastException e) {
answers = JsonManager.getArray(answerFile);
getLogger().message(sender, "Converting abot.json from version 1 to 2.");
saveAnswers();
}
getLogger().message(sender, "Loaded the abot.json file!");
return true;
}
public void saveAnswers() {
JSONObject json = new JSONObject();
json.put("version", 2);
json.put("data", answers);
JsonManager.save(json, answerFile);
}
}