Repository navigation
Releases: UltiKits/UltiLogin
Release list
v2.0.0
Added
-
/setpassword <new> <confirm>(alias/setpw) sets the first game password of an account created on the web
through/panel. It works only while the player is logged in and the account has no game password, and it follows
the same password rules as/register; afterwards/loginworks with it. An account that already has a password
is told to use/changepassword. -
/setpassword <新密码> <确认>(别名/setpw)为通过/panel在网页上创建的账号设置第一个游戏密码。仅在玩家已登录且账号没有
游戏密码时可用,密码规则与/register相同;之后即可用/login登录。已有密码的账号会被提示使用/changepassword。 -
A web registration counts as an UltiLogin registration. When a player whose name has no UltiLogin account on this
server creates a new UltiKits account on the/panelpage, the game creates their UltiLogin account without a game
password, logs them in and tells them once to set one with/setpassword./loginrefuses such an account, whatever
is typed, until a game password is set, and the refused try is not counted as a wrong password. If the player
registers in game first, that account is kept untouched. Amax-register-per-iplimit, when set, applies to it too.
Withgui-mode.enabled: truesuch an account is never shown the number pad, which no digits could satisfy: on
joining and at every re-prompt the player is told to log in with/paneland then set a game password. -
网页注册视同 UltiLogin 注册。名字在本服务器上没有 UltiLogin 账号的玩家在
/panel页面上新建 UltiKits 账号后,游戏会为其创建
一个没有游戏密码的 UltiLogin 账号、让其登录,并提示一次用/setpassword设置游戏密码。在设置游戏密码之前,无论输入什么
/login都会拒绝该账号,且不计为密码错误。若玩家先在游戏内注册,则保留该账号不变。设置了max-register-per-ip时同样适用。
在gui-mode.enabled: true下,这样的账号不会弹出任何数字都无法通过的数字键盘:进入服务器及每次再次提示时,玩家都会被告知
用/panel登录,然后设置游戏密码。 -
Every web outcome of a
/panellink is shown in game: cancelled on the page, refused by the web (with the reason),
expired, signed in, or the server's UltiCloud credential refused (also logged to the console). While a player who
has not logged in holds a pending link, the login countdown is paused; it resumes with the time that was left when
the link is cancelled, refused or expires, never with a fresh full timeout. The other restrictions stay. A player who
leaves the server loses their pending links, so a sign-in completed on the web after they left logs nobody in. -
/panel链接在网页上的每种结果都会在游戏内显示:网页取消、网页拒绝(附原因)、链接过期、登录成功,或服务器的 UltiCloud 凭据被
拒绝(同时写入控制台)。未登录的玩家持有待处理链接期间,登录倒计时暂停;链接被取消、拒绝或过期后,按暂停时剩余的时间继续,
绝不重新计满。其他限制保持不变。玩家离开服务器后其待处理链接作废,
此后在网页上完成的登录不会让任何人登录。
Changed
-
Lockout redesign (#50): BOTH now counts and locks each (address, account UUID) pair,
independently of that account at other addresses, and separately locks an address aftermax-login-attempts
different accounts fail there. Success clears only its own pair, never the address's failed-account memberships.
IP-mode successes no longer clear the shared address count, closing the success-reset bypass. IP counts and
each BOTH address membership expirelockout-durationseconds after their latest failure; unlocked UUID/pair
counts still reset only on their own success or corresponding lock expiry. BOTH is the new fresh/missing-key
default. Existing operator values (including IP and lowercase uuid) stay byte for byte; unusable values warn and
fall back to BOTH only in memory. Recognised old shipped comments refresh without overwriting custom comments. -
登录封禁重构(#50): BOTH 改为按(地址、账号 UUID)组合计数并封禁,同一账号在其他地址不受该组合封禁影响;
同一地址失败的不同账号数达到max-login-attempts时另封禁整个地址。成功只清除自身组合计数,不清除地址集合。
IP 模式成功不再清除共用地址计数,修复成功登录清零绕过;IP 计数和 BOTH 的每个地址集合成员在最近一次失败的lockout-duration秒后过期。
未封禁的 UUID/组合计数仍只在自身成功或对应封禁到期时重置。新文件或缺少键时默认 BOTH;现有值(含 IP、小写 uuid)逐字节保留,
无效值只警告并在内存回退到 BOTH。已识别的旧出厂注释更新,自写注释不覆盖。 -
/panelrequires the server to be signed in to UltiCloud. Create and poll both use the server owner's
credential; there is no anonymous fallback or grace period for older plugins. If the server is not signed in,
no link is created: the player is told to ask the owner to runulticloud loginin the console. A failed creation
restores the remaining login countdown silently; it does not grant a new timeout. A refused credential (HTTP
401/403) is reported in game and in the console, never retried without it. Opening a link never logs the player
in by itself: the page asks for the linked account's password, a device that account told it to remember (one
click), confirmation by a signed-in account (only for a player logged in in game), or a new account (only for a
name without an UltiLogin account). A name with an UltiLogin account that is neither logged in in game nor linked
is refused until the player runs/loginonce. Normal website account login, browser link verification,
completion and cancellation, and game/loginremain available. -
/panel要求服务器先登录 UltiCloud。 创建和轮询链接都使用服务器所有者的凭据;没有匿名回退,也不为旧插件保留宽限期。
服务器未登录时不生成链接,玩家会被提示请服主在控制台执行ulticloud login。创建失败会按剩余时间静默恢复登录倒计时,
不会重新给予完整超时。凭据被拒绝(HTTP 401/403)时会在游戏内及控制台提示,绝不改用无凭据请求重试。仅打开链接不会让玩家登录:
网页会要求输入关联账号的密码、使用该账号让其记住的设备(点击一次)、由已登录账号确认(仅限已在游戏内登录的玩家),或新建账号
(仅限没有 UltiLogin 账号的名字)。已有 UltiLogin 账号、但既未在游戏内登录也未关联的名字会被拒绝,直到玩家先执行一次/login。
正常网站账号登录、浏览器链接验证/完成/取消,以及游戏/login均保留。 -
UltiLogin 2.0.0 requires UltiTools-API 6.3.0 or later and raises
api-versioninplugin.ymlfrom620
(the last released version, 1.0.0) to630. Older frameworks cannot load this module; upgrade UltiTools before
installing it. A new module JAR needs a server restart;/ul reloadonly reloads configuration
(UltiKits/UltiTools-Reborn#544). -
UltiLogin 2.0.0 需要 UltiTools-API 6.3.0 或更高版本,
plugin.yml中的api-version从上一个发布版本 1.0.0 的620
提高到630。更早的框架无法加载本模块;请先升级 UltiTools,再安装本模块。新的模块 JAR 需要重启服务器,/ul reload只会
重载配置(UltiKits/UltiTools-Reborn#544)。 -
plugin.ymlnow declaresidentify-string: ultilogin, the key of this module's entry in the UltiCloud catalogue.
The framework's update check and/upm updateskip a module that does not declare it, so this module now takes part
in both: a later published version carrying the same key is reported at startup and can be installed with
/upm update(UltiKits/UltiTools-Reborn#474). -
plugin.yml现在声明identify-string: ultilogin,即本模块在 UltiCloud 模块目录中的条目键。框架的更新检查和/upm update
会跳过未声明该键的模块,因此本模块现在会参与两者:带有同一键的更高发布版本会在启动时提示,并可用/upm update安装
(UltiKits/UltiTools-Reborn#474)。 -
max-register-per-ipinconfig/login.ymlnow ships as0(no per-IP registration limit) instead of3. Many
players can share one public IP address (carrier-grade NAT, common in mainland China and on mobile and campus
networks), so a limit can stop legitimate players from registering; the comment above the key now says so. Only a
file without the key gets the new default: a value already in your file, including3, is kept, and only the comment
earlier versions wrote above it is replaced. When you set a limit, it also applies to an account created on the web
through/panel: the web page reports the registration, but the game refuses the account and the player sees the
IP-limit message. -
config/login.yml中的max-register-per-ip出厂值由3改为0(不限制同一 IP 的注册数)。许多玩家可能共用同一个公网
IP(运营商级 NAT,在中国大陆以及移动网络、校园网中很常见),限制可能导致正常玩家无法注册;该键上方的注释现已写明这一点。
只有缺少该键的文件才写入新默认值:文件中已有的值(包括3)保持不变,只替换旧版本写在其上方的注释。设置限制后,它同样
适用于通过/panel在网页上创建的账号:网页会显示注册成功,但游戏内拒绝创建账号,玩家会看到 IP 上限提示。 -
allowed-commands: [](or~) inconfig/login.ymlno longer refuses every command to a player who has not
logged in. The setting is declared@NotEmpty, and from UltiTools 6.3.0 the framework treats an empty value of such a
list as unusable: the module runs on the shipped list (login, l, register, reg, panel, regs, recover) and logs one
WARNING namingallowed-commands, the value as written and that default. The file is left exactly as you wrote it.
Before,[]was loaded as an empty list, so/loginand/registerwere refused too;~ran the default list but
the file was rewritten. To allow fewer commands, list them; to allow more, add them (#52). -
config/login.yml中的allowed-commands: [](或~)不再让未登录玩家的所有命令都被拒绝。该设置声明了@NotEmpty,
自 UltiTools 6.3.0 起框架把此类列表的空值视为不可用:模块改用出厂列表(login, l, register, reg, panel, regs, recover),并记录一条 WARNING,写明allowed-commands、你写下的值与该默认值;文件保持你写的原样。此前[]按空列表
加载,连/login与/register也会被拒绝;~会使用默认列表,但文件会被改写。想放行更少的命令,请逐条列出;
想放行更多,请追加(#52)。 -
Message and title settings in
config/login.yml— the three GUI titles (gui-mode.title-login,
gui-mode.title-register,gui-mode.title-confirm) and the twenty-one messages (messages.register-prompt,
register-prompt-gui,login-prompt,login-prompt-gui,register-success,login-success,already-logged,
not-registered,already-registered,password-mismatch,password-too-short,password-too-long,
timeout-kick,account-locked,attempts-remaining,gui-password-invalid, andmessages.admin.password-reset,
force-login,unregister,player-not-found,account-not-found) — are written in the server's language when
the module starts, and the file is what the module shows (for examplemessages.login-success: '&aLogin successful! Welcome back!'underlanguage: en); previously they were fixed Chinese text, so
language: enhad no effect on them. A setting that is still built-in text — in any language, or a default an
earlier version shipped — followslanguage: it is rewritten when the module starts or after/ul reload. A
setting you edited is kept. To keep a built-in text but stop it followinglanguage, change at least one
character (#20). The text written is this module's built-in text: edit these settings inconfig/login.yml; an edit of the extracted
language file does not change them (earlier versions never read them from the language file either). -
config/login.yml中的消息与标题设置——三个界面标题(`gui-mode.t...
v1.0.0
UltiLogin v1.0.0
Initial release.
Changes
- Login/register system with password hashing, email recovery, lockout protection
- Fix: eliminate TOCTOU race conditions in lockout checks
- Test coverage: 88.5% (non-GUI)
- Migrated to ultikits-module-parent POM