Terrafier/PLAN.md
loki5512344 18613260a8 WASM plugins, scripting, i18n, GUI pan/zoom, cargo-dist CI/CD
- WASM plugin host (wasmtime 46, 17 host fns) + example noisemap plugin
- Rhai scripting engine (12 API fns, `terrafier run` cmd)
- i18n: en/ru translations, auto-detect, t! macro
- GUI: pan (click-drag) + zoom (scroll wheel) with viewport transform
- cargo-dist 0.31: MSI/pkg/shell installers, both binaries
- CI: .github/workflows/ci.yml + release.yml
- Security: wasmtime 30→46, bincode 1.3→2.0, quick-xml CVE docs
- Code review: SAFETY comments, unwrap→match cleanup
- Fixes: clippy approx_constant, needless_borrows, rustfmt
2026-07-04 11:14:47 +02:00

5.8 KiB
Executable file
Raw Blame History

Terrafier

Rust-native Minecraft world painter — быстрее, легче, современнее.

Нативная замена WorldPainter на 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

Модель данных

struct Tile {                    // 128×128 блоков
    heightmap: [i16; 16384],     // карта высот
    terrain: [u8; 16384],        // тип террейна
    water_level: [u8; 16384],    // уровень воды
    layer_data: HashMap<u32, LayerBuffer>,
}

struct Dimension {
    tiles: HashMap<(i32, i32), Tile>,
    min_height, max_height: i16,
    seed: u64,
}

struct World {
    name: String,
    dimensions: Vec<Dimension>,
    platform: Platform,
    seed: u64,
}