diff --git a/search_luanti_mods.lua b/search_luanti_mods.lua new file mode 100755 index 0000000..0d18040 --- /dev/null +++ b/search_luanti_mods.lua @@ -0,0 +1,387 @@ +#!/usr/bin/env luajit + +-- this list was manually assembled from my notes +local mods = { + "plutoniumships", + "stnodes", + "too_many_tnt", + "mesecons_carts", + "coloredstrings", + "grass_string", + "renewable_desert_stone", + "basic_materials", + "farming", + "x_farming", + "unifieddyes", + "xcompat", + "worldedit", + "home_workshop_modpack", + "plasticbox", + "steel", + "xdecor", + "technic", + "technic_recycle", + "plastic_bucket", + "uraniumstuff", + "anvil", + "hammers_redo", + "desertores", + "livingcaves", + "livingcavesmobs", + "roads", + "digilines", + "mesecons", + "moreblocks", + "digistuff", + "eye_spy", + "edit_skin", + "fishing_boat", + "whitelist", + "lib_chatcmdbuilder", + "carpets", + "digiterms", + "display_modpack", + "biofuel", + "automobiles_pck", + "nutrional", + "denseores", + "airtanks", + "handholds_redo", + "bike", + "pixelfurniture", + "airutils", + "ju52", + "ju52_hydro", + "supercub", + "hidroplane", + "heli", + "trike", + "pa28", + "spacecannon", + "accountmgr", + "farmtools", + "imese", + "scifi_nodes", + "beacons", + "dfcaverns", + "tunnelmaker", + "railbuilder", + "advtrains", + "advtrains_moreslopes", + "advtrains_platform", + "advtrains_horntrack", + "dlxtrains", + "classic_coaches", + "tfl_s7_stock_modpack", + "advtrains_train_rocket", + "advtrains_subway_ny", + "advtrains_train_orient_express", + "advtrains_train_jpntlr600", + "advtrains_transib", + "advtrains_freight_train", + "advtrains_bboe_1080", + "advtrains_db_160", + "advtrains_train_zugspitzbahn", + "ethereal", + "wihelminessound", + "datacard", + "x_enchanting", + "bucket_wooden", + "motorboat", + "mobkit", + "digicontrol", + "colorful_beds", + "discovery_maps", + "computertest", + "more_ladders", + "colored_chests", + "bonemeal", + "livingdesert", + "livingjungle", + "naturalbiomes", + "ambience", + "marinara", + "people", + "marinaramobs", + "nativevillages", + "winuserleafdecay", + "everness", + "cottages", + "towercrane", + "homedecor_modpack", + "pipeworks", + "lwcomponents", + "moretubes", + "omnidriver", + "plantlife_modpack", + "ebiomes", + "biome_lib", + "mobs", + "yl_api_nodestages", + "yl_canned_food", + "yl_canned_food_mtg", + "mobs_water", + "mobs_animal", + "glooptest", + "mobs_horse", + "mobs_mese_monster_classic", + "dmobs", + "travelnet", + "hangglider", + "fakelib", + "3d_armor", + "illumination", + "hazmat_suit", + "headlamp", + "technic_armor", + "unified_inventory", + "unified_inventory_plus", + "vizlib", + "cool_trees", + "powerbanks", + "mobs_monster", + "treecapitator", + "moretrees", + "moreores", + "toolranks", + "toolranks_extras", + "charcoal", + "awards", + "moreawards", + "ancient_bones", + "bakedclay", + "orienteering", + "ccompass", + "spacesuit", + "ropes", + "obsidianstuff", + "more_chests", + "multitools", + "luanti_utils", + "vines", + "morebricks", + "place_rotated", + "digtron", + "drawers", + "elevator", + "stamina", + "lavastuff", + "wetmud", + "geocache", + "locator", + "jumpdrive", + "loot", + "maple", +} + +-- this list was obtained from running ls -1 in the worldmods directory +local current_mods = { + "3d_armor", + "accountmgr", + "advtrains", + "advtrains_bboe_1080", + "advtrains_db_160", + "advtrains_freight_train", + "advtrains_horntrack", + "advtrains_moreslopes", + "advtrains_platform", + "advtrains_subway_ny", + "advtrains_train_jpntlr600", + "advtrains_train_orient_express", + "advtrains_train_rocket", + "advtrains_train_zugspitzbahn", + "advtrains_transib", + "airtanks", + "airutils", + "ambience", + "ancient_bones", + "anvil", + "automobiles_pck", + "awards", + "bakedclay", + "basic_materials", + "beacons", + "bike", + "biofuel", + "biome_lib", + "bucket_wooden", + "carpets", + "ccompass", + "charcoal", + "classic_coaches", + "colored_chests", + "coloredstrings", + "colorful_beds", + "computertest", + "cool_trees", + "cottages", + "datacard", + "denseores", + "desertores", + "dfcaverns", + "digicontrol", + "digilines", + "digistuff", + "digiterms", + "digtron", + "discovery_maps", + "display_modpack", + "dlxtrains", + "dmobs", + "drawers", + "ebiomes", + "edit_skin", + "elevator", + "everness", + "eye_spy", + "fakelib", + "farming", + "farmtools", + "fishing_boat", + "geocache", + "grass_string", + "hammersredo", + "handholds_redo", + "hangglider", + "hazmat_suit", + "headlamp", + "heli", + "hidroplane", + "home_workshop_modpack", + "homedecor_modpack", + "illumination", + "ju52", + "ju52_hydro", + "jumpdrive", + "lavastuff", + "lib_chatcmdbuilder", + "livingcaves", + "livingcavesmobs", + "livingdesert", + "livingjungle", + "locator", + "lwcomponents", + "marinara", + "marinaramobs", + "mesecons", + "mesecons_carts", + "mob_horse", + "mob_mese_monster_classic", + "mobkit", + "mobs", + "mobs_animal", + "mobs_monster", + "mobs_water", + "more_chests", + "more_ladders", + "moreawards", + "moreblocks", + "morebricks", + "moreores", + "moretrees", + "moretubes", + "motorboat", + "multitools", + "nativevillages", + "naturalbiomes", + "nutritional", + "obsidianstuff", + "omnidriver", + "orienteering", + "pa28", + "people", + "pipeworks", + "pixelfurniture", + "place_rotated", + "plantlife_modpack", + "plastic_bucket", + "plasticbox", + "plutoniumships", + "powerbanks", + "railbuilder", + "renewable_desert_stone", + "roads", + "ropes", + "scifi_nodes", + "spacecannon", + "spacesuit", + "stamina", + "steel", + "stnodes", + "supercub", + "technic_armor", + "technic_plus", + "tfl_s7_stock_modpack", + "too_many_tnt", + "toolranks", + "toolranks_extras", + "towercrane", + "travelnet", + "treecapitator", + "trike", + "tunnelmaker", + "unified_inventory", + "unified_inventory_plus", + "unifieddyes", + "uraniumstuff", + "vizlib", + "wetmud", + "whitelist", + "wilhelminessounds", + "winuserleafdecay", + "worldedit", + "x_enchanting", + "x_farming", + "xcompat", + "xdecor", + "yl_api_nodestages", + "yl_canned_food", + "yl_canned_food_mtg", +} + +local function uniqify_mods(mod_list) + print(#mod_list .. " mods listed.") + + local unique = {} + for _, name in ipairs(mod_list) do unique[name] = true end + + mod_list = {} + for name in pairs(unique) do mod_list[#mod_list + 1] = name end + + print(#mod_list .. " unique.") + table.sort(mod_list) + + return mod_list +end + +local function open_mods_search(mod_list) + for i, name in ipairs(mod_list) do + print("Opening search for " .. name) + os.execute("open \"https://content.luanti.org/packages/?q=" .. name .. "\"") + os.execute("sleep 1") -- open creates race conditions with itself, so these are not opened in order, despite being called in order + if i % 9 == 0 then + print("Press enter to continue.") + io.read("*line") + end + end +end + +local function detect_inconsistencies() + local mods_unique = {} + for _, name in ipairs(mods) do mods_unique[name] = true end + local current_mods_hashtable = {} + for _, name in ipairs(current_mods) do current_mods_hashtable[name] = true end + + -- local missing_mods, overstated_mods = {}, {} -- I don't need to make the lists because they're so small.. I hope + for name in pairs(current_mods_hashtable) do + if not mods_unique[name] then print(name .. " missing from manual list.") end + end + print() + for name in pairs(mods_unique) do -- this list SHOULD exist, but already fixed in my markdown note + if not current_mods_hashtable[name] then print(name .. " listed, but was rejected.") end + end + print() +end +detect_inconsistencies() + +open_mods_search(uniqify_mods(mods))