Let Me Click And Send for Server

Let Me Click And Send for Server

一个简单的Minecraft服务器端模组,用自定义命令替换所有非命令的`run_command`内容,以绕过自1.19.1-rc1以来的客户端限制。

杂项

一个简单的 Minecraft 服务端 mod,它会把所有非命令的 run_command 内容替换为一个自定义命令,以绕过自 1.19.1-rc1 起的客户端限制

如果你想要更直接的解决方案,这里有一个功能相同的纯客户端 mod: LetMeClickAndSend

Mod 端 优点 缺点
LetMeClickAndSend 客户端 行为与 mc1.19.1 之前完全相同 需要安装在所有玩家的客户端上
LetMeClickAndSendForServer 服务端 无需在客户端安装 会将最大聊天消息长度减少 7

示例

让我们运行以下命令,然后点击显示的文本

# Minecraft [1.7, 1.21.5)
/tellraw @a {"text":"click me to send \"hi\"","clickEvent":{"action":"run_command","value":"hi"}}

在原版 1.19.1 ~ 1.21.4 中,点击后你无法发送任何内容,因为 hi 不是有效命令(不以 / 开头)

使用此 mod 后,服务端会自动将上述点击事件中的 value 字段替换为 /lmcas hi, 因此客户端在点击后可以毫无问题地“发送”消息

当收到命令时,服务端会以与玩家消息相同的格式广播一条消息,模拟玩家在聊天中说出“hi”

MC 1.21.5+

自 MC 1.21.5 起,run_command 的行为发生了很大变化

首先是命令语法的变化,影响不大:

# Minecraft [1.21.5, ~)
/tellraw @a {"text":"click me to send \"hi\"","click_event":{"action":"run_command","command":"hi"}}

接下来是行为的变化,影响更大:

  • command 值始终有效,无论它是否以 / 开头
  • 客户端会从 command 值中剥离 / 前缀,并将剩余的字符串作为命令发送

已经无法正确区分“用于发送聊天消息的 run_command”和“用于发送命令的 run_command”

作为一种变通方案,适用于 MC >= 1.21.5 的 LetMeClickAndSendForServer 只会将特定的 command 替换为 /lmcas 命令。 默认情况下,只有以 !! 开头的 command 值会被替换,这是 MCDReforged 插件生态系统中常用的命令前缀

新增了一个位于 ./config/letmeclickandsendforserver/config.json 的配置文件,用于自定义替换行为

{
    "replacePattern": "!!.*"
}

replacePattern 应该是一个有效的正则表达式模式。所有完全匹配该模式的 command 值都会被替换为 /lmcas 命令

要使用默认配置进行测试,你可以使用:

/tellraw @a {"text":"click me to send \"!!MCDR\"","click_event":{"action":"run_command","command":"!!MCDR"}}

要求

这是一个仅服务端的 mod。它不需要任何额外依赖