Skip to content

Releases

v2.0.0

Choose a tag to compare

@wisdommen wisdommen released this 21 Oct 17:31

Added

  • On startup, and again on every /ul reload, this module now checks your own config/worlds.yml
    for the eight keys this version no longer reads (the entries under Removed) and logs one warning per
    leftover, naming the module, the file and the key, and saying where the text comes from. Deleting
    a key from the module stops a fresh file being written with it but does nothing to the file you
    already have, so without this warning an edited value would go on meaning nothing, silently. Delete
    the keys from the file to silence it (part of #38).
  • 本模块现在会在启动时、以及每次 /ul reload 时检查你自己的 config/worlds.yml 中是否仍存在本版本不再读取的
    八个配置键(见下方 Removed 中的条目),并为每个残留键各记一条警告,点明模块、文件与键名,并说明文本来自哪里。
    从模块中删除一个键,只会让新生成的文件里不再有它,对你已有的文件没有任何影响,因此若没有这条警告,被改过的值
    会继续悄无声息地不起作用。把这些键从文件中删除即可不再提示(#38 的一部分)。

Changed

  • Requires UltiTools 6.3.0. plugin.yml raises api-version from 620 in released 1.0.0 to 630.
    UltiTools 6.2.x refuses to load this module because of that api-version.

  • 需要 UltiTools 6.3.0。 plugin.yml 的 api-version 从已发布的 1.0.0 中的 620 提升到 630。
    UltiTools 6.2.x 会因该 api-version 拒绝加载本模块。

  • The empty-world check now runs on the framework's own config-bound scheduling, bound to
    auto_unload.check_interval (UltiTools 6.3.0, UltiKits/UltiTools-Reborn#531), instead of a one-second tick
    inside this module. The first check comes one interval after the module loads. /ul reload applies a changed
    value keeping the check's place in its cycle; a value outside 1 to 107374182 seconds refuses the module at
    start, and at /ul reload is not applied: the running interval is kept, a warning names the key, and the
    reload is reported as partial. The minimum drops from 10 seconds to 1 second; at least 10 seconds is
    recommended. Your config/worlds.yml is not rewritten; only a newly written file, or a key the framework newly inserts,
    carries the new comment.

  • 空世界检查现在由框架自身的配置绑定调度执行,绑定到 auto_unload.check_interval(UltiTools 6.3.0,
    UltiKits/UltiTools-Reborn#531),不再使用模块内部的每秒计数。首次检查在模块加载一个间隔之后进行。/ul reload
    会应用修改后的值,并保持检查在其周期中的位置;超出 1 到 107374182 秒的值会在启动时令模块被拒绝加载,在 /ul reload
    时不会生效:保留正在运行的间隔,一条警告点明该键,且重载被报告为部分完成。最小值从 10 秒降为 1 秒;建议至少 10 秒。
    不会改写你的 config/worlds.yml;只有新生成的文件、或由框架新插入的键,才带有新的注释。

  • plugin.yml now declares identify-string: ultiworlds, the identifier the UltiKits catalogue lists this
    module under. With it the framework's update check at start and /upm update include this module; without
    it they skipped it. A module jar published before this change carries no identifier and cannot be an update
    source for this version.

  • plugin.yml 现声明 identify-string: ultiworlds,即 UltiKits 模块目录中本模块的标识。有了它,框架启动时的更新检查与
    /upm update 会包含本模块;此前会跳过它。此前发布、不带该标识的模块 jar 不能作为本版本的更新来源。

  • /world delete <name> now asks before it deletes. After the checks it always made (permission,
    a world by that name exists, not the default world, not in protected_worlds), it opens a
    confirmation window titled "Confirm Delete: " instead of deleting on the spot; the world is
    deleted only when you click the window's green OK button. The red Cancel button, or closing
    the window any other way, deletes nothing. Clicking OK checks the permission, the default world
    and protected_worlds again, because they can change while the window is open, and a window
    deletes at most once, never after it has been closed, and only for a click on its own OK button
    (not for a click at the same slot in your own inventory). The window is valid for 30 seconds, the
    same limit and clock as the console's confirmation: OK after that deletes nothing and asks you
    to run the command again. If this module deletes that world for another request while your window
    is open -- or starts to and fails part-way -- your OK deletes nothing either. The chat lines change with it: the old "Deleting world , please
    wait..." / "World has been deleted!" / "Failed to delete the world!" lines
    (world.delete.deleting, world.delete.success, world.delete.failed) are no longer sent to a
    player; the window sends "World has been deleted" or "Failed to delete world "
    (command.delete.success, command.delete.failed), and "Delete operation cancelled"
    (command.delete.cancelled) for Cancel. If you customised those three old lines for players, carry
    your text over to the new keys in a custom language file, not in the official lang/*.yml: copy the
    official file in the same lang/ folder to a name that starts with its language code and a hyphen
    (for example lang/en-myserver.yml) and set language: en-myserver in plugins/UltiTools/config.yml.
    An earlier edit made in an official file is not kept: the first start after the upgrade restores the
    file and keeps your previous file as .bak, where your old text is (UltiKits/UltiTools-Reborn#616). The
    old lines are now the console's (next entry) (#19).

  • The server console can now delete a world, behind a typed confirmation. Until now the whole
    /world command was player-only, so the console could not run /world delete at all. It now
    can, and it never deletes on the first request: /world delete <name> from the console makes the
    same checks as for a player (a world by that name exists, it is not the default world, it is not
    in protected_worlds), deletes nothing, and asks you to run the same command again within 30
    seconds. Only that repeat -- same world name, spelled and cased exactly the same, within 30
    seconds -- deletes, and it makes every check again first; it then prints "Deleting world ,
    please wait..." followed by "World has been deleted!" or "Failed to delete the world!". A
    repeat after 30 seconds deletes nothing and starts a new 30-second wait; a repeat made after this
    module has deleted (or started deleting) a world by that name for another request deletes nothing, says so, and counts
    as a new request; a check that refuses the
    request or the repeat cancels the pending request; each request allows one deletion. A pending
    request lives in memory only and is lost on restart, and the 30 seconds are measured on a clock
    that changes to the system time do not affect. Command blocks and other non-player,
    non-console senders are refused, and so is RCON (the remote console protocol used by tools such
    as mcrcon and many chat bridges): it cannot delete a world. Every other /world subcommand stays player-only, as before;
    /world help from the console now lists only /world delete (#19).

  • Every command that runs as the server console counts as the console, and they all share one
    identity: each reports the name CONSOLE, so there is one pending confirmation per world name
    for all of them together, and any one of them confirms a request made by any other. That
    includes UltiPanel remote commands, post-teleport commands added with /world postcmd add, and
    console commands run by other modules or plugins (for example scheduled commands, menu actions,
    kit commands and mail commands).

    • UltiPanel. A panel user can delete a world by sending world delete <name> twice within 30
      seconds. When the server accepts the command dispatch, command_result's data.output reads
      "Command dispatched to the server console. Its output appears in the server log stream."
      This acknowledges dispatch, not deletion: the command runs as the server console, and its prompt,
      outcome and any refusal go to the server log, not to data.output. Read those lines in the
      server log (or in the panel's log view, if log streaming is on).
    • Post-teleport commands. A world delete <name> stored as a post-teleport command runs every
      time any player teleports into that world with /world tp or the world list. Any two such
      teleports within 30 seconds, by the same player or by different players, delete the named world;
      so do one such teleport plus the same command from the console, the panel or any other
      console-run command within 30 seconds. Stored as world delete {world}, it targets whichever
      world is teleported into. The prompt goes to the console, so the teleporting players are never
      told. Do not add one. Adding post-teleport commands requires ultiworlds.admin.settings, so that
      permission is in effect enough to delete any unprotected world (#19).
  • Known limitation. A delete confirmation, from a player or from the console, does not try to
    recognise "the same world": it is bound to its 30 seconds and to this module's own deletions. A
    world deleted by another plugin or by hand, and created again under the same name within those 30
    seconds, is deleted by a confirmation given for the one before it (#19).

  • /world delete <名称> 现在会在删除前先询问。它在原有检查(权限、该名称的世界存在、不是默认世界、
    不在 protected_worlds 中)之后,不再立即删除,而是打开标题为"Confirm Delete: <名称>"的确认窗口;
    只有点击窗口中绿色的 OK 按钮才会删除世界。点击红色的 Cancel 按钮,或以其他任何方式关闭窗口,都
    不会删除任何内容。点击 OK 时会再次检查权限、默认世界与 protected_worlds,因为窗口打开期间它们可能
    发生变化;并且一个窗口最多只执行一次删除,关闭后不再执行,且只响应窗口自身 OK 按钮的点击(不会响应在
    自己背包同一格位的点击)。窗口有效期为 30 秒,与控制台确认使用相同的时限和时钟:超过后点击 OK 不会删除
    任何内容,并提示重新执行命令。若窗口打开期间本模块因另一个请求删除了该世界(或开始删除但中途失败),你的 OK 同样不会删除任何内容。
    聊天提示也随之改变:原来的"正在删除世界……"、"世界已删除"、
    "删除世界失败"三行(world.delete.deleting、world.delete.success、world.delete.failed)不再发送给玩家;
    改由窗口发送"世界 <名称> 已删除"或"删除世界 <名称> 失败"(command.delete.success、
    command.delete.failed),点击 Cancel 时发送"已取消删除操作"(command.delete.cancelled)。如果你为玩家
    自定义过旧的三行文本,请把文本迁移到自定义语言文件的新键上,而不是官方的 lang/*.yml:在同一 lang/ 目录中把
    官方文件复制为以其语言代码加连字符开头的文件(例如 lang/zh-myserver.yml),并在 plugins/UltiTools/config.yml
    中设置 language: zh-myserver。在官方文件中做过的修改不会保留:升级后的首次启动会恢复该文件,并把原文件保留为
    .bak,你原来的文本就在其中(UltiKits/UltiTools-Reborn#616)。旧的三行现在由控制台使用(见下一条)
    (#19)。

  • 服务器控制台现在可以删除世界,但需要打字确认。 此前整个 /world 命...

Read more

v1.0.0

Choose a tag to compare

@wisdommen wisdommen released this 15 Feb 11:45

UltiWorlds v1.0.0

Initial release.

Changes

  • Multi-world management with per-world settings and teleport commands
  • Fix: replace hardcoded Chinese unload message with i18n key
  • Test coverage: 93.4%
  • Migrated to ultikits-module-parent POM