Skip to content

支持数十万级玩家的一站式的模块化、可扩展、高可用、自动扩缩容的 mmorpg Minecraft 服务框架

License

Notifications You must be signed in to change notification settings

MinecraftAzathoth/azathoth

Repository files navigation

Azathoth

GitHub stars Website Kotlin Java Minestom License

MMORPG 级 Minecraft 服务器框架

为下一代大型多人在线游戏而生,支持几十万玩家同时在线

English | 简体中文

官方网站 · 开发文档 · 问题反馈


项目愿景

想象一下,在 Minecraft 的世界中构建一个真正的 MMORPG——拥有史诗级副本、公会战争、实时经济系统,同时容纳数十万玩家在同一个宇宙中冒险。

Azathoth 让这一切成为可能。

我们不仅仅是另一个服务器框架。Azathoth 是一套完整的游戏基础设施解决方案,从底层协议到云端部署,从插件开发到运营管理,为开发者提供构建大规模在线游戏所需的一切。

┌─────────────────────────────────────────────────────────────────┐
│                      Players (Fabric Client)                     │
└─────────────────────────┬───────────────────────────────────────┘
                          │ MC Protocol
┌─────────────────────────▼───────────────────────────────────────┐
│                      Gateway Service                             │
│              连接管理 · 智能路由 · 无缝传送 · 负载均衡              │
└─────────────────────────┬───────────────────────────────────────┘
                          │ gRPC
┌─────────────────────────▼───────────────────────────────────────┐
│                    Game Instance Layer                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐         │
│  │  主城实例 │  │ 副本实例  │  │ 战场实例  │  │   ...    │         │
│  │(Minestom)│  │(Minestom)│  │(Minestom)│  │          │         │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘         │
│                    Managed by Agones Fleet                       │
└──────────────────────┬──────────────────────────────────────────┘
                       │
         ┌─────────────┴─────────────┐
         │ gRPC (同步)    Kafka (异步) │
         ▼                           ▼
┌─────────────────┐    ┌──────────────────────────────────────────┐
│ Backend Services│    │              Message Bus                  │
│ ├─ Player       │    │      跨服广播 · 事件驱动 · 数据同步         │
│ ├─ Dungeon      │    └──────────────────────────────────────────┘
│ ├─ Guild        │
│ └─ ...          │
└─────────────────┘

功能亮点

为大规模而生

几十万人同时在线

基于微服务架构设计,每个组件独立扩展。Gateway 处理连接,Game Instance 运行游戏逻辑,Backend Services 管理业务数据——三层解耦,线性扩展。

基于 Minestom 的高性能核心

抛弃 Bukkit 的历史包袱,使用 Minestom 从零构建。无 Tick 限制,纯异步设计,单实例可承载数千玩家。协程优先的 API 让高并发编程如同写同步代码。

Agones 自动扩缩容

游戏实例由 Kubernetes + Agones 编排。玩家涌入时自动扩容,空闲时自动缩减。Buffer 池确保新实例即时可用,告别手动运维。

热加载插件系统

三类插件满足不同需求:Core(冷加载核心)、Game(热加载游戏内容)、Extension(热加载扩展服务)。修改技能参数?更新副本配置?无需重启,即时生效。

gRPC + Kafka 混合通信

同步调用用 gRPC——低延迟、强类型、双向流。异步消息用 Kafka——高吞吐、持久化、完美解耦。根据场景选择最优方案。

完整的管理后台

Vue 3 + Ktor 构建的现代化管理系统。实时监控服务器状态,一键管理玩家数据,可视化配置游戏内容。RBAC 权限模型,安全可控。

开发者市场生态

不止是框架,更是生态。官方市场支持插件发布、交易、评价。免费开源或付费授权,开发者自由选择。完善的 SDK 和中英双语文档降低上手门槛。


技术栈

类别 技术 版本 说明
语言 Kotlin 2.3.0 主要开发语言,协程优先
语言 Java 25 底层兼容
构建 Gradle (Kotlin DSL) 9.2.1 多模块构建
游戏核心 Minestom latest 高性能 MC 服务器库
通信 gRPC-Kotlin 1.5.0 服务间同步调用
消息队列 Kafka 3.6+ 异步消息传递
后端框架 Ktor 3.3.3 管理后台 API
前端框架 Vue 3 3.5+ 管理后台 UI
编排 Kubernetes + Agones - 容器编排与游戏服务器管理
数据库 PostgreSQL 16+ 结构化数据存储
数据库 MongoDB 7+ 文档数据存储
缓存 Redis 7+ 会话、缓存、排行榜
分析 ClickHouse - 行为日志与统计分析

快速开始

环境要求

  • JDK 25+ (推荐 Eclipse Temurin)
  • Kotlin 2.3.0+
  • Docker & Docker Compose
  • Gradle 9.2.1+ (项目自带 Wrapper)

本地开发环境

# 1. 克隆项目
git clone https://github.com/zhibeigg/azathoth.git
cd azathoth

# 2. 启动基础设施服务
docker-compose -f deploy/docker-compose.dev.yml up -d

# 3. 构建项目
./gradlew build

# 4. 运行网关服务
./gradlew :gateway:run

# 5. 运行游戏实例 (新终端)
./gradlew :game-instance:run

插件开发

# 使用项目生成器创建插件项目 (即将上线)
# 访问 https://www.mcwar.cn/generator

# 或手动创建
mkdir my-plugin && cd my-plugin
./gradlew init --type kotlin-library
// build.gradle.kts
plugins {
    id("com.azathoth.plugin") version "1.0.0"
}

dependencies {
    compileOnly("com.azathoth:azathoth-api:1.0.0")
    compileOnly("com.azathoth:azathoth-plugin-api:1.0.0")
}

集群部署

# 1. 配置 Kubernetes 集群 (需要预先安装 Agones)
kubectl apply -f deploy/agones/

# 2. 部署基础设施
helm install azathoth-infra deploy/helm/infrastructure/

# 3. 部署游戏服务
helm install azathoth deploy/helm/azathoth/

# 4. 查看状态
kubectl get fleet -n azathoth

详细部署指南请参阅 部署文档


使用示例

创建技能插件

@Skill(id = "fireball", name = "火球术")
class FireballSkill : AbstractSkill() {

    @SkillConfig
    var damage: Double = 50.0

    @SkillConfig
    var cooldown: Duration = 3.seconds

    override val manaCost: Int = 30

    override suspend fun onCast(context: SkillContext): SkillResult {
        val projectile = context.spawnProjectile<FireballProjectile> {
            speed = 2.0
            onHit { target ->
                context.dealDamage(target, damage, DamageType.FIRE)
                context.applyEffect(target, BurningEffect(3.seconds))
            }
        }

        // 播放音效和粒子
        context.playSound(Sound.ENTITY_BLAZE_SHOOT)
        context.spawnParticles(Particle.FLAME, count = 20)

        return SkillResult.success()
    }
}

创建副本

@Dungeon(id = "dragon_lair", name = "龙穴")
class DragonLairDungeon : AbstractDungeon() {

    override val minPlayers = 5
    override val maxPlayers = 10
    override val timeLimit = 30.minutes

    override suspend fun onSetup(context: DungeonContext) {
        // 加载地图
        context.loadSchematic("dungeons/dragon_lair.schem")

        // 注册阶段
        registerPhase(TrashMobPhase())
        registerPhase(MiniBossPhase())
        registerPhase(FinalBossPhase())
    }

    inner class FinalBossPhase : DungeonPhase("final_boss") {
        override suspend fun onStart(context: PhaseContext) {
            context.announce("巨龙苏醒了!")

            val boss = context.spawnBoss<DragonBoss>(bossSpawnLocation) {
                level = context.difficulty.bossLevel
                lootTable = "dragon_lair_final"
            }

            boss.onDeath {
                context.complete(generateRewards())
            }
        }
    }
}

创建 AI 行为树

@BehaviorTree(id = "dragon_ai")
class DragonAI : AbstractBehaviorTree() {

    override fun build(): BehaviorNode = selector {
        // 低血量时逃跑
        sequence {
            condition { entity.healthPercent < 0.2 }
            action { flee(duration = 5.seconds) }
            action { castSkill("heal") }
        }

        // 远程攻击
        sequence {
            condition { distanceToTarget > 10 }
            action { castSkill("fire_breath") }
        }

        // 近战攻击
        sequence {
            condition { distanceToTarget <= 3 }
            action { meleeAttack() }
        }

        // 接近目标
        action { moveTo(target.position) }
    }
}

扩展支付渠道

@Extension(id = "payment-wechat")
class WechatPaymentPlugin : AzathothPlugin() {

    override suspend fun onLoad() {
        registerService(PaymentProvider::class, WechatPaymentProvider())
    }
}

class WechatPaymentProvider : PaymentProvider {
    override val providerId = "wechat"
    override val displayName = "微信支付"

    override suspend fun createOrder(request: PaymentRequest): PaymentOrder {
        // 调用微信支付 API
        val result = wechatClient.unifiedOrder(
            outTradeNo = request.orderId,
            totalFee = request.amount.toCents(),
            body = request.description
        )
        return PaymentOrder(
            orderId = request.orderId,
            payUrl = result.codeUrl
        )
    }
}

项目结构

azathoth/
├── core/                        # 核心模块
│   ├── protocol/                # MC 协议定义
│   ├── common/                  # 公共工具库
│   ├── grpc-api/                # gRPC Proto 定义
│   └── kafka-events/            # Kafka 事件定义
│
├── gateway/                     # 网关服务
│   └── src/                     # 连接管理、认证、路由
│
├── game-instance/               # 游戏实例
│   ├── engine/                  # Minestom 扩展引擎
│   ├── mechanics/               # 战斗、技能、AI 系统
│   └── dungeons/                # 副本逻辑
│
├── services/                    # 后端微服务
│   ├── player-service/          # 玩家数据服务
│   ├── chat-service/            # 聊天服务
│   ├── dungeon-service/         # 副本匹配与管理
│   ├── activity-service/        # 活动与任务
│   ├── guild-service/           # 公会系统
│   ├── trade-service/           # 交易系统
│   └── admin-service/           # 管理后台 API
│
├── sdk/                         # 开发者 SDK
│   ├── azathoth-api/            # 核心 API
│   ├── azathoth-plugin-api/     # 插件开发 API
│   └── azathoth-testing/        # 测试工具
│
├── admin-frontend/              # 管理后台前端 (Vue 3)
├── client-mod/                  # Fabric 客户端模组
├── website/                     # 官网 (Nuxt 3)
│
└── deploy/                      # 部署配置
    ├── kubernetes/              # K8s 清单
    ├── agones/                  # Agones Fleet 配置
    └── helm/                    # Helm Charts

文档

文档 说明
快速入门 15 分钟上手 Azathoth
架构设计 深入理解系统架构
插件开发 从零创建游戏插件
API 参考 完整 API 文档
部署指南 生产环境部署
最佳实践 性能优化与设计模式

贡献指南

我们欢迎所有形式的贡献!无论是报告 Bug、提出建议、改进文档还是贡献代码。

开发流程

# 1. Fork 并克隆仓库
git clone https://github.com/YOUR_USERNAME/azathoth.git
cd azathoth

# 2. 添加上游仓库
git remote add upstream https://github.com/zhibeigg/azathoth.git

# 3. 创建特性分支
git checkout -b feature/amazing-feature

# 4. 进行开发...

# 5. 运行测试确保通过
./gradlew test
./gradlew ktlintCheck

# 6. 提交更改 (遵循 Conventional Commits)
git commit -m "feat(skills): add fireball skill implementation"

# 7. 推送并创建 Pull Request
git push origin feature/amazing-feature

提交规范

我们使用 Conventional Commits 规范:

类型 说明
feat 新功能
fix Bug 修复
docs 文档更新
style 代码格式调整
refactor 重构
perf 性能优化
test 测试相关
chore 构建/工具链

示例:

feat(dungeon): add dragon lair dungeon template
fix(gateway): resolve connection timeout issue
docs(readme): update installation instructions

代码规范

  • 遵循 Kotlin 官方编码规范
  • 使用 ktlint 进行代码格式化:./gradlew ktlintFormat
  • 公共 API 必须编写 KDoc 注释
  • 新功能必须包含单元测试
  • 测试覆盖率不低于 80%

测试命令

# 运行全部测试
./gradlew test

# 运行特定模块测试
./gradlew :game-instance:test

# 运行集成测试 (需要 Docker)
./gradlew integrationTest

# 生成测试覆盖率报告
./gradlew jacocoTestReport

分支策略

分支 用途
main 稳定版本,受保护
develop 开发分支,PR 目标分支
feature/* 新功能开发
fix/* Bug 修复
release/* 版本发布准备

问题反馈


路线图

v0.1.0 - 基础框架 (当前)

  • 项目结构搭建
  • 核心 API 设计
  • Gateway 基础功能
  • Game Instance 基础功能
  • 插件系统框架

v0.2.0 - 核心游戏

  • 战斗系统
  • 技能系统
  • 副本系统
  • AI 行为树

v0.3.0 - 社交与经济

  • 公会系统
  • 交易系统
  • 聊天系统
  • 邮件系统

v0.4.0 - 运营工具

  • 管理后台
  • 数据分析
  • 活动系统
  • 客户端模组

v1.0.0 - 正式发布

  • 完整文档
  • 性能优化
  • 安全审计
  • 开发者市场

许可证

本项目采用 Azathoth Non-Commercial License (ANCL) 许可证。

允许

  • 个人学习、研究、教育用途
  • 非商业目的的修改和使用
  • 非商业目的的再分发(必须保留相同许可证)

禁止

  • 任何形式的商业用途
  • 使用本项目运营盈利性服务器
  • 销售基于本项目的产品或服务

商业授权

如需商业使用,请联系我们获取商业授权:

完整许可证文本请查看 LICENSE 文件。


社区与支持

QQ群 Discord Bilibili


致谢

感谢以下开源项目,没有它们就没有 Azathoth:

  • Minestom - 高性能 Minecraft 服务器库
  • Kotlin - 现代化编程语言
  • Agones - 游戏服务器编排
  • gRPC - 高性能 RPC 框架

Azathoth - 为下一代 Minecraft MMORPG 而生

Made with passion by the Azathoth Team

About

支持数十万级玩家的一站式的模块化、可扩展、高可用、自动扩缩容的 mmorpg Minecraft 服务框架

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •