package com.techcavern.wavetact.ircCommands.minecraft; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.techcavern.wavetact.annot.IRCCMD; import com.techcavern.wavetact.objects.IRCCommand; import com.techcavern.wavetact.utils.GeneralUtils; import com.techcavern.wavetact.utils.IRCUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.pircbotx.Channel; import org.pircbotx.PircBotX; import org.pircbotx.User; import java.util.HashSet; import java.util.HashMap; import java.util.Set; import java.util.Map; @IRCCMD public class MCMods extends IRCCommand { private static Map<JsonObject, String> mcmods = new HashMap<>(); public MCMods() { super(GeneralUtils.toArray("mcmods mcmod mclmod mclm mclma mclmodauthor mcmodauthor mcma mcm"), 1, "mcmods (version) (+)[name]", "Gets info on minecraft mods", false); } public static boolean searchMCVersion(String version, String searchPhrase, String modname) throws Exception { JsonArray mods = GeneralUtils.getJsonArray("http://bot.notenoughmods.com/" + version + ".json"); JsonArray mods2 = GeneralUtils.getJsonArray("http://modlist.mcf.li/api/v3/" + version + ".json"); MCModSearch: for (int j = 0; j < mods.size(); j++) { JsonObject mod = mods.get(j).getAsJsonObject(); if (mcmods.size() >= 3) { return true; } for (JsonObject o : mcmods.keySet()) { if (mod.get("name").getAsString().equalsIgnoreCase((o).get("name").getAsString())) continue MCModSearch; } if (mod.get(searchPhrase).getAsString().toLowerCase().replaceAll("[^a-zA-Z0-9]", "").contains(modname)) { mcmods.put(mod, version); } } if (mcmods.size() > 0) { return true; } if(mods2.size() < 1){ return false; } McModSearch: for (int j = 0; j < mods2.size(); j++) { JsonObject mod = mods2.get(j).getAsJsonObject(); if (mcmods.size() >= 3) { return true; } for (JsonObject o : mcmods.keySet()) { if (mod.get("name").getAsString().equalsIgnoreCase((o).get("name").getAsString())) continue McModSearch; } if (mod.get(searchPhrase).isJsonArray()) { JsonArray e = mod.get(searchPhrase).getAsJsonArray(); for (int g = 0; g < e.size(); g++) { if (e.get(g).getAsString().toLowerCase().replaceAll("[^a-zA-Z0-9]", "").contains(modname)) { mcmods.put(mod, version); continue McModSearch; } } } else if (mod.get(searchPhrase).getAsString().toLowerCase().replaceAll("[^a-zA-Z0-9]", "").contains(modname)) { mcmods.put(mod, version); } } return mcmods.size() > 0; } @Override public void onCommand(String command, User user, PircBotX network, String prefix, Channel channel, boolean isPrivate, int userPermLevel, String... args) throws Exception { mcmods.clear(); JsonArray versions = GeneralUtils.getJsonArray("http://bot.notenoughmods.com/?json&count"); boolean isDev = false; String version = null; if (command.startsWith("mcl")) { command = command.replaceFirst("l", ""); version = args[0]; args = ArrayUtils.remove(args, 0); } String modname = StringUtils.join(args).toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); if (modname.startsWith("+")) { isDev = true; modname = modname.replaceFirst("\\+", ""); } String searchPhrase = "name"; if (command.equalsIgnoreCase("mcmodauthor") || command.equalsIgnoreCase("mcma")) searchPhrase = "author"; if (version == null) { MCModVersionSearch: for (int i = versions.size() - 1; i >= 0; i--) { int size = versions.get(i).getAsJsonObject().get("count").getAsInt(); if (size > 10) { version = versions.get(i).getAsJsonObject().get("name").getAsString(); boolean toReturn = searchMCVersion(version, searchPhrase, modname); if (toReturn) break MCModVersionSearch; } } } else { searchMCVersion(version, searchPhrase, modname); } if (mcmods.isEmpty()) { IRCUtils.sendError(user, network, channel, "No mods found", prefix); } else { Set<String> results = new HashSet<>(); for (JsonObject mod : mcmods.keySet()) { boolean isNEM = true; if (mod.get("version") == null) { isNEM = false; } String ModVersion = ""; if (isNEM) { if (isDev) ModVersion = " " + mod.get("dev").getAsString(); else ModVersion = " " + mod.get("version").getAsString(); } String Name = mod.get("name").getAsString(); String Link; if (isNEM) { Link = mod.get("shorturl").getAsString(); if (Link != null && Link.isEmpty()) Link = mod.get("longurl").getAsString(); } else { Link = GeneralUtils.shortenURL(mod.get("link").getAsString()); } String Author; if (isNEM) Author = mod.get("author").getAsString(); else Author = StringUtils.join(mod.get("author").getAsJsonArray(), ", ").replaceAll("\"", ""); Author = IRCUtils.noPing(Author); if (Author.isEmpty()) results.add("[" + mcmods.get(mod) + "] " + Name + ModVersion + " - " + Link); else results.add("[" + mcmods.get(mod) + "] " + Name + ModVersion + " by " + Author + " - " + Link); } IRCUtils.sendMessage(user, network, channel,StringUtils.join(results, " - "),prefix); } } }