Scoped, typed, auto-flushing persistent key-value storage for Yog mods.
Quick start
use yog_storage::{Storage, Value};
// Global store — one file per mod
let mut store = Storage::open("/path/to/game", "mymod");
store.set("motd", "Hello!");
store.set("spawn_x", 0i64);
// Per-player store — one file per UUID
let mut ps = Storage::open_player("/path/to/game", "mymod", "player-uuid");
ps.set("coins", 100i64);
let coins = ps.get_int("coins").unwrap_or(0);
// Auto-flushed on drop. Call flush() explicitly for earlier persistence.
File layout
<game_dir>/yog-data/<mod_id>/global.kv
<game_dir>/yog-data/<mod_id>/player/<uuid>.kv
<game_dir>/yog-data/<mod_id>/world/<dim_safe>.kv
<game_dir>/yog-data/<mod_id>/entity/<uuid>.kv
<game_dir>/yog-data/<mod_id>/chunk/<dim_safe>_<cx>_<cz>.kv
File format
Plain text, one entry per line: key\ttype\tvalue. Human-readable and
diff-friendly. Lines starting with # are comments. Writes are atomic
(write to .kv.tmp, then rename) so a crash mid-save leaves old data intact.