# Terrafier > Rust-native Minecraft world painter — быстрее, легче, современнее. Нативная замена [WorldPainter](https://www.worldpainter.net) на Rust. Рендеринг карт через GPU, параллельный экспорт, CLI-first архитектура. ## Архитектура ``` ┌────────────────────────────────────────────────────┐ │ terrafier-cli terrafier-gui Библиотека │ │ (clap + json) (egui + eframe) (crates.io) │ ├───────────────────┬────────────────────────────────┤ │ terrafier-core │ модель мира, I/O, операции │ │ ┌──────┬──────┬──┴─────┬────────┐ │ │ │World │Tile │Export │Import │ │ │ │Model │Ops │Pipeline│Anvil │ │ │ └──────┴──────┴────────┴────────┘ │ ├──────────────────────┬─────────────────────────────┤ │ wasm-host / rhai │ Плагины и скриптинг │ ├──────────────────────┴─────────────────────────────┤ │ Foundation crates │ │ nbt │ fastanvil │ noise │ palette-compress │ │ biome-db │ └────────────────────────────────────────────────────┘ ``` ## Текущий статус (v0.1.0) ### Реализовано - **Модель мира**: World, Dimension, Tile (128×128), Terrain (7 типов), Layer trait, Platform - **Система координат**: явные конвертации BlockCoords → ChunkCoords → RegionCoords → TileCoords - **NBT**: full read/write, все типы тегов, gzip support - **Anvil**: чтение/запись .mca регионов, разбор чанков, секций, палитры - **Экспорт**: Terrafier → Java Edition 1.18+ save (секции, block_states, биомы) - **Импорт**: Java Edition save → Terrafier world (level.dat, регионы, surface) - **CLI**: new, import, export, info, render (с прогресс-барами, dry-run) - **GUI**: редактор на egui (viewport, инструменты, undo/redo) - **Операции**: Raise, Lower, Smooth, Flatten, Paint — с MultiTile поддержкой - **Heightmap**: noise-based генерация (OpenSimplex), flat, combined ### В работе / не реализовано - **WASM плагины** — wasmtime-хост, ABI, загрузка .wasm файлов - **Скриптинг** — Rhai-движок для world-генераторов - **i18n** — локализация CLI/GUI - **GUI polish** — pan/zoom GPU viewport, brush overlay, layer panel ## Стек | Компонент | Технология | |-----------|-----------| | Язык | Rust (edition 2024) | | GUI | egui + eframe | | GPU | (план) wgpu | | NBT | Самописный `nbt` crate | | Anvil | Самописный `fastanvil` crate | | Шум | `noise-rs` | | Параллелизм | rayon | | CLI | clap + indicatif | | Изображения | `image` crate | | Сериализация | serde + bincode | ### Почему egui, а не Tauri egui выбран за: - Immediate mode — нет оверхэда как у React, подходит для тулов - Нативная интеграция с Rust (без bridge) - wgpu-рендеринг напрямую (когда будет реализован) - Бинарник 2–3 MB vs Tauri 5–10 MB + WebView ## Roadmap ### Phase 0 (done) — Foundation NBT парсер, Anvil reader, workspace setup ### Phase 1 (done) — Core Model Tile, Dimension, World, Terrain, Brush, Operation ### Phase 2 (done) — Minecraft I/O + CLI Импорт/экспорт Java Edition, CLI команды, импорт .world ### Phase 3 (done) — Operations & Layers Инструменты (raise, erode, smooth, flatten, fill, paint) Слои (caves, river, frost, trees, biome, resources) Экспортёры слоёв, фильтры, MultiTile ### Phase 4 (done) — GUI (MVP) GPU-рендеринг через wgpu (базовый), панель инструментов Диалоги (New World, Export), undo/redo ### Phase 5 — WASM Plugins + Scripting WASM-хост на wasmtime, ABI для плагинов Rhai-скриптинг для world-генераторов Загрузка плагинов из .wasm файлов, registry ### Phase 6 — i18n + Инфраструктура Локализация CLI/GUI (rust-i18n / Fluent) CI/CD, cargo-dist, AppImage/msi/app Бенчмарки, оптимизация, polish ### Будущее Bedrock Edition, GUI pan/zoom/brush-overlay, GUI layer panel ## Модель данных ```rust struct Tile { // 128×128 блоков heightmap: [i16; 16384], // карта высот terrain: [u8; 16384], // тип террейна water_level: [u8; 16384], // уровень воды layer_data: HashMap, } struct Dimension { tiles: HashMap<(i32, i32), Tile>, min_height, max_height: i16, seed: u64, } struct World { name: String, dimensions: Vec, platform: Platform, seed: u64, } ```