ZeroLogin — 新一代轻量级 Minecraft 登录插件
单个 JAR 兼容 Minecraft 1.20 至 26.1.2,零外部依赖,为离线模式服务器提供账号注册与登录保护。
简介
ZeroLogin 是一款为离线模式(online-mode=false)服务器设计的轻量级登录插件。玩家首次进入需注册,之后每次进入需登录。在完成认证前,插件会冻结其移动并拦截各类交互,防止未认证玩家破坏服务器。
整个插件只有一个 JAR,覆盖 Minecraft 1.20 到 26.1.2 全版本区间,无需按版本下载不同构建,也不用担心依赖冲突或类加载隔离问题。
功能特性
账号系统
支持注册、登录、注销、改密,覆盖完整的账号生命周期。口令采用 PBKDF2-HMAC-SHA256 加随机盐存储,默认 120000 次迭代。校验口令时使用常量时间比较,避免通过响应时间侧信道推断散列。玩家登录成功时,若存储的散列迭代次数低于当前配置,会自动升级为更强参数。全程仅使用 JDK 自带加密实现,零外部依赖。
登录保护
未认证状态下,插件会拦截以下行为:冻结位置位移,仅允许转动视角(可配置开关);仅放行登录相关命令,其余命令一律拦截;禁止发言;禁止破坏和放置方块;禁止右键交互和丢弃物品;禁止受到伤害;禁止打开背包和点击背包物品。
会话与自动登录
玩家可用 /ip 将当前 IP 加入白名单,之后从该 IP 进入免登录,最多 5 个。同一 IP 在 remember-seconds 时间内重进无需再次登录。zerologin.bypass 权限节点可让指定玩家(如管理员)跳过认证。
登录防护
未在指定时间内完成登录或注册将被踢出。密码错误达到上限次数后自动踢出。
其他
内置中英文双语消息,可自由编辑。细粒度权限节点,兼容主流权限插件。提供 /zerologin reload|info|stats 管理命令。每个账号一个文本文件,玩家改名不丢数据,可直接备份或同步到其他服。
兼容性
支持 Minecraft 1.20 至 26.1.2,适用于 Paper、Spigot 及其衍生服务端。单个 JAR 覆盖全版本区间,无需按版本下载不同构建。编译目标为 Java 17 字节码,可直接运行于 Java 17 至 25 的 JVM。开发期对 1.20.1 与 26.1.2 两个 API 包做了类与方法签名逐一比对,仅使用两端共有的 Bukkit API 交集。已在 Paper 26.1.2(Java 25)实机加载并启用成功,编译期对 1.20.1 API 亦通过。
运行环境要求服务端为 Paper 或 Spigot 1.20 至 26.1.2,Java 17 或更高,服务端模式为 online-mode=false(离线模式)。
安装
下载最新版 ZeroLogin-1.0.jar,放入服务端 plugins/ 目录,重启服务端。首次启动后,配置与语言文件会生成在 plugins/ZeroLogin/。
快速上手
服务端重启后,玩家进入服务器会看到提示:
[ZeroLogin] 请先注册:/register <密码> <密码>
玩家执行 /register mypassword mypassword,注册成功后自动完成登录。下次进入服务器时,提示变为 /login <密码>,玩家执行 /login mypassword 即可。在登录前,玩家无法移动、聊天、破坏方块或打开背包。
管理员如需让某个玩家免登录,为其添加 zerologin.bypass 权限即可,默认仅 OP 的 zerologin.* 包含该节点,需显式授予。
命令
/register <密码> <密码>,别名 /reg,注册账号,成功后自动登录,无需登录即可使用。
/login <密码>,别名 /l,登录账号,无需登录即可使用。
/unregister <当前密码>,别名 /unreg,注销(删除)账号,需登录后使用。
/changepassword <旧密码> <新密码>,别名 /changepw 或 /cpw,修改密码,需登录后使用。
/ip <add|remove|list|clear> [ip],管理自动登录 IP,需登录后使用。其中 add 添加自动登录 IP,上限 5 个;remove 移除自动登录 IP;list 查看已保存的自动登录 IP;clear 清空全部自动登录 IP。
/zerologin <reload|info|stats>,别名 /zl,管理命令。reload 重载配置与语言文件;info 查看插件版本、兼容区间、存储后端;stats 查看注册账号数与当前在线已认证人数。
权限
zerologin.admin,默认 OP,使用 /zerologin 管理命令。
zerologin.bypass,默认否,免登录,进入服务器后无需认证。
zerologin.ip,默认是,使用 /ip 管理自己的自动登录 IP。
zerologin.*,默认 OP,包含以上全部权限。
配置文件
路径为 plugins/ZeroLogin/config.yml。
language 项为界面语言,可选 zh_cn 或 en_us。
storage.type 为账号数据后端,当前版本支持 file。
security.pbkdf2-iterations 为 PBKDF2-HMAC-SHA256 迭代次数,越大越安全、登录注册越慢,默认 120000,下限 1000。
security.min-password-length 为密码最短长度,默认 6。
security.max-password-length 为密码最长长度,默认 32。
security.max-login-attempts 为密码最长尝试次数,超过后踢出,0 表示不限制,默认 3。
security.login-timeout-seconds 为未认证时必须在多少秒内完成登录或注册,否则踢出,0 表示不限制,默认 60。
security.require-mixed 表示是否要求密码必须同时包含字母和数字,默认 false。
session.remember-seconds 为记住登录状态的秒数,同一 IP 在该时间内重进无需再登录,0 表示关闭,默认 300。
session.ip-auto-login 表示是否允许基于 IP 的自动登录,配合 /ip 命令使用,默认 true。
protection.freeze-movement 表示未认证时是否冻结移动,默认 true。
protection.allowed-commands 为未认证时允许执行的命令列表,不含斜杠,小写,默认包含 login、l、register、reg。
messages-prefix 为消息前缀,支持 & 颜色代码,默认 &8[&bZeroLogin&8] 。
语言文件位于 plugins/ZeroLogin/messages_zh_cn.yml(中文)和 plugins/ZeroLogin/messages_en_us.yml(英文)。消息支持 & 颜色代码与 {占位符},例如登录错误提示中的 {left} 表示剩余次数。修改后执行 /zerologin reload 或重启生效。
账号数据
路径为 plugins/ZeroLogin/accounts/<UUID>.txt。每个账号一个文件,格式为可读的 key value 文本,包含 schema、uuid、name、password、registered-at、last-login-at、last-seen-at、login-count、auto-login-ips 等字段。
设计上,文件名为 UUID,玩家改名(含正版改名、name 字段变更)不会造成主键冲突或数据丢失,按名字查询时插件会命中索引并自动更新记录。单账号单文件写入,登录高峰只重写对应玩家的小文件,不会整库重写。采用原子写入,先写 .tmp 再原子替换,避免服务端崩溃导致文件损坏。整个 accounts/ 目录可直接复制到其他服务器复用。手工编辑账号文件有风险,可能导致该账号无法读取,会被安全跳过并记录警告。
安全说明
口令散列采用 PBKDF2-HMAC-SHA256 加盐存储,即使账号文件泄露也无法直接还原明文口令,默认 120000 次迭代。口令在校验完成后立即用零填充清除内存中的字符数组,减少驻留时间。若服务端可开启正版验证(online-mode=true),通常无需本插件,本插件面向离线或盗版服务器场景。IP 自动登录提升了体验,但同一 IP 下的其他玩家可能借道进入,对安全要求高的服务器建议将 session.ip-auto-login 设为 false,并引导玩家不添加 IP 白名单。zerologin.bypass 会让玩家跳过全部认证,请仅授予可信人员。
常见问题
支持 Folia 吗?暂不支持,plugin.yml 中已声明 folia-supported: false。
玩家忘了密码怎么办?删除 plugins/ZeroLogin/accounts/<该玩家UUID>.txt 后让其重新注册即可,会丢失该账号的 IP 白名单等数据。
如何从其他登录插件迁移?本插件使用独立的账号文件格式,暂不提供自动迁移工具,可基于 accounts/*.txt 的纯文本格式编写转换脚本。
能跨多个服务器共享账号吗?可以。将 plugins/ZeroLogin/accounts/ 目录放到共享存储,或各服定期同步。后续版本计划提供 MySQL 存储后端以支持更便捷的多服共享。
为什么未认证时玩家能动视角却不能移动?这是刻意的设计,避免玩家因完全冻结产生卡死感,同时阻止其位移影响其他玩家。
开源协议
本项目基于 MIT License 开源。
相关链接
仓库:https://github.com/lmxdg/ZeroLogin
发布下载:https://github.com/lmxdg/ZeroLogin/releases
问题反馈:https://github.com/lmxdg/ZeroLogin/issues
单个 JAR 兼容 Minecraft 1.20 至 26.1.2,零外部依赖,为离线模式服务器提供账号注册与登录保护。
简介
ZeroLogin 是一款为离线模式(online-mode=false)服务器设计的轻量级登录插件。玩家首次进入需注册,之后每次进入需登录。在完成认证前,插件会冻结其移动并拦截各类交互,防止未认证玩家破坏服务器。
整个插件只有一个 JAR,覆盖 Minecraft 1.20 到 26.1.2 全版本区间,无需按版本下载不同构建,也不用担心依赖冲突或类加载隔离问题。
功能特性
账号系统
支持注册、登录、注销、改密,覆盖完整的账号生命周期。口令采用 PBKDF2-HMAC-SHA256 加随机盐存储,默认 120000 次迭代。校验口令时使用常量时间比较,避免通过响应时间侧信道推断散列。玩家登录成功时,若存储的散列迭代次数低于当前配置,会自动升级为更强参数。全程仅使用 JDK 自带加密实现,零外部依赖。
登录保护
未认证状态下,插件会拦截以下行为:冻结位置位移,仅允许转动视角(可配置开关);仅放行登录相关命令,其余命令一律拦截;禁止发言;禁止破坏和放置方块;禁止右键交互和丢弃物品;禁止受到伤害;禁止打开背包和点击背包物品。
会话与自动登录
玩家可用 /ip 将当前 IP 加入白名单,之后从该 IP 进入免登录,最多 5 个。同一 IP 在 remember-seconds 时间内重进无需再次登录。zerologin.bypass 权限节点可让指定玩家(如管理员)跳过认证。
登录防护
未在指定时间内完成登录或注册将被踢出。密码错误达到上限次数后自动踢出。
其他
内置中英文双语消息,可自由编辑。细粒度权限节点,兼容主流权限插件。提供 /zerologin reload|info|stats 管理命令。每个账号一个文本文件,玩家改名不丢数据,可直接备份或同步到其他服。
兼容性
支持 Minecraft 1.20 至 26.1.2,适用于 Paper、Spigot 及其衍生服务端。单个 JAR 覆盖全版本区间,无需按版本下载不同构建。编译目标为 Java 17 字节码,可直接运行于 Java 17 至 25 的 JVM。开发期对 1.20.1 与 26.1.2 两个 API 包做了类与方法签名逐一比对,仅使用两端共有的 Bukkit API 交集。已在 Paper 26.1.2(Java 25)实机加载并启用成功,编译期对 1.20.1 API 亦通过。
运行环境要求服务端为 Paper 或 Spigot 1.20 至 26.1.2,Java 17 或更高,服务端模式为 online-mode=false(离线模式)。
安装
下载最新版 ZeroLogin-1.0.jar,放入服务端 plugins/ 目录,重启服务端。首次启动后,配置与语言文件会生成在 plugins/ZeroLogin/。
快速上手
服务端重启后,玩家进入服务器会看到提示:
[ZeroLogin] 请先注册:/register <密码> <密码>
玩家执行 /register mypassword mypassword,注册成功后自动完成登录。下次进入服务器时,提示变为 /login <密码>,玩家执行 /login mypassword 即可。在登录前,玩家无法移动、聊天、破坏方块或打开背包。
管理员如需让某个玩家免登录,为其添加 zerologin.bypass 权限即可,默认仅 OP 的 zerologin.* 包含该节点,需显式授予。
命令
/register <密码> <密码>,别名 /reg,注册账号,成功后自动登录,无需登录即可使用。
/login <密码>,别名 /l,登录账号,无需登录即可使用。
/unregister <当前密码>,别名 /unreg,注销(删除)账号,需登录后使用。
/changepassword <旧密码> <新密码>,别名 /changepw 或 /cpw,修改密码,需登录后使用。
/ip <add|remove|list|clear> [ip],管理自动登录 IP,需登录后使用。其中 add 添加自动登录 IP,上限 5 个;remove 移除自动登录 IP;list 查看已保存的自动登录 IP;clear 清空全部自动登录 IP。
/zerologin <reload|info|stats>,别名 /zl,管理命令。reload 重载配置与语言文件;info 查看插件版本、兼容区间、存储后端;stats 查看注册账号数与当前在线已认证人数。
权限
zerologin.admin,默认 OP,使用 /zerologin 管理命令。
zerologin.bypass,默认否,免登录,进入服务器后无需认证。
zerologin.ip,默认是,使用 /ip 管理自己的自动登录 IP。
zerologin.*,默认 OP,包含以上全部权限。
配置文件
路径为 plugins/ZeroLogin/config.yml。
language 项为界面语言,可选 zh_cn 或 en_us。
storage.type 为账号数据后端,当前版本支持 file。
security.pbkdf2-iterations 为 PBKDF2-HMAC-SHA256 迭代次数,越大越安全、登录注册越慢,默认 120000,下限 1000。
security.min-password-length 为密码最短长度,默认 6。
security.max-password-length 为密码最长长度,默认 32。
security.max-login-attempts 为密码最长尝试次数,超过后踢出,0 表示不限制,默认 3。
security.login-timeout-seconds 为未认证时必须在多少秒内完成登录或注册,否则踢出,0 表示不限制,默认 60。
security.require-mixed 表示是否要求密码必须同时包含字母和数字,默认 false。
session.remember-seconds 为记住登录状态的秒数,同一 IP 在该时间内重进无需再登录,0 表示关闭,默认 300。
session.ip-auto-login 表示是否允许基于 IP 的自动登录,配合 /ip 命令使用,默认 true。
protection.freeze-movement 表示未认证时是否冻结移动,默认 true。
protection.allowed-commands 为未认证时允许执行的命令列表,不含斜杠,小写,默认包含 login、l、register、reg。
messages-prefix 为消息前缀,支持 & 颜色代码,默认 &8[&bZeroLogin&8] 。
语言文件位于 plugins/ZeroLogin/messages_zh_cn.yml(中文)和 plugins/ZeroLogin/messages_en_us.yml(英文)。消息支持 & 颜色代码与 {占位符},例如登录错误提示中的 {left} 表示剩余次数。修改后执行 /zerologin reload 或重启生效。
账号数据
路径为 plugins/ZeroLogin/accounts/<UUID>.txt。每个账号一个文件,格式为可读的 key value 文本,包含 schema、uuid、name、password、registered-at、last-login-at、last-seen-at、login-count、auto-login-ips 等字段。
设计上,文件名为 UUID,玩家改名(含正版改名、name 字段变更)不会造成主键冲突或数据丢失,按名字查询时插件会命中索引并自动更新记录。单账号单文件写入,登录高峰只重写对应玩家的小文件,不会整库重写。采用原子写入,先写 .tmp 再原子替换,避免服务端崩溃导致文件损坏。整个 accounts/ 目录可直接复制到其他服务器复用。手工编辑账号文件有风险,可能导致该账号无法读取,会被安全跳过并记录警告。
安全说明
口令散列采用 PBKDF2-HMAC-SHA256 加盐存储,即使账号文件泄露也无法直接还原明文口令,默认 120000 次迭代。口令在校验完成后立即用零填充清除内存中的字符数组,减少驻留时间。若服务端可开启正版验证(online-mode=true),通常无需本插件,本插件面向离线或盗版服务器场景。IP 自动登录提升了体验,但同一 IP 下的其他玩家可能借道进入,对安全要求高的服务器建议将 session.ip-auto-login 设为 false,并引导玩家不添加 IP 白名单。zerologin.bypass 会让玩家跳过全部认证,请仅授予可信人员。
常见问题
支持 Folia 吗?暂不支持,plugin.yml 中已声明 folia-supported: false。
玩家忘了密码怎么办?删除 plugins/ZeroLogin/accounts/<该玩家UUID>.txt 后让其重新注册即可,会丢失该账号的 IP 白名单等数据。
如何从其他登录插件迁移?本插件使用独立的账号文件格式,暂不提供自动迁移工具,可基于 accounts/*.txt 的纯文本格式编写转换脚本。
能跨多个服务器共享账号吗?可以。将 plugins/ZeroLogin/accounts/ 目录放到共享存储,或各服定期同步。后续版本计划提供 MySQL 存储后端以支持更便捷的多服共享。
为什么未认证时玩家能动视角却不能移动?这是刻意的设计,避免玩家因完全冻结产生卡死感,同时阻止其位移影响其他玩家。
开源协议
本项目基于 MIT License 开源。
相关链接
仓库:https://github.com/lmxdg/ZeroLogin
发布下载:https://github.com/lmxdg/ZeroLogin/releases
问题反馈:https://github.com/lmxdg/ZeroLogin/issues