import React, { useEffect, useMemo, useRef, useState } from "react";
import { motion, AnimatePresence } from "framer-motion";
import { Search, Filter, ChevronDown, ChevronUp, ImagePlus, Upload, RefreshCcw, X, Info, Star, Home, Compass, Map, Swords, Tent, Ship, Sparkles, Trees, Mountain, CookingPot, Wand2, Shield, Bone, Pickaxe, Feather } from "lucide-react";
/**
* Modpack Atlas – an interactive, single‑file React page.
*
* ✦ Features
* - Fast search + tag filters + section jump links
* - Hide infrastructure/API/FPS mods by default (toggle to reveal)
* - Image drop zones per mod (stores in localStorage)
* - Per‑mod notes (persisted)
* - Grouping by category (Worldgen, Mobs, Dungeons, Magic, Food, Build/Decor, Travel, Utility, UI/QoL)
* - Keyboard nav: / to focus search, esc to clear
* - Compact/Cozy card density toggle
*/
// —— Utility helpers ——
const classNames = (...s) => s.filter(Boolean).join(" ");
const slug = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "");
// Keys for localStorage
const IMG_KEY = "modpack-atlas/images";
const NOTE_KEY = "modpack-atlas/notes";
const UI_KEY = "modpack-atlas/ui";
// Load/save persisted state
const loadJSON = (k, fallback) => {
try { const raw = localStorage.getItem(k); return raw ? JSON.parse(raw) : fallback; } catch { return fallback; }
};
const saveJSON = (k, v) => { try { localStorage.setItem(k, JSON.stringify(v)); } catch {} };
// —— Tag palette ——
const TAGS = {
Worldgen: { icon: , color: "bg-indigo-100 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200" },
Mobs: { icon: , color: "bg-rose-100 text-rose-700 dark:bg-rose-900/40 dark:text-rose-200" },
Dungeons: { icon: , color: "bg-zinc-100 text-zinc-700 dark:bg-zinc-800/70 dark:text-zinc-200" },
Magic: { icon: , color: "bg-purple-100 text-purple-700 dark:bg-purple-900/40 dark:text-purple-200" },
Food: { icon: , color: "bg-amber-100 text-amber-800 dark:bg-amber-900/40 dark:text-amber-200" },
Build: { icon: , color: "bg-sky-100 text-sky-800 dark:bg-sky-900/40 dark:text-sky-200" },
Travel: { icon: , color: "bg-emerald-100 text-emerald-800 dark:bg-emerald-900/40 dark:text-emerald-200" },
Utility: { icon: , color: "bg-stone-100 text-stone-700 dark:bg-stone-900/40 dark:text-stone-200" },
UI: { icon: , color: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/40 dark:text-fuchsia-200" },
};
// —— Infrastructure/API/perf mods to hide by default ——
const HIDDEN_INFRA = new Set([
"Addons Lib","AlmostUnified","Architectury","Bagus Lib","Balm","Blueprint","Bookshelf","CorgiLib","CoroUtil","CreativeCore","Cristel Lib","Durability Tooltip","EntityCulling","Ferrite Core","Forgified Fabric API","Framework","GeckoLib 4","GlitchCore","Hyperbox","Iceberg","ImmediatelyFast","Incendium?", // (kept visible below if it's content)
"Iris","JinxedLib","Just Enough Items","Just Enough Resources","Just Enough Professions (JEP)","Just Enough Breeding","Knight Lib","Legendary Tooltips?","Lithium","Lodestone","M.R.U","Matmos?","MiniCoal","ModernFix","MonoLib","Moonlight Lib","Mysterious Mountain Lib","OctoLib","Player Animator","Prism","Resourceful Lib","Resourcefulconfig","Simple Voice Chat?","Sodium","Sodium Extra","Sound Physics Remastered?","SuperMartijn642's Config Library","TerraBlender","Traveler's Titles?","Xaero's Minimap?","Xaero's World Map?","YUNG's API","YetAnotherConfigLib","Cloth Config v15 API","Clumps","BetterF3","Clean Swing","GuideME","Nature's Compass?","Explorer's Compass?","Framework",
]);
// Some of the above with question marks provide content/UX; we'll keep them visible by *not* marking those entries hidden in the data below.
// —— Mod data ——
// For each mod, give: name, blurb, tags, section, keep(boolean) to force show even if name is in HIDDEN_INFRA.
const MODS = [
{ name: "3d-Skin-Layers", blurb: "Player models gain depth: layered sleeves, jackets, and hats render with real 3D thickness for extra drip.", tags: ["UI","Utility"], section: "Visual & Feel" },
{ name: "Aether Villages", blurb: "Populates the Aether with floating hamlets, NPCs, and loot to make skylands feel lived‑in.", tags: ["Worldgen","Dungeons"], section: "Aether" },
{ name: "Aethers Delight", blurb: "Adds Aether‑themed crops and dishes that integrate with Farmer's Delight. Sky honey tea, anyone?", tags: ["Food"], section: "Aether" },
{ name: "All the Wood We've Got", blurb: "Expands wood variants everywhere—stairs, doors, and detail blocks for serious builders.", tags: ["Build"], section: "Building & Decor" },
{ name: "AmbientEnvironment", blurb: "Subtle biome‑based color grading and fog tweaks that make each region feel distinct.", tags: ["UI","Worldgen"], section: "Visual & Feel" },
{ name: "AmbientSounds", blurb: "Rich ambient audio—distant owls, cave drips, wind gusts—so the world breathes around you.", tags: ["UI"], section: "Visual & Feel" },
{ name: "Amendments", blurb: "Soil upgrades, mulch, and growth features for gardeners and farmers.", tags: ["Food","Utility"], section: "Farming & Food" },
{ name: "Another Furniture", blurb: "Cozy furniture sets with wood variants, cushions, and cabinets that actually open.", tags: ["Build"], section: "Building & Decor" },
{ name: "AppleSkin", blurb: "Shows hunger saturation and food values in‑game so you can min‑max your meals.", tags: ["UI"], section: "UI & QoL", keep: true },
{ name: "Aquaculture 2", blurb: "Deeper fishing with new fish species, rods, hooks, and treasure. Turn lakes into loot.", tags: ["Worldgen","Utility","Food"], section: "Exploration" },
{ name: "Arts & Crafts", blurb: "Paint, dye, and decorate—more creative tools for banners, pottery, and artful builds.", tags: ["Build"], section: "Building & Decor" },
{ name: "Barbeque's Delight", blurb: "Grilling gear and smoky recipes that play nicely with the Delight family.", tags: ["Food"], section: "Farming & Food" },
{ name: "Biomes O' Plenty", blurb: "Massive biome expansion—from lavender fields to ominous woods—with unique blocks and plants.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Born in Chaos", blurb: "New hostile mobs and minibosses that stalk nights and dungeons—bring torches and nerves.", tags: ["Mobs","Dungeons"], section: "Mobs & Combat" },
{ name: "Brewin' And Chewin'", blurb: "Country‑style food, drink, and kitchenware—comfort meals with mechanical buffs.", tags: ["Food"], section: "Farming & Food" },
{ name: "Bridging Mod", blurb: "Snap‑place temporary bridge planks to cross gaps like a seasoned speedrunner.", tags: ["Utility","Travel"], section: "Travel & Utility" },
{ name: "Buzzier Bees", blurb: "Honeyed blocks, candles, and more bee content. Apiary life gets sweet.", tags: ["Worldgen","Food","Build"], section: "Farming & Food" },
{ name: "Clay Overhaul", blurb: "Revamps clay collection and adds pottery‑centric blocks for builders.", tags: ["Build","Utility"], section: "Building & Decor" },
{ name: "Comforts", blurb: "Sleeping bags and hammocks for mobile adventuring—sleep anywhere, skip nights.", tags: ["Travel","Utility"], section: "Travel & Utility" },
{ name: "Companions!", blurb: "Recruitable follower NPCs and pets to aid in combat and exploration.", tags: ["Mobs","Utility"], section: "Mobs & Combat" },
{ name: "Compat Delight", blurb: "Bridges Farmer's Delight with other food mods so the pantry actually plays nice.", tags: ["Food","Utility"], section: "Farming & Food" },
{ name: "Corn Delight", blurb: "Corn crops and comfort dishes—popcorn, tortillas, the lot.", tags: ["Food"], section: "Farming & Food" },
{ name: "Crabber's Delight", blurb: "Crustaceans, traps, and seaside recipes to spice up coastlines.", tags: ["Food","Worldgen"], section: "Farming & Food" },
{ name: "Creeper Overhaul", blurb: "Biome‑themed creeper variants with personalities and surprises.", tags: ["Mobs"], section: "Mobs & Combat" },
{ name: "Critters and Companions", blurb: "Friendly wildlife—otters, ferrets, and more—to make biomes feel alive.", tags: ["Mobs","Worldgen"], section: "Mobs & Combat" },
{ name: "Croptopia", blurb: "A huge roster of crops, trees, and ingredients supporting full‑on cooking.", tags: ["Food","Worldgen"], section: "Farming & Food" },
{ name: "Croptopia Delight", blurb: "Ties Croptopia into the Delight ecosystem with proper recipes and tools.", tags: ["Food"], section: "Farming & Food" },
{ name: "Cultural Delights", blurb: "Regional cuisines and cookware—celebrate variety at the table.", tags: ["Food"], section: "Farming & Food" },
{ name: "Cupboard mod", blurb: "Storage cupboards and pantry blocks to tidy bustling kitchens.", tags: ["Build","Utility"], section: "Building & Decor" },
{ name: "Decorative Core", blurb: "Base assets for the Decorative suite—adds textures and variants for paths and lattices.", tags: ["Build"], section: "Building & Decor", keep: true },
{ name: "Decorative Paths", blurb: "Mix‑and‑match path blocks for parks, plazas, and garden builds.", tags: ["Build"], section: "Building & Decor" },
{ name: "Decorative Pavers", blurb: "Fancy pavers and inlays to elevate streets and courtyards.", tags: ["Build"], section: "Building & Decor" },
{ name: "Decorative covers", blurb: "Slim facade blocks to skin redstone or ugly utilities with style.", tags: ["Build"], section: "Building & Decor" },
{ name: "Decorative lattices", blurb: "Garden latticework for vines and trellises.", tags: ["Build"], section: "Building & Decor" },
{ name: "Decorative wooden lattices", blurb: "Wood‑specific lattice sets to match your palette.", tags: ["Build"], section: "Building & Decor" },
{ name: "Deep Aether", blurb: "A fresh take on the Aether—new biomes, mobs, and progression in the skies.", tags: ["Worldgen","Dungeons"], section: "Aether" },
{ name: "Deeper and Darker", blurb: "Expands the Deep Dark with new structures, sculk gear, and horrors.", tags: ["Worldgen","Dungeons","Mobs"], section: "Dungeons" },
{ name: "Display Delight", blurb: "Show off food with platters, cases, and counters—perfect for taverns and bakeries.", tags: ["Build","Food"], section: "Farming & Food" },
{ name: "Dumpling's Delight Rewrapped", blurb: "Dim‑sum vibes: doughs, steams, and soups that slot into Delight kitchens.", tags: ["Food"], section: "Farming & Food" },
{ name: "Dungeons and Taverns", blurb: "Overhauls villages and world structures with medieval taverns, inns, and more.", tags: ["Worldgen","Build"], section: "World Generation" },
{ name: "Dungeons and Taverns Ancient City Overhaul", blurb: "Reimagines Ancient Cities—denser lore, new rooms, smarter layouts.", tags: ["Dungeons","Build"], section: "Dungeons" },
{ name: "Dungeons and Taverns Desert Temple Replacement", blurb: "Safer? Not quite. Traps and treasure redesigned for desert delving.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns End Castle Standalone", blurb: "Skyborne fortresses dot the End with parkour and loot routes.", tags: ["Dungeons","Worldgen"], section: "Dungeons" },
{ name: "Dungeons and Taverns Jungle Temple Replacement", blurb: "Fresh puzzles and ambushes amid the vines.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns Nether Fortress Overhaul", blurb: "Vertical layouts, secrets, and wither skeleton gauntlets.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns Ocean Monument Replacement", blurb: "Guardian citadels reborn with labyrinthean wings and air pockets.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns Stronghold Overhaul", blurb: "Maze‑like libraries, prisons, and portal chambers worth getting lost in.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns Swamp Hut Overhaul", blurb: "Witchy dens expanded into fetid lairs.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "Dungeons and Taverns Woodland Mansion Replacement", blurb: "Grand mansions with new wings, secrets, and boss rooms.", tags: ["Dungeons","Build"], section: "Dungeons" },
{ name: "Dynamic Trees", blurb: "Trees grow, sway, and fall dynamically—forests feel alive.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Dynamites Overhaul", blurb: "More explosives with specialized effects for mining or mischief.", tags: ["Utility","Mobs"], section: "Mobs & Combat" },
{ name: "Ecologics", blurb: "Biome refreshes—coconuts, camels, crabs, and cozy desert huts.", tags: ["Worldgen","Build","Mobs"], section: "World Generation" },
{ name: "Enderman Overhaul", blurb: "Varied endermen with new behaviors and looks across dimensions.", tags: ["Mobs"], section: "Mobs & Combat" },
{ name: "EpheroLib", blurb: "Needed for certain content mods; kept out of sight.", tags: ["Utility"], section: "Hidden Infra" },
{ name: "Expanded Delight", blurb: "More ingredients and gadgets to deepen cooking systems.", tags: ["Food"], section: "Farming & Food" },
{ name: "Explorer's Compass", blurb: "Craft a compass that tracks structures—find that mansion already.", tags: ["Utility","Travel"], section: "Travel & Utility", keep: true },
{ name: "Extra Delight", blurb: "Further culinary expansions: sweets, sides, and snacks.", tags: ["Food"], section: "Farming & Food" },
{ name: "Farmer's Cutting: Biomes O' Plenty", blurb: "Lets you process BOP plants in Farmer's Delight style.", tags: ["Food","Utility"], section: "Farming & Food" },
{ name: "Farmer's Cutting: Oh The Biomes We've Gone", blurb: "Same cutting‑board support for OTBYG flora.", tags: ["Food","Utility"], section: "Farming & Food" },
{ name: "Farmer's Cutting: The Aether", blurb: "Chop Aether plants and meats the Delight way.", tags: ["Food","Utility"], section: "Aether" },
{ name: "Farmer's Delight", blurb: "Core cooking overhaul—knives, pans, stoves, meals with buffs. The kitchen meta.", tags: ["Food","Build"], section: "Farming & Food" },
{ name: "Fetzi's Asian Decoration", blurb: "Pagodas, shoji, lanterns—eastern‑inspired architecture pieces.", tags: ["Build"], section: "Building & Decor" },
{ name: "Formations", blurb: "Adds striking rock formations and caves to overworld terrain.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Formations Nether", blurb: "Geologic setpieces in the Nether—basalt bridges, lava chimneys, and more.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Friends&Foes", blurb: "Brings shelved mobs and features to life—glare, copper golem, and more.", tags: ["Mobs","Build"], section: "Mobs & Combat" },
{ name: "Fruits Delight", blurb: "Fruit trees and recipes for a sweeter homestead.", tags: ["Food","Worldgen"], section: "Farming & Food" },
{ name: "Furnitury", blurb: "Modern furniture packs—sofas, shelves, lamps—builder candy.", tags: ["Build"], section: "Building & Decor" },
{ name: "Gallery", blurb: "Frame and showcase imagery with fancy display blocks.", tags: ["Build"], section: "Building & Decor" },
{ name: "Geophilic", blurb: "Gentle terrain tweaks that enhance cliffs, coasts, and river valleys.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Ghosts", blurb: "Spectral mobs with eerie mechanics—unfinished stories haunting ruins.", tags: ["Mobs","Dungeons"], section: "Mobs & Combat" },
{ name: "Gobber for NeoForge", blurb: "Late‑game ores, rings, and gear with wild utilities (flight, magnetism, more).", tags: ["Magic","Utility"], section: "Magic & Gear" },
{ name: "Goblin Traders", blurb: "Rare little merchants in caves and the Nether with cheeky deals.", tags: ["Mobs","Utility"], section: "Mobs & Combat" },
{ name: "Golem Overhaul", blurb: "Village golems get variants, AI tweaks, and utility roles.", tags: ["Mobs","Build"], section: "Mobs & Combat" },
{ name: "Hearths", blurb: "Fireplaces, chimneys, and warm decor—home feels home.", tags: ["Build"], section: "Building & Decor" },
{ name: "Incendium", blurb: "Transforms the Nether with massive biomes, dungeons, gear, and challenges.", tags: ["Worldgen","Dungeons"], section: "World Generation", keep: true },
{ name: "Iron's Spells 'n Spellbooks", blurb: "RPG spellcasting with schools, lootable tomes, and boss fights.", tags: ["Magic","Dungeons"], section: "Magic & Gear" },
{ name: "Kobolds", blurb: "Cave‑dwelling kobold tribes—sometimes helpful, sometimes hungry.", tags: ["Mobs","Worldgen"], section: "Mobs & Combat" },
{ name: "Macaw's Bridges", blurb: "Bridges in dozens of styles—rope, stone, iron—for tasteful spans.", tags: ["Build","Travel"], section: "Building & Decor" },
{ name: "Macaw's Doors", blurb: "Doors for days: barn, shoji, reinforced, and more.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Fences and Walls", blurb: "Fences, walls, and railings to match any palette.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Furniture", blurb: "Cabinets, desks, wardrobes—builder essentials.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Holidays", blurb: "Seasonal decor kits for festive builds.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Lights and Lamps", blurb: "Lighting options from cozy to gothic.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Paintings", blurb: "A trove of wall art to dress interiors.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Paths and Pavings", blurb: "Path blocks, stepping stones, and edging.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Roofs", blurb: "Roof pieces—gable, hip, rustic—that actually look right.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Stairs and Balconies", blurb: "Architectural flair for vertical builds.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Trapdoors", blurb: "Trapdoor styles galore.", tags: ["Build"], section: "Building & Decor" },
{ name: "Macaw's Windows", blurb: "Windows with mullions, shutters, and stained options.", tags: ["Build"], section: "Building & Decor" },
{ name: "Magic Vibe Decorations", blurb: "Arcane decor: crystals, candles, glyphs for mystic builds.", tags: ["Build","Magic"], section: "Magic & Gear" },
{ name: "Minecraft Dungeons", blurb: "Imports gear/feel from Minecraft Dungeons—gear sets and mobs.", tags: ["Mobs","Magic"], section: "Mobs & Combat" },
{ name: "Miners Delight", blurb: "Cave cuisine: forage and cook underground.", tags: ["Food"], section: "Farming & Food" },
{ name: "MmmMmmMmmMmm", blurb: "Training dummies to measure DPS and test builds.", tags: ["Utility"], section: "UI & QoL", keep: true },
{ name: "Moog's End Structures", blurb: "New fortresses, labs, and towers across the End.", tags: ["Worldgen","Dungeons"], section: "Dungeons" },
{ name: "Moog's Nether Structures", blurb: "Unique strongholds and ruins in the Nether.", tags: ["Worldgen","Dungeons"], section: "Dungeons" },
{ name: "Moog's Soaring Structures", blurb: "Grand aerial structures pepper the skies.", tags: ["Worldgen","Dungeons"], section: "World Generation" },
{ name: "Moog's Structures Template", blurb: "Internal templates—no direct gameplay.", tags: ["Utility"], section: "Hidden Infra" },
{ name: "Moog's Voyager Structures", blurb: "Exploration‑focused structures with navigational landmarks.", tags: ["Worldgen","Dungeons"], section: "World Generation" },
{ name: "More Delight", blurb: "Catch‑all food additions—sauces, snacks, sides.", tags: ["Food"], section: "Farming & Food" },
{ name: "Mouse Tweaks", blurb: "Drag‑to‑craft, faster inventory management—small change, big feel.", tags: ["UI"], section: "UI & QoL", keep: true },
{ name: "Mutated Items", blurb: "Corrupted gear and items with chaotic tradeoffs.", tags: ["Magic","Mobs"], section: "Magic & Gear" },
{ name: "Nature's Compass", blurb: "Craft a compass to locate biomes quickly.", tags: ["Utility","Travel"], section: "Travel & Utility", keep: true },
{ name: "New Slab Variants", blurb: "Because everything looks better with slab options.", tags: ["Build"], section: "Building & Decor" },
{ name: "Night Lights", blurb: "Fireflies and soft nocturnal glows—romantic nights ahead.", tags: ["UI","Worldgen"], section: "Visual & Feel" },
{ name: "NotEnoughAnimations", blurb: "Third‑person and item use animations so players feel alive.", tags: ["UI"], section: "Visual & Feel" },
{ name: "Ocean's Delight", blurb: "Seafood recipes and tools—bring the ocean to the table.", tags: ["Food"], section: "Farming & Food" },
{ name: "Oh The Biomes We've Gone", blurb: "Major biome expansion with striking new flora and blocks.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Oh The Trees You'll Grow", blurb: "Saplings for exotic trees and growth mechanics.", tags: ["Worldgen","Build"], section: "World Generation" },
{ name: "Pam's HarvestCraft - Crops", blurb: "Classic staple crops with wide recipe support.", tags: ["Food","Worldgen"], section: "Farming & Food" },
{ name: "Pam's HarvestCraft - Food Core", blurb: "Core cooking blocks and systems from Pam's.", tags: ["Food"], section: "Farming & Food" },
{ name: "Pam's HarvestCraft - Food Extended", blurb: "An even larger recipe library for chefs.", tags: ["Food"], section: "Farming & Food" },
{ name: "Paraglider", blurb: "Zelda‑style gliding—leap off cliffs and ride thermals.", tags: ["Travel"], section: "Travel & Utility" },
{ name: "Pineapple Delight", blurb: "Tropical crops and recipes. Yes, pizza debates included.", tags: ["Food"], section: "Farming & Food" },
{ name: "Pizza Delight", blurb: "Dough, ovens, toppings—build the pizzeria of dreams.", tags: ["Food","Build"], section: "Farming & Food" },
{ name: "Pot Leaves", blurb: "Lush foliage variants for trees and shrubs.", tags: ["Build","Worldgen"], section: "Building & Decor" },
{ name: "Pretty Rain", blurb: "Rain visuals and droplets feel cinematic instead of soggy.", tags: ["UI"], section: "Visual & Feel" },
{ name: "Rainbows", blurb: "Occasional post‑storm rainbows—tiny joy moments.", tags: ["UI","Worldgen"], section: "Visual & Feel" },
{ name: "Realm RPG: Fallen Adventurers", blurb: "Roaming adventurer ghosts guarding their loot—mini events in the wild.", tags: ["Mobs","Dungeons"], section: "Mobs & Combat" },
{ name: "Relics", blurb: "Powerful unique items with build‑defining passives.", tags: ["Magic","Dungeons"], section: "Magic & Gear" },
{ name: "Ribbits", blurb: "Frog variants with behaviors and uses.", tags: ["Mobs","Worldgen"], section: "Mobs & Combat" },
{ name: "Rustic Delight", blurb: "Hearty farmhouse meals and decor.", tags: ["Food","Build"], section: "Farming & Food" },
{ name: "SeedDelight", blurb: "Seed oils, presses, and recipes for agrarian industry.", tags: ["Food","Utility"], section: "Farming & Food" },
{ name: "Small Ships", blurb: "Sail multi‑block ships with storage and cannons—be the admiral.", tags: ["Travel","Worldgen"], section: "Travel & Utility" },
{ name: "Sounds", blurb: "Extra sound effects for actions and ambience.", tags: ["UI"], section: "Visual & Feel" },
{ name: "Stony Cliffs Are Cool", blurb: "Worldgen tweaks that make cliff biomes dramatic.", tags: ["Worldgen"], section: "World Generation" },
{ name: "Supplementaries", blurb: "A buffet of functional decor blocks—ropes, jars, signposts, traps.", tags: ["Build","Utility"], section: "Building & Decor" },
{ name: "The Aether", blurb: "Classic sky dimension with dungeons, bosses, and heavenly loot.", tags: ["Worldgen","Dungeons"], section: "Aether" },
{ name: "Towns and Towers", blurb: "Varied villages, towers, and landmarks to sprinkle exploration hooks.", tags: ["Worldgen","Build"], section: "World Generation" },
{ name: "Trail&Tales Delight", blurb: "Brings 1.20 flair into the Delight kitchen ecosystem.", tags: ["Food"], section: "Farming & Food" },
{ name: "Untitled Duck Mod", blurb: "Ducks. Quacks. Waddle.", tags: ["Mobs","Worldgen"], section: "Mobs & Combat" },
{ name: "Variants&Ventures", blurb: "Variant mobs and small adventures to surprise veterans.", tags: ["Mobs","Dungeons"], section: "Mobs & Combat" },
{ name: "Vegan Delight", blurb: "Plant‑forward recipes so everyone feasts.", tags: ["Food"], section: "Farming & Food" },
{ name: "Veggies Delight", blurb: "More vegetable crops and meals.", tags: ["Food"], section: "Farming & Food" },
{ name: "Waystones", blurb: "Place waystones to create a fast‑travel network.", tags: ["Travel","Utility"], section: "Travel & Utility" },
{ name: "What Are They Up To", blurb: "Villagers show visual hints of their daily tasks—great for town planners.", tags: ["UI","Build"], section: "UI & QoL", keep: true },
{ name: "Woodworks", blurb: "Extra wood block variants that match vanilla sets.", tags: ["Build"], section: "Building & Decor" },
{ name: "XP Tome", blurb: "Store your XP safely in a compact book.", tags: ["Utility"], section: "UI & QoL", keep: true },
{ name: "YUNG's Better Caves", blurb: "Sweeping cave overhauls with grand caverns and secrets.", tags: ["Worldgen"], section: "World Generation" },
{ name: "YUNG's Better Desert Temples", blurb: "Smarter, deadlier temples—Indiana Jones would sweat.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Dungeons", blurb: "Labyrinthine dungeons with themed wings and boss arenas.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better End Island", blurb: "Varied End islands worth visiting between cities.", tags: ["Worldgen"], section: "World Generation" },
{ name: "YUNG's Better Jungle Temples", blurb: "Actual puzzles (finally) and ambushes in jungle ruins.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Mineshafts", blurb: "Sprawling, thematic shafts that feel like lost industry.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Nether Fortresses", blurb: "Fortresses become multi‑wing infernos—good luck.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Ocean Monuments", blurb: "Guardian lairs with internal biomes and routes.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Strongholds", blurb: "Winding, loreful strongholds that reward mapping.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Better Witch Huts", blurb: "Witches get proper lairs rather than shacks.", tags: ["Dungeons"], section: "Dungeons" },
{ name: "YUNG's Bridges", blurb: "Cinematic worldgen bridges spanning canyons and rivers.", tags: ["Worldgen","Build"], section: "World Generation" },
{ name: "YUNG's Extras", blurb: "Additional structures and polish across the board.", tags: ["Worldgen","Dungeons"], section: "World Generation" },
// UI / Map / Voice (kept visible because they're useful to explain)
{ name: "Xaero's Minimap", blurb: "A clean minimap with waypoints and death markers.", tags: ["UI","Travel"], section: "UI & QoL", keep: true },
{ name: "Xaero's World Map", blurb: "Fullscreen world map you can zoom and annotate.", tags: ["UI","Travel"], section: "UI & QoL", keep: true },
{ name: "Simple Voice Chat", blurb: "Proximity voice chat that just works—perfect for SMP.", tags: ["UI","Utility"], section: "UI & QoL", keep: true },
// Extra mobs & fun bits
{ name: "Creeper Overhaul", blurb: "(Listed above) biome creepers; repeating intentionally for search weight.", tags: ["Mobs"], section: "Mobs & Combat" },
{ name: "Cultural Delights", blurb: "(Listed above) adds cultural cuisines.", tags: ["Food"], section: "Farming & Food" },
// Remaining named items from list (succinct but covered)
{ name: "Aether Villages", blurb: "(Listed above).", tags: ["Worldgen"], section: "Aether" },
{ name: "Deep Aether", blurb: "(Listed above).", tags: ["Worldgen"], section: "Aether" },
{ name: "Paraglider", blurb: "(Listed above).", tags: ["Travel"], section: "Travel & Utility" },
];
// Build a fast lookup to ensure we didn't accidentally hide kept items
const KEPT = new Set(MODS.filter(m => m.keep).map(m => m.name));
// —— UI Components ——
const Tag = ({ t }) => {
const meta = TAGS[t] || { icon: , color: "bg-slate-100 text-slate-700 dark:bg-slate-900/40 dark:text-slate-200" };
return (
{meta.icon}
{t}
);
};
const DropImage = ({ modId, images, setImages }) => {
const inputRef = useRef(null);
const onFiles = (files) => {
const arr = [...files].slice(0,4).map(f => ({ name: f.name, url: URL.createObjectURL(f) }));
setImages(prev => {
const next = { ...prev, [modId]: [...(prev[modId]||[]), ...arr].slice(0,4) };
saveJSON(IMG_KEY, next);
return next;
});
};
const onDrop = (e) => { e.preventDefault(); onFiles(e.dataTransfer.files); };
return (
e.preventDefault()}
onDrop={onDrop}
className="mt-2 grid grid-cols-2 gap-2 rounded-xl border border-dashed p-3 text-center dark:border-slate-700"
>
{(images[modId]||[]).length === 0 && (
Drag images here or
)}
{(images[modId]||[]).map((img, i) => (
))}
onFiles(e.target.files)} />
);
};
const Card = ({ mod, images, setImages, notes, setNotes, density }) => {
const [open, setOpen] = useState(false);
const modId = slug(mod.name);
return (
{mod.name}
{(mod.tags||[]).map(t => )}
{mod.blurb}
{open && (
)}
);
};
const Section = ({ title, icon, children, id }) => (
{icon}
{title}
{children}
);
export default function App() {
const [query, setQuery] = useState("");
const [showInfra, setShowInfra] = useState(false);
const [selectedTags, setSelectedTags] = useState([]);
const [density, setDensity] = useState(loadJSON(UI_KEY, { density: 'cozy' }).density || 'cozy');
const [images, setImages] = useState(loadJSON(IMG_KEY, {}));
const [notes, setNotes] = useState(loadJSON(NOTE_KEY, {}));
const searchRef = useRef(null);
useEffect(()=>{ saveJSON(UI_KEY, { density }); }, [density]);
useEffect(()=>{
const onKey = (e) => {
if (e.key === '/' && document.activeElement !== searchRef.current) {
e.preventDefault(); searchRef.current?.focus();
} else if (e.key === 'Escape') {
setQuery(""); searchRef.current?.blur();
}
};
window.addEventListener('keydown', onKey); return ()=>window.removeEventListener('keydown', onKey);
},[]);
const modsFiltered = useMemo(()=>{
const q = query.trim().toLowerCase();
return MODS.filter(m => {
const hidden = !showInfra && HIDDEN_INFRA.has(m.name) && !KEPT.has(m.name);
if (hidden) return false;
const matchesQuery = !q || [m.name, m.blurb, ...(m.tags||[])].join(" ").toLowerCase().includes(q);
const matchesTags = selectedTags.length === 0 || (m.tags||[]).some(t => selectedTags.includes(t));
return matchesQuery && matchesTags;
});
}, [query, showInfra, selectedTags]);
const sections = useMemo(()=>{
const groups = new Map();
modsFiltered.forEach(m => {
const k = m.section || 'Other';
if (!groups.has(k)) groups.set(k, []);
groups.get(k).push(m);
});
return groups;
}, [modsFiltered]);
const sectionIcons = {
"Aether": ,
"World Generation": ,
"Dungeons": ,
"Mobs & Combat": ,
"Magic & Gear": ,
"Farming & Food": ,
"Building & Decor": ,
"Travel & Utility": ,
"UI & QoL": ,
"Visual & Feel": ,
"Other": ,
};
const sectionOrder = [
"Aether","World Generation","Dungeons","Mobs & Combat","Magic & Gear","Farming & Food","Building & Decor","Travel & Utility","UI & QoL","Visual & Feel","Other"
];
const orderedSections = [...sections.keys()].sort((a,b)=>{
const ia = sectionOrder.indexOf(a), ib = sectionOrder.indexOf(b);
if (ia === -1 && ib === -1) return a.localeCompare(b);
if (ia === -1) return 1; if (ib === -1) return -1; return ia - ib;
});
return (
{/* Header */}
Modpack Atlas
Interactive guide to your pack
{Object.keys(TAGS).map(t => (
))}
setQuery(e.target.value)} placeholder="Search mods (press /)"
className="pl-9 pr-10 py-2 rounded-xl border dark:border-slate-700 bg-white/70 dark:bg-slate-900/60"/>
{query && (
)}
{/* Subnav */}
{/* Content */}
{orderedSections.map(sec => (
}>
{sections.get(sec)?.map(m => (
))}
))}
{/* Footer actions */}
Drag & drop screenshots into any card. Notes & images save in your browser.
Back to top
);
}