跳到正文

Magnus

作者:KroderDev

A modular, high-performance, and resilient synchronization suite for Minecraft Fabric servers. Features real-time inventory sync, cross-server chat, and global player management.

收藏

介绍

中文介绍正在准备中,下面暂时显示原文。

Magnus (Server-Side)

Build Status
Minecraft Version
Fabric
Kotlin
GitHub Release
Modrinth Version
CurseForge Version
PostgreSQL
Redis
Trivy
License

A modular, high-performance, and resilient synchronization suite for Minecraft Fabric servers. Features real-time inventory sync, cross-server chat, and global player management.

Features

Core Sync

  • Multi-Server Sync: Syncs Inventory, Ender Chest, Health, Hunger, XP, Potion Effects.
  • High Performance: Uses Redis for sub-millisecond data retrieval.
  • Persistence: Uses PostgreSQL for permanent reliable storage.
  • Fault Tolerance:
  • Circuit Breaker: Detects database failures automatically.
  • Local Fallback: Saves data to disk if the database goes down.
  • Auto-Recovery: “The Janitor” service automatically restores data when the database comes back online.

Modules

| Module | Description |
|——–|————-|
| Inventory Sync | Core synchronization of inventory, ender chest, health, hunger, XP, and potion effects. Enabled by default. |
| Global Chat | Syncs chat messages across all servers via Redis pub/sub. Raw text format for compatibility with LuckPerms, Stylist, etc. |
| Global Player List | Maintains a global player count with heartbeat. Provides /glist command. |
| Session Lock | Prevents concurrent logins by locking player sessions during sync. Players are held in queue until their data is safely transferred. |

Security

| Feature | Default | Description |
|———|———|————-|
| Message Signing | ✅ Enabled | HMAC-SHA256 prevents message injection attacks |
| Auto-Generated Secret | ✅ | 32-byte cryptographic secret generated on first run |
| Replay Prevention | 30 sec | Messages older than 30 seconds are rejected |
| Payload Size Limits | 64KB | Prevents DoS via oversized messages |
| SSL/TLS Support | Optional | Encrypt Redis connections |

Configuration

Magnus requires a PostgreSQL database and a Redis instance to function.

  1. Generate Config: Start your server once to generate the default configuration file at config/magnus.json.
  2. Edit Config: Stop the server and open config/magnus.json:
{
    "postgresUrl": "jdbc:postgresql://your-db-host:5432/magnus",
    "postgresUser": "your_user",
    "postgresPass": "your_password",
    "redisHost": "your-redis-host",
    "redisPort": 6379,
    "redisPass": null,
    "serverName": "survival",
    "enableInventorySync": true,
    "enableGlobalChat": false,
    "enableGlobalPlayerList": false,
    "enableSessionLock": false,
    "enableMessageSigning": true,
    "messageSigningSecret": "auto-generated-on-first-run",
    "redisSsl": false
}
  1. Launch: Restart your server. Magnus will automatically verify the connection and create the necessary database schema.

[!IMPORTANT]

Multi-Server Setup: Copy the messageSigningSecret from the first server to all other servers. All servers must use the same secret.

Configuration Options

| Option | Default | Description |
|——–|———|————-|
| serverName | "default" | Unique identifier for this server (e.g., "survival", "lobby") |
| enableInventorySync | true | Enable inventory/player data synchronization. Disable for lobby servers. |
| enableGlobalChat | false | Enable cross-server chat synchronization |
| enableGlobalPlayerList | false | Enable global player list and /glist command |
| enableSessionLock | false | Enable session locking to prevent concurrent logins |
| enableMessageSigning | true | Enable HMAC message signing (recommended) |
| redisSsl | false | Enable SSL/TLS for Redis connections |

Commands

| Command | Description |
|———|————-|
| /glist | Shows total player count and players grouped by server (requires enableGlobalPlayerList) |

Architecture

For detailed flow diagrams and behavior documentation:

常见问题

Magnus 支持哪些 Minecraft 版本?

Magnus 支持 Minecraft Java 版 1.21.1–1.21.11,共 11 个版本,可用的加载器:Fabric。下载时注意选择和你游戏版本一致的文件。

Magnus 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。

评论

登录后评论和评分