OpenSourceTools

开源 Minecraft 服务器工具包插件(Spigot / Paper),提供传送、称号、隐身、禁言、踢人 GUI、公告等常用服务器管理功能。

  • 当前版本:2.1.0
  • 支持版本:Minecraft 1.21.11(Bukkit API 1.21.11-R0.1-SNAPSHOT,api-version: 1.21)
  • 协议:Apache License 2.0

目录


功能特性

命令系统(21 个注册命令)

功能分类 说明
基础恢复 /feed(别名 /eat)恢复饱食度;/heal 恢复状态
出生点 /spawn 返回主城;/setspawn 设置主城坐标
传送系统 /tpa 发起传送请求(可点击同意/拒绝,60 秒超时);/tpaaccept 接受;/tpadefuse 拒绝
死亡回溯 /back 返回死亡地点
游戏模式 /gamemode(别名 /gm)切换创造/生存/冒险/旁观,支持数字与中文参数、Tab 补全、指定目标玩家
世界控制 /day 一键天亮;/sun 一键晴天
玩家管理 /vanish(别名 /v)隐身;/fly 飞行;/mute 禁言;/unmute 解除禁言;/kick 踢出(无参数时打开玩家头像踢人 GUI)
服务器管理 /list(别名 /tps)查看内存/TPS/在线列表;/OSTReload 重载插件;/stop 关闭服务器(支持自定义提示语)
称号系统 /PlayerTitle(别名 /plt)添加/删除玩家称号与后缀
内部命令 /testGUI(插件作者测试用)

事件系统(8 个监听器)

  • 进服/退服公告:区分管理员与普通玩家模板,支持 %PlayerName% 与 PlaceholderAPI 变量
  • 彩色聊天:按管理员/玩家开关控制,支持白名单;彩色告示牌:编辑时自动转换颜色代码
  • 聊天管理:聊天冷却(默认 3 秒)、重复消息防刷屏、屏蔽词拦截(拦截时通知在线管理员)
  • 死亡记录:死亡点自动记录,供 /back 使用
  • 跨世界飞行保持:切换世界后自动恢复飞行状态

定时任务(3 个)

  • TPA 超时检测:每秒倒计时,60 秒未处理自动取消
  • TPA 执行检测:定期执行已接受的传送请求
  • 定时公告:按配置间隔循环广播公告内容

PlaceholderAPI 扩展

自动注册内部扩展,标识符 OpenSourceTools,提供 3 个变量(详见 PlaceholderAPI 变量)。


环境要求

项目 要求
服务器 Spigot / Paper 1.21.11(其他 1.21.x 版本理论可用,未测试)
Java 21+(本项目在 JDK 25 下编译与运行测试通过)
前置插件 PlaceholderAPI(硬依赖,缺失时插件无法启动)

安装

  1. 安装 PlaceholderAPI 前置插件。
  2. 将构建产物 OpenSourceTools-2.1.0.jar 放入服务器 plugins/ 目录。
  3. 重启服务器,插件会自动生成 plugins/OpenSourceTools/config.yml。
  4. 按需修改配置文件后使用 /OSTReload 重载。

⚠️ 插件在 plugin.yml 中声明了 depend: [PlaceholderAPI],请确保 PAPI 已安装,否则插件不会加载。


命令列表

命令 别名 用法 权限 默认
/feed /eat /feed OpenTools.default 所有人
/heal - /heal OpenTools.default 所有人
/spawn - /spawn OpenTools.default 所有人
/tpa - /tpa <玩家ID> OpenTools.default 所有人
/back - /back OpenTools.default 所有人
/tpaaccept - /tpaaccept <玩家ID> OpenTools.default 所有人
/tpadefuse - /tpadefuse <玩家ID> OpenTools.default 所有人
/tpaback - /tpaback OpenTools.default 所有人
/PlayerTitle /plt /PlayerTitle help OpenTools.default 所有人
/testGUI - /testGUI KickGUI OpenTools.testGUI OP
/OSTReload - /OSTReload OpenTools.ostreload OP
/stop - /stop [提示语] OpenTools.stop OP
/gamemode /gm /gamemode <模式> [玩家ID] OpenTools.gamemode OP
/sun - /sun OpenTools.sun OP
/setspawn - /setspawn OpenTools.setspawn OP
/day - /day OpenTools.day OP
/fly - /fly [玩家ID] OpenTools.fly OP
/mute - /mute <玩家ID> OpenTools.mute OP
/unmute - /unmute <玩家ID> OpenTools.unmute OP
/kick - /kick [玩家ID] [理由] OpenTools.kick OP
/list /tps /list OpenTools.list OP

/PlayerTitle 子命令:

/PlayerTitle help
/PlayerTitle addTitle <玩家ID> <称号>
/PlayerTitle addSuffix <玩家ID> <后缀>
/PlayerTitle delTitle <玩家ID>
/PlayerTitle delSuffix <玩家ID>

/gamemode 模式参数支持:0/生存/survival、1/创造/creative、2/冒险/adventure、3/旁观/spectator。


权限

权限节点 默认 说明
OpenTools.default 所有人 默认命令权限(feed/heal/spawn/tpa/back/称号等)
OpenTools.kick OP /kick
OpenTools.mute OP /mute
OpenTools.unmute OP /unmute
OpenTools.fly OP /fly
OpenTools.vanish OP /vanish
OpenTools.ostreload OP /OSTReload
OpenTools.sun OP /sun
OpenTools.stop OP /stop
OpenTools.gamemode OP /gamemode
OpenTools.setspawn OP /setspawn
OpenTools.day OP /day
OpenTools.list OP /list
OpenTools.testGUI OP /testGUI

PlaceholderAPI 变量

变量 说明 示例输出
%OpenSourceTools_Nick% 玩家昵称(未设置时显示游戏 ID) Steve
%OpenSourceTools_Title% 玩家称号(未设置时为空) §7[管理员§7]§f
%OpenSourceTools_Suffix% 玩家后缀(未设置时为空) §7[后缀§7]

配置文件

首次启动自动生成 plugins/OpenSourceTools/config.yml,关键配置项:

ServerName: "ServerName"                    # 服务器名字
DefaultStopMessage: "StopServerText"        # 默认关服提示

PlayerJoinServerMessage: "&7[&f&l玩家&7]&e%PlayerName%&a进入了服务器"   # 进服公告
AdminJoinServerMessage:  "&7[&d&l管理员&7]&e%PlayerName%&a进入了服务器" # 管理员进服公告

ColorChatSetting:
  AllowAdminUsedColorChat: true   # 允许管理员彩色聊天
  AllowPlayerUsedColorChat: true  # 允许玩家彩色聊天
  AllowPlayers: []                # 无视开关的白名单

ColorSignSetting:
  AllowAdminUsedColorSign: true   # 允许管理员彩色告示牌
  AllowPlayerUsedColorSign: true  # 允许玩家彩色告示牌

SpawnSetting:                     # 主城坐标(/setspawn 自动写入)
  WorldName: world
  locationX: 0.5
  locationY: 80.0
  locationZ: 0.5

TimeMessageSetting:               # 定时公告
  TimeMessage: true               # 是否启用
  TimeMessageTime: 60             # 间隔(秒)
  Message:
    - "Text-1"

FeedCommandSetting:               # /feed 开关
  AllowAdminUsedFeedCommand: true
  AllowPlayerUsedFeedCommand: false

ChatSetting:
  ChatTime: 3                     # 聊天冷却(秒)

AntiKeyWords:                     # 屏蔽词列表(精确匹配整句)
  - xxx1

构建

环境

  • JDK 8+(编译目标为 Java 8 字节码;本仓库使用 JDK 25 验证)
  • Maven 3.8+

构建命令

mvn clean package

构建产物:target/OpenSourceTools-2.1.0.jar(shade 打包,含 JetBrains Annotations)。

网络提示:若访问 Maven Central 缓慢,可使用项目自带的阿里云镜像设置:

mvn -s tools/smoke-test/maven-settings.xml clean package

自动化测试

项目内置了基于 Paper 1.21.11 实机启动的自动化测试设施(tools/smoke-test/):

脚本 用途
run-smoke-test.ps1 全自动冒烟测试:临时启动服务器 → 校验插件加载/PAPI 扩展注册 → 优雅停止 → 断言日志,输出 PASS/FAIL
start-test-server.ps1 启动一个持续运行的交互式测试服务器(端口 25565、离线模式),在独立控制台窗口等待玩家连接

使用前需将测试制品放入缓存目录 %USERPROFILE%\.ost-smoke-cache\:

  • paper-1.21.11-132.jar(PaperMC Fill API 下载,SHA256 5ffef465eeeb5f2a3c23a24419d97c51afd7dbb4923ff42df9a3f58bba1ccfba)
  • PlaceholderAPI-2.12.3.jar(官方发行版,Modrinth 下载)
# 一键冒烟测试(自动启停)
powershell -NoProfile -ExecutionPolicy Bypass -File tools/smoke-test/run-smoke-test.ps1

# 启动交互式测试服务器(等待玩家连接,手动关闭)
powershell -NoProfile -ExecutionPolicy Bypass -File tools/smoke-test/start-test-server.ps1

版本历史

版本 日期 变更
dev-mc-1.21.11(分支) 2026-11-09 修复 10 项已知代码问题(禁言生效、/heal 血量恢复、/kick 自我检查、控制台解禁、注册 /tpaback、NPE 防护、屏蔽词包含匹配、PAPI 缺失优雅退出、权限节点统一)
2.1.0 2026-11-09 升级 Bukkit API 至 1.21.11;api-version 提升至 1.21;声明 depend: [PlaceholderAPI] 保证加载顺序;补充自动化冒烟测试设施
2.0 2025 初版(Spigot API 1.20)

已知问题与限制

以下问题已在 dev-mc-1.21.11 分支修复:

  1. ✅ 禁言不生效 → 聊天事件现在检查 MutePlayerList,被禁言玩家无法发言。
  2. ✅ /heal 恢复饱食度 + 配置键大小写不匹配 → 现在恢复生命值并使用正确的 HealCommandSetting 配置键。
  3. ✅ /kick 无法阻止踢出自己 → 自我检查改为与命令发送者比较。
  4. ✅ 控制台 /unmute 无效 → 解禁分支由 add 修正为 remove。
  5. ✅ /tpaback 未注册 → 已注册命令与权限(返回 TPA 传送前位置)。
  6. ✅ 多处空指针风险(重生事件、/tpaback、跨世界飞行检查)→ 已加空值保护。
  7. ✅ 跨世界飞行权限节点错误(OpenSourceTools.FLY)→ 改为正确的 OpenTools.fly。
  8. ✅ 屏蔽词仅整句精确匹配 → 改为包含匹配(忽略大小写)。
  9. ✅ 缺失 PlaceholderAPI 时 System.exit(0) 强杀整个 JVM → 改为优雅禁用插件。
  10. ✅ 权限声明不一致(OSTReload/day)→ 已统一权限节点。

仍存在的限制

  • 状态仅存内存:TPA 请求、聊天冷却、死亡点、隐身/飞行状态保存在内存中,服务器重启后丢失(如需持久化请提 Issue 讨论方案)。
  • /kick 踢人 GUI 与命令的自我踢出/管理员保护逻辑按现有设计保留。

安全提醒

  • 仓库根目录的 build.txt 内含 Jenkins 构建服务器 Token,属于敏感信息泄露,建议立即吊销该 Token 并将文件从仓库移除。
  • 玩家加入时其 IP 地址会输出到服务器控制台日志,如介意请自行移除 PlayerJoin_Event.java 中的相关代码。

许可证

本项目采用 Apache License 2.0。

S
Description
No description provided
Readme
86 KiB
0 Stars 1 Watchers 0 Forks
Languages
Java 91.8%
PowerShell 8.2%