diff options
author | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
---|---|---|
committer | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
commit | 604cf01967ede98bf5024e4926bb0777fc4e8eee (patch) | |
tree | e2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/saylol/Saylol.java | |
parent | e86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff) |
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/saylol/Saylol.java')
-rw-r--r-- | src/main/java/com/redstoner/modules/saylol/Saylol.java | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/saylol/Saylol.java b/src/main/java/com/redstoner/modules/saylol/Saylol.java new file mode 100644 index 0000000..7081aec --- /dev/null +++ b/src/main/java/com/redstoner/modules/saylol/Saylol.java @@ -0,0 +1,300 @@ +package com.redstoner.modules.saylol; + +import java.io.File; +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +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; +import net.nemez.chatapi.click.Message; + +@Commands(CommandHolderType.File) +@Version(major = 4, minor = 1, revision = 0, compatible = 4) +public class Saylol implements Module +{ + private long lastLol = 0; + private File lolLocation = new File(Main.plugin.getDataFolder(), "lol.json"); + private JSONArray lols, handlers; + private final String LOL_PREFIX = "§8[§blol§8] "; + + @SuppressWarnings("unchecked") + @Override + public boolean onEnable() + { + lols = JsonManager.getArray(lolLocation); + if (lols == null) + lols = new JSONArray(); + handlers = new JSONArray(); + for (int i = 0; i < lols.size(); i++) + handlers.add(new ClickCallback(true, true, "") + { + @Override + public void run(CommandSender sender) + { + if (handlers.contains(this)) + clickAction((Player) sender, handlers.indexOf(this)); + else + getLogger().message(sender, true, "That lol no longer exists!"); + } + }); + return true; + } + + @Override + public void onDisable() + { + saveLolsSync(); + } + + @SuppressWarnings("unchecked") + @Command(hook = "addlol") + public boolean addLol(CommandSender sender, String text) + { + if (lols.contains(text)) + getLogger().message(sender, true, "This lol already exists!"); + else + { + getLogger().message(sender, "Successfully added a new lol!"); + lols.add("&e" + text); + handlers.add(new ClickCallback(true, true, "") + { + @Override + public void run(CommandSender sender) + { + if (handlers.contains(this)) + clickAction((Player) sender, handlers.indexOf(this)); + else + getLogger().message(sender, true, "That lol no longer exists!"); + } + }); + saveLols(); + } + return true; + } + + @Command(hook = "dellol") + public boolean delLol(CommandSender sender, int id) + { + if (lols.size() == 0) + { + getLogger().message(sender, true, "There are no lols yet!"); + return true; + } + if (id < 0 || id >= lols.size()) + { + getLogger().message(sender, true, "The ID must be at least 0 and at most " + (lols.size() - 1)); + return true; + } + getLogger().message(sender, "Successfully deleted the lol: " + lols.remove(id)); + handlers.remove(id); + saveLols(); + return true; + } + + @SuppressWarnings("unchecked") + @Command(hook = "setlol") + public boolean setLol(CommandSender sender, int id, String text) + { + if (lols.size() == 0) + { + getLogger().message(sender, true, "There are no lols yet!"); + return true; + } + if (id < 0 || id >= lols.size()) + { + getLogger().message(sender, true, "The ID must be at least 0 and at most " + (lols.size() - 1)); + return true; + } + getLogger().message(sender, "Successfully changed the lol: &e" + lols.get(id) + " &7to: &e" + text); + lols.set(id, text); + saveLols(); + return true; + } + + @Command(hook = "lolid") + public boolean lolId(CommandSender sender, int id) + { + if (lols.size() == 0) + { + getLogger().message(sender, true, "There are no lols yet!"); + return true; + } + long time = System.currentTimeMillis(); + if (time - lastLol < 15000) + { + getLogger().message(sender, true, + "You can't use saylol for another " + (14 - (int) Math.ceil((time - lastLol) / 1000)) + "s."); + return true; + } + if (id < 0 || id >= lols.size()) + { + getLogger().message(sender, true, "The ID must be at least 0 and at most " + (lols.size() - 1)); + return true; + } + String name; + if (sender instanceof Player) + name = ((Player) sender).getDisplayName(); + else + name = "&9" + sender.getName(); + 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"); + } + }); + lastLol = time; + return true; + } + + @Command(hook = "saylol") + public boolean saylol(CommandSender sender) + { + if (lols.size() == 0) + { + getLogger().message(sender, true, "There are no lols yet!"); + return true; + } + long time = System.currentTimeMillis(); + if (time - lastLol < 15000) + { + getLogger().message(sender, true, + "You can't use saylol for another " + (14 - (int) Math.ceil((time - lastLol) / 1000)) + "s."); + return true; + } + String name; + if (sender instanceof Player) + name = ((Player) sender).getDisplayName(); + else + 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)), + ModuleLoader.exists("Ignore")? Ignore.getIgnoredBy(sender) : null); + lastLol = time; + return true; + } + + @Command(hook = "listlols") + public boolean listLols(CommandSender sender, int page) + { + if (lols.size() == 0) + { + getLogger().message(sender, true, "There are no lols yet!"); + return true; + } + page = page - 1; + int start = page * 10; + int end = start + 10; + int pages = (int) Math.ceil(lols.size() / 10d); + if (start < 0) + { + getLogger().message(sender, true, "Page number too small, must be at least 0!"); + return true; + } + if (start > lols.size()) + { + getLogger().message(sender, true, "Page number too big, must be at most " + pages + "!"); + return true; + } + Message m = new Message(sender, null); + m.appendText(getLogger().getHeader().replace("\n", "")); + m.appendText("&ePage " + (page + 1) + "/" + pages + ":"); + for (int i = start; i < end && i < lols.size(); i++) + m.appendCallback("\n&a" + i + "&8: &e" + lols.get(i), getCallback(i)); + m.send(); + return true; + } + + @Command(hook = "listlolsdef") + public boolean listLolsDefault(CommandSender sender) + { + return listLols(sender, 1); + } + + @Command(hook = "searchlol") + public boolean search(CommandSender sender, boolean sensitive, String text) + { + Message m = new Message(sender, null); + m.appendText(getLogger().getHeader().replace("\n", "")); + boolean found = false; + if (!sensitive) + text = text.toLowerCase(); + for (int i = 0; i < lols.size(); i++) + { + String lol = (String) lols.get(i); + if ((sensitive ? lol : lol.toLowerCase()).contains(text)) + { + m.appendCallback("\n&a" + i + "&8: &e" + lol, getCallback(i)); + found = true; + } + } + if (!found) + getLogger().message(sender, "&cCouldn't find any matching lols."); + else + m.send(); + return true; + } + + @Command(hook = "matchlol") + public boolean match(CommandSender sender, boolean sensitive, String regex) + { + Message m = new Message(sender, null); + m.appendText(getLogger().getHeader().replace("\n", "")); + boolean found = false; + if (!sensitive) + regex = regex.toLowerCase(); + for (int i = 0; i < lols.size(); i++) + { + String lol = (String) lols.get(i); + if ((sensitive ? lol : lol.toLowerCase()).matches(regex)) + { + m.appendCallback("\n&a" + i + "&8: &e" + lol, getCallback(i)); + found = true; + } + } + if (!found) + getLogger().message(sender, "&cCouldn't find any matching lols."); + else + m.send(); + return true; + } + + public void saveLols() + { + JsonManager.save(lols, lolLocation); + } + + public void saveLolsSync() + { + JsonManager.saveSync(lols, lolLocation); + } + + public ClickCallback getCallback(int index) + { + return (ClickCallback) handlers.get(index); + } + + public void clickAction(Player player, int index) + { + if (player.hasPermission("utils.lol.id")) + Bukkit.dispatchCommand(player, "lol id " + index); + } +} |