• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
资源图标

Python 轻量化卫星图 2.0.0

请登录后获取
# v2.0.0 — C++ 重写大版本更新

> 从 Python 完整重写为 C++ 原生插件,性能与功能大幅升级。

## 核心变更:Python → C++

| 项目 | v1.0.1(旧) | v2.0.0(新) |
|------|------------|------------|
| 语言 | Python | C++20 |
| 部署文件 | `.whl` | `.so`(Linux)/ `.dll`(Windows)|
| Web 服务器 | Python `http.server` | C++ 原生 socket(多线程)|
| 性能 | 解释执行 | 原生编译,内存占用更低 |
| 体积 | — | Linux 548KB / Windows 839KB |

## 新增功能

### 账号系统(全新)
- Web 登录鉴权,玩家需注册账号才能查看地图
- 账号密码哈希存储(SHA-1 + 盐),明文不入库
- Session 持久化,服务器重启后保持登录状态
- 支持永久 session(默认 10 年 cookie)

### 玩家实时追踪
- 在线玩家位置实时显示在地图上
- 玩家移动事件监听,节流广播(可配置间隔)
- 玩家加入/退出事件推送

### Web 聊天
- 网页端可发送消息到游戏内(以玩家身份)
- 游戏内聊天同步到网页(只读)
- 聊天历史记录,刷新页面后仍可查看

### WebSocket 实时推送
- 玩家列表、位置、聊天消息实时推送
- 替代轮询,降低服务器负载

### Web 界面增强
- 在线玩家面板(带退出登录按钮)
- overlay.js / overlay.css 嵌入二进制,单文件部署
- 磁盘文件可覆盖内置版本(热更新 UI)

### unmined-cli 自动下载
- 首次运行自动下载 unmined-cli(Linux)这部分不稳定 推荐去下载对应版本进行安装
- 支持子目录结构自动查找

## 新增命令

| 命令 | 说明 | 权限 | 状态 |
|------|------|------|------|
| `/slmrender` | 手动触发渲染 | OP | 沿用 |
| `/register <密码>` | 注册 Web 账号 | 所有玩家 | **新增** |
| `/login <密码>` | 验证账号密码 | 所有玩家 | **新增** |
| `/bdslmadmin reset <玩家名> <新密码>` | 重置/创建密码 | OP | **新增** |
| `/bdslmadmin set <玩家名> <新密码>` | 设置密码 | OP | **新增** |
| `/bdslmadmin reload` | 重载 accounts.json | OP | **新增** |
| `/bdslmadmin list` | 列出所有账号 | OP | **新增** |
| `/bdslmadmin info <玩家名>` | 查询账号是否存在 | OP | **新增** |

## 配置文件说明

首次启动自动生成于 `plugins/bdslm/config.json`,带注释版如下:

```jsonc
{
"webserver": {
"port": 5110, // Web 服务端口(1-65535,默认 5110)
"bindAddress": "0.0.0.0" // 绑定地址(0.0.0.0 = 所有网卡)
},
"mapRender": {
"zoomin": 1, // 最大缩放级别(1 = 最近)
"zoomout": -5 // 最小缩放级别(-5 = 最远)
},
"autoRend": {
"isEnabled": true, // 是否启用自动渲染
"cycle": 120 // 自动渲染间隔(分钟,最小 1)
},
"playerTracker": {
"moveThrottleMs": 500 // 玩家位置广播节流(毫秒,最小 50)
},
"unminedCliPath": "", // unmined-cli 路径(留空自动查找/下载)
"world": {
"path": "" // 世界路径(留空自动检测 worlds/<世界名>)
},
"outputDir": "", // 渲染输出目录(留空 = plugins/bdslm/unmined-web)
"autoDownloadUnmined": true // 未找到 unmined-cli 时是否自动下载(仅 Linux)
}
```

> 注:JSON 标准不支持注释,上面的 `//` 仅为说明用途,实际使用时请删除注释。

## 移除的内容

- **Python 运行时依赖**:不再需要 Python 环境,原生 .so/.dll 直接加载
- **`save hold` / `save resume`**:渲染改为直接快照 db/ 目录,不再触发 BDS 存档挂起(修复了未触发 hold 时报错 "A previous save has not been completed" 的问题)

## Bug 修复

- **修复渲染流程导致 BDS 报错 "A previous save has not been completed"**
Python 版用 `save hold` + `sleep(3)` + `save resume` 配合渲染,但 `save hold` 是异步执行的,`sleep(3)` 后不一定真的 hold 成功;若未触发 hold 就调用 `save resume`,BDS 会抛出 "A previous save has not been completed" 错误。新版本改为直接快照世界 `db/` 目录,完全移除 save hold/resume 逻辑。

- **修复手动渲染 `/slmrender` 未设置渲染状态的问题**
Python 版调用 `_do_render` 时没有置 `_rendering = True`,导致渲染期间再次执行命令不会被拦截。新版本在触发渲染前正确设置渲染状态,渲染中重复执行会提示"渲染正在进行中"。

- **修复 Web 服务器静态文件路径穿越校验不严格**
Python 版用 `str(fp).startswith(str(base))` 判断路径是否在 output_dir 内,对类似 `/output` 与 `/output-evil` 这种前缀相同但非子目录的情况会误判放行。新版本改用 `std::mismatch` 逐段比对路径组件,严格限制在 overlay 目录内。

- **修复世界路径自动检测覆盖范围不足**
Python 版硬编码了 `/workspace/bedrock_server`、`/home/container/bedrock_server`、`/bedrock_server` 三个绝对路径,换环境就失效。新版本以插件数据目录的父目录(即 BDS 根目录)为基准,配合 cwd 兜底,跨环境都能自动定位 `worlds/<世界名>`。

## 部署方式

把对应平台的二进制文件放到**服务器根目录下的 `plugins/`**:

```
<服务器根目录>/
├── bedrock_server # 或 endstone 启动脚本
├── worlds/
│ └── Bedrock level/
└── plugins/
└── bdslm.so # Linux 放这个
└── bdslm.dll # Windows 放这个
```

```bash
# Linux
cp bdslm.so <服务器根目录>/plugins/

# Windows
copy bdslm.dll <服务器根目录>\plugins\

# 启动(Endstone 0.11.6+)
endstone -s <服务器根目录>
```

首次启动会自动在 `plugins/bdslm/` 下生成 `config.json`(配置)、`accounts.json`(账号)和 `sessions.json`(登录会话)。

## 兼容性

- Endstone API 0.11.6
- Minecraft Bedrock 1.26.33
- Linux(glibc)/ Windows(MSVC ABI)
更加精简了 汐汐
手动触发渲染的命令改为/slmrender
移除了其他不必要的功能
后退
顶部 底部