| name | esp32-minecraft |
| description | ESP32 Minecraft 服务器开发技能。提供在 ESP32 上运行 Minecraft Java 服务器的完整参考,包括配置、编译、调试、网络优化等。TRIGGER when: 用户开发 ESP32 Minecraft 服务器、配置 globals.h、调试网络问题、优化性能、或需要了解嵌入式 Minecraft 服务器时触发。SKIP: 非 ESP32 平台的 Minecraft 服务器开发。 |
ESP32 Minecraft 服务器开发技能
本技能提供在 ESP32 上运行 Minecraft Java 服务器的完整参考,基于 ESP32-MC 和 bareiron 项目。
触发条件
当用户执行以下操作时触发此技能:
- 开发 ESP32 Minecraft 服务器
- 配置
globals.h 文件
- 调试网络连接问题
- 优化服务器性能
- 了解嵌入式 Minecraft 服务器架构
跳过条件
以下情况不触发此技能:
- 非 ESP32 平台的 Minecraft 服务器
- 完整原版 Minecraft 服务器开发
项目概述
ESP32-MC
- 目标平台: Arduino ESP32S3
- 协议版本: 26.1.2 / 775
- 核心语言: C
- 网络层: Arduino WiFiServer/WiFiClient 兼容层
bareiron
- 目标平台: ESP32 (ESP-IDF) / PC x86_64
- 协议版本: 1.21.8 / 772
- 核心语言: C
- 优先级: 内存使用 > 性能 > 功能
核心配置 (globals.h)
基础配置
#define PORT 25565
#define MAX_PLAYERS 16
#define MAX_MOBS (MAX_PLAYERS)
#define GAMEMODE 0
#define VIEW_DISTANCE 2
性能配置
#define TIME_BETWEEN_TICKS 1000000
#define TICKS_PER_SECOND ((float)1000000 / TIME_BETWEEN_TICKS)
#define CHUNK_SIZE 8
#define VISITED_HISTORY 4
#define MAX_BLOCK_CHANGES 20000
网络配置
#define NETWORK_TIMEOUT_TIME 15000000
#define MAX_RECV_BUF_LEN 256
#define BROADCAST_ALL_MOVEMENT
#define SCALE_MOVEMENT_UPDATES_TO_PLAYER_COUNT
功能开关
#define DO_FLUID_FLOW
#define ALLOW_CHESTS
#define ENABLE_PICKUP_ANIMATION
#define ENABLE_CACTUS_DAMAGE
#define SEND_BRAND
存储配置
#ifndef ESP_PLATFORM
#define SYNC_WORLD_TO_DISK
#endif
#define DISK_SYNC_INTERVAL 15000000
调试选项
#define DEV_LOG_NETWORK_DIAGNOSTICS
#define DEV_LOG_LENGTH_DISCREPANCY
#define DEV_MINIMAL_PLAY_BOOTSTRAP
世界生成配置
#define INITIAL_WORLD_SEED 0xA103DE6C
#define INITIAL_RNG_SEED 0xE2B9419
#define TERRAIN_BASE_HEIGHT 60
#define CAVE_BASE_DEPTH 24
#define BIOME_SIZE (CHUNK_SIZE * 8)
#define BIOME_RADIUS (BIOME_SIZE / 2)
编译与运行
ESP32-MC (Arduino)
- 用 Arduino IDE 打开
code.ino
- 选择 ESP32S3 开发板
- 编译并烧录
- 设备启动后连接 WiFi
- 服务器监听端口 25565
bareiron (ESP-IDF)
- 设置 PlatformIO 项目(选择 ESP-IDF 框架)
- 克隆 bareiron 仓库
- 配置 WiFi 凭据(
include/globals.h)
- 编译并烧录
bareiron (PC)
./build.sh
pacman -Sy mingw-w64-x86_64-gcc
./build.sh
./bareiron.exe
文件结构
ESP32-MC
| 文件 | 功能 |
|---|
code.ino | Arduino 入口,连 WiFi,启动主任务 |
main.c | 主循环、连接管理、收包分发 |
packets.c | 协议收发 |
procedures.c | 玩家、方块、Mob、Tick 逻辑 |
worldgen.c | 地形和区块生成 |
crafting.c | 合成和熔炉 |
serialize.c | 世界数据读写 |
globals.h | 主要开关和常量 |
bareiron
| 文件 | 功能 |
|---|
src/ | 源代码目录 |
include/ | 头文件目录 |
include/globals.h | 配置文件 |
build.sh | 构建脚本 |
build_registries.js | 注册表构建工具 |
性能优化建议
内存优化
- 减少 MAX_PLAYERS: 每个玩家占用固定内存
- 减少 MAX_BLOCK_CHANGES: 控制世界修改数量
- 禁用 ALLOW_CHESTS: 箱子占用大量内存
- 减小 VIEW_DISTANCE: 减少区块发送数量
网络优化
- 启用 BROADCAST_ALL_MOVEMENT: 低 Tickrate 下更流畅
- 启用 SCALE_MOVEMENT_UPDATES_TO_PLAYER_COUNT: 人多时省带宽
- 调整 TIME_BETWEEN_TICKS: 平衡流畅度和计算量
- 减小 MAX_RECV_BUF_LEN: 减少内存占用
稳定性优化
- 禁用 DO_FLUID_FLOW: 流体计算可能不稳定
- 禁用 ALLOW_CHESTS: 某些平台可能崩溃
- 增加 VISITED_HISTORY: 减少重复区块生成
- 禁用 DISK_SYNC_BLOCKS_ON_INTERVAL: Flash 写入慢
WiFi 配置
ESP32-MC
使用 wifi_config.cpp 中的配网流程:
bareiron
在 include/globals.h 中配置:
#define WIFI_SSID "your-ssid"
#define WIFI_PASS "your-password"
世界数据持久化
PC 平台
默认写入 world.bin 文件。
ESP 平台
- 设置 LittleFS
- 取消注释
globals.h 中的 SYNC_WORLD_TO_DISK
- 考虑启用
DISK_SYNC_BLOCKS_ON_INTERVAL
TCP 导出导入
启用 DEV_ENABLE_BEEF_DUMPS:
- 发送
0xBEEF 导出世界数据
- 发送
0xFEED 后跟数据上传世界数据
注意: 无鉴权,仅限开发调试使用。
已实现功能
- 玩家登录、出生、移动、聊天
- 区块生成、基础地形、生物群系
- 方块放置、破坏、简单流体
- 背包、合成、熔炉
- 基础 Mob 刷新和行为
- 可选世界数据落盘
- 串口/Web 配网
已知限制
- 不是完整原版服务器
- 不兼容插件生态
- 不支持高并发
- 协议版本固定(不支持多版本)
- 仅支持 vanilla 客户端
调试技巧
- 查看日志: 启用相关
DEV_LOG_* 选项
- 网络诊断: 启用
DEV_LOG_NETWORK_DIAGNOSTICS
- 最小引导: 启用
DEV_MINIMAL_PLAY_BOOTSTRAP 排查掉线
- 世界导出: 使用
DEV_ENABLE_BEEF_DUMPS 导出世界数据
参考资源