
傀儡玩家
简易实现,用于模拟‘木偶’玩家
关于项目
这是一个现代、简洁的实现,原本由 Carpet Mod 实现的虚假玩家功能。
与 Carpet Mod 的原始实现相比,这些虚假玩家的实现方式存在一些根本性差异。
此模组可以与 Carpet Mod 一同使用,carpet 的虚假玩家操作适用于这些傀儡玩家;不过,建议使用本模组提供的操作。
本模组的目的是尽可能让傀儡玩家的行为与现实玩家保持一致:
- 所有的玩家 tick 都在正确的 tick 阶段执行。
- 玩家行为的客户端代码在服务器端模拟。
- 傀儡玩家像真实玩家一样发送数据包与服务器交互。
- 保持与所有模组的兼容性。
使用
安装模组后,/puppet 命令应可供管理员使用。
通过修改配置,也可以让所有玩家使用 /puppet 命令,更多详情请参阅 配置部分。
我们可以使用以下命令之一让一个傀儡玩家加入世界:
/puppet <用户名> join
/puppet <用户名> spawn
/puppet <用户名> spawn at <位置> facing <旋转> in <维度> in <游戏模式>
/puppet <用户名> shadow
join子命令会在其上次注销的位置生成指定傀儡,这本质上模拟了玩家自己加入服务器的过程。spawn子命令会在指定位置或(如果未指定位置)命令执行者的位置生成指定傀儡。shadow子命令会让一个傀儡玩家在某个当前在线玩家的位置加入。
玩家加入世界后,可以通过运行以下命令让玩家离开:
/puppet <玩家> leave
操控
玩家可以接管一个傀儡并操纵它,将自己的身体留在世界中:
/puppet <玩家>
你只能指定傀儡来操控,或者如果你正在操控,可以指定自己,这会将你放回原来的身体。此功能默认禁用,必须通过设置 enable_puppeteering 来启用,请参阅 配置部分。
操控期间,你向其他玩家显示为傀儡形象,并接管傀儡的位置及其物品栏。操控停止后,您对傀儡所做的一切将保留。不过,统计信息和进度仍然绑定到你的账户。聊天也是如此,消息仍然通过你的账户发送。
当你操控时,你原来的身体会变为一个傀儡,因此你可以像对待其他傀儡一样对它运行 /puppet 命令,除了 leave 命令。因为在服务器上你仍然以你的账户进行游戏,当有人运行包含你名字的命令时,它将指向你正在操控的傀儡。例如,如果玩家 senseiwells 正在操控 SuperSanta,有人运行 /tp senseiwells,他们将传送至玩家 SuperSanta。例外情况是 /puppet 命令,它指向使用该名称的任何人。
如果你在操控期间死亡,或傀儡断开连接,你将停止操控。如果你在操控期间退出游戏,你的原始身体将下线,而傀儡将保持在线。
操作
傀儡玩家能够执行模拟真实玩家行为的操作。 某些操作也可以对真实玩家执行。
以下是所有可用操作的列表:
| 操作 | 描述 | 参数 | 可独立运行 | 仅限傀儡 |
|---|---|---|---|---|
"minecraft:attack" |
让玩家攻击(左键)。 | <once|hold|release> |
是 | 否 |
"minecraft:delay" |
在连续动作之间添加延迟。 | <延迟> |
否 | 否 |
"minecraft:drop" |
让玩家丢弃当前选中的物品。 | <entire_stack> |
是 | 否 |
"minecraft:interrupt_look_at" |
中断当前的视线目标。 | 无 | 是 | 是 |
"minecraft:interrupt_move_to" |
中断玩家的当前寻路。 | 无 | 是 | 是 |
"minecraft:jump" |
让玩家跳跃。 | <once|hold|release> |
是 | 是 |
"minecraft:look" |
让玩家朝向某个方向。 | <旋转> |
是 | 否 |
"minecraft:look_at" |
让玩家朝向指定的目标。 | position <位置> <锁定?> 或 entity <实体> <锁定?> |
是 | 是 |
"minecraft:move_to" |
让玩家寻路到某个位置或实体。 | position <位置> <冲刺?> <跳跃?> 或 entity <实体> <冲刺?> <跳跃?> |
是 | 是 |
"minecraft:offhand" |
让玩家将物品与副手物品交换。 | 无 | 是 | 否 |
"minecraft:sneak" |
让玩家潜行。 | <潜行状态> |
是 | 是 |
"minecraft:sprint" |
让玩家疾跑。 | <疾跑状态> |
是 | 是 |
"minecraft:swap_slot" |
让玩家切换到某个格子。 | <格子> |
是 | 否 |
"minecraft:use" |
让玩家使用(右键)。 | <once|hold|release> |
是 | 否 |
要运行某项操作,我们可以使用以下命令独立运行:
/puppet <玩家> actions run <操作> ...
这会让玩家立即执行该操作。
例如,要让一个玩家持续攻击,需要运行:
/puppet <玩家> actions run minecraft:attack hold
我们还可以通过以下命令将多个操作串联起来:
/puppet <玩家> actions chain add <操作> ...
添加操作到链后,还可以运行以下命令来控制链式行为:
/puppet <玩家> actions chain loop <true|false> # 是否无限循环链式操作
/puppet <玩家> actions chain pause # 暂停执行链式操作
/puppet <玩家> actions chain resume # 恢复执行链式操作
/puppet <玩家> actions chain restart # 重新开始执行链式操作(从第一个操作开始)
/puppet <玩家> actions chain stop # 停止执行链式操作(并清除所有操作)
例如,要让一个玩家攻击5秒,然后松开2秒,再重复执行,可以运行:
/puppet <玩家> actions chain add minecraft:attack hold
/puppet <玩家> actions chain add minecraft:delay 5s
/puppet <玩家> actions chain add minecraft:attack release
/puppet <玩家> actions chain add minecraft:delay 2s
/puppet <玩家> actions chain loop true
配置
配置文件位于 ./config/puppet-player-config.json,默认内容如下:
{
"reload_puppet_players": true,
"respawn_puppet_players": true,
"puppet_player_death_delay": 0,
"operator_required_for_puppets": true,
"can_players_puppet_themselves": true,
"can_spawn_puppets_anywhere": true,
"can_spawn_whitelisted_players_as_puppets": true,
"enable_puppeteering": false,
"enabled_actions": "*"
}
"reload_puppet_players"- 如果服务器停止时傀儡最后在线,是否让它们重新加入"respawn_puppet_players"- 傀儡死亡后是否重生,如果禁用,它们将直接离开游戏"puppet_player_death_delay"- 傀儡死亡后重生/离开的延迟(由respawn_puppet_players决定)"operator_required_for_puppets"- 玩家是否需要管理员权限才能运行/puppet命令"can_players_puppet_themselves"- 非管理员玩家是否可以对自身运行/puppet命令"can_spawn_puppets_anywhere"- 是否可以在世界各地生成傀儡(而不是join那样仅在其上次注销处生成)"can_spawn_whitelisted_players_as_puppets"- 是否可以将白名单玩家生成为傀儡"enable_puppeteering"- 玩家是否能够接管傀儡并操控"enabled_actions"- 允许傀儡执行的操作列表,"*"表示全部操作,或者列出已启用的操作,例如["attack", "use"]
对于生存服务器,可以使用以下推荐配置,从而让模组减少“作弊”性质:
{
"reload_puppet_players": true,
"respawn_puppet_players": false,
"puppet_player_death_delay": 20,
"operator_required_for_puppets": true,
"can_players_puppet_themselves": true,
"can_spawn_puppets_anywhere": false,
"can_spawn_whitelisted_players_as_puppets": false,
"enable_puppeteering": false,
"enabled_actions": ["use", "attack", "drop", "swap_slot"]
}
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。