
ModsJava
Ancient City Underground
Makes Ancient Cities generate densely underground in all Overworld biomes. Every chunk is covered by city structures with moderate overlap. Players spawn…
⬇ Download on Modrinth
Ancient City Underground 🏛️
Let Ancient Cities Fill the Underground
Introduction
Ancient City Underground is a Fabric mod that completely reworks Ancient City generation:
- All Biomes — Ancient Cities are no longer restricted to the Deep Dark. They generate in all Overworld biomes underground.
- High Density — Generation spacing of 10 chunks. With a 128-block city radius, every chunk is covered by city structures.
- Moderate Overlap — Cities overlap just enough for full coverage without excessive clustering.
- Safe Spawning — On first join, players spawn at a random safe spot inside the nearest city — a walkway, courtyard, or other open area.
- Bedrock Roof — A bedrock layer at Y=60 seals the underground world. No blocks or mobs generate above it.
- Fully Compatible — Does not affect End Portals, Strongholds, or any other vanilla structures.
Features
| Feature | Description |
|---|---|
| 🗺️ All Biomes | Generate under plains, deserts, forests, oceans, mountains — every Overworld biome |
| 📐 Optimized Density | spacing=10, separation=2, ~160 block average spacing, 128-block coverage radius |
| 🎲 Random Spawn | Each new world spawns you at a different spot — courtyard, walkway, or city gate |
| 🛡️ Safety Check | Automatically verifies ground is solid, body and head are in open air |
| 🧱 Bedrock Roof | Bedrock layer at Y=60 with no blocks or mobs above — a sealed underground world |
| ⚡ Lightweight | Pure datapack overrides + Mixin, no vanilla structure definitions modified |
Versions
Two versions are available:
| Version | Features | JAR |
|---|---|---|
| Full | Ancient cities + spawn + bedrock roof Y=60 + no mobs | ancient-city-underground-full-1.0.0.jar |
| Classic | Ancient cities + spawn only | ancient-city-underground-classic-1.0.0.jar |
Requirements
- Minecraft: 1.21.11
- Loader: Fabric Loader ≥ 0.19.3
- Dependency: Fabric API ≥ 0.141.4+1.21.11
- Java: ≥ 21
This is a SERVER-SIDE mod. It works on dedicated servers, and clients do not need to install it. For single-player, it works as normal.
Installation
- Install Fabric Loader
- Download Fabric API
- Download the mod JAR
- Place the JAR into
.minecraft/mods/ - Launch the game and create a new world
Technical Details
How it works
| Mechanism | Method |
|---|---|
| All-biome generation | Datapack override: has_structure/ancient_city.json → #minecraft:is_overworld |
| Generation density | Datapack override: structure_set/ancient_city.json → spacing=10, separation=2 |
| Player spawn | Mixin into PlayerList#placeNewPlayer — finds nearest city, picks random safe position |
| Bedrock roof | Mixin into LevelChunk constructor — clears blocks above Y=60, places bedrock at Y=60 |
| Mob restriction | Mixin into NaturalSpawner — cancels spawns above Y=60 |
Structure Set Parameters
{
"placement": {
"type": "minecraft:random_spread",
"spacing": 10,
"separation": 2,
"salt": 191119
}
}
| Parameter | Value | Description |
|---|---|---|
spacing |
10 | Grid size in chunks. One city per 10×10 chunk cell |
separation |
2 | Minimum distance from cell boundary |
| Min center distance | 64 blocks | Closest two cities can be |
| Max center distance | 256 blocks | Farthest two cities can be (edges just touch) |
| Coverage radius | 128 blocks | Vanilla max_distance_from_center, unchanged |
Screenshots

Compatibility
- ✅ Ancient Cities in all Overworld biomes
- ✅ No vanilla structure definitions modified
- ✅ End Portals unaffected
- ✅ Strongholds unaffected
- ✅ Other structures unaffected
- ℹ️ Only affects newly generated chunks (requires new world)
License
This project is available under the CC0 1.0 Universal license. Feel free to use, modify, and share.
Made with ❤️ by xiaomaiya
Verified by MCModsHub
- Ships as ancient-city-underground-1.0.0.jar — drop this file into the mods folder
- Download size: 1.9 MB
- Download link checked 31 Aug 2026 — working
These come from our own check of the pack file, not from the source page.