MipMap
MipMap copied to clipboard
MipMap - Interactive Online Map for Endstone & LeviLamina.
🗺️ MipMap
Interactive online map for Minecraft Bedrock servers
🎬 See It In Action
🗺️ Real-time rendering • 🎨 Depth shading • 👥 Player tracking
✨ What is MipMap?
MipMap transforms your Minecraft Bedrock server into a living, breathing web map. As players explore, the world renders itself automatically — no commands, no waiting, just pure real-time magic.
Two parts. One vision:
🎮 Plugin — Captures chunk data as your world loads and streams it to the web
🌐 Web Server — Generates beautiful map tiles and serves an interactive interface
💜 The map that grows with your world.
No manual rendering. No restarts. Just exploration.
🚀 Features
🔄 Real-Time UpdatesChunks appear on the map instantly as they load in-game. Watch your world expand as players explore. 🌍 Multi-DimensionalNavigate between Overworld, Nether, and The End with a single click. Each dimension, beautifully rendered. 👥 Player TrackingSee who's online, where they are, and even their Minecraft skins — all live on the map. |
🎨 Dynamic LightingBlocks rendered with depth-aware shading, ambient occlusion, and custom color palettes. Your world never looked this good. ⚡ Batch LoadingPre-render entire regions with 🐳 Docker ReadyOne command. One container. Your map is live in seconds. |
📦 Installation
Step 1️⃣: Install the Plugin
Download the latest plugin file from Releases and place it in your server's plugins folder. Restart the server.
For LeviLamina: You need to have LeviStone installed.
Step 2️⃣: Launch the Web Server
🐳 Option A: Docker (Recommended)
cd webmap
docker build -t mipmap-webmap .
docker run -d --name mipmap-webmap -p 8000:8000 mipmap-webmap
✅ Done! Visit http://localhost:8000
🐍 Option B: Local with Uvicorn
cd webmap
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000
✅ Done! Visit http://localhost:8000
🎮 Usage
Commands
| Command | Description |
|---|---|
/loadmap |
Start loading with default area from config |
/loadmap <minX> <minZ> <maxX> <maxZ> |
Start loading with custom coordinates |
/loadmap status |
Check current loading progress and remaining areas |
/loadmap help |
Display command usage |
⚙️ Configuration
Plugin Settings
Edit plugins/mipmap/config.toml:
| Key | Type | Default | Description |
|---|---|---|---|
sendPlayers |
boolean |
true |
Enable player position tracking |
api.chunks |
string |
"http://localhost:8000/api/chunks-data" |
Chunks data endpoint |
api.players |
string |
"http://localhost:8000/api/players-data" |
Players data endpoint |
mapLoading.batchSize |
int |
100 |
Number of chunks to process per batch |
mapLoading.maxAreas |
int |
10 |
Maximum concurrent loading areas |
blacklist.blocks |
array |
["air", "water", ...] |
Blocks to skip when finding surface |
Web Server Settings
Edit webmap/core/config.py:
| Key | Type | Default | Description |
|---|---|---|---|
MAP_SIZE |
int |
2000 |
Map viewport size in pixels (width/height) |
MAP_UPDATE_INTERVAL |
int |
5000 |
Player position update interval (milliseconds) |
MAP_DEFAULT_WORLD |
string |
"Overworld" |
Default dimension to display on load |
GENERATE_ZOOM_INTERVAL |
int |
300 |
Zoom level generation interval (seconds) |
Example:
MAP_SIZE = 3000 # Larger viewport for bigger screens
MAP_UPDATE_INTERVAL = 3000 # Update players every 3 seconds
MAP_DEFAULT_WORLD = "Nether" # Start in the Nether
Web Server Data Structure
webmap/data/
├── worlds/ # 🌍 World data organized by dimension
│ ├── Overworld/
│ │ └── tiles/ # 🖼️ Generated PNG tiles
│ │ ├── zoom-0/
│ │ ├── zoom-1/
│ │ └── zoom-2/
│ ├── Nether/
│ │ └── tiles/
│ └── TheEnd/
│ └── tiles/
├── skins/ # 👤 Player skin cache
│ └── default.png
└── failedTextures.json # 🚫 Failed texture loading log
📡 API Reference
POST /api/chunks
Receives chunk data from the plugin.
Request Body:
{
"chunk": {
"dimension": "Overworld",
"blocks": [
{
"name": "minecraft:grass_block",
"coordinates": [64, 72, -32]
},
{
"name": "minecraft:stone",
"coordinates": [64, 71, -32]
}
]
}
}
POST /api/players
Receives player position data.
Request Body:
{
"players": [
{
"name": "Steve",
"skin": "89504e47...", // Hex-encoded PNG
"skinShape": [64, 64, 4],
"dimension": "Overworld",
"x": 123.45,
"y": 64.0,
"z": -67.89
}
]
}
🛠️ Tech Stack
🗓️ Roadmap
- [x] 🌍 Overworld rendering
- [x] ⚡ Real-time chunk updates
- [x] 👥 Player tracking with skins
- [x] 📦 Batch loading command
- [x] 🐳 Docker deployment
- [x] 🌌 The End dimension support
- [ ] 🔥 Nether dimension support
- [ ] 🎨 Custom dimension API
🤝 Contributing
Contributions are welcome! Fork the repo, make your changes, and open a Pull Request.
📜 License
This project is licensed under the MIT License. See LICENSE for details.
✨ MipMap - where each block finds its place. ✨