加入指令

加入指令

一个轻量级Hytale模组,当玩家连接到服务器时自动运行可配置的命令。

实用

加入指令(Join Commands)

一个轻量级的 Hytale 服务器插件,在每次有玩家加入服务器时运行一组可配置的指令。适用于发放初始物品、发送欢迎消息、将玩家传送到出生世界,或执行任何其他需要在连接时进行的、由指令驱动的设置。

功能特性

  • 玩家加入时,按配置中出现的顺序运行任意数量的指令。
  • 支持以加入的玩家身份 控制台身份运行指令,因此你可以将需要高权限的设置与普通玩家操作混合使用。
  • 支持按玩家(以 UUID 为键)指定的指令列表,这些指令会在全局列表之外额外运行。按玩家的列表同样支持以玩家身份和控制台身份执行指令。
  • 跳过空条目,因此配置中留空行不会导致错误。
  • 接受带或不带前导斜杠的指令。/give coins --quantity=100give coins --quantity=100 都有效。
  • 记录每条已发送的指令,便于调试,包括显示执行者(玩家或控制台)。
  • 逐条捕获并报告指令执行失败,因此一条故障条目不会阻止其余指令运行。
  • 可选集成 PlaceholderAPI。如果安装了该插件,诸如 %player_username%%luckperms_prefix% 或任何其他已注册的扩展变量,都会在指令运行前被替换。即使指令以控制台身份运行,变量也会针对加入的玩家进行解析。

配置

配置文件在首次启动时生成于 mods/com.azuredoom_joincommands/joincommands.json。默认情况下,它包含一个空的指令列表,这意味着在你添加条目之前,加入时不会运行任何指令。

示例:

{
  "Commands": [
    "coins --quantity=100",
    "say Welcome to the server!",
    "tp 0 64 0"
  ],
  "ConsoleCommands": [
    "echo %player_username% just joined!"
  ]
}

每个条目都如同由加入的玩家输入指令一样运行。玩家是执行者,因此需要权限才能运行指令。

玩家指令与控制台指令

插件在配置的每一层都支持两种执行上下文:

  • Commands – 以加入的玩家身份运行。玩家是执行者,并且需要玩家的权限指令才能成功。将此用于你希望玩家“自己”执行的操作。
  • ConsoleCommands – 以服务器控制台(ConsoleSender)身份运行。这些指令绕过玩家的权限集,并以完整的服务器权限运行。将此用于管理操作,如发放物品、修改权限组或广播消息,这些操作中,加入的玩家不应需要(或拥有)直接运行指令的权限。

在这两种情况下,加入的玩家仍然是变量解析的上下文,因此像 %player_username% 这样的内容即使在 ConsoleCommands 条目中也会解析为加入的玩家。

对于每个玩家,全局指令首先运行(Commands,然后是 ConsoleCommands),随后是任何匹配的按玩家条目。

按玩家指令

除了全局的 Commands 列表,你还可以定义仅为特定玩家运行的指令,以 UUID 为键。这些指令在全局指令之后运行,因此它们是叠加在上面的,而不是替换它们。

{
  "Commands": [
    "say Welcome to the server!"
  ],
  "ConsoleCommands": [
    "echo %player_username% just joined!"
  ],
  "PlayerCommands": [
    {
      "Uuid": "550e8400-e29b-41d4-a716-446655440000",
      "Commands": [
        "coins --quantity=500",
        "echo Welcome back, admin."
      ],
      "ConsoleCommands": [
        "coins --quantity=500 --player=%player_username%",
        "lp user %player_username% parent set admin"
      ]
    },
    {
      "Uuid": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "Commands": [
        "tp 100 64 100"
      ]
    }
  ]
}

注意:

  • UUID 为精确匹配。请使用上面所示的标准带连字符格式。
  • 如果在 PlayerCommands 列表中找不到 UUID,则该玩家只会运行全局指令。
  • 同一个 UUID 可以有多个条目;所有匹配的条目将按它们出现的顺序运行。
  • 在按玩家的条目中,CommandsConsoleCommands 都是可选的。只包含你需要的列表即可。
  • PlayerCommands 字段本身也是可选的。如果只需要全局指令,可以完全省略它。

使用占位符

如果与 Join Commands 一起安装了 PlaceholderAPI,任何在 PlaceholderAPI 中注册的占位符都可以在指令字符串中使用,涵盖全部四个列表(全局 Commands、全局 ConsoleCommands、按玩家 Commands、按玩家 ConsoleCommands)。插件会在启动时自动检测 PlaceholderAPI,并在检测到时记录确认信息。

占位符始终针对加入的玩家进行解析,即使指令本身以控制台身份发送也是如此。这意味着你可以编写针对加入玩家名称或 UUID 的控制台指令,而无需给予玩家自己运行这些指令的权限。

使用占位符的示例:

{
  "Commands": [
    "echo Welcome back, %player_username%!"
  ],
  "ConsoleCommands": [
    "say %player_username% just joined with rank %luckperms_prefix%",
    "give %player_username% starter_kit"
  ]
}

如果未安装 PlaceholderAPI,占位符字符串将保持不变并原样传递给指令。

行为说明

  • 指令在 PlayerReadyEvent 期间运行,该事件在玩家完全连接并准备好接收游戏状态时触发。它们不会在连接过程的早期阶段运行。
  • 对于任何给定玩家的执行顺序是:全局 Commands → 全局 ConsoleCommands → 按玩家 Commands → 按玩家 ConsoleCommands,对每个匹配的 PlayerCommands 条目都是如此。
  • 指令通过 Hytale 的指令管理器异步运行。失败会以警告形式记录,并且不会中断列表中的后续指令。
  • 每条已发送的指令都会记录其发送者标签(console 或玩家的用户名),使你可以一目了然地看出指令是在哪个上下文中运行的。
  • 全局指令在按玩家指令之前运行。按玩家指令不会替换全局列表,它们是全局列表的扩展。

依赖项

  • PlaceholderAPI by HelpChat(可选,软依赖)。

托管合作伙伴

正在寻找一个可靠的服务器来运行 LevelingCore 和其他 Hytale 模组?

BisectHosting 为模组环境提供预配置的游戏服务器、快速的设置和稳定的性能。

使用代码 azuredoom 可享受首月 25% 折扣

BisectHosting